chore(backlog): 记录 g270 完成

This commit is contained in:
HIsheR
2026-10-26 22:54:56 +08:00
parent b8f90b8e0d
commit 6e048c1cd3
2 changed files with 10 additions and 0 deletions
+9
View File
@@ -2816,6 +2816,15 @@
"status": "done",
"domain": "new",
"notes": "对齐分三步:先剪公共前缀、再剪公共后缀、最后才 DP(dp[i][j] 从后往前填,回溯时按「删还是加」比较下一格长度),日常改两行只算中间几行,不会 2000×2000 全表;退化阈值用中间段乘积而不是总行数——总行数大但改动集中时仍然能逐行对齐。踩坑复现:用 bash 内联 node 生成 demo 里的 join(\n) 与嵌套引号,反斜杠被吞成真实换行,esbuild 报 Unterminated string literal,改用编辑器直接写入 + 双引号内层字符串"
},
{
"id": "g270",
"title": "新增代码块组件 codeBlock",
"motivation": "演示页与文档站里到处是「一段代码 + 一个复制按钮」:此前靠 h(pre) 手拼,行号、标题、复制各写一遍,行号还容易被一起选进剪贴板。库里有 copyButton(复制)与 diffView(对比),缺的正是最常用的「单向展示」那一块——它该把行号与复制都收进同一个组件,顺手保证复制出来的是纯原文。",
"acceptance": "新增 codeBlock(props):code 原文渲染为等宽多行,行号列缺省显示(单行自动省略)、user-select:none 不进复制;标题行 title 优先于 lang,两者与 copyable 全关时整条头部省掉;maxHeight 限高后在框内滚动并纳入统一细条规则;复制走 copyButton 且直接读 props.code(不从 DOM 取文本,杜绝行号混入);onCopy 回调透传;样式只消费 --ua-* 令牌,禁止新增硬编码阴影 / 时长 / 字号;十处落点全同步,npm run check 全绿",
"status": "done",
"domain": "new",
"notes": "行号用 aria-hidden 而不是 role=presentation:读屏读代码时不该被「1 2 3」打断;空行渲染成一个空格撑住行高,否则连续空行会把代码块压扁。踩坑:Write 工具写文件时把行尾注释的 ***/ 后面粘了个 </n> 残片,tsc 直接报语法错——新建组件后必须先 build 再过其余门禁;demo 里的嵌套引号改用 .mjs 脚本写(Write 工具落盘不转义),比 bash 内联 heredoc 稳定"
}
]
}