feat(ui): 自定义玻璃态下拉组件 + 设置选项卡滚动到顶部#222
Conversation
# Conflicts: # app/web/README.md
# Conflicts: # app/shared/src/types.ts
…mp-ui-fork-repair
…tion feat(desktop): 规划桌面端登录入口
…nctions feat(desktop): 接通桌面聊天闭环
…ct-alignment feat(frontend): 对齐前端接口契约
…ct-closeout feat(frontend): 收口前端接口契约
…nd-smoke feat(frontend): 收口契约文档与冒烟状态
…oseout feat(desktop): 收口IM操作与状态契约
…d-surface-alignment feat(web): 对齐桌面标准工作台布局
…pass13 fix(frontend): 对齐 master 前端接口契约
…38 lines) Extract 27 settings sections, 12 primitives, 13 domain cards, and shared utilities from the monolithic SettingsPage.tsx into a modular directory structure under `src/components/settings/`. Pure file split — no logic, CSS, or behavior changes.
Desktop conflicts resolved per review: - theirs: tauri.conf.json, AgentList, AuthPage, LoginForm, API layer (hubAuth/hubClient/edgeClient/useAuth), App.tsx - ours: SettingsPage split, App.module.css, test files, i18n, shared types - fix: duplicate useCreateThread in threadQueries
Resolved conflicts in .gitignore, AGENTS.md, pnpm-workspace.yaml, app/web/README.md. Strategy: accepted dev/delicious233 (source of truth) for most; merged both sides for pnpm-workspace.yaml (mobile package + onlyBuiltDependencies).
30 files across api/, app/web/, app/shared/, edge-server/, .github/ had lingering conflict markers. Resolved by adopting dev/delicious233 content except shared/package.json which preserves HEAD's hubEvents, hubClient, surfaceMetadata, and workbenchState exports.
Resolved conflicts in IM/types.ts, SettingsPage.tsx, useIMChat.ts by adopting dev/delicious233 (source of truth).
- 新建共享Select组件(portal下拉面板、键盘导航、点击外部关闭) - 主题感知玻璃态样式(日间/夜间) - 替换Settings中3个SelectControl及IMContactList中的原生select - 设置选项卡切换时右侧内容自动滚动回顶部
DeliciousBuding
left a comment
There was a problem hiding this comment.
综合审查——3 个 agent 并行审查结论
Xavier,方向完全正确。Select 组件填补了一个真实的缺口,portal 方案和键盘导航都写得不错。但合并前需要处理以下问题:
阻塞项(BLOCKED — 必须修)
1. Rebase 到最新 dev/delicious233
当前 base 是旧 dev/trump,与已合并的 #219(SettingsPage 拆分)、#220(IM 增强)、#221(Web 页面)冲突。需要:
git fetch origin
git rebase origin/dev/delicious233SettingsPage.tsx 在 #219 中已拆分为 67 个文件,你的 scroll-to-top 和 SelectControl 改动需要适配新的拆分结构。
2. 新增 Select.test.tsx + Select.stories.tsx
AGENTS.md 明确规定:共享 UI 组件测试放在 app/shared/src/ui/*.test.tsx。新组件必须有测试 + Storybook story。
参考文件:app/shared/src/ui/Card.test.tsx、app/shared/src/ui/Button.stories.tsx
3. 用 OKLCH 设计 tokens 替换硬编码颜色
AGENTS.md 明确禁止硬编码颜色值。Select.module.css 中 ~80% 的颜色用了 rgba(),应替换为已有 tokens:
rgba(0,0,0,0.08)→var(--border)rgba(255,255,255,0.48)→var(--card)rgba(246,247,250,0.92)→var(--popover)
等。全局 tokens 定义在app/desktop/src/styles/themes.css。
Bug(必须修)
4. CSS 拼写错误:[data-theme='dark'] .chevon → .chevron(Select.module.css 末行)
5. z-index 过低:var(--z-dropdown, 1100) 实际解析为 10(tokens.css 已定义此变量),下拉菜单会被 sticky header 和浮层遮挡。
建议改进(可后续 PR)
- 补
aria-activedescendant关联当前选中项 - 补
Home/End键导航 - 补
disabledprop - 合并两个
SelectControlwrapper(primitives/SelectControl.tsx 和 settingsShared.tsx 各有一个)
总结
代码质量 OK,架构方向正确。主要是合规性问题——三个阻塞项修完后就可以合。
|
已通过 #223 提交了修复版并合并—— 修复内容:
你的 Select 组件已经进主线了,作者署名保留。这个 PR 帮你关了,后续新 PR 记得:
|
|
已通过 #223 合并 Select 组件(修复版)。作者署名保留。 |
从 PR TokenDanceLab#222 提取并修复: - 所有 rgba() 替换为 OKLCH 设计 tokens(--border/--card/--popover/--ring) - 修复 .chevon → .chevron CSS 拼写 - 修复 z-index 使用 --z-overlay(30) 替代 --z-dropdown(10) - 新增 Select.test.tsx(6 测试:渲染、键盘导航、onChange) - 添加到 shared/ui 导出 Co-Authored-By: Xavier-Trump <2933243959@qq.com>
Summary
Select组件替代所有原生<select>(portal下拉面板、键盘导航、点击外部关闭)Files
app/shared/src/ui/Select.tsxapp/shared/src/ui/Select.module.cssapp/shared/src/ui/index.tsapp/desktop/src/components/settings/primitives/SelectControl.tsxapp/desktop/src/components/settings/settingsShared.tsxapp/desktop/src/components/SettingsPage.tsxapp/desktop/src/components/IM/IMContactList.tsxTest plan