@nationaldesignstudio/react 0.0.17 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/component-registry.md +181 -29
  2. package/dist/components/atoms/accordion/accordion.d.ts +2 -2
  3. package/dist/components/atoms/background/background.d.ts +158 -0
  4. package/dist/components/atoms/button/button.d.ts +64 -82
  5. package/dist/components/atoms/button/icon-button.d.ts +128 -66
  6. package/dist/components/organisms/card/card.d.ts +130 -4
  7. package/dist/components/organisms/us-gov-banner/us-gov-banner.d.ts +120 -2
  8. package/dist/components/sections/hero/hero.d.ts +166 -150
  9. package/dist/components/sections/quote-block/quote-block.d.ts +152 -0
  10. package/dist/index.d.ts +6 -2
  11. package/dist/index.js +4068 -6052
  12. package/dist/index.js.map +1 -1
  13. package/dist/lib/utils.d.ts +1 -2
  14. package/dist/tokens.css +207 -16
  15. package/package.json +2 -4
  16. package/src/components/atoms/accordion/accordion.test.tsx +233 -0
  17. package/src/components/atoms/accordion/accordion.tsx +8 -8
  18. package/src/components/atoms/background/background.test.tsx +213 -0
  19. package/src/components/atoms/background/background.tsx +435 -0
  20. package/src/components/atoms/background/index.ts +22 -0
  21. package/src/components/atoms/button/button.stories.tsx +81 -32
  22. package/src/components/atoms/button/button.tsx +101 -49
  23. package/src/components/atoms/button/icon-button.stories.tsx +179 -28
  24. package/src/components/atoms/button/icon-button.test.tsx +254 -0
  25. package/src/components/atoms/button/icon-button.tsx +178 -59
  26. package/src/components/atoms/pager-control/pager-control.tsx +32 -3
  27. package/src/components/dev-tools/dev-toolbar/dev-toolbar.tsx +2 -0
  28. package/src/components/organisms/card/card.tsx +82 -24
  29. package/src/components/organisms/card/index.ts +7 -0
  30. package/src/components/organisms/navbar/navbar.tsx +2 -0
  31. package/src/components/organisms/us-gov-banner/index.ts +5 -1
  32. package/src/components/organisms/us-gov-banner/us-gov-banner.tsx +72 -16
  33. package/src/components/sections/hero/hero.stories.tsx +124 -1
  34. package/src/components/sections/hero/hero.test.tsx +21 -18
  35. package/src/components/sections/hero/hero.tsx +188 -301
  36. package/src/components/sections/hero/index.ts +13 -0
  37. package/src/components/sections/quote-block/index.ts +5 -0
  38. package/src/components/sections/quote-block/quote-block.tsx +216 -0
  39. package/src/index.ts +40 -0
  40. package/src/lib/utils.ts +1 -6
  41. package/src/stories/ThemeProvider.stories.tsx +11 -5
@@ -27,63 +27,112 @@ Playground.argTypes = {
27
27
  control: {
28
28
  type: "radio",
29
29
  },
30
- options: [
31
- "primary",
32
- "primaryOutline",
33
- "secondary",
34
- "charcoal",
35
- "charcoalOutline",
36
- "charcoalOutlineQuiet",
37
- "ivory",
38
- "ivoryOutline",
39
- "ivoryOutlineQuiet",
40
- "gray",
41
- ],
30
+ options: ["solid", "outline", "ghost", "subtle"],
31
+ },
32
+ colorScheme: {
33
+ control: {
34
+ type: "radio",
35
+ },
36
+ options: ["dark", "light"],
42
37
  },
43
38
  };
44
39
  Playground.args = {
45
40
  size: "default",
46
41
  disabled: false,
47
- variant: "primary",
42
+ variant: "solid",
43
+ colorScheme: "dark",
48
44
  };
49
45
 
50
46
  // =============================================================================
51
- // Semantic Variants (recommended)
47
+ // Variants (Dark Color Scheme - for light backgrounds)
52
48
  // =============================================================================
53
49
 
54
- export const Primary = () => <Button variant="primary">Primary</Button>;
50
+ export const Solid = () => <Button variant="solid">Solid</Button>;
55
51
 
56
- export const PrimaryOutline = () => (
57
- <Button variant="primaryOutline">Primary Outline</Button>
58
- );
52
+ export const Outline = () => <Button variant="outline">Outline</Button>;
53
+
54
+ export const Ghost = () => <Button variant="ghost">Ghost</Button>;
59
55
 
60
- export const Secondary = () => <Button variant="secondary">Secondary</Button>;
56
+ export const Subtle = () => <Button variant="subtle">Subtle</Button>;
61
57
 
62
58
  // =============================================================================
63
- // Legacy Variants
59
+ // Variants (Light Color Scheme - for dark backgrounds)
64
60
  // =============================================================================
65
61
 
66
- export const Charcoal = () => <Button variant="charcoal">Charcoal</Button>;
67
-
68
- export const CharcoalOutline = () => (
69
- <Button variant="charcoalOutline">Charcoal Outline</Button>
62
+ const DarkBackground = ({ children }: { children: React.ReactNode }) => (
63
+ <div className="rounded-radius-12 bg-gray-1200 p-spacing-32">{children}</div>
70
64
  );
71
65
 
72
- export const CharcoalOutlineQuiet = () => (
73
- <Button variant="charcoalOutlineQuiet">Charcoal Outline Quiet</Button>
66
+ export const SolidLight = () => (
67
+ <DarkBackground>
68
+ <Button variant="solid" colorScheme="light">
69
+ Solid Light
70
+ </Button>
71
+ </DarkBackground>
74
72
  );
75
73
 
76
- export const Ivory = () => <Button variant="ivory">Ivory</Button>;
74
+ export const OutlineLight = () => (
75
+ <DarkBackground>
76
+ <Button variant="outline" colorScheme="light">
77
+ Outline Light
78
+ </Button>
79
+ </DarkBackground>
80
+ );
77
81
 
78
- export const IvoryOutline = () => (
79
- <Button variant="ivoryOutline">Ivory Outline</Button>
82
+ export const GhostLight = () => (
83
+ <DarkBackground>
84
+ <Button variant="ghost" colorScheme="light">
85
+ Ghost Light
86
+ </Button>
87
+ </DarkBackground>
80
88
  );
81
89
 
82
- export const IvoryOutlineQuiet = () => (
83
- <Button variant="ivoryOutlineQuiet">Ivory Outline Quiet</Button>
90
+ export const SubtleLight = () => (
91
+ <DarkBackground>
92
+ <Button variant="subtle" colorScheme="light">
93
+ Subtle Light
94
+ </Button>
95
+ </DarkBackground>
84
96
  );
85
97
 
86
- export const Gray = () => <Button variant="gray">Gray</Button>;
98
+ // =============================================================================
99
+ // All Variants Comparison
100
+ // =============================================================================
101
+
102
+ export const AllVariants = () => (
103
+ <div className="flex flex-col gap-spacing-32">
104
+ <div>
105
+ <h3 className="mb-spacing-16 text-14 font-medium text-text-secondary">
106
+ Dark Color Scheme (for light backgrounds)
107
+ </h3>
108
+ <div className="flex gap-spacing-16">
109
+ <Button variant="solid">Solid</Button>
110
+ <Button variant="outline">Outline</Button>
111
+ <Button variant="ghost">Ghost</Button>
112
+ <Button variant="subtle">Subtle</Button>
113
+ </div>
114
+ </div>
115
+ <DarkBackground>
116
+ <h3 className="mb-spacing-16 text-14 font-medium text-gray-400">
117
+ Light Color Scheme (for dark backgrounds)
118
+ </h3>
119
+ <div className="flex gap-spacing-16">
120
+ <Button variant="solid" colorScheme="light">
121
+ Solid
122
+ </Button>
123
+ <Button variant="outline" colorScheme="light">
124
+ Outline
125
+ </Button>
126
+ <Button variant="ghost" colorScheme="light">
127
+ Ghost
128
+ </Button>
129
+ <Button variant="subtle" colorScheme="light">
130
+ Subtle
131
+ </Button>
132
+ </div>
133
+ </DarkBackground>
134
+ </div>
135
+ );
87
136
 
88
137
  // =============================================================================
89
138
  // Sizes
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  import {
2
4
  Button as BaseButton,
3
5
  type ButtonProps as BaseButtonProps,
@@ -10,16 +12,14 @@ import { type ButtonTheme, buttonThemeToStyleVars } from "../../../lib/theme";
10
12
  * Button component based on Figma BaseKit / Interface / Buttons
11
13
  *
12
14
  * Variants:
13
- * - primary: Primary filled button using semantic color tokens
14
- * - primaryOutline: Outlined primary button (for light backgrounds)
15
- * - secondary: Secondary button using semantic color tokens
16
- * - charcoal: Dark filled button (for light backgrounds) - legacy
17
- * - charcoalOutline: Dark outlined button (for light backgrounds)
18
- * - charcoalOutlineQuiet: Subtle dark outlined button (for light backgrounds)
19
- * - ivory: Light filled button (for dark backgrounds)
20
- * - ivoryOutline: Light outlined button (for dark backgrounds)
21
- * - ivoryOutlineQuiet: Subtle light outlined button (for dark backgrounds)
22
- * - gray: Gray filled button (for dark backgrounds)
15
+ * - solid: Filled button
16
+ * - outline: Outlined button
17
+ * - ghost: No background/border, just text
18
+ * - subtle: Light background with subtle styling
19
+ *
20
+ * Color Schemes:
21
+ * - dark: Dark colors for use on light backgrounds (default)
22
+ * - light: Light colors for use on dark backgrounds
23
23
  *
24
24
  * Sizes:
25
25
  * - lg: Large buttons
@@ -30,58 +30,91 @@ import { type ButtonTheme, buttonThemeToStyleVars } from "../../../lib/theme";
30
30
  *
31
31
  * Theme Support:
32
32
  * Pass a `theme` prop to override default colors via CSS custom properties.
33
- * Surface tokens (--radius-surface-button, --surface-button-stroke) control
34
- * border radius and stroke width across all variants.
35
33
  */
36
34
  const buttonVariants = tv({
37
35
  base: "inline-flex items-center justify-center gap-spacing-8 whitespace-nowrap transition-colors duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 rounded-surface-button stroke-surface-button border-solid",
38
36
  variants: {
39
37
  variant: {
40
- // Primary - uses semantic color tokens
41
- primary:
42
- "bg-button-primary-bg text-text-inverted hover:bg-button-primary-bg-hover border-transparent focus-visible:ring-button-primary-bg",
43
- // Primary Outline - outlined primary (for light backgrounds)
44
- primaryOutline:
45
- "bg-transparent text-text-primary border-border-strong hover:bg-alpha-black-5 active:bg-alpha-black-10 focus-visible:ring-button-primary-bg",
46
- // Secondary - uses semantic color tokens
47
- secondary:
48
- "bg-button-secondary-bg text-text-primary border-border-subtle hover:bg-button-secondary-bg-hover focus-visible:ring-button-primary-bg",
49
- // Charcoal (dark filled) - primary dark (legacy)
50
- charcoal:
51
- "bg-gray-1200 text-gray-100 hover:bg-gray-1100 active:bg-gray-1000 border-transparent focus-visible:ring-gray-1000",
52
- // Charcoal Outline - outlined dark (for light backgrounds)
53
- charcoalOutline:
54
- "border-border-strong text-gray-1000 hover:bg-alpha-black-5 active:bg-alpha-black-10 focus-visible:ring-gray-1000",
55
- // Charcoal Outline Quiet - subtle outlined dark (for light backgrounds)
56
- charcoalOutlineQuiet:
57
- "border-border-subtle text-alpha-black-60 hover:border-border-strong hover:text-alpha-black-80 active:bg-alpha-black-5 focus-visible:ring-gray-1000",
58
- // Ivory (light filled) - primary light (for dark backgrounds)
59
- ivory:
60
- "bg-gray-50 text-gray-1000 hover:bg-gray-100 active:bg-gray-200 border-transparent focus-visible:ring-gray-50 focus-visible:ring-offset-gray-1000",
61
- // Ivory Outline - outlined light (for dark backgrounds)
62
- ivoryOutline:
63
- "border-gray-50 text-gray-50 hover:bg-alpha-white-10 active:bg-alpha-white-20 focus-visible:ring-gray-50 focus-visible:ring-offset-gray-1000",
64
- // Ivory Outline Quiet - subtle light outline (for dark backgrounds)
65
- ivoryOutlineQuiet:
66
- "border-alpha-white-20 text-alpha-white-60 hover:border-alpha-white-30 hover:text-alpha-white-80 active:bg-alpha-white-5 focus-visible:ring-gray-50 focus-visible:ring-offset-gray-1000",
67
- // Gray - gray filled button (for dark backgrounds)
68
- gray: "bg-gray-800 text-gray-100 hover:bg-gray-700 active:bg-gray-600 border-transparent focus-visible:ring-gray-700 focus-visible:ring-offset-gray-1000",
38
+ solid: "",
39
+ outline: "bg-transparent border",
40
+ ghost: "bg-transparent border-transparent",
41
+ subtle: "border",
69
42
  // Themed - uses CSS custom properties for styling
70
43
  themed:
71
44
  "[background:var(--btn-bg)] [color:var(--btn-text)] [border-color:var(--btn-border-color,transparent)] hover:[background:var(--btn-bg-hover,var(--btn-bg))] active:[background:var(--btn-bg-active,var(--btn-bg-hover,var(--btn-bg)))]",
72
45
  },
46
+ colorScheme: {
47
+ dark: "",
48
+ light: "",
49
+ },
73
50
  size: {
74
- // Large button - uses primitive spacing tokens
75
- lg: "px-spacing-24 py-spacing-12 typography-brand-large-button-large h-spacing-48",
76
- // Medium button (default) - uses primitive spacing tokens
51
+ lg: "px-spacing-24 py-spacing-12 typography-large-button-large h-spacing-48",
77
52
  default:
78
- "px-spacing-20 py-spacing-10 typography-brand-medium-button-medium h-spacing-40",
79
- // Small button - uses primitive spacing tokens
80
- sm: "px-spacing-16 py-spacing-8 typography-brand-small-button-small h-spacing-32",
53
+ "px-spacing-20 py-spacing-10 typography-medium-button-medium h-spacing-40",
54
+ sm: "px-spacing-16 py-spacing-8 typography-small-button-small h-spacing-32",
81
55
  },
82
56
  },
57
+ compoundVariants: [
58
+ // Solid + Dark (for light backgrounds) - uses semantic button tokens
59
+ {
60
+ variant: "solid",
61
+ colorScheme: "dark",
62
+ class:
63
+ "bg-button-primary-bg text-text-inverted hover:bg-button-primary-bg-hover active:bg-button-primary-bg-hover border-transparent focus-visible:ring-button-primary-bg",
64
+ },
65
+ // Solid + Light (for dark backgrounds)
66
+ {
67
+ variant: "solid",
68
+ colorScheme: "light",
69
+ class:
70
+ "bg-button-secondary-bg text-text-primary hover:bg-button-secondary-bg-hover active:bg-gray-200 border-transparent focus-visible:ring-gray-50 focus-visible:ring-offset-gray-1000",
71
+ },
72
+ // Outline + Dark (for light backgrounds)
73
+ {
74
+ variant: "outline",
75
+ colorScheme: "dark",
76
+ class:
77
+ "border-border-strong text-gray-1000 hover:bg-alpha-black-5 active:bg-alpha-black-10 focus-visible:ring-gray-1000",
78
+ },
79
+ // Outline + Light (for dark backgrounds)
80
+ {
81
+ variant: "outline",
82
+ colorScheme: "light",
83
+ class:
84
+ "border-gray-50 text-gray-50 hover:bg-alpha-white-10 active:bg-alpha-white-20 focus-visible:ring-gray-50 focus-visible:ring-offset-gray-1000",
85
+ },
86
+ // Ghost + Dark (for light backgrounds)
87
+ {
88
+ variant: "ghost",
89
+ colorScheme: "dark",
90
+ class:
91
+ "text-gray-700 hover:text-gray-900 hover:bg-alpha-black-5 active:bg-alpha-black-10 focus-visible:ring-gray-1000",
92
+ },
93
+ // Ghost + Light (for dark backgrounds)
94
+ {
95
+ variant: "ghost",
96
+ colorScheme: "light",
97
+ class:
98
+ "text-gray-300 hover:text-gray-100 hover:bg-alpha-white-10 active:bg-alpha-white-20 focus-visible:ring-gray-50 focus-visible:ring-offset-gray-1000",
99
+ },
100
+ // Subtle + Dark (for light backgrounds)
101
+ {
102
+ variant: "subtle",
103
+ colorScheme: "dark",
104
+ class:
105
+ "border-border-subtle text-alpha-black-60 hover:border-border-strong hover:text-alpha-black-80 active:bg-alpha-black-5 focus-visible:ring-gray-1000",
106
+ },
107
+ // Subtle + Light (for dark backgrounds)
108
+ {
109
+ variant: "subtle",
110
+ colorScheme: "light",
111
+ class:
112
+ "border-alpha-white-20 text-alpha-white-60 hover:border-alpha-white-30 hover:text-alpha-white-80 active:bg-alpha-white-5 focus-visible:ring-gray-50 focus-visible:ring-offset-gray-1000",
113
+ },
114
+ ],
83
115
  defaultVariants: {
84
- variant: "primary",
116
+ variant: "solid",
117
+ colorScheme: "dark",
85
118
  size: "default",
86
119
  },
87
120
  });
@@ -106,7 +139,17 @@ function hasThemeValues(theme: ButtonTheme | undefined): boolean {
106
139
 
107
140
  const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
108
141
  (
109
- { className, variant, size, render, nativeButton, theme, style, ...props },
142
+ {
143
+ className,
144
+ variant,
145
+ colorScheme,
146
+ size,
147
+ render,
148
+ nativeButton,
149
+ theme,
150
+ style,
151
+ ...props
152
+ },
110
153
  ref,
111
154
  ) => {
112
155
  // When render prop is provided, default nativeButton to false to suppress warnings
@@ -118,10 +161,16 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
118
161
  const themeStyles = buttonThemeToStyleVars(theme);
119
162
  const combinedStyles = hasTheme ? { ...themeStyles, ...style } : style;
120
163
 
164
+ // Resolve actual values for data attributes
165
+ const resolvedVariant = effectiveVariant ?? "solid";
166
+ const resolvedColorScheme = colorScheme ?? "dark";
167
+ const resolvedSize = size ?? "default";
168
+
121
169
  return (
122
170
  <BaseButton
123
171
  className={buttonVariants({
124
172
  variant: effectiveVariant,
173
+ colorScheme,
125
174
  size,
126
175
  class: className,
127
176
  })}
@@ -129,6 +178,9 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
129
178
  render={render}
130
179
  nativeButton={isNativeButton}
131
180
  style={combinedStyles}
181
+ data-variant={resolvedVariant}
182
+ data-color-scheme={resolvedColorScheme}
183
+ data-size={resolvedSize}
132
184
  {...props}
133
185
  />
134
186
  );
@@ -77,90 +77,241 @@ Playground.argTypes = {
77
77
  control: {
78
78
  type: "radio",
79
79
  },
80
- options: [
81
- "charcoal",
82
- "charcoalOutline",
83
- "charcoalOutlineQuiet",
84
- "ivory",
85
- "ivoryOutline",
86
- "ivoryOutlineQuiet",
87
- ],
80
+ options: ["solid", "outline", "ghost", "subtle"],
81
+ },
82
+ colorScheme: {
83
+ control: {
84
+ type: "radio",
85
+ },
86
+ options: ["dark", "light"],
87
+ },
88
+ rounded: {
89
+ control: {
90
+ type: "radio",
91
+ },
92
+ options: ["default", "sm", "full"],
88
93
  },
89
94
  };
90
95
  Playground.args = {
91
96
  size: "default",
92
97
  disabled: false,
93
- variant: "charcoal",
98
+ variant: "solid",
99
+ colorScheme: "dark",
100
+ rounded: "default",
101
+ "aria-label": "Search",
94
102
  };
95
103
 
96
104
  // =============================================================================
97
- // Variants
105
+ // Variants (Dark Color Scheme - for light backgrounds)
98
106
  // =============================================================================
99
107
 
100
- export const Charcoal = () => (
101
- <IconButton variant="charcoal">
108
+ export const Solid = () => (
109
+ <IconButton variant="solid" aria-label="Search">
102
110
  <SearchIcon />
103
111
  </IconButton>
104
112
  );
105
113
 
106
- export const CharcoalOutline = () => (
107
- <IconButton variant="charcoalOutline">
114
+ export const Outline = () => (
115
+ <IconButton variant="outline" aria-label="Search">
108
116
  <SearchIcon />
109
117
  </IconButton>
110
118
  );
111
119
 
112
- export const CharcoalOutlineQuiet = () => (
113
- <IconButton variant="charcoalOutlineQuiet">
120
+ export const Ghost = () => (
121
+ <IconButton variant="ghost" aria-label="Search">
114
122
  <SearchIcon />
115
123
  </IconButton>
116
124
  );
117
125
 
118
- export const Ivory = () => (
119
- <IconButton variant="ivory">
126
+ export const Subtle = () => (
127
+ <IconButton variant="subtle" aria-label="Search">
120
128
  <SearchIcon />
121
129
  </IconButton>
122
130
  );
123
131
 
124
- export const IvoryOutline = () => (
125
- <IconButton variant="ivoryOutline">
126
- <ArrowRightIcon />
132
+ // =============================================================================
133
+ // Variants (Light Color Scheme - for dark backgrounds)
134
+ // =============================================================================
135
+
136
+ const DarkBackground = ({ children }: { children: React.ReactNode }) => (
137
+ <div className="rounded-radius-12 bg-gray-1200 p-spacing-32">{children}</div>
138
+ );
139
+
140
+ export const SolidLight = () => (
141
+ <DarkBackground>
142
+ <IconButton variant="solid" colorScheme="light" aria-label="Navigate">
143
+ <ArrowRightIcon />
144
+ </IconButton>
145
+ </DarkBackground>
146
+ );
147
+
148
+ export const OutlineLight = () => (
149
+ <DarkBackground>
150
+ <IconButton variant="outline" colorScheme="light" aria-label="Navigate">
151
+ <ArrowRightIcon />
152
+ </IconButton>
153
+ </DarkBackground>
154
+ );
155
+
156
+ export const GhostLight = () => (
157
+ <DarkBackground>
158
+ <IconButton variant="ghost" colorScheme="light" aria-label="Navigate">
159
+ <ArrowRightIcon />
160
+ </IconButton>
161
+ </DarkBackground>
162
+ );
163
+
164
+ export const SubtleLight = () => (
165
+ <DarkBackground>
166
+ <IconButton variant="subtle" colorScheme="light" aria-label="Navigate">
167
+ <ArrowRightIcon />
168
+ </IconButton>
169
+ </DarkBackground>
170
+ );
171
+
172
+ // =============================================================================
173
+ // All Variants Comparison
174
+ // =============================================================================
175
+
176
+ export const AllVariants = () => (
177
+ <div className="flex flex-col gap-spacing-32">
178
+ <div>
179
+ <h3 className="mb-spacing-16 text-14 font-medium text-text-secondary">
180
+ Dark Color Scheme (for light backgrounds)
181
+ </h3>
182
+ <div className="flex gap-spacing-16">
183
+ <IconButton variant="solid" aria-label="Solid">
184
+ <SearchIcon />
185
+ </IconButton>
186
+ <IconButton variant="outline" aria-label="Outline">
187
+ <SearchIcon />
188
+ </IconButton>
189
+ <IconButton variant="ghost" aria-label="Ghost">
190
+ <SearchIcon />
191
+ </IconButton>
192
+ <IconButton variant="subtle" aria-label="Subtle">
193
+ <SearchIcon />
194
+ </IconButton>
195
+ </div>
196
+ </div>
197
+ <DarkBackground>
198
+ <h3 className="mb-spacing-16 text-14 font-medium text-gray-400">
199
+ Light Color Scheme (for dark backgrounds)
200
+ </h3>
201
+ <div className="flex gap-spacing-16">
202
+ <IconButton variant="solid" colorScheme="light" aria-label="Solid">
203
+ <ArrowRightIcon />
204
+ </IconButton>
205
+ <IconButton variant="outline" colorScheme="light" aria-label="Outline">
206
+ <ArrowRightIcon />
207
+ </IconButton>
208
+ <IconButton variant="ghost" colorScheme="light" aria-label="Ghost">
209
+ <ArrowRightIcon />
210
+ </IconButton>
211
+ <IconButton variant="subtle" colorScheme="light" aria-label="Subtle">
212
+ <ArrowRightIcon />
213
+ </IconButton>
214
+ </div>
215
+ </DarkBackground>
216
+ </div>
217
+ );
218
+
219
+ // =============================================================================
220
+ // Rounded Variants
221
+ // =============================================================================
222
+
223
+ export const RoundedDefault = () => (
224
+ <IconButton rounded="default" aria-label="Search">
225
+ <SearchIcon />
127
226
  </IconButton>
128
227
  );
129
228
 
130
- export const IvoryOutlineQuiet = () => (
131
- <IconButton variant="ivoryOutlineQuiet">
132
- <ArrowRightIcon />
229
+ export const RoundedSm = () => (
230
+ <IconButton rounded="sm" aria-label="Search">
231
+ <SearchIcon />
133
232
  </IconButton>
134
233
  );
135
234
 
235
+ export const RoundedFull = () => (
236
+ <IconButton rounded="full" aria-label="Search">
237
+ <SearchIcon />
238
+ </IconButton>
239
+ );
240
+
241
+ export const AllRounded = () => (
242
+ <div className="flex gap-spacing-16">
243
+ <div className="text-center">
244
+ <IconButton rounded="default" aria-label="Default rounded">
245
+ <SearchIcon />
246
+ </IconButton>
247
+ <p className="mt-spacing-8 text-12 text-text-muted">default</p>
248
+ </div>
249
+ <div className="text-center">
250
+ <IconButton rounded="sm" aria-label="Small rounded">
251
+ <SearchIcon />
252
+ </IconButton>
253
+ <p className="mt-spacing-8 text-12 text-text-muted">sm</p>
254
+ </div>
255
+ <div className="text-center">
256
+ <IconButton rounded="full" aria-label="Full rounded">
257
+ <SearchIcon />
258
+ </IconButton>
259
+ <p className="mt-spacing-8 text-12 text-text-muted">full</p>
260
+ </div>
261
+ </div>
262
+ );
263
+
136
264
  // =============================================================================
137
265
  // Sizes
138
266
  // =============================================================================
139
267
 
140
268
  export const Small = () => (
141
- <IconButton size="sm">
269
+ <IconButton size="sm" aria-label="Search">
142
270
  <ArrowRightIcon />
143
271
  </IconButton>
144
272
  );
145
273
 
146
274
  export const Medium = () => (
147
- <IconButton size="default">
275
+ <IconButton size="default" aria-label="Search">
148
276
  <SearchIcon />
149
277
  </IconButton>
150
278
  );
151
279
 
152
280
  export const Large = () => (
153
- <IconButton size="lg">
281
+ <IconButton size="lg" aria-label="Search">
154
282
  <SearchIcon />
155
283
  </IconButton>
156
284
  );
157
285
 
286
+ export const AllSizes = () => (
287
+ <div className="flex items-center gap-spacing-16">
288
+ <div className="text-center">
289
+ <IconButton size="sm" aria-label="Small">
290
+ <ArrowRightIcon />
291
+ </IconButton>
292
+ <p className="mt-spacing-8 text-12 text-text-muted">sm (32px)</p>
293
+ </div>
294
+ <div className="text-center">
295
+ <IconButton size="default" aria-label="Default">
296
+ <SearchIcon />
297
+ </IconButton>
298
+ <p className="mt-spacing-8 text-12 text-text-muted">default (40px)</p>
299
+ </div>
300
+ <div className="text-center">
301
+ <IconButton size="lg" aria-label="Large">
302
+ <SearchIcon />
303
+ </IconButton>
304
+ <p className="mt-spacing-8 text-12 text-text-muted">lg (48px)</p>
305
+ </div>
306
+ </div>
307
+ );
308
+
158
309
  // =============================================================================
159
310
  // States
160
311
  // =============================================================================
161
312
 
162
313
  export const Disabled = () => (
163
- <IconButton disabled>
314
+ <IconButton disabled aria-label="Search">
164
315
  <SearchIcon />
165
316
  </IconButton>
166
317
  );