对话页换成组件库,桌面旁边可以打开本命盘(#106)。
输入框里左边选模型、右边发送。回答下的赞、踩、复制、重新生成和追问改用组件库按钮。不满意原因和兑换窗改用对话框,句子不变。桌面顶栏可以打开当前人物的本命盘,能拖宽,刷新后还在;手机没有这个入口。当前会话和流式状态从 Home() 移进已有会话 store,useState 从 33 减到 25。流式、停止、排队、撤回、退点和寒暄免费没有改。 自测:tsc 退出码 0;lint 0 error、122 条警告;定向测试 275 通过、失败 0、取消 0;npm run build 退出码 0,/ 仍是 Static。首屏 gzip-9 639127,相对基线 634528 多 0.72%。隐私标记测试退出码 0。 Co-Authored-By: Grok (agent loop)
This commit is contained in:
co-authored by
Grok (agent loop)
parent
e4e240bf86
commit
d25dfdbe1a
@@ -0,0 +1,57 @@
|
||||
# PROGRESS · 组件库 K2 对话页(2026-10-25)
|
||||
|
||||
工单 #106。分支 `codex/ui-kit-2-chat-20261023`。基线 `origin/staging` `e4e240bf863b49e75bf9c7e1ba54b40cb1265f64`(#105 新侧栏和 #99 启程动效已在这个提交里)。只做任务书 **K2 对话页**。K0、K1 已完成,K3 及之后没做。
|
||||
|
||||
## 结论
|
||||
|
||||
输入框里左边选模型,右边发送。各模型的价格只写在菜单里。回答下面仍是赞、踩、复制、重新生成。桌面上可以在对话旁边打开当前人物的本命盘,能拖宽,也能收起,刷新后还在。手机上看不到这个入口。发消息、停止、排队、撤回、退点和寒暄免费没有改。
|
||||
|
||||
## 做了什么
|
||||
|
||||
- 输入框改用组件库的组合输入。底边左边是模型菜单,只显示名字;「N 点」只在菜单项里。右边是圆形发送,和框的底边对齐。停止、排队召回和「内容由 AI 生成」仍在。模型菜单走外壳已经在用的延后载入:库还没到时,按钮上仍是当前模型名,点开还没有菜单。
|
||||
- 赞、踩、复制、重新生成是图标按钮,各有提示。不满意原因和兑换窗改用对话框,句子不改。追问是描边小按钮,仍用启程进场依次浮出(260ms,间隔 64ms),没有另写时长。跳到最新和今日星语入口改用组件库按钮,原来的尺寸类还在。
|
||||
- 当前会话、咨询阶段、停止中的标记、排队中的会话和请求、流式回答、赞踩和「已复制」从 `Home()` 移进已有的会话 store。消息列表本来就在会话列表里,跟着同一份 store。`Home()` 的 useState 从 33 减到 25。useRef 开工时是 37,做完仍是 37,没有新加。`page.tsx` 从 1419 行到 1450 行,粗护栏是 1567。`useSessionManagement` 仍在 `useRectificationSurface` 前面。
|
||||
- 桌面顶栏、点数右边,是打开或收起本命盘的图标按钮,提示「打开本命盘」或「收起本命盘」。面板在可拖分栏里,宽 280–560,默认 360。开着和宽度记在本机 `chat_chart_panel_open`、`chat_chart_panel_width`。收起不把宽度写成 0。手机视口还没定、或小于 768 时不显示按钮,也不因为藏起来就把「开着」写成关掉。
|
||||
- 面板里是当前人物的本命盘,复用星盘页的绘制。只取本命分盘这一层。缓存里的盘必须是同一个人,否则重新取。没有骨架,也没有「正在加载」。不标星盘页那一次「画出来」的标记。可拖分栏和星盘绘制都在第一次打开后面才载入。外层对话网格没有改,里面用一列重复原来的行高,次级页面不包这一列。
|
||||
- 流式逐字仍在 `chat-message-row.tsx`,这个文件没有改。消息进场仍是已有的 Motion。扣点和落库没有改。
|
||||
- 白名单去掉 9 个已经不再违规的文件,没有加长,也没有改测试里写死的基线名单。
|
||||
- 没有改 `.gitea/**`,没有改生产部署,没有动数据库,没有给 `scripts/jyotish_api_server.py` 加方法。没有重做 #99 的动效时长。
|
||||
|
||||
## 断言改动(原值 / 新值 / 原因)
|
||||
|
||||
| 位置 | 原值 | 新值 | 原因 |
|
||||
| --- | --- | --- | --- |
|
||||
| 输入框 | `<Textarea` 直接放在表单里,并带 `ref={inputRef}` | `<InputGroupTextarea`,仍绑定同一份草稿和同一个 ref | 输入框改用组合输入。聚焦和草稿订阅不变 |
|
||||
| 跳到最新 | `<button` | `<Button`,仍是 `type="button"` | 改用组件库按钮。类名、焦点环和 44px 目标不变 |
|
||||
| 今日星语 | `<button className="starter-entry"` | `<Button className="starter-entry"` | 改用组件库按钮。36px 胶囊和 44px 点按区仍由原来的类决定 |
|
||||
| 兑换窗 | 自绘遮罩 `account-modal-overlay`,并用 `createPortal` | `Dialog`,内容类名仍是 `account-modal paywall-modal` | 改用组件库对话框。文案和这些类名留下 |
|
||||
| 不满意原因 | 文件顶部静态引入,只在挂载容器里找文案 | 先建好测试文档再动态引入,容器和 `document.body` 都找 | 对话框在模块加载时才决定把内容挂到 body。测试文档必须先就位。提交、原因顺序和补充说明仍在 |
|
||||
| 白名单 | 含首页和 8 个对话零件 | 这 9 个移出 | 它们已经改用组件库。名单只许变短 |
|
||||
|
||||
移出的 9 个文件:`page.tsx`、`chat-composer.tsx`、`chat-message-actions.tsx`、`conversation-follow-ups.tsx`、`jump-to-latest-button.tsx`、`model-selector.tsx`、`onboarding-redeem-paywall.tsx`、`reply-down-reason.tsx`、`starter-home.tsx`。
|
||||
|
||||
## 自测
|
||||
|
||||
| 检查 | 命令 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| 类型 | 仓库根 `frontend\node_modules\.bin\tsc --noEmit -p frontend` | 退出码 0 |
|
||||
| 检查 | 在 `frontend` 下 `npm run lint` | 退出码 0。122 个警告,0 error |
|
||||
| 定向测试 | 在 `frontend` 下 `node --import tsx --test` 下面列出的文件 | 275 条,通过 275,失败 0,取消 0 |
|
||||
| 构建 | 在 `frontend` 下 `npm run build` | 退出码 0。编译 8.2s,TypeScript 17.3s。`/` 仍是 ○ Static。5 条既有 skill-package-registry 警告,没有改 |
|
||||
| 首屏体积 | 首页 HTML 引用的 `/_next/static/**.js`,gzip-9 相加,不含 CSS | 基线 `e4e240bf`:36 个文件,缺失 0,634528 字节。本单:36 个文件,缺失 0,639127 字节,多 4599(+0.72%)。±2% 上限 647219 |
|
||||
|
||||
定向测试文件:`account-dialog-inert-20260918.test.ts`、`ai-generated-notice-20261014.test.ts`、`character-remaining-contract.test.ts`、`chat-chart-panel-state.test.ts`、`chat-composer-queue.test.ts`、`chat-message-actions.test.ts`、`chat-navigation-a11y-contract.test.ts`、`chat-stream-layout.test.ts`、`composer-isolation-contract.test.ts`、`consult-first-frame-and-pacing-20260928.test.tsx`、`consultation-entrypoint.test.ts`、`consultation-recovery.test.ts`、`consultation-smalltalk-ui.test.tsx`、`consultation-smalltalk.test.ts`、`home-shell-growth-contract.test.ts`、`home-streaming-render-split.test.ts`、`home-warm-return-lifecycle.test.tsx`、`membership-page.test.ts`、`onboarding-checklist-20261022.test.ts`、`rectification-agentic-entry.test.ts`、`rectification-grounding-regenerate-20260927.test.ts`、`reply-quality-20260930.test.tsx`、`session-conversation-layout.test.ts`、`session-list-lifecycle.test.tsx`、`starter-entry-soften.test.ts`、`stream-text-response.test.ts`、`ui-kit-whitelist.test.ts`。
|
||||
|
||||
`Home()` hook:开工 useState 33、useRef 37、`page.tsx` 1419 行。做完 useState 25、useRef 37、1450 行。上限是 useState 36、useRef 37、1567 行。
|
||||
|
||||
没有跑前端全量 `npm test`,没有跑 Python 快速门,没有跑 `test:db`。Python 入口和 `scripts/jyotish_api_server.py` 没有改。
|
||||
|
||||
## 偏离
|
||||
|
||||
- 测试用的假文档补了 `documentElement`、`dataset`、`style.setProperty`、`requestAnimationFrame` 和 `children`。组件库对话框要这些才能把内容挂出来。产品页面没有为测试改行为。
|
||||
- 不满意原因的测试改成先建好文档再载入组件。同一份原因、补充说明和提交仍会发出去。
|
||||
- 第一次构建把模型菜单静态打进首页脚本,gzip-9 是 655070(38 个文件,+20542,+3.24%,超出 ±2%)。模型菜单改走外壳已有的延后载入后再构建。延后载入后的首屏里,`dropdown-menu`、`chat-chart-split`、`chat-natal-chart`、`react-resizable-panels` 都是 0。`ResizablePanelGroup` 与 `VedicChartSvg` 的首屏命中数和基线一样(1 和 2);多出来的绘制和分栏只在未写进首页 HTML 的脚本里。库还没到时,模型按钮上仍是当前模型名。
|
||||
|
||||
## 环境缺口
|
||||
|
||||
- 没有登录态。没有在浏览器里发过一条对话,没有点过停止,没有拖过本命盘。本机记忆由测试读写 `chat_chart_panel_open` 和 `chat_chart_panel_width` 证明。可照做的步骤在 `docs/testing/ui-kit-migration-20261023.md` 的「对话」一节。
|
||||
Reference in New Issue
Block a user