Skip to content

Commit 566f8c3

Browse files
feat(button): add disabled styles for danger variant (#518)
Co-authored-by: Huyen Nguyen <[email protected]>
1 parent c40b606 commit 566f8c3

File tree

5 files changed

+38
-23
lines changed

5 files changed

+38
-23
lines changed

src/button/button.test.tsx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -160,11 +160,6 @@ describe("<Button />", () => {
160160
// Type tests
161161
// ------------------------------
162162

163-
// @ts-expect-error - Button with `danger` variant cannot be disabled
164-
<Button variant="danger" disabled>
165-
Button text
166-
</Button>;
167-
168163
// @ts-expect-error - Button with `info` variant cannot be disabled
169164
<Button variant="info" disabled>
170165
Button text

src/button/button.tsx

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,25 @@ const computeClassNames = ({
4444
switch (variant) {
4545
case "danger":
4646
classNames.push(
47-
"border-foreground-danger",
48-
"bg-background-danger",
49-
"text-foreground-danger",
50-
"hover:bg-foreground-danger",
51-
"hover:text-background-danger",
52-
// This hover rule is redundant for the component library,
53-
// but is needed to override the border color set in client's `global.css`.
54-
// We can remove it once we have completely removed the CSS overrides in client.
55-
"hover:border-foreground-danger",
56-
"dark:hover:bg-background-danger",
57-
"dark:hover:text-foreground-danger",
47+
...(disabled
48+
? [
49+
"border-gray-450",
50+
"bg-background-danger-disabled",
51+
"text-foreground-danger-disabled",
52+
]
53+
: [
54+
"border-foreground-danger",
55+
"bg-background-danger",
56+
"text-foreground-danger",
57+
"hover:bg-foreground-danger",
58+
"hover:text-background-danger",
59+
// This hover rule is redundant for the component library,
60+
// but is needed to override the border color set in client's `global.css`.
61+
// We can remove it once we have completely removed the CSS overrides in client.
62+
"hover:border-foreground-danger",
63+
"dark:hover:bg-background-danger",
64+
"dark:hover:text-foreground-danger",
65+
]),
5866
);
5967
break;
6068
case "info":
@@ -78,12 +86,7 @@ const computeClassNames = ({
7886
"bg-background-quaternary",
7987
"text-foreground-secondary",
8088
...(disabled
81-
? [
82-
"active:before:hidden",
83-
"border-gray-450",
84-
"aria-disabled:cursor-not-allowed",
85-
"aria-disabled:opacity-80",
86-
]
89+
? ["border-gray-450"]
8790
: [
8891
"border-foreground-secondary",
8992
"hover:bg-foreground-primary",
@@ -98,6 +101,14 @@ const computeClassNames = ({
98101
);
99102
}
100103

104+
if (disabled) {
105+
classNames.push(
106+
"active:before:hidden",
107+
"aria-disabled:cursor-not-allowed",
108+
"aria-disabled:opacity-80",
109+
);
110+
}
111+
101112
switch (size) {
102113
case "large":
103114
classNames.push("px-4 py-2.5 text-lg");

src/button/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ interface InfoButtonProps extends BaseButtonProps {
2828

2929
interface DangerButtonProps extends BaseButtonProps {
3030
variant: "danger";
31-
disabled?: false;
31+
disabled?: boolean;
3232
}
3333

3434
export type ButtonProps =

src/colors.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
--red70: #a94442;
5050
--red80: #f82153;
5151
--red90: #850000;
52+
--red100: #5a3535;
5253

5354
--orange30: #eda971;
5455
}
@@ -99,6 +100,7 @@
99100
--red70: var(--red70);
100101
--red80: var(--red80);
101102
--red90: var(--red90);
103+
--red100: var(--red100);
102104

103105
--orange30: var(--orange30);
104106
}
@@ -109,6 +111,7 @@
109111
--foreground-tertiary: var(--gray80);
110112
--foreground-quaternary: var(--gray75);
111113
--foreground-danger: var(--red15);
114+
--foreground-danger-disabled: var(--red100);
112115
--foreground-success: var(--green40);
113116
--foreground-info: var(--blue30);
114117
--foreground-warning: var(--yellow45);
@@ -118,6 +121,7 @@
118121
--background-tertiary: var(--gray10);
119122
--background-quaternary: var(--gray15);
120123
--background-danger: var(--red90);
124+
--background-danger-disabled: var(--red05);
121125
--background-success: var(--green90);
122126
--background-info: var(--blue90);
123127
--background-selection: var(--blue90-translucent);
@@ -131,6 +135,7 @@
131135
--foreground-tertiary: var(--gray10);
132136
--foreground-quaternary: var(--gray15);
133137
--foreground-danger: var(--red90);
138+
--foreground-danger-disabled: var(--red05);
134139
--foreground-success: var(--green90);
135140
--foreground-info: var(--blue90);
136141
--foreground-warning: var(--yellow40);
@@ -140,6 +145,7 @@
140145
--background-tertiary: var(--gray80);
141146
--background-quaternary: var(--gray75);
142147
--background-danger: var(--red15);
148+
--background-danger-disabled: var(--red100);
143149
--background-success: var(--green40);
144150
--background-info: var(--blue30);
145151
--background-selection: var(--blue30-translucent);

tailwind.config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ module.exports = {
2222
"foreground-tertiary": "var(--foreground-tertiary)",
2323
"foreground-quaternary": "var(--foreground-quaternary)",
2424
"foreground-danger": "var(--foreground-danger)",
25+
"foreground-danger-disabled": "var(--foreground-danger-disabled)",
2526
"foreground-success": "var(--foreground-success)",
2627
"foreground-info": "var(--foreground-info)",
2728
// Background
@@ -30,6 +31,7 @@ module.exports = {
3031
"background-tertiary": "var(--background-tertiary)",
3132
"background-quaternary": "var(--background-quaternary)",
3233
"background-danger": "var(--background-danger)",
34+
"background-danger-disabled": "var(--background-danger-disabled)",
3335
"background-success": "var(--background-success)",
3436
"background-info": "var(--background-info)",
3537
// Focus outline
@@ -79,6 +81,7 @@ module.exports = {
7981
700: "var(--red70)",
8082
800: "var(--red80)",
8183
900: "var(--red90)",
84+
1000: "var(--red100)",
8285
},
8386
orange: {
8487
300: "var(--orange30)",

0 commit comments

Comments
 (0)