iter(g329): 新增 editable 行内编辑
This commit is contained in:
+58
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"$schema": "ui-arch-registry-index/0.1",
|
||||
"generatedAt": "2026-10-26T17:55:42.939Z",
|
||||
"generatedAt": "2026-10-26T17:59:51.593Z",
|
||||
"repoRoot": ".",
|
||||
"packages": [
|
||||
{
|
||||
@@ -233,7 +233,8 @@
|
||||
"progressRing(props):环形进度,SVG 双圆靠 dasharray 画弧 + 中心百分比,value 可传信号自动重绘",
|
||||
"noticeBar(props):单行通知条,语义色 + 左侧符号 + 可选跑马灯与关闭,适合页顶常驻播报",
|
||||
"sortableList(props):拖拽排序列表,整行可拖 + Alt+↑↓ 键盘搬位,返回 { el, move, order } 句柄",
|
||||
"masonry(props):瀑布流多列布局,列宽自适应或固定列数,卡片不被拆到两列"
|
||||
"masonry(props):瀑布流多列布局,列宽自适应或固定列数,卡片不被拆到两列",
|
||||
"editable(props):行内编辑,静止态是文字、点一下就地变输入框,Enter 提交 / Esc 取消 / 失焦提交"
|
||||
],
|
||||
"keyTypes": [
|
||||
"ButtonProps",
|
||||
@@ -4767,6 +4768,61 @@
|
||||
"列高不等才是瀑布流的价值所在(图片墙、评论流、看板):等高内容请用 grid,瀑布流会把等高卡片铺成奇怪的错位",
|
||||
"什么时候别用:需要严格的行对齐(表格化数据)、需要按列独立滚动(用 splitter / 多个 virtualList),以及首屏内容需要按阅读顺序严格横向(多列布局是竖向填充,读屏顺序与视觉列序一致但不等同于行序)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "editable",
|
||||
"title": "行内编辑 Editable",
|
||||
"demo": "sec-editable",
|
||||
"props": [
|
||||
{
|
||||
"n": "value",
|
||||
"t": "Signal<string>",
|
||||
"r": 1,
|
||||
"d": "展示值,双向绑定:只有提交才写回,Esc 取消绝不落值"
|
||||
},
|
||||
{
|
||||
"n": "placeholder",
|
||||
"t": "string",
|
||||
"df": "'点击填写'",
|
||||
"d": "空值时的占位文案,颜色走辅助文字档"
|
||||
},
|
||||
{
|
||||
"n": "label",
|
||||
"t": "string",
|
||||
"df": "'编辑'",
|
||||
"d": "读屏用的字段名,作静止态按钮 aria-label 的前缀(如「标题:季度目标」)"
|
||||
},
|
||||
{
|
||||
"n": "multiline",
|
||||
"t": "boolean",
|
||||
"d": "多行模式(textarea):Enter 换行,Ctrl / Cmd + Enter 才提交;缺省单行"
|
||||
},
|
||||
{
|
||||
"n": "disabled",
|
||||
"t": "boolean | Signal<boolean>",
|
||||
"d": "禁用只读,布尔与信号双口径;点了也不进编辑态"
|
||||
},
|
||||
{
|
||||
"n": "validate",
|
||||
"t": "(v: string) => string | null",
|
||||
"k": 1,
|
||||
"d": "提交校验:返回文案即拒绝提交、保持编辑态并标红(aria-invalid + role=alert),返回 null 表示通过"
|
||||
},
|
||||
{
|
||||
"n": "onCommit",
|
||||
"t": "(v: string) => void",
|
||||
"k": 1,
|
||||
"d": "提交回调,值已写回信号之后触发;取消不触发"
|
||||
}
|
||||
],
|
||||
"example": "const title = signal('季度目标'); editable({ value: title, label: '标题', validate: (v) => (v ? null : '标题不能为空'), onCommit: (v) => toast.success('已保存:' + v) })",
|
||||
"steps": [
|
||||
"传一个 Signal<string> 作唯一数据源:组件只在提交时写回,取消路径一个字都不改,「改了没保存」的中间态不会污染业务状态",
|
||||
"点文字进编辑态:Enter 提交、Esc 取消、点别处(失焦)提交;多行模式要 Ctrl / Cmd + Enter 才提交,Enter 留给换行——否则多行里连换行都写不了",
|
||||
"validate 返回文案时保留编辑态并标红:控件带 aria-invalid、下方 role=alert 出文案,与 form 的出错口径一致,用户改对再提交即可",
|
||||
"disabled 接受布尔或信号:禁用时静止态是灰字、点了不进编辑,适合权限只读的场景(要完全不给「可改」暗示就直接渲染文字)",
|
||||
"什么时候别用:长表单(用 form + textField,editable 没有 label 排版与必填标记)、需要撤销栈的富文本,以及值会被频繁外部改写的地方(编辑中不跟随外部更新,是有意的取舍)"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user