iter: b05 文档站 props 表补齐默认值列(df 字段),manifest 驱动链路核查闭环

This commit is contained in:
HIsheR
2026-10-23 16:03:47 +08:00
parent 8c9a63b5d2
commit 83bc1e241c
6 changed files with 88 additions and 55 deletions
+2 -2
View File
@@ -38,8 +38,8 @@
"title": "文档站演示区由 manifest 驱动自动生成",
"motivation": "目前 apps/docs/index.html 手写 props 表与演示,每加组件都要人肉同步;由 manifest 单一来源驱动可消除重复维护",
"acceptance": "ua CLI 新增 docs-gen 逻辑:读取各组件 ua.manifest.json 中的 components 参数表,自动生成 props 表 HTML 片段注入文档站模板;生成结果与现有手写版信息量对齐(props 名/类型/默认值/说明);npm run check 全绿且文档站可正常打开",
"status": "open",
"notes": ""
"status": "done",
"notes": "核查确认 props 表/示例/步骤/演示 iframe 早已由 ua docs 从 manifest docs.components 单一来源驱动;真正的缺口是信息量不含默认值——本轮 CLI propsTable 新增「默认值」列(props 条目可选 df 字段,缺省渲染 —),llms-full.txt 参数行同步追加「默认 x」标注;16 处可机读默认值从描述文案提取进 df;check 全绿 + 文档站结构完整性校验通过"
}
]
}
+33 -17
View File
@@ -1,6 +1,6 @@
{
"$schema": "ui-arch-registry-index/0.1",
"generatedAt": "2026-10-23T07:59:47.390Z",
"generatedAt": "2026-10-23T08:03:18.018Z",
"repoRoot": ".",
"packages": [
{
@@ -221,7 +221,8 @@
{
"n": "variant",
"t": "'primary' | 'ghost' | 'danger'",
"d": "视觉强度;缺省 primary"
"d": "视觉强度;缺省 primary",
"df": "primary"
},
{
"n": "onClick",
@@ -279,7 +280,8 @@
{
"n": "rows",
"t": "number",
"d": "初始行数;缺省 3"
"d": "初始行数;缺省 3",
"df": "3"
},
{
"n": "placeholder",
@@ -461,7 +463,8 @@
{
"n": "variant",
"t": "'default' | 'success' | 'warning' | 'danger'",
"d": "语义色;缺省 default"
"d": "语义色;缺省 default",
"df": "default"
}
],
"example": "badge({ label: '成功', variant: 'success' })",
@@ -484,7 +487,8 @@
{
"n": "variant",
"t": "'info' | 'success' | 'warning' | 'danger'",
"d": "语义色;缺省 info"
"d": "语义色;缺省 info",
"df": "info"
}
],
"example": "alert({ message: '操作可能存在风险', variant: 'warning' })",
@@ -501,12 +505,14 @@
{
"n": "variant",
"t": "'text' | 'rect' | 'circle'",
"d": "占位形状;缺省 rect(整块矩形)"
"d": "占位形状;缺省 rect(整块矩形)",
"df": "rect"
},
{
"n": "rows",
"t": "number",
"d": "text 形状的行数;缺省 3,末行自动缩短模拟段落"
"d": "text 形状的行数;缺省 3,末行自动缩短模拟段落",
"df": "3"
}
],
"example": "skeleton({ variant: 'text', rows: 3 }); skeleton({ variant: 'circle' }); skeleton({ variant: 'rect' })",
@@ -531,12 +537,14 @@
{
"n": "duration",
"t": "number",
"d": "自动消失毫秒;缺省 3000"
"d": "自动消失毫秒;缺省 3000",
"df": "3000"
},
{
"n": "variant",
"t": "'info' | 'success' | 'warning' | 'danger'",
"d": "语义色;缺省 info(toast.error 对应 danger)"
"d": "语义色;缺省 info(toast.error 对应 danger)",
"df": "info"
}
],
"example": "toast.success('保存成功'); toast.error('网络请求失败', 5000)",
@@ -561,12 +569,14 @@
{
"n": "placement",
"t": "'top' | 'bottom'",
"d": "气泡方位;缺省 top(触发器上方)"
"d": "气泡方位;缺省 top(触发器上方)",
"df": "top"
},
{
"n": "delay",
"t": "number",
"d": "出场延迟毫秒;缺省 150,传 0 立即显示"
"d": "出场延迟毫秒;缺省 150,传 0 立即显示",
"df": "150"
},
{
"n": "trigger",
@@ -593,7 +603,8 @@
{
"n": "size",
"t": "number",
"d": "直径像素;缺省 18"
"d": "直径像素;缺省 18",
"df": "18"
}
],
"example": "spinner(); spinner({ size: 26 })",
@@ -616,7 +627,8 @@
{
"n": "showText",
"t": "boolean",
"d": "是否显示百分比文字;缺省 true"
"d": "是否显示百分比文字;缺省 true",
"df": "true"
}
],
"example": "const pct = signal(0); progress({ value: pct }); setInterval(() => pct((pct() + 5) % 105), 400)",
@@ -742,7 +754,8 @@
{
"n": "layout",
"t": "'vertical' | 'horizontal'",
"d": "布局方向;缺省 vertical(horizontal 为标签左置)"
"d": "布局方向;缺省 vertical(horizontal 为标签左置)",
"df": "vertical"
},
{
"n": "submitText",
@@ -785,7 +798,8 @@
{
"n": "(formItem)validateOn",
"t": "'input' | 'blur' | 'submit'",
"d": "校验时机;缺省 blur(输入时自动清已报错误)"
"d": "校验时机;缺省 blur(输入时自动清已报错误)",
"df": "blur"
}
],
"example": "const name = signal(''); const f = form({ onSubmit: submit }, [formItem({ label: '用户名', required: true, value: name, rules: [{ min: 2, max: 12 }] }, textField({ value: name }))])",
@@ -823,12 +837,14 @@
{
"n": "pageSize",
"t": "number",
"d": "每页行数;缺省 5"
"d": "每页行数;缺省 5",
"df": "5"
},
{
"n": "selectable",
"t": "boolean",
"d": "启用行选择列:全选三态(含半选)、行 checkbox、已选计数;缺省 false"
"d": "启用行选择列:全选三态(含半选)、行 checkbox、已选计数;缺省 false",
"df": "false"
},
{
"n": "page",
+1
View File
@@ -2,3 +2,4 @@
{"time":"2026-10-23T15:50:03+08:00","id":"b02","result":"done","summary":"新增 toast 消息提示组件:四语义工厂 + showToast,右上角堆叠,默认 3s 自动消失,微动画 + reduced-motion 兜底;manifest/docs/llms 同步,check 全绿"}
{"time":"2026-10-23T15:53:33+08:00","id":"b03","result":"done","summary":"新增 skeleton 骨架屏组件:text/rect/circle 三形状 + 扫光微动画 + reduced-motion 静态化;manifest/docs/llms/demo 同步,check 全绿"}
{"time":"2026-10-23T16:00:11+08:00","id":"b04","result":"done","summary":"新增独立 pagination 分页器(page 信号双向绑定 + 省略号折叠 + 键盘可达),dataTable 新增 page 受控桥接实现联动;demo 联动卡片,check 全绿"}
{"time":"2026-10-23T16:03:46+08:00","id":"b05","result":"done","summary":"文档站核查确认已 manifest 驱动;补齐默认值信息量缺口:CLI propsTable 新增默认值列(df 字段)+ llms-full 默认标注,16 处默认值提取;check 全绿"}
+17 -17
View File
@@ -1,6 +1,6 @@
# @ui-arch 组件库 Agent 文档(无图形版)
> 自动生成于 2026-10-23T07:59:47.390Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
> 自动生成于 2026-10-23T08:02:39.002Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
> 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。
## 快速上手
@@ -47,7 +47,7 @@
参数:
- label(必填):string —— 按钮文案
- variant:'primary' | 'ghost' | 'danger' —— 视觉强度;缺省 primary
- variant(默认 primary):'primary' | 'ghost' | 'danger' —— 视觉强度;缺省 primary
- onClick(回调):() => void —— 点击回调
示例:
@@ -91,7 +91,7 @@ const name = signal(''); const el = textField({ value: name, placeholder: '输
参数:
- value:Signal<string> —— 双向绑定信号
- rows:number —— 初始行数;缺省 3
- rows(默认 3):number —— 初始行数;缺省 3
- placeholder:string —— 占位文案
- onInput(回调):(value: string) => void —— 输入回调
@@ -225,7 +225,7 @@ card({ title: '用户表' }, dataTable({ data, columns }))
参数:
- label(必填):string —— 徽标文案
- variant:'default' | 'success' | 'warning' | 'danger' —— 语义色;缺省 default
- variant(默认 default):'default' | 'success' | 'warning' | 'danger' —— 语义色;缺省 default
示例:
@@ -245,7 +245,7 @@ badge({ label: '成功', variant: 'success' })
参数:
- message(必填):string —— 提示内容
- variant:'info' | 'success' | 'warning' | 'danger' —— 语义色;缺省 info
- variant(默认 info):'info' | 'success' | 'warning' | 'danger' —— 语义色;缺省 info
示例:
@@ -264,8 +264,8 @@ alert({ message: '操作可能存在风险', variant: 'warning' })
参数:
- variant:'text' | 'rect' | 'circle' —— 占位形状;缺省 rect(整块矩形)
- rows:number —— text 形状的行数;缺省 3,末行自动缩短模拟段落
- variant(默认 rect):'text' | 'rect' | 'circle' —— 占位形状;缺省 rect(整块矩形)
- rows(默认 3):number —— text 形状的行数;缺省 3,末行自动缩短模拟段落
示例:
@@ -287,8 +287,8 @@ skeleton({ variant: 'text', rows: 3 }); skeleton({ variant: 'circle' }); skeleto
参数:
- message(必填):string —— 提示文案
- duration:number —— 自动消失毫秒;缺省 3000
- variant:'info' | 'success' | 'warning' | 'danger' —— 语义色;缺省 info(toast.error 对应 danger)
- duration(默认 3000):number —— 自动消失毫秒;缺省 3000
- variant(默认 info):'info' | 'success' | 'warning' | 'danger' —— 语义色;缺省 info(toast.error 对应 danger)
示例:
@@ -310,8 +310,8 @@ toast.success('保存成功'); toast.error('网络请求失败', 5000)
参数:
- content(必填):string —— 提示文案(纯文本)
- placement:'top' | 'bottom' —— 气泡方位;缺省 top(触发器上方)
- delay:number —— 出场延迟毫秒;缺省 150,传 0 立即显示
- placement(默认 top):'top' | 'bottom' —— 气泡方位;缺省 top(触发器上方)
- delay(默认 150):number —— 出场延迟毫秒;缺省 150,传 0 立即显示
- trigger(必填):HTMLElement —— 第二个参数:被包裹的触发器元素(按钮 / 输入框等任意 DOM)
示例:
@@ -335,7 +335,7 @@ tooltip({ content: '保存后立即生效' }, button({ label: '保存', onClick:
参数:
- size:number —— 直径像素;缺省 18
- size(默认 18):number —— 直径像素;缺省 18
示例:
@@ -355,7 +355,7 @@ spinner(); spinner({ size: 26 })
参数:
- value(必填):Signal<number> —— 进度 0-100 信号,变化自动平滑过渡
- showText:boolean —— 是否显示百分比文字;缺省 true
- showText(默认 true):boolean —— 是否显示百分比文字;缺省 true
示例:
@@ -448,7 +448,7 @@ const open = signal(false); modal({ title: '确认操作', open, onClose: () =>
参数:
- layout:'vertical' | 'horizontal' —— 布局方向;缺省 vertical(horizontal 为标签左置)
- layout(默认 vertical):'vertical' | 'horizontal' —— 布局方向;缺省 vertical(horizontal 为标签左置)
- submitText:string —— 提交按钮文案;缺省「提交」
- resetText:string —— 重置按钮文案;缺省不渲染
- onSubmit(回调):() => void —— 全部字段校验通过后的提交回调
@@ -456,7 +456,7 @@ const open = signal(false); modal({ title: '确认操作', open, onClose: () =>
- (formItem)value(必填):Signal<string> —— 字段值信号,校验数据源
- (formItem)required:boolean —— 必填:显示红星并自动追加非空规则
- (formItem)rules:FormRule[] —— 校验规则:required / min / max / pattern / validator,按序执行取首个失败
- (formItem)validateOn:'input' | 'blur' | 'submit' —— 校验时机;缺省 blur(输入时自动清已报错误)
- (formItem)validateOn(默认 blur):'input' | 'blur' | 'submit' —— 校验时机;缺省 blur(输入时自动清已报错误)
示例:
@@ -482,8 +482,8 @@ const name = signal(''); const f = form({ onSubmit: submit }, [formItem({ label:
- data(必填):T[] —— 全量行数据,每行须含 id 字段作 rowKey
- columns(必填):ColumnDef<T>[] —— 列定义:{ key, header?, sortable? }
- filterKey:string —— 工具栏筛选的列;缺省取第一列
- pageSize:number —— 每页行数;缺省 5
- selectable:boolean —— 启用行选择列:全选三态(含半选)、行 checkbox、已选计数;缺省 false
- pageSize(默认 5):number —— 每页行数;缺省 5
- selectable(默认 false):boolean —— 启用行选择列:全选三态(含半选)、行 checkbox、已选计数;缺省 false
- page:Signal<number> —— 受控页码信号:与内核分页双向同步,传同一个信号给独立 pagination 组件即可联动
示例:
+32 -16
View File
@@ -92,7 +92,8 @@
{
"n": "variant",
"t": "'primary' | 'ghost' | 'danger'",
"d": "视觉强度;缺省 primary"
"d": "视觉强度;缺省 primary",
"df": "primary"
},
{
"n": "onClick",
@@ -150,7 +151,8 @@
{
"n": "rows",
"t": "number",
"d": "初始行数;缺省 3"
"d": "初始行数;缺省 3",
"df": "3"
},
{
"n": "placeholder",
@@ -332,7 +334,8 @@
{
"n": "variant",
"t": "'default' | 'success' | 'warning' | 'danger'",
"d": "语义色;缺省 default"
"d": "语义色;缺省 default",
"df": "default"
}
],
"example": "badge({ label: '成功', variant: 'success' })",
@@ -355,7 +358,8 @@
{
"n": "variant",
"t": "'info' | 'success' | 'warning' | 'danger'",
"d": "语义色;缺省 info"
"d": "语义色;缺省 info",
"df": "info"
}
],
"example": "alert({ message: '操作可能存在风险', variant: 'warning' })",
@@ -372,12 +376,14 @@
{
"n": "variant",
"t": "'text' | 'rect' | 'circle'",
"d": "占位形状;缺省 rect(整块矩形)"
"d": "占位形状;缺省 rect(整块矩形)",
"df": "rect"
},
{
"n": "rows",
"t": "number",
"d": "text 形状的行数;缺省 3,末行自动缩短模拟段落"
"d": "text 形状的行数;缺省 3,末行自动缩短模拟段落",
"df": "3"
}
],
"example": "skeleton({ variant: 'text', rows: 3 }); skeleton({ variant: 'circle' }); skeleton({ variant: 'rect' })",
@@ -402,12 +408,14 @@
{
"n": "duration",
"t": "number",
"d": "自动消失毫秒;缺省 3000"
"d": "自动消失毫秒;缺省 3000",
"df": "3000"
},
{
"n": "variant",
"t": "'info' | 'success' | 'warning' | 'danger'",
"d": "语义色;缺省 info(toast.error 对应 danger)"
"d": "语义色;缺省 info(toast.error 对应 danger)",
"df": "info"
}
],
"example": "toast.success('保存成功'); toast.error('网络请求失败', 5000)",
@@ -432,12 +440,14 @@
{
"n": "placement",
"t": "'top' | 'bottom'",
"d": "气泡方位;缺省 top(触发器上方)"
"d": "气泡方位;缺省 top(触发器上方)",
"df": "top"
},
{
"n": "delay",
"t": "number",
"d": "出场延迟毫秒;缺省 150,传 0 立即显示"
"d": "出场延迟毫秒;缺省 150,传 0 立即显示",
"df": "150"
},
{
"n": "trigger",
@@ -464,7 +474,8 @@
{
"n": "size",
"t": "number",
"d": "直径像素;缺省 18"
"d": "直径像素;缺省 18",
"df": "18"
}
],
"example": "spinner(); spinner({ size: 26 })",
@@ -487,7 +498,8 @@
{
"n": "showText",
"t": "boolean",
"d": "是否显示百分比文字;缺省 true"
"d": "是否显示百分比文字;缺省 true",
"df": "true"
}
],
"example": "const pct = signal(0); progress({ value: pct }); setInterval(() => pct((pct() + 5) % 105), 400)",
@@ -613,7 +625,8 @@
{
"n": "layout",
"t": "'vertical' | 'horizontal'",
"d": "布局方向;缺省 vertical(horizontal 为标签左置)"
"d": "布局方向;缺省 vertical(horizontal 为标签左置)",
"df": "vertical"
},
{
"n": "submitText",
@@ -656,7 +669,8 @@
{
"n": "(formItem)validateOn",
"t": "'input' | 'blur' | 'submit'",
"d": "校验时机;缺省 blur(输入时自动清已报错误)"
"d": "校验时机;缺省 blur(输入时自动清已报错误)",
"df": "blur"
}
],
"example": "const name = signal(''); const f = form({ onSubmit: submit }, [formItem({ label: '用户名', required: true, value: name, rules: [{ min: 2, max: 12 }] }, textField({ value: name }))])",
@@ -694,12 +708,14 @@
{
"n": "pageSize",
"t": "number",
"d": "每页行数;缺省 5"
"d": "每页行数;缺省 5",
"df": "5"
},
{
"n": "selectable",
"t": "boolean",
"d": "启用行选择列:全选三态(含半选)、行 checkbox、已选计数;缺省 false"
"d": "启用行选择列:全选三态(含半选)、行 checkbox、已选计数;缺省 false",
"df": "false"
},
{
"n": "page",
+3 -3
View File
@@ -191,9 +191,9 @@ var ORDER={skin-dom:0,'headless-core':1,'design-tokens':2};
function esc(s){return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;')}
function propsTable(c){
var rows=(c.props||[]).map(function(p){
return '<tr><td><code>'+esc(p.n)+'</code></td><td><code>'+esc(p.t)+'</code></td><td>'+(p.r?'必填':'否')+'</td><td>'+esc(p.d||'')+(p.k?'(回调)':'')+'</td></tr>';
return '<tr><td><code>'+esc(p.n)+'</code></td><td><code>'+esc(p.t)+'</code></td><td>'+(p.r?'必填':'否')+'</td><td>'+(p.df?'<code>'+esc(p.df)+'</code>':'—')+'</td><td>'+esc(p.d||'')+(p.k?'(回调)':'')+'</td></tr>';
}).join('');
return '<table class="props"><tr><th>参数</th><th>类型</th><th>必填</th><th>说明</th></tr>'+rows+'</table>';
return '<table class="props"><tr><th>参数</th><th>类型</th><th>必填</th><th>默认值</th><th>说明</th></tr>'+rows+'</table>';
}
function compBlock(c){
var steps=(c.steps||[]).map(function(s){return '<li>'+esc(s)+'</li>'}).join('');
@@ -289,7 +289,7 @@ function renderAgentDocs(index, tokens) {
if (c.props?.length) {
lines.push('参数:', '');
for (const prop of c.props) {
const marks = [prop.r ? '必填' : '', prop.k ? '回调' : ''].filter(Boolean).join(',');
const marks = [prop.r ? '必填' : '', prop.k ? '回调' : '', prop.df ? `默认 ${prop.df}` : ''].filter(Boolean).join(',');
lines.push(`- ${prop.n}${marks ? `(${marks})` : ''}:${prop.t}${prop.d ? ` —— ${prop.d}` : ''}`);
}
lines.push('');