Skip to content

feat(settings): 侧边卡片设置页 UI/UX 现代化——卡片底部设置条替代隐形齿轮 - #300

Merged
Menghuan1918 merged 3 commits into
mainfrom
feat/settings-sidecard-uiux
Aug 21, 2026
Merged

feat(settings): 侧边卡片设置页 UI/UX 现代化——卡片底部设置条替代隐形齿轮#300
Menghuan1918 merged 3 commits into
mainfrom
feat/settings-sidecard-uiux

Conversation

@Menghuan1918

@Menghuan1918 Menghuan1918 commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

动机

设置页「侧边卡片」分区的二级设置入口(卡片右下角 16×16px 三级色透明齿轮,absolute; top:46px 像素钉位)可发现性不足;整体视觉做一次克制现代化,配色采用协调双色(brand = 激活强调,success 绿 = 已开启确认),全部颜色仍为 --dsw-alias-* 令牌派生、零硬编码 hex,皮肤体系自动跟随。

改动

二级设置入口(核心)

  • 卡片底部设置条 .cardSettings:全宽、hairline 分隔、齿轮图标 12px + 「功能设置」文字标签(11px/500),常态以 secondary 墨色可读;hover 换 interactive-bg-hover-accent 品牌淡底 + brand 字色(0.12s 颜色过渡)
  • 删除 .cardGear 幽灵按钮与 .cardWithGear padding hack(消除 top:46px 像素耦合)
  • 常规行 .rowGear 升级为 22×22 带 border-l2 边框的芯片按钮,hover 同样 accent 引导
  • 契约不变:aria-label 模式 "${title} ${t('settingsPopup')}"、可见性条件(仅父级启用且声明 settings)、Modal 条件挂载 SSR 契约全部保留

协调双色启用态

  • 启用卡片描边:全强度品牌色 → color-mix(button-primary-fill 45%)(沿用 icon-chip 既有 color-mix 先例)
  • 勾选徽标:品牌实心圆 → --dsw-alias-state-success-primary 实心绿(语义:已开启 ✓)

节奏与细节

  • section gap 14→16 / group padding → 20 / 网格 minmax(180px,1fr) gap 12
  • 计数徽章 → accent-soft 淡底 pill(versionBadgeTag 同款令牌配方)
  • 开关关态:thumb label-secondary→tertiary、track 底 layer-1→layer-2

动效纪律(设置页不需要浮夸动效)

  • 全部过渡 ≤160ms,属性仅限 background/border-color/color,无 transform/悬浮位移
  • prefers-reduced-motion 扩展覆盖 .cardSettings / .rowGear / .popupRow

清理与文档

  • 合并 .pluginEntries 重复定义(保留带 max-height/overflow 的一处)
  • AGENTS.md §5 与设计文档(新增 §9 偏差记录)同步

验证

  • pnpm test:74 文件 / 751 通过(含 side-card-section 全组 31 条,aria-label 契约未破坏)
  • pnpm typecheck / pnpm build
  • ✅ 视觉验证:npm 打包 → scratch profile 真实挂载 → 无头 dsh web → Playwright 截图核对(浅色/深色 × 设置页/二级弹窗):设置条常态可见、弹窗从设置条正常打开、深浅双色层级一致

不动的部分

弹窗结构(popupRow/Modal)、添加插件弹窗、持久化/乐观更新逻辑、settings.render/pluginToggles seam、所有 data 属性与 ARIA 模式、.popupDialog.popupDialog 特异性 hack


迭代 2(按用户反馈)

  • 勾选 → 开关滑块:启用卡片最右端改为紧凑品牌开关(纯视觉指示,卡片本身仍是 开关,语义契约不变;不再使用 success 绿)
  • 二级弹窗长列表:终端等 6 行设置的弹窗改为行区内部滚动( + 细滚动条,令牌驱动),弹窗壳体与 Done 按钮固定;行密度收紧
  • 卡片等高:统一 + + 顶行 ,带设置条/不带设置条/无图标卡片全部等高

验证:全量 751 测试通过 + typecheck/build 绿;scratch profile 实机截图核对(浅色/深色 × 卡片开关/终端长弹窗/等高)。


迭代 2(按用户反馈)

  • 勾选 → 开关滑块:启用卡片最右端改为紧凑品牌开关(纯视觉指示,卡片本身仍是 aria-pressed 开关,语义契约不变;不再使用 success 绿)
  • 二级弹窗长列表:终端等 6 行设置的弹窗改为行区内部滚动(max-height: min(52vh, 440px) + 细滚动条,令牌驱动),弹窗壳体与 Done 按钮固定;行密度收紧
  • 卡片等高:统一 min-height: 106px + cardMain flex:1 + 顶行 min-height: 28px,带设置条/不带设置条/无图标卡片全部等高

验证:全量 751 测试通过 + typecheck/build 绿;scratch profile 实机截图核对(浅色/深色 × 卡片开关/终端长弹窗/等高)。

- 二级设置入口:卡片右下 16px 幽灵齿轮(tertiary 色、像素钉位)改为
  卡片底缘全宽设置条(hairline 分隔 + 齿轮图标 + 「功能设置」文字
  标签),常态可发现;hover 换品牌淡底 + brand 字色引导。可见性条件
  与 aria-label 契约不变(仅父级启用且声明 settings)
- 常规行齿轮升级为带 border-l2 边框的 22px 芯片按钮,hover 同样
  accent 引导
- 启用卡片:品牌描边柔化为 color-mix(45%),勾选徽标改用
  state-success-primary(绿=已开启确认,brand=激活强调的协调双色)
- 节奏:section gap 16 / group padding 20 / 网格 minmax(180px) gap 12;
  计数徽章改为 accent-soft 淡底 pill;开关关态 thumb 降档 +
  track 底 layer-2
- 动效纪律:全部过渡 ≤160ms 且仅颜色属性;prefers-reduced-motion
  扩展覆盖设置条/行齿轮/弹窗行
- 清理:合并 .pluginEntries 重复定义;文档同步(AGENTS.md §5 +
  设计文档新增 §9 偏差记录)
- 勾选徽标 → 紧凑品牌开关滑块(30×16 track + 10px thumb,开=品牌填充
  反色拇指,关=中性且不渲染;纯视觉指示,卡片本身仍是 aria-pressed
  开关,语义契约不变)
- 二级弹窗长列表:popupRows 内部滚动 max-height min(52vh,440px) +
  细滚动条(--dsw-alias-scrollbar-* 令牌),终端 6 行场景弹窗壳体与
  Done 固定、仅行区滚动;行密度收紧(padding 12/14、gap 8)
- 卡片等高:.card min-height 106px + .cardMain flex:1 + .cardTop
  min-height 28px——带设置条/不带设置条/无图标卡片全部等高
- prefers-reduced-motion 覆盖 cardSwitch 过渡;文档同步(AGENTS.md
  §5 + 设计文档 §9 迭代记录)
popupRows 的 width:100% 配 content-box 会在 padding-right:4px 时把
内容盒撑宽 4px,overflow-y:auto 隐式启用的 overflow-x 因此出现横向
滚动条;改为 border-box 并显式 overflow-x:hidden(minifier 输出
overflow:hidden auto),行区始终填满弹窗宽度、无左右滑动。add-plugin
弹窗的 pluginEntries 同步加 overflow-x:hidden。
@Menghuan1918
Menghuan1918 merged commit 0fdf63b into main Aug 21, 2026
2 checks passed
@Menghuan1918
Menghuan1918 deleted the feat/settings-sidecard-uiux branch August 21, 2026 13:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant