diff --git a/.ua/backlog.json b/.ua/backlog.json index f388048..3cd1fd0 100644 --- a/.ua/backlog.json +++ b/.ua/backlog.json @@ -2825,6 +2825,15 @@ "status": "done", "domain": "new", "notes": "行号用 aria-hidden 而不是 role=presentation:读屏读代码时不该被「1 2 3」打断;空行渲染成一个空格撑住行高,否则连续空行会把代码块压扁。踩坑:Write 工具写文件时把行尾注释的 ***/ 后面粘了个 残片,tsc 直接报语法错——新建组件后必须先 build 再过其余门禁;demo 里的嵌套引号改用 .mjs 脚本写(Write 工具落盘不转义),比 bash 内联 heredoc 稳定" + }, + { + "id": "g271", + "title": "新增手写签名板组件 signaturePad", + "motivation": "审批 / 签收类表单最缺的一件控件是「手写签名」:没有它,这类场景只能整块绕开组件库,自己接 canvas。而自己接往往踩同一串坑——高分屏线条发虚(忘了按 DPR 放位图)、移动端一按就滚页(没关 touch-action)、窗口一变签名被清空(重设位图会清画布)。这些都该由库一次解决。", + "acceptance": "新增 signaturePad(props) 并返回 handle(el / clear / toDataURL / isEmpty):指针绘制 + setPointerCapture 跟手、位图按 DPR 放大、笔色读 canvas 的 color 走令牌、容器宽度变化经 trackSize 重算并在重设位图后按快照贴回笔迹、touch-action: none 独占手势;收笔写回 value 信号与 onChange,清空写空串并复位按钮态;disabled 支持布尔与信号;样式只消费 --ua-* 令牌,禁止新增硬编码阴影 / 时长 / 字号;十处落点全同步,npm run check 全绿", + "status": "done", + "domain": "new", + "notes": "返回句柄是本库既定模式(formItem / virtualList 同款),因为「有画布就有外部要的操作」:取图、清空、判空。三处状态(位图 / signed 信号 / value 信号)必须一次改完——clear() 里少写一处就会出现「画布清空但信号还是旧图」。踩坑:Write 工具连续三次只写进文件头部(把注释当全文提交),build 直接暴露;demo 里 IIFE 少一个右括号,esbuild 报 Expected ) but found ; —— 新建组件后先 build 再谈其余门禁,能省一轮全量 check" } ] } \ No newline at end of file diff --git a/.ua/iterations.log b/.ua/iterations.log index 9070ef3..5c0b256 100644 --- a/.ua/iterations.log +++ b/.ua/iterations.log @@ -315,3 +315,4 @@ {"ts":"2026-10-26T22:52:36+08:00","id":"g268","result":"done","commit":"9380304","summary":"verify 增加孤儿演示反向校验:demo 里每个 section 必须被某组件 demo 认领"} {"ts":"2026-10-26T22:53:49+08:00","id":"g269","result":"done","commit":"368d47c","summary":"新增文本差异对比组件 diffView(78→79):剪前后缀 + LCS 对齐 + 双通道着色"} {"ts":"2026-10-26T22:54:56+08:00","id":"g270","result":"done","commit":"b8f90b8","summary":"新增代码块组件 codeBlock(79→80):行号不进剪贴板 + 头部标题 + 一键复制"} +{"ts":"2026-10-26T22:56:38+08:00","id":"g271","result":"done","commit":"1680c4e","summary":"新增手写签名板组件 signaturePad(80→81):DPR 位图 + 指针跟手 + 快照保笔迹"}