iter(g335): 输入类组件补可访问名

This commit is contained in:
HIsheR
2026-10-27 02:09:25 +08:00
parent dcf3614d5c
commit 19d5e90006
9 changed files with 71 additions and 10 deletions
+9
View File
@@ -3401,6 +3401,15 @@
"motivation": "对比度门禁有「正文 × 强调淡底」,却没有「正文 / 语义色 × 语义三色淡底」——而提示条、失败步骤、删除悬停底的文字恰恰压在这些淡底上。补上配对后立刻抓到一处真实不达标:亮色警告色 #9a6b1f 压在自家 10% 淡底上只有 4.12(AA 要 4.5),也就是最需要被读清的警告条文字反而不合格。",
"acceptance": "① contrast-audit 的 PAIRS 增加 6 组:正文与语义色各自 × 危险 / 成功 / 警告淡底(阈值 4.5),淡底先压到页面底再求值;② 亮色警告色加深到 #8a5d15(页面底 5.74、警告淡底 5.01),tokens.css 与 tokens.json 双源同步(verify 的名字与值校验要过);③ audit:contrast 全部 24 组配对在亮 / 暗 × 常规 / 高对比四套主题下达标,audit:surface 阶梯仍全部达标(淡底变深只会变明显);④ AGENTS 的门禁说明同步到 24 组;⑤ npm run check 全绿。",
"notes": ""
},
{
"id": "g335",
"domain": "tune",
"status": "open",
"title": "输入类组件补可访问名:读屏不再只念「编辑框 / 滑块」",
"motivation": "库内 13 个组件都有 ariaLabel 入参(switchButton / pagination / jsonViewer / codeBlock …),偏偏最常用的四个输入件没有:textField 与 textarea 的控件上没有可访问名(只有清空 / 显隐按钮有),读屏进去只念「编辑框」;slider 的原生 range 无名,区间模式两个滑块更是完全同名,读屏分不出上下限;inputNumber 的「数字输入」写死,业务上没法改成「数量 / 单价」。",
"acceptance": "① TextFieldProps / TextareaProps / InputNumberProps / SliderProps 增可选 ariaLabel,落成控件 aria-label(缺省沿用「文本输入」「多行文本」「数字输入」「数值」);② slider 区间模式自动拼「下限 / 上限」,两个 range 各有名字;③ inputNumber 的写死字符串改成可覆盖,与其余组件同一口径;④ 四份清单文档补 ariaLabel 参数行(verify 的双向字段校验要过);⑤ npm run check 全绿。",
"notes": ""
}
]
}
+21 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "ui-arch-registry-index/0.1",
"generatedAt": "2026-10-26T18:05:09.130Z",
"generatedAt": "2026-10-26T18:08:56.364Z",
"repoRoot": ".",
"packages": [
{
@@ -444,6 +444,11 @@
"n": "password",
"t": "boolean",
"d": "密码框:原生打点渲染,内置「显示/隐藏」切换按钮(aria-label 同步);缺省普通文本"
},
{
"n": "ariaLabel",
"t": "string",
"d": "无可见 label 时的可访问名(如「收件人」);缺省「文本输入」"
}
],
"example": "const name = signal(''); const el = textField({ value: name, placeholder: '输入名字…', onInput: (v) => console.log(v) })",
@@ -512,6 +517,11 @@
"n": "size",
"t": "'sm' | 'md' | 'lg'",
"d": "高度档位:sm 紧凑 / md 默认 / lg 大触控目标,走 --ua-control-h-* 三档;缺省 md"
},
{
"n": "ariaLabel",
"t": "string",
"d": "无可见 label 时的可访问名(如「数量」);缺省「数字输入」"
}
],
"example": "const qty = signal(1); const el = inputNumber({ value: qty, min: 1, max: 99, onChange: (v) => console.log(v) })",
@@ -574,6 +584,11 @@
"n": "autosize",
"t": "boolean | { minRows?, maxRows? }",
"d": "自适应内容高度:true 跟随内容涨落,对象态钳最小/最大行数,超出 maxRows 内部滚动;缺省固定行数"
},
{
"n": "ariaLabel",
"t": "string",
"d": "无可见 label 时的可访问名(如「备注」);缺省「多行文本」"
}
],
"example": "const bio = signal(''); textarea({ value: bio, rows: 4, placeholder: '一句话介绍…' })",
@@ -651,6 +666,11 @@
"t": "(value: number) => void",
"k": 1,
"d": "拖动回调"
},
{
"n": "ariaLabel",
"t": "string",
"d": "无可见 label 时的可访问名(如「音量」);缺省「数值」,区间模式自动带「下限 / 上限」"
}
],
"example": "const vol = signal(40); slider({ value: vol, min: 0, max: 100, step: 5, onChange: (v) => console.log(v) })",