星盘页换成组件库:页签、盘型条、可拖分栏和换盘动效(#107)。
Independent Staging Quality Gate / validate (push) Failing after 9m20s
Independent Staging Quality Gate / publish (push) Skipped

四个页签用下划线,盘型条用分段并可以横滑,全部盘型从底部打开。桌面上盘和参数可以拖宽,窄屏上下排。行星表仍跨满整行。换盘型时星体移到新位置;减少动态效果只淡入。第一次进场不重播。

自测:tsc 退出码 0;frontend 下 npm run lint 0 error(122 警告);定向测试 188 通过、0 失败、0 取消;npm run build 后 / 仍是 Static;首屏 JS gzip-9 为 640131,相对 d25dfdbe 记下的 639127 多 0.16%。没有跑全量 npm test、Python 快速门和 test:db。

Co-Authored-By: Grok (agent loop)
This commit is contained in:
jesse-ux
2026-10-25 04:02:14 +08:00
co-authored by Grok (agent loop)
parent d25dfdbe1a
commit b7ec8e78ed
23 changed files with 959 additions and 339 deletions
+16
View File
@@ -19446,3 +19446,19 @@
- 复发自:无
- 修复版本:分支 `codex/ui-kit-2-chat-20261023`。
## BUG-1435 | 星盘页换成组件库
- 状态:enhancement
- 首次发现:2026-10-25
- 最近更新:2026-10-25
- 影响面:星盘页的四个页签、盘型条、盘和参数的并排、行星表状态列、出生资料编辑、换盘和换人时的动效、大运展开。对话旁边的本命盘仍用原来的绘制。
- 用户现象:页签是下划线。盘型是一排可以横滑的分段,全部盘型从底部打开。桌面上盘和参数可以拖宽,窄屏上下排。行星表仍横跨整行。状态用同一种小标记,没有状态写「—」。换盘型时星体移到新宫位;开了减少动态效果就只淡入。
- 触发条件:打开星盘页,切换页签、盘型或人物,或点开一段大运。桌面分栏在视口不窄于 1024 且分栏零件载入之后出现。
- 根因:不是缺陷。组件库迁移的星盘页这一张(任务书 K3,决策 D4、D5、D7、D8、D9)。
- 修复:四个页签用下划线页签。盘型条用分段页签加横向滚动,「星盘类型」用底部抽屉。桌面盘和参数放进可拖分栏,按需载入,不记住宽度。本命和月亮的行星表仍是原来的表格,状态列改成同一种徽标;分盘、Bhava、行运和西洋表用组件库表格,并继续跨满整行。上升格写「—」。出生资料改用对话框,表单仍是档案页共用的那一份。换盘型时星体从旧位置移到新位置;换人时格线重画;大运展开用可折叠组件。第一次进场不重播。星盘的线和图仍是手绘。
- 验证:见 `docs/tasks/PROGRESS-ui-kit-3-chart-20261023.md`。坐标断言证明换盘后的星体停在直接画出来的位置。D1 冻结对照没有改基线文件。没有浏览器登录态,不把 1024、1280、390 的截图写成已经看过。
- 防复发:`frontend/tests/chart-glyph-motion.test.ts` 锁住最终坐标。`frontend/tests/chart-varga-table.test.tsx` 锁住 D1 对照和「—」。`frontend/tests/chart-table-span-20261023.test.tsx` 锁住行星表跨满整行。白名单测试锁住名单只减不增。
- 相关记录:issue #107。任务书 `docs/tasks/TASK-ui-kit-migration-20261023.md` 的 K3。行星表跨行沿用 BUG-1422,不另开编号。前置 #106 的对话页、#102 的整行、#99 的第一次进场。
- 复发自:无
- 修复版本:分支 `codex/ui-kit-3-chart-20261023`。
@@ -0,0 +1,64 @@
# PROGRESS · 组件库 K3 星盘页(2026-10-25)
工单 #107。分支 `codex/ui-kit-3-chart-20261023`。基线 `origin/staging` `d25dfdbe1abeef1adbe92cb39b52620739a600b1`(#102 行星表跨满整行、#105 侧栏、#99 启程动效、#106 对话页已在这个提交里)。只做任务书 **K3 星盘页**。K4 及之后没做。没有重做对话页,没有给星盘档案加排序列。
## 结论
星盘页四个页签和盘型条换成组件库。桌面上盘和参数可以拖宽,手机上上下排。行星表仍然横跨整行。换盘型时星体会移到新位置;系统开了减少动态效果就只淡入。第一次打开时的进场不重播。
## 做了什么
- 四个页签用 `Tabs`,`variant="line"`。盘还没到时四个都不可选。
- 盘型条是分段式 `Tabs`(灰底槽,选中的一格浮起),放在横向 `ScrollArea` 里。23 种的顺序不变。「星盘类型」是底部 `Sheet`。没有用描边的 `ToggleGroup`。
- 桌面(不窄于 1024)上,盘和参数放进 `ResizablePanelGroup`,默认约 58% / 42%,最窄约 32% / 24%。宽度不记到本机。分栏零件在这一块载入后再出现,不进首页同步包。更窄或还没载入时,盘在上、参数在下。行星表仍是整行的第三格。
- 本命和月亮的八列表仍是原来的 `<table>`,这样 D1 冻结的基线文件不用改。状态列改成同一种 `Badge`:落陷、带「敌」的用 `destructive`,其余用 `secondary`。没有状态,以及上升格,写「—」,不画第二种标记。悬停仍是「上升点是命盘的起点,不是行星,不判断入旺或落陷」。分盘、Bhava、行运、西洋表用组件库 `Table`。分盘的庙旺、同位和 Bhava 的换宫仍是字。
- 出生资料编辑改用 `Dialog`。点框内不关,按 Esc 或点遮罩会关。表单仍是档案页共用的那一份,输入框没有另做成 `Field` 和 `Input`。
- 换盘型时,星体从旧宫位的坐标移到新宫位,停住后的坐标和直接画出那张盘相同。换人时格线重画,星体不飞。减少动态效果时不做位移。`data-onboarding-draw` 的键没改,第一次进场不重播。大运展开用 `Collapsible`,当前段一开始是开的且不播放展开;之后点开才动。0 年段仍不能展开。已经选中的 Chara 或 Yogini 再点一次会再请求。
- 星盘的线和符号仍是手绘。对话旁边的本命盘仍只复用绘制组件。
- 白名单去掉 5 个星盘页文件,没有加长,测试里写死的基线名单没有改。
- `chart-basics-tab.tsx`、`chart-param-table.tsx`、`chart-symbol-help.tsx` 没有改。参数仍是一张键值表,符号说明仍是原来的气泡。
- 没有改 `.gitea/**`,没有改生产部署,没有动数据库,没有给 `scripts/jyotish_api_server.py` 加方法,没有改 `page.tsx`。
## 断言改动(原值 / 新值 / 原因)
| 位置 | 原值 | 新值 | 原因 |
| --- | --- | --- | --- |
| 四个页签禁用 | 4 个 `disabled=""` | 4 个 `aria-disabled="true"` | 页签改用 Tabs。base-ui 把禁用写在 aria-disabled 上 |
| 行星表个数 | 只数原生 `<table className="chart-page-planet-table">` | 原生 table 与 `<Table className="chart-page-planet-table">` 加起来等于外包层 | 分盘、Bhava、行运用组件库表格。本命表仍是原生 table |
| 大运展开 | `<details>` / `details:not([open])` | `data-slot="collapsible-content"`,收起用 `data-closed` | 大运改用 Collapsible。当前段默认展开,点按高度仍是 44px |
| 零年大运 | 零年行没有 `<details` | 零年行没有 Collapsible,展开中的行不含「0 年」 | 零年仍然不能展开 |
| 盘型条 | 原生 `role="tablist"` 里的 button | `data-variant="default"` 的 `role="tab"`,菜单仍是「全部盘型」 | 盘型条改成 Tabs + ScrollArea |
| 星盘类型面板 | 生命周期宿主点开原生 `<dialog>` | 源码是 Sheet;格子静态渲染 23 项;选中后先关上再回调 | 测试宿主的浮层挂不进 body,不能假装点开过 |
| D1 上升格 | 基线对照里是「/」按钮 | 可见「—」,说明句仍在 | 没有状态就写「—」。基线文件不改,只在断言里替换 |
| D1 状态列 | 纯文本 | 同一列换成 Badge;落陷、敌是 destructive,其余是 secondary | 同上,fixture 文件不改 |
| 分盘和月亮的上升格 | 可见「/」 | 可见「—」 | 没有状态就写「—」 |
| 出生资料框 | 源码把点击交给 `chartBirthDialogShouldClose` | `Dialog` 的 `onOpenChange` 收到 false 才关;几何函数仍导出 | 改用对话框。点内容区内边距不关,和原来的结果相同 |
| 白名单 | 含 5 个星盘页文件 | 这 5 个移出 | 它们已经改用组件库。名单只许变短 |
移出的 5 个文件:`chart-birth-editor.tsx`、`chart-dasha-tab.tsx`、`chart-page-view.tsx`、`chart-type-picker.tsx`、`chart-vedic-tab.tsx`。
## 自测
| 检查 | 命令 | 结果 |
| --- | --- | --- |
| 类型 | 仓库根 `frontend\node_modules\.bin\tsc --noEmit -p frontend` | 退出码 0 |
| 检查 | 在 `frontend` 下 `npm run lint` | 退出码 0。122 个警告,0 error |
| 定向测试 | 在 `frontend` 下 `node node_modules/tsx/dist/cli.mjs --test` 下面列出的文件 | 188 条,通过 188,失败 0,取消 0 |
| 构建 | 在 `frontend` 下 `npm run build` | 退出码 0。编译 10.3s,TypeScript 30.8s。`/` 仍是 ○ Static。5 条既有 skill-package-registry 警告,没有改 |
| 首屏体积 | 首页 HTML 引用的 `/_next/static/**.js`,gzip-9 相加,不含 CSS | 基线 `d25dfdbe`(上一单记下的数):36 个文件,639127 字节。本单:36 个文件,缺失 0,640131 字节,多 1004(+0.16%)。±2% 上限 651910。`react-resizable-panels` 命中 0。`chart-page-vedic-split` 命中 0 |
定向测试文件:`billing-panel.test.ts`、`chart-bhava.test.tsx`、`chart-birth-editor-and-report-table.test.tsx`、`chart-dasha-switch-layout.test.ts`、`chart-dasha-yogini.test.ts`、`chart-glyph-motion.test.ts`、`chart-moon-transit.test.tsx`、`chart-page-hook.test.ts`、`chart-page-mobile-width-20260929.test.ts`、`chart-page-view.test.tsx`、`chart-planet-glyphs.test.tsx`、`chart-symbol-help.test.tsx`、`chart-table-span-20261023.test.tsx`、`chart-type-picker.test.tsx`、`chart-varga-table.test.tsx`、`chart-view-zero-year.test.ts`、`secondary-page-entry.test.ts`、`surface-feedback-20260929.test.tsx`、`ui-kit-whitelist.test.ts`、`western-wheel-layout.test.ts`。
没有跑前端全量 `npm test`,没有跑 Python 快速门,没有跑 `test:db`。`tests/test_repo_privacy_markers.py` 退出码 0。`page.tsx` 和 `scripts/jyotish_api_server.py` 没有改。
## 偏离
- 出生资料的输入框仍是档案页共用的那一份,没有拆成第二套 `Field` 和 `Input`。编辑框本身已是对话框。
- 本命和月亮的行星表仍是原生 table。组件库表格用在分盘、Bhava、行运和西洋表。D1 基线文件没有改,状态列和上升格在断言里替换后再对照。
- 「星盘类型」抽屉在这个测试宿主里挂不进 body。合同改为源码接线和 23 个格子的静态渲染。
- 测试用的假文档补了 `head`、`querySelector` 和 `querySelectorAll`。组件库页签会把一段样式挂到 document 上,没有这些会在渲染时抛错。产品页面没有为测试改行为。
- 可拖分栏的名字在首页脚本里仍出现 1 次,和上一单记下的次数一样。库文件名 `react-resizable-panels` 在首页脚本里是 0。星盘页的分栏是打开星盘后才载入。
## 环境缺口
- 没有登录态。没有在浏览器里打开过星盘页。1024、1280、390 三种宽度的截图没有做,不写成通过。可照做的步骤在 `docs/testing/ui-kit-migration-20261023.md` 的「星盘页」一节。
+12
View File
@@ -29,3 +29,15 @@
3. 回答下面可以赞、踩、复制。点踩之后可以选原因,也可以什么都不选就提交。兑换窗的句子和以前一样。
4. 桌面上,点数右边有一个打开本命盘的按钮。打开后是当前人物的本命盘。拖右缘,宽度停在大约 280 到 560 像素。收起后再打开,宽度还在。刷新页面,开着和宽度都还在。
5. 把窗口改成大约 375 像素宽。顶栏没有打开本命盘的按钮。
## 星盘页
没有登录态,下面各项都还没在浏览器里看过。1024、1280 和 390 三种宽度的截图也没做。
1. 打开星盘。四个页签是星盘、基础信息、大运、西洋盘。当前项有下划线。点基础信息、大运、西洋盘,内容跟着换。盘还没出来时,这四个不能点。
2. 在星盘页里,本命、D9、月亮这些盘型是一排。选中的一格是亮的。盘型多时可以横着滑,页面本身不横滚。点右边「全部盘型」,从底部打开,能看到 23 种。点一种,抽屉关上,条上滚到那一格。
3. 把窗口放到大约 1280 或 1024 宽。盘和旁边的参数中间有一条可以拖。拖宽之后行星表仍然横跨整行,没有缩回左半边。把窗口改成大约 390 宽,盘在上,参数在下,页面没有横向滚动条。
4. 看本命行星表的状态列。有字的都是同一种小标记。落陷,以及写着「敌」的,颜色更重。没有状态的格子是「—」,上升那一格也是「—」。指上去能读到「上升点是命盘的起点,不是行星,不判断入旺或落陷」。
5. 点顶栏的日期和地点。可以改出生资料。点框里面的空白不会把没保存的修改丢掉。按 Esc 或点外面会关上。
6. 在本命和 D9 之间来回切。星体从原来的宫位移到新的宫位,停稳后和直接打开那张盘一样。换成另一个人时,格子重画,星体不飞。系统开了减少动态效果时,只淡入,没有位移。第一次打开星盘时的那一次画线,不会因为换盘再来一遍。
7. 点开一段收着的大运,下面的小运展开。0 年的那一段不能展开。右栏先是 Chara。点 Yogini 才去取另一套。这一套失败时,再点一次 Yogini 会再要一次。