Files
Jyotisha/docs/tasks/PROGRESS-ui-kit-5-pages-20261023.md
T
jesse-uxandGrok (agent loop) 1516ad56ec
Independent Staging Quality Gate / validate (push) Failing after 9m11s
Independent Staging Quality Gate / publish (push) Skipped
报告、星历和登录页换成组件库(#109)。
报告语言改成分段页签,切换后不留下上一种语言的正文。导出从右侧或底部滑出,不再显示文件大小和说明句。星历用箭头按钮按方向翻页,卡片边框不被裁掉。登录的输入、按钮和六位验证码换成组件库。星星汇聚不改。

自测: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)
2026-10-25 05:56:25 +08:00

8.9 KiB
Raw Blame History

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 的「报告」「星历」「登录」三节。