事象
IconButton に native の disabled prop を渡した場合、disabled 属性は付くが CVA の無効状態クラスが付かないため、通常状態の色のまま表示される。
src/components/ui/icon-button/index.tsx:
const isIconButtonDisabled = isLoading || isDisabled || disabled; // ← disabled を含む
// ...
className={cn(
iconButtonVariants({
variant, size, theme,
isLoading,
isDisabled, // ← ここには isDisabled しか渡っていない
className,
})
)}
disabled={isIconButtonDisabled}
無効状態のスタイル(disabled:bg-surface-*-disabled 等)は isDisabled: true の compoundVariant からしか出力されないため、isDisabled を使わず disabled だけを渡すとクラスそのものが生成されない。
再現
<IconButton icon="edit" aria-label="編集" disabled />
→ disabled 属性は付きクリックも無効になるが、背景・アイコン色は enabled のまま。
修正案
iconButtonVariants({
variant, size, theme,
isLoading,
- isDisabled,
+ isDisabled: Boolean(isDisabled || disabled),
className,
})
native disabled prop でも無効状態スタイルが当たることを確認するテストも追加する。
補足
事象
IconButtonに native のdisabledprop を渡した場合、disabled属性は付くが CVA の無効状態クラスが付かないため、通常状態の色のまま表示される。src/components/ui/icon-button/index.tsx:無効状態のスタイル(
disabled:bg-surface-*-disabled等)はisDisabled: trueの compoundVariant からしか出力されないため、isDisabledを使わずdisabledだけを渡すとクラスそのものが生成されない。再現
→
disabled属性は付きクリックも無効になるが、背景・アイコン色は enabled のまま。修正案
iconButtonVariants({ variant, size, theme, isLoading, - isDisabled, + isDisabled: Boolean(isDisabled || disabled), className, })native
disabledprop でも無効状態スタイルが当たることを確認するテストも追加する。補足
ButtonはisDisabledvariant を持たずdisabled:プレフィックス付きクラスを常に出力しているため、この問題は起きない