报告语言改成分段页签,切换后不留下上一种语言的正文。导出从右侧或底部滑出,不再显示文件大小和说明句。星历用箭头按钮按方向翻页,卡片边框不被裁掉。登录的输入、按钮和六位验证码换成组件库。星星汇聚不改。 自测:tsc 退出码 0;lint 0 error、122 个警告;相关测试 185 条里 184 通过,另 1 条是既有的 Windows 管理路径问题;英文版 10 条和删除 5 条重跑通过;build 后首页仍是 Static;首页 JS gzip-9 为 642174,相对 639609 多 0.40%。隐私标记测试通过。 Co-Authored-By: Grok (agent loop)
8.9 KiB
PROGRESS · 组件库 K5 报告、星历、登录与其余页面(2026-10-25)
工单 #109。分支 codex/ui-kit-5-pages-20261023。基线 origin/staging eee8564b7f43b766c5711a94541d5703fd245d99(#108 档案与合盘已在这个提交里)。只做任务书 K5 报告、星历、登录与其余页面。K6 生时校正和 K7 收尾没做。没有重做档案、合盘、星盘页、对话页、侧栏。
结论
报告的中文和 English 是一排分段。切换之后,页面上不留下上一种语言的正文。导出从桌面右侧滑出,窄屏从底部滑出,不再显示文件大小,也不再写那句给 AI 的说明。星历左右箭头翻日期时,下面的卡片按方向翻,边框不会被切掉。登录页的输入框、按钮和六位验证码换成了组件库。
做了什么
- 报告语言用分段式
Tabs,aria-label="报告语言"。导出抽屉里的语言是aria-label="导出语言",范围是aria-label="导出范围"。不用描边的ToggleGroup。切换语言仍按原来的 key 整段重挂,没有加交叉淡入。 - 导出用
Sheet。宽屏从右侧滑出,宽度最多 520px。767px 以下从底部滑出,最高 85dvh。页脚是「导出整篇」「导出 N 项」或不能点的「先勾选要导出的部分」。没有说明句,没有文件大小。没有英文版时,打开后仍提示一次,句子和原来一样。下载、打印限制、文件名和勾选规则没有改。 - 报告列表的更多改成菜单,删除前仍问「确定删除这份报告?」。跳到文末的按钮换成组件库按钮,箭头换成图标。刷新按钮也换成组件库按钮,读屏名仍是「刷新报告列表」。
- 星历的前一天、后一天是按钮加 Lucide 箭头,读屏名不变。日期下面的内容按方向翻页,用已有的 Motion。翻页容器不裁切,四周留 1px,卡片描边留得住。减少动态效果时只淡入。没有转圈。
- 登录页的输入框和按钮换成组件库。六位验证码用
InputOTP,格子是size-11。恢复码仍是一条.otp-input,高度h-11,字号仍是 20px。验证码登录 / 密码登录,以及二步验证里的动态验证码 / 恢复码,是分段页签。注册账号、忘记密码、返回登录是链接样式的按钮。同意勾选换成组件库复选框。发码和校验没有改。 - 代码块的复制、全站崩溃页的重试和返回对话,换成组件库按钮。崩溃页的颜色仍写在本文件里。
- 那一刻的天空只换了回放上的关闭和分享。星星汇聚留在
birth-sky-converge.tsx,没有重写。 - 新增零件
input-otp@1.5.0(2026-08-18 发布),用固定的shadcn@4.21.4添加。没有升级其他依赖。 - 白名单去掉 12 个文件,没有加长。测试里写死的基线名单没有改。
personal-report-markdown-view.tsx和星星汇聚仍留在名单里。 - 没有改
.gitea/**,没有改生产部署,没有改数据库,没有给scripts/jyotish_api_server.py加方法,没有改page.tsx。Home()的 useState / useRef 没有增长。
断言改动(原值 / 新值 / 原因)
| 位置 | 原值 | 新值 | 原因 |
|---|---|---|---|
| 报告语言选中态 | BUTTON 且 aria-pressed="true" |
role="tab" 且 aria-selected="true" |
K5 改用分段页签。正文仍只能有一份 |
| 导出语言未选中 | BUTTON,aria-pressed="false" |
role="tab",aria-selected="false" |
同上 |
| 导出单选 | role="radio" 加 aria-checked |
role="tab"。选中看 aria-selected |
导出语言和导出范围改用页签 |
| 导出容器 | 原生 dialog,窄屏底部、桌面居中 |
Sheet。桌面 data-side="right",窄屏 data-side="bottom" |
桌面从右侧滑出,手机从底部滑出 |
| 导出按钮文案 | 「导出整篇 · 约 N KB」 | 「导出整篇」,看不到「约 N KB」 | D8 去掉文件大小 |
| 导出说明句 | 英文可用时正文含「建议选 English」 | 没有这句 | D8 删掉说明句。没有英文版时的提示仍在 |
| 关闭导出 | 原生 dialog 的 Esc 和点遮罩 | 点「关闭导出」关闭。Esc 和点遮罩由 Sheet 交给 onOpenChange |
不再使用原生 dialog |
| 下载测试的文档 | 把 document.body 换成空对象 |
留下测试文档的 body,只把下载锚点换成假的 | Sheet 要挂到 body 上 |
| 自选章节的查找 | 页签文字必须正好等于「自选章节」 | 先精确匹配,再按前缀匹配 | 这一格还带着「只带走需要的部分」 |
| 删除入口 | 行内 details 里的「删除」,取消后焦点回 SUMMARY |
先点「报告更多操作」,再点菜单里的「删除」。确认框里的「删除」是按钮 | 换成菜单和确认框 |
| 第二次删除失败 | buttons(h, "删除")[1] |
文字为「删除」的最后一枚 | 菜单关上后,菜单项不留在文档里 |
| 登录同意勾选 | 原生 INPUT,onChange 带 checked: true |
role="checkbox",点它把 true 交给 onChange |
同意换成组件库复选框 |
| 崩溃页引用 | global-error 不得出现任何 import |
只允许 import { Button } |
两个按钮换成组件库。颜色仍写在本文件里 |
| 天空回放按钮 | 两枚原生 button,类名 birth-sky-control / birth-sky-share |
两枚 Button,类名、读屏名「关闭」、分享仍调用 share() |
只换控件,不改星星汇聚 |
| 白名单 | 含这 12 个报告、星历、登录和其余页面文件 | 这 12 个移出 | 它们已经改用组件库。名单只许变短 |
移出的 12 个文件:global-error.tsx、birth-sky-replay.tsx、email-otp-login.tsx、ephemeris-page.tsx、legal-consent-gate.tsx、login-consent.tsx、markdown-code-block.tsx、personal-report-center.tsx、report-actions.tsx、report-edge-jump.tsx、report-export-drawer.tsx、report-row-delete.tsx。
BUG-1126 的「正文只有一份」和「切换后不含上一种语言的汉字」没有改弱。
自测
| 检查 | 命令 | 结果 |
|---|---|---|
| 类型 | 仓库根 frontend\node_modules\.bin\tsc --noEmit -p frontend |
退出码 0。第一次因测试里的嵌套函数报 TS2684,改成箭头函数后通过 |
| 检查 | 在 frontend 下 npm run lint |
退出码 0。122 个警告,0 error。警告数和上一张记下的一样,没有为这一张新加 |
| 定向测试 | 在 frontend 下 node node_modules/tsx/dist/cli.mjs --test 一批合同文件 |
185 条,通过 184,失败 1。失败的是 admin-operation-reauth-removal 第 1 条:Windows 上把文件网址的路径拼成了 G:\G:\...,这条在改 K5 之前就会这样。同一文件第 3 条(登录页仍有「邮箱验证码登录」「验证并登录」)通过。BUG-1126 的两条在这批里通过 |
| 英文版与删除 | 同上,单独重跑 report-english-edition.test.tsx、report-row-delete.test.tsx |
英文版 10 条全部通过。删除 5 条全部通过 |
| 构建 | 在 frontend 下 npm run build |
退出码 0。编译 10.8s,TypeScript 115s。79 个静态页。/ 仍是 ○ Static。/login 是动态。/ephemeris、/reports 是静态。5 条既有 skill-package-registry 警告,没有改 |
| 首屏体积 | 首页 HTML 引用的 /_next/static/**.js,gzip-9 相加,不含 CSS |
基线 eee8564b(上一张记下的数):36 个文件,639609 字节。本张:35 个文件,缺失 0,642174 字节,多 2565(+0.40%)。±2% 大约是 626817 到 652401。input-otp、email-otp-login、InputOTP、report-export-drawer、ephemeris-page、birth-sky-replay 命中都是 0 |
没有跑前端全量 npm test,没有跑 Python 快速门,没有跑 test:db。tests/test_repo_privacy_markers.py 退出码 0。page.tsx 和 scripts/jyotish_api_server.py 没有改。
偏离
- 全站崩溃页原来不允许任何 import。现在只引入按钮组件,颜色仍写在本文件的内联样式里。合同按三栏改过。没有改崩溃时的两句文案。
- 没有英文版时的提示,从抽屉组件自己的挂载挪到了抽屉内容里的一个空子节点。原因是面板要等传送门挂上之后才出现在文档里,挂在外层时提示会早于面板。句子、编号和只提示一次都没变。
- 测试环境里,传送门要在模块加载时已经看得到
document,否则布局效果会被换成空函数,面板和菜单永远挂不出来。合同测试在引入这些组件之前先放一个占位文档,真正渲染前仍换成原来的测试文档。复选框、页签排序和菜单打开需要的指针事件、文档位置比较和观察器,也补在这个测试文档上。没有改组件库零件本身。 personal-report-markdown-view.tsx不在本张文件清单里,没有改。星星汇聚没有改。
环境缺口
- 没有登录态。没有在浏览器里登录,没有收到验证码邮件,也没有导出过报告。不写成通过。可照做的步骤在
docs/testing/ui-kit-migration-20261023.md的「报告」「星历」「登录」三节。