DropdownMenu 禁用项图标色 + not-allowed 光标(WEB-1190)
版本: 0.7.0 · 类型: 🐛 Bug Fix
问题
- 图标颜色:DropdownMenu 菜单项禁用(
disabled)时,文字通过data-disabled:text-(--Labels-Disabled)变为禁用色,但前置图标容器显式声明了自身颜色(default 的Labels/Primary、danger 的Labels/Error),不会随文字变灰,导致禁用项出现「文字已置灰、图标仍是深色」的割裂状态。级联子菜单(SubTrigger)的前置图标与尾部箭头也有同样问题。 - 光标:ui 结构层对禁用项施加了
data-disabled:pointer-events-none,导致 design 层的cursor-*无法生效,禁用项 hover 时不显示cursor-not-allowed。
改动文件
packages/design/src/components/DropdownMenu/styles.tspackages/design/src/components/DropdownMenu/DropdownMenu.tsxpackages/design/src/components/DropdownMenu/DropdownMenuDesignSpec.mdpackages/design/src/components/DropdownMenu/__tests__/DropdownMenu.test.tsx
改动内容
- 新增共享类
DROPDOWN_ICON_DISABLED_COLOR_CLASS = '[[data-disabled]_&]:text-(--Labels-Disabled)',通过祖先[data-disabled]选择器让图标容器在父项禁用时覆盖为Labels/Disabled(图标容器显式声明颜色,不会自动继承 Item 文字的 disabled 色,需单独覆盖)。 getDropdownMenuItemIconColorClass在原 variant 色(defaultLabels/Primary/ dangerLabels/Error)基础上追加该禁用类,覆盖DropdownMenuItem的前置图标。DropdownMenuSubTrigger的前置图标容器追加该禁用类;DROPDOWN_SUB_ARROW_COLOR_CLASS(尾部级联箭头)在Grays/Gray-4基础上追加该禁用类,使禁用子菜单项整体置灰。- 在
DROPDOWN_ITEM_BASE_CLASS(Item 与 SubTrigger 共用)追加data-disabled:pointer-events-auto+data-disabled:cursor-not-allowed,覆盖 ui 层的pointer-events-none,让禁用项显示 not-allowed 光标(对齐 Button 既有做法)。选中仍由 Radix 内部 disabled 守卫拦截;base 只用focus/data-highlighted(非hover),禁用项不会出现悬浮背景。 - 单测:新增禁用项断言,验证前置图标容器带
[[data-disabled]_&]:text-(--Labels-Disabled),且菜单项带data-disabled:pointer-events-auto/data-disabled:cursor-not-allowed。