fix(frontend): repair staging breakpoint and focus contracts
Merge entry overflow rules into the existing 480px breakpoint, restore picker focus without scrolling, and sync composer and entry contracts without changing page logic. Add AST generation-state guard and both picker close-path regressions. Validation: targeted 33/33; Chrome isolated components 145 checks; tsc and lint zero errors. Node22 full suite 3706 tests, no lost names or new failures; three target failures fixed, 88 baseline environment/contract failures unchanged. Windows build remains blocked by symlink EPERM. Changed-file privacy check: 11 files, no findings, not a full-repository pass. BUG-1011 remains separate. Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
+5
-3
@@ -352,7 +352,7 @@ The birth-time rectification session is the consultation transcript plus a house
|
||||
### Chat header
|
||||
|
||||
- One line, 46px on desktop. Sidebar trigger, session title, and the credit pill. It was 68px and carried a second line reading `分析对象:{盘名}`.
|
||||
- Ordinary consultation: the person is a quiet button beside the title (`.chat-profile-picker-trigger`, still `.chat-header-chart`). The accessible name is `当前星盘:{人物名}`; the visible text is only the current person's name. Click, Enter, and Space open a popover. `aria-expanded` and `aria-controls` point at that popover. Escape, an outside click, and a successful choice close it and return focus to the button. The button and each row are at least 44px. The popover uses the elevated canvas, warm hairline, and the same 120ms opacity-plus-4px motion as the model selector; reduced motion drops the translation.
|
||||
- Ordinary consultation: the person is a quiet button beside the title (`.chat-profile-picker-trigger`, still `.chat-header-chart`). The accessible name is `当前星盘:{人物名}`; the visible text is only the current person's name. Click, Enter, and Space open a popover. `aria-expanded` and `aria-controls` point at that popover. Escape, an outside click, and a successful choice close it and return focus to the button with `preventScroll: true`; focus must not move the chat panel or transcript. The button and each row are at least 44px. The popover uses the elevated canvas, warm hairline, and the same 120ms opacity-plus-4px motion as the model selector; reduced motion drops the translation.
|
||||
- Before the first message the list selects a person and updates that empty session's binding. Self is the visible default. After the first message the current person stays selected; another person offers only `新建会话并使用此人物` and does not rebind the old session. That action waits until the current request ends.
|
||||
- Loading reads `人物列表还在读`. Failure reads `人物列表暂时读不出来` with `重试`. An incomplete row reads `这份资料还不完整` and cannot be chosen. A deleted person reads `资料已删除 · {名字}`; the old session stays readable and sending is blocked. None of these states use a spinner.
|
||||
- Rectification, reports, and daily horoscope do not get this control. Their quiet note, when present, remains the static `.chat-header-chart` span and still drops out below 768px. The consultation button stays on narrow screens and ellipsizes so the header remains one line.
|
||||
@@ -551,8 +551,10 @@ page. Three parts now, in reading order:
|
||||
sets `cursor: progress` and adds no spinner and no “正在加载” copy.
|
||||
- `prefers-reduced-motion: reduce` already collapses transition duration to
|
||||
`.01ms` on `*`. Do not add a loop animation here.
|
||||
- At `max-width: 375px` the row and each pill are `max-width: 100%` so the
|
||||
label and 15px icon stay inside the row. The 44px hit area does not shrink.
|
||||
- At the existing `max-width: 480px` cut, the row and each pill are
|
||||
`max-width: 100%` so the label and 15px icon stay inside the row. This
|
||||
overflow guard uses the published small-phone breakpoint, not a separate
|
||||
375px cut. The 44px hit area does not shrink.
|
||||
- **Copy:** chat history titles daily readings as “8月22日 · 今日节奏”, typed natal
|
||||
questions as “事业 · …”, and rectification as “8月21日 · 生时校正”. Clicking the
|
||||
daily pill starts a consultation session immediately; it does not place the
|
||||
|
||||
Reference in New Issue
Block a user