Button Icon-Only 交互状态调整(DES-87)
版本: 0.2.0 · 类型: ✨ 新功能
2026-06-16 DES-87 Button Icon-Only 交互状态调整(Tertiary / Quaternary)
问题
Figma Design System 调整了 Button Icon-Only 的 Tertiary / Quaternary 交互状态背景 token,但前端实现中 tertiary / quaternary 的交互状态对所有尺寸共用一套样式,未区分 Icon-Only,导致 Icon-Only 按钮的 Hover / Clicked 反馈与新版 Figma 不一致:
- Tertiary Icon-Only Hover 仍用 Gray 系列背景(应为 Tinted 系列)
- Quaternary Icon-Only Hover / Clicked 仍叠加 Tinted 背景(应移除背景,仅 icon 变色)
改动文件
packages/design/src/components/Button/styles.tspackages/design/src/components/Button/Button.test.tsxpackages/design-site/docs/components/atomic/button.mdx
改动内容
- 新增
BUTTON_ICON_ONLY_VARIANT_CLASS:仅在size === 'icon'时为tertiary/quaternary提供专属交互样式,文字按钮(其余尺寸)行为完全不变- Tertiary Icon-Only:Hover
Grays/Tinted/Default、ClickedGrays/Tinted/Emphasized(替换原 Gray-1 / Gray-2) - Quaternary Icon-Only:移除 hover/active 背景,改为 icon 颜色变化——Default
Labels/Tertiary→ HoverLabels/Primary→ ClickedLabels/Secondary
- Tertiary Icon-Only:Hover
getButtonTokenClass在size === 'icon'时优先取 Icon-Only 变体类,未命中回落到通用变体类- 补充单测:覆盖 Tertiary / Quaternary Icon-Only 的新状态类,并断言文字尺寸按钮保持原背景
- design-site Button 文档在 Icon Button 章节补充 Icon-Only 交互状态说明
备注
(Figma 节点)
- Tertiary Hover:
20935:1573 - Quaternary Hover:
21220:2584 - Quaternary Clicked:
21220:2586
(Linear)
- 父 issue:DES-113 Button
- 子 issue:DES-114 Button: Icon-Only 交互状态调整 + disabled/loading 光标修复
- 设计请求:DES-87 Button Icon-Only 交互状态调整 — Tertiary Hover / Quaternary Hover & Clicked
2026-06-16 Button disabled / loading 态恢复 not-allowed 光标
问题
BUTTON_DISABLED_CLASS 各变体均已声明 disabled:cursor-not-allowed,但实际不生效:ui 结构层 BUTTON_STRUCTURE_CLASS 始终带 disabled:pointer-events-none(unstyledVisual 只关视觉、保留结构类),pointer-events: none 会让光标样式失效。结果是 disabled 按钮、以及 loading 按钮(loading 会置 disabled 属性)都只显示默认光标,而非 not-allowed。
改动文件
packages/design/src/components/Button/styles.tspackages/design/src/components/Button/Button.test.tsx
改动内容
BUTTON_BASE_CLASS增加disabled:pointer-events-auto,经mergeClass(tailwind-merge)覆盖结构层的disabled:pointer-events-none,让既有的disabled:cursor-not-allowed真正生效;点击仍由原生disabled属性拦截- disabled 视觉不受影响:Tailwind 中
disabled:变体在hover:/active:之后生成,同优先级下 disabled 仍覆盖 hover/active 颜色 - loading 与 disabled 共用
disabled属性,单处修复同时覆盖两种状态 - 连带修复 link 变体:
disabled:pointer-events-auto重新放开指针事件后,hover link 会触发hover:underline,导致 disabled/loading 态 hover 时出现下划线。给link-color/link-gray的 disabled 类补disabled:no-underline(disabled:变体在hover:之后生成,覆盖hover:underline) - 补充单测:loading 态断言
disabled:pointer-events-auto+disabled:cursor-not-allowed;primary disabled 用例补充同样两条断言;link 变体 disabled/loading 断言disabled:no-underline - 排查其余交互组件(Input / Textarea / Select / Checkbox / RadioGroup / Switch / Upload / DatePicker / TimePicker / Calendar / Tree / Tabs / DropdownMenu / AiButton 等):未发现同类「cursor-not-allowed 被 pointer-events-none 抵消」的实际问题(多数走
unstyledVisual去掉了 ui 层 pointer-events-none,或用 Radixdata-disabled且光标元素无 pointer-events-none),Button 是唯一现存实例