@kaizen/components 1.67.22 → 1.68.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 (52) hide show
  1. package/dist/cjs/__actions__/Button/v3/Button.cjs +43 -8
  2. package/dist/cjs/__actions__/Button/v3/Button.module.css.cjs +21 -0
  3. package/dist/cjs/__actions__/Button/v3/subcomponents/ButtonContent/ButtonContent.cjs +37 -0
  4. package/dist/cjs/__actions__/Button/v3/subcomponents/ButtonContent/ButtonContent.module.css.cjs +9 -0
  5. package/dist/cjs/__actions__/Button/v3/subcomponents/PendingContent/PendingContent.cjs +35 -0
  6. package/dist/cjs/__actions__/Button/v3/subcomponents/PendingContent/PendingContent.module.css.cjs +8 -0
  7. package/dist/cjs/__overlays__/Tooltip/v3/Tooltip.cjs +2 -2
  8. package/dist/esm/__actions__/Button/v3/Button.mjs +44 -9
  9. package/dist/esm/__actions__/Button/v3/Button.module.css.mjs +19 -0
  10. package/dist/esm/__actions__/Button/v3/subcomponents/ButtonContent/ButtonContent.mjs +28 -0
  11. package/dist/esm/__actions__/Button/v3/subcomponents/ButtonContent/ButtonContent.module.css.mjs +7 -0
  12. package/dist/esm/__actions__/Button/v3/subcomponents/PendingContent/PendingContent.mjs +26 -0
  13. package/dist/esm/__actions__/Button/v3/subcomponents/PendingContent/PendingContent.module.css.mjs +6 -0
  14. package/dist/esm/__overlays__/Tooltip/v3/Tooltip.mjs +1 -1
  15. package/dist/styles.css +276 -91
  16. package/dist/types/__actions__/Button/v3/Button.d.ts +17 -4
  17. package/dist/types/__actions__/Button/v3/index.d.ts +1 -0
  18. package/dist/types/__actions__/Button/v3/subcomponents/ButtonContent/ButtonContent.d.ts +11 -0
  19. package/dist/types/__actions__/Button/v3/subcomponents/ButtonContent/index.d.ts +1 -0
  20. package/dist/types/__actions__/Button/v3/subcomponents/PendingContent/PendingContent.d.ts +5 -0
  21. package/dist/types/__actions__/Button/v3/subcomponents/PendingContent/index.d.ts +1 -0
  22. package/dist/types/__actions__/Button/v3/subcomponents/index.d.ts +2 -0
  23. package/dist/types/__actions__/Button/v3/types.d.ts +21 -0
  24. package/package.json +1 -1
  25. package/src/__actions__/Button/v3/Button.module.css +235 -0
  26. package/src/__actions__/Button/v3/Button.tsx +92 -29
  27. package/src/__actions__/Button/v3/_docs/Button--api-specification.mdx +150 -0
  28. package/src/__actions__/Button/v3/_docs/Button--usage-guidelines.mdx +30 -0
  29. package/src/__actions__/Button/v3/_docs/Button.docs.stories.tsx +112 -50
  30. package/src/__actions__/Button/v3/_docs/Button.spec.stories.tsx +80 -120
  31. package/src/__actions__/Button/v3/_docs/Button.stickersheet.stories.tsx +183 -81
  32. package/src/__actions__/Button/v3/index.ts +1 -0
  33. package/src/__actions__/Button/v3/subcomponents/ButtonContent/ButtonContent.module.css +19 -0
  34. package/src/__actions__/Button/v3/subcomponents/ButtonContent/ButtonContent.tsx +40 -0
  35. package/src/__actions__/Button/v3/subcomponents/ButtonContent/index.ts +1 -0
  36. package/src/__actions__/Button/v3/subcomponents/PendingContent/PendingContent.module.css +16 -0
  37. package/src/__actions__/Button/v3/subcomponents/PendingContent/PendingContent.tsx +28 -0
  38. package/src/__actions__/Button/v3/subcomponents/PendingContent/index.ts +1 -0
  39. package/src/__actions__/Button/v3/subcomponents/index.ts +2 -0
  40. package/src/__actions__/Button/v3/types.ts +25 -0
  41. package/src/__actions__/Menu/v3/_docs/Menu.docs.stories.tsx +54 -18
  42. package/src/__actions__/Menu/v3/_docs/Menu.spec.stories.tsx +30 -10
  43. package/src/__actions__/Menu/v3/_docs/Menu.stories.tsx +12 -4
  44. package/src/__future__/Icon/_docs/Icon.docs.stories.tsx +7 -7
  45. package/src/__overlays__/Tooltip/v3/Tooltip.tsx +1 -1
  46. package/src/__overlays__/Tooltip/v3/_docs/Tooltip.spec.stories.tsx +2 -0
  47. package/dist/cjs/__actions__/Button/v3/Button.module.scss.cjs +0 -9
  48. package/dist/esm/__actions__/Button/v3/Button.module.scss.mjs +0 -7
  49. package/src/__actions__/Button/v3/Button.module.scss +0 -104
  50. package/src/__actions__/Button/v3/_docs/ApiSpecification.mdx +0 -173
  51. package/src/__actions__/Button/v3/_docs/Button.mdx +0 -41
  52. package/src/__actions__/Button/v3/_docs/Button.stories.tsx +0 -98
package/dist/styles.css CHANGED
@@ -72,6 +72,282 @@
72
72
  opacity: 0.3;
73
73
  }
74
74
 
75
+ .Button-module_button__vlUCI {
76
+ /* RESET */
77
+ appearance: none;
78
+ background: transparent;
79
+ font: inherit;
80
+ margin: 0;
81
+ outline: none;
82
+ -webkit-font-smoothing: antialiased;
83
+ -moz-osx-font-smoothing: grayscale;
84
+
85
+ --button-min-x-y: var(--spacing-40);
86
+ --button-border-width: var(--border-solid-border-width);
87
+ --button-padding-y: calc(var(--spacing-8) - var(--button-border-width));
88
+ --button-padding-x: calc(var(--spacing-16) - var(--button-border-width));
89
+
90
+ background-color: var(--button-bg-color, var(--color-blue-500));
91
+ border: var(--button-border-width) solid;
92
+ border-radius: var(--border-solid-border-radius);
93
+ border-color: var(--button-border-color, var(--color-blue-500));
94
+ box-sizing: border-box;
95
+ color: var(--button-text-color, var(--color-white));
96
+ display: inline-flex;
97
+ align-items: center;
98
+ justify-content: center;
99
+ text-align: start;
100
+ font-family: var(
101
+ --button-font-family,
102
+ var(--typography-paragraph-body-font-family)
103
+ );
104
+ font-weight: var(--button-font-weight, 500);
105
+ font-size: var(--button-font-size, 1rem);
106
+ line-height: var(--button-line-height, 1.5rem);
107
+ min-height: var(--button-min-x-y);
108
+ min-width: var(--button-min-x-y);
109
+ position: relative;
110
+ padding: var(--button-padding-y) var(--button-padding-x);
111
+
112
+ &[data-hovered] {
113
+ --button-bg-color: var(--color-blue-600);
114
+ --button-border-color: var(--color-blue-600);
115
+ }
116
+
117
+ &[data-pressed] {
118
+ --button-bg-color: var(--color-blue-700);
119
+ --button-border-color: var(--color-blue-700);
120
+ }
121
+
122
+ &[data-pending] {
123
+ --button-bg-color: var(--color-blue-700);
124
+ --button-border-color: var(--color-blue-700);
125
+ }
126
+
127
+ &[data-focus-visible]::after {
128
+ content: "";
129
+ position: absolute;
130
+ background: transparent;
131
+ border-color: var(--color-blue-500);
132
+ border-radius: var(--border-focus-ring-border-radius);
133
+ border-width: var(--border-focus-ring-border-width);
134
+ border-style: var(--border-focus-ring-border-style);
135
+ inset: calc(-1 * (var(--border-focus-ring-border-width) * 2) - 1px);
136
+ }
137
+ }
138
+
139
+ .Button-module_fullWidth__qIkG6 {
140
+ width: 100%;
141
+ }
142
+
143
+ .Button-module_small__FYPwk {
144
+ --button-font-size: 0.75rem;
145
+ --button-line-height: 1rem;
146
+ --button-min-x-y: var(--spacing-32);
147
+ --icon-size: 16;
148
+ }
149
+
150
+ .Button-module_medium__4LOhQ {
151
+ --button-padding-x: calc(var(--spacing-20) - var(--button-border-width));
152
+ --button-padding-y: calc(var(--spacing-8) - var(--button-border-width));
153
+ --button-min-x-y: var(--spacing-40);
154
+ --icon-size: 24;
155
+ }
156
+
157
+ .Button-module_large__MjtVH {
158
+ --button-padding-x: calc(var(--spacing-24) - var(--button-border-width));
159
+ --button-padding-y: calc(var(--spacing-12) - var(--button-border-width));
160
+ --button-min-x-y: var(--spacing-48);
161
+ --icon-size: 24;
162
+ }
163
+
164
+ .Button-module_smallIconButton__4gN-i,
165
+ .Button-module_mediumIconButton__CEXv- {
166
+ --button-padding-x: calc(var(--spacing-8) - var(--button-border-width));
167
+ --button-padding-y: calc(var(--spacing-8) - var(--button-border-width));
168
+ }
169
+
170
+ .Button-module_largeIconButton__Apt33 {
171
+ --button-padding-x: calc(var(--spacing-12) - var(--button-border-width));
172
+ --button-padding-y: calc(var(--spacing-12) - var(--button-border-width));
173
+ }
174
+
175
+ .Button-module_secondary__Mmev0 {
176
+ --button-bg-color: var(--color-white);
177
+ --button-border-color: var(--color-gray-500);
178
+ --button-text-color: var(--color-purple-800);
179
+
180
+ &[data-hovered] {
181
+ --button-bg-color: var(--color-gray-200);
182
+ --button-border-color: var(--color-gray-600);
183
+ }
184
+
185
+ &[data-pressed] {
186
+ --button-bg-color: var(--color-gray-300);
187
+ --button-border-color: var(--color-black);
188
+ }
189
+
190
+ &[data-pending] {
191
+ --button-bg-color: var(--color-gray-300);
192
+ --button-border-color: var(--color-black);
193
+ }
194
+ }
195
+
196
+ .Button-module_tertiary__MJjKC {
197
+ --button-bg-color: transparent;
198
+ --button-border-color: transparent;
199
+ --button-text-color: var(--color-purple-800);
200
+
201
+ &[data-hovered] {
202
+ --button-bg-color: var(--color-gray-200);
203
+ --button-border-color: var(--color-gray-200);
204
+ }
205
+
206
+ &[data-pressed] {
207
+ --button-bg-color: var(--color-gray-300);
208
+ --button-border-color: var(--color-gray-300);
209
+ }
210
+
211
+ &[data-pending] {
212
+ --button-bg-color: var(--color-gray-300);
213
+ --button-border-color: var(--color-gray-300);
214
+ }
215
+ }
216
+
217
+ .Button-module_primaryReversed__m4kze,
218
+ .Button-module_secondaryReversed__Q435c,
219
+ .Button-module_tertiaryReversed__Q-UqR {
220
+ &[data-focus-visible]::after {
221
+ border-color: var(--color-blue-300);
222
+ }
223
+ }
224
+
225
+ .Button-module_primaryReversed__m4kze {
226
+ --button-bg-color: var(--color-white);
227
+ --button-border-color: var(--color-white);
228
+ --button-text-color: var(--color-purple-800);
229
+
230
+ &[data-hovered] {
231
+ --button-bg-color: var(--color-white);
232
+ --button-border-color: var(--color-white);
233
+ }
234
+
235
+ &[data-pressed] {
236
+ --button-bg-color: var(--color-white);
237
+ --button-border-color: var(--color-white);
238
+ }
239
+
240
+ &[data-pending] {
241
+ --button-bg-color: var(--color-white);
242
+ --button-border-color: var(--color-white);
243
+ }
244
+ }
245
+
246
+ .Button-module_secondaryReversed__Q435c {
247
+ --button-bg-color: transparent;
248
+ --button-border-color: var(--color-white);
249
+ --button-text-color: var(--color-white);
250
+
251
+ &[data-hovered] {
252
+ --button-bg-color: rgba(var(--color-white-rgb), 0.2);
253
+ --button-border-color: var(--color-white);
254
+ }
255
+
256
+ &[data-pressed] {
257
+ --button-bg-color: rgba(var(--color-white-rgb), 0.1);
258
+ --button-border-color: var(--color-white);
259
+ }
260
+
261
+ &[data-pending] {
262
+ --button-bg-color: rgba(var(--color-white-rgb), 0.1);
263
+ --button-border-color: var(--color-white);
264
+ }
265
+ }
266
+
267
+ .Button-module_tertiaryReversed__Q-UqR {
268
+ --button-bg-color: transparent;
269
+ --button-border-color: transparent;
270
+ --button-text-color: var(--color-white);
271
+
272
+ &[data-hovered] {
273
+ --button-bg-color: rgba(var(--color-white-rgb), 0.2);
274
+ --button-border-color: transparent;
275
+ }
276
+
277
+ &[data-pressed] {
278
+ --button-bg-color: rgba(var(--color-white-rgb), 0.1);
279
+ --button-border-color: transparent;
280
+ }
281
+
282
+ &[data-pending] {
283
+ --button-bg-color: rgba(var(--color-white-rgb), 0.1);
284
+ --button-border-color: transparent;
285
+ }
286
+ }
287
+
288
+ .Button-module_isDisabled__m1eE- {
289
+ --button-bg-color: var(--color-gray-400);
290
+ --button-border-color: var(--color-gray-400);
291
+ --button-text-color: var(--color-white);
292
+
293
+ &[data-hovered] {
294
+ --button-bg-color: var(--color-gray-400);
295
+ --button-border-color: var(--color-gray-400);
296
+ }
297
+ }
298
+
299
+ .Button-module_hideContentWidth__-E94d {
300
+ position: absolute;
301
+ left: 50%;
302
+ top: 50%;
303
+ transform: translate(-50%, -50%);
304
+ visibility: hidden;
305
+ }
306
+
307
+ .Button-module_retainContentWidth__b4IEC {
308
+ visibility: hidden;
309
+ }
310
+
311
+ .PendingContent-module_pendingContent__c4IFS {
312
+ display: inline-flex;
313
+ align-items: center;
314
+ gap: var(--button-pending-content-gap, var(--spacing-6));
315
+ }
316
+
317
+ .PendingContent-module_large__ypTxk {
318
+ --button-pending-content-gap: var(--spacing-8);
319
+ }
320
+
321
+ .PendingContent-module_centerSpinner__EYn7L {
322
+ position: absolute;
323
+ left: 50%;
324
+ top: 50%;
325
+ transform: translate(-50%, -50%);
326
+ }
327
+
328
+ .ButtonContent-module_buttonContent__v5mHZ {
329
+ display: inline-flex;
330
+ align-items: center;
331
+ gap: var(--button-icon-gap, var(--spacing-6));
332
+ }
333
+
334
+ .ButtonContent-module_large__mLOdb {
335
+ --button-icon-gap: var(--spacing-8);
336
+ }
337
+
338
+ .ButtonContent-module_buttonLabel__T5XAq {
339
+ display: inline-flex;
340
+ align-items: center;
341
+ }
342
+
343
+ .ButtonContent-module_buttonIcon__qkAX- {
344
+ display: inline-flex;
345
+ align-items: center;
346
+ }
347
+
348
+ .Focusable-module_focusableWrapper__NfuIi {
349
+ display: inline-flex;
350
+ }
75
351
  /** THIS IS AN AUTOGENERATED FILE **/
76
352
  /** THIS IS AN AUTOGENERATED FILE **/
77
353
  /** THIS IS AN AUTOGENERATED FILE **/
@@ -128,97 +404,6 @@
128
404
  opacity: 1;
129
405
  }
130
406
  }
131
- .Button-module_button__QOSYH {
132
- --button-min-height-width: var(--spacing-48);
133
- --button-padding-x: calc(
134
- var(--spacing-12) - var(--border-solid-border-width)
135
- );
136
- --button-padding-y: calc(
137
- var(--spacing-8) - var(--border-solid-border-width)
138
- );
139
- --button-icon-size: var(--spacing-24);
140
- appearance: none;
141
- background: transparent;
142
- color: inherit;
143
- font: inherit;
144
- margin: 0;
145
- border: none;
146
- border: var(--border-solid-border-width) var(--border-solid-border-style);
147
- border-radius: var(--border-solid-border-radius);
148
- box-sizing: border-box;
149
- display: inline-flex;
150
- align-items: center;
151
- justify-content: center;
152
- text-align: left;
153
- gap: var(--spacing-8);
154
- font-family: var(--typography-button-primary-font-family);
155
- font-weight: var(--typography-button-primary-font-weight);
156
- font-size: var(--typography-button-primary-font-size);
157
- line-height: var(--typography-button-primary-line-height);
158
- min-height: var(--button-min-height-width);
159
- min-width: var(--button-min-height-width);
160
- outline: none;
161
- position: relative;
162
- padding: var(--button-padding-y) var(--button-padding-x);
163
- -webkit-font-smoothing: antialiased;
164
- -moz-osx-font-smoothing: grayscale;
165
- }
166
- .Button-module_button__QOSYH[data-focus-visible]::after {
167
- content: "";
168
- position: absolute;
169
- background: transparent;
170
- border-color: var(--color-blue-500);
171
- border-radius: var(--border-focus-ring-border-radius);
172
- border-width: var(--border-focus-ring-border-width);
173
- border-style: var(--border-focus-ring-border-style);
174
- inset: calc(-1 * (var(--border-focus-ring-border-width) * 2 + 1px));
175
- }
176
- .Button-module_button__QOSYH svg {
177
- height: var(--button-icon-size);
178
- width: var(--button-icon-size);
179
- }
180
-
181
- .Button-module_default__gSx3e {
182
- border-color: var(--color-gray-500);
183
- color: var(--color-purple-800);
184
- }
185
- .Button-module_default__gSx3e[data-hovered], .Button-module_default__gSx3e[data-focus-visible], .Button-module_default__gSx3e[data-pressed] {
186
- background-color: var(--color-gray-200);
187
- border-color: var(--color-purple-800);
188
- }
189
- .Button-module_default__gSx3e[data-disabled] {
190
- opacity: 0.3;
191
- }
192
- .Button-module_default__gSx3e.Button-module_reversed__DT-Id {
193
- background-color: transparent;
194
- border-color: rgba(var(--color-white-rgb), 0.65);
195
- color: var(--color-white);
196
- }
197
- .Button-module_default__gSx3e.Button-module_reversed__DT-Id[data-hovered], .Button-module_default__gSx3e.Button-module_reversed__DT-Id[data-focus-visible] {
198
- background-color: rgba(var(--color-white-rgb), 0.1);
199
- border-color: var(--color-white);
200
- }
201
- .Button-module_default__gSx3e.Button-module_reversed__DT-Id[data-focus-visible]::after {
202
- border-color: var(--color-blue-300);
203
- }
204
- .Button-module_default__gSx3e.Button-module_reversed__DT-Id[data-disabled]::after {
205
- border-color: var(--color-gray-400);
206
- }
207
-
208
- .Button-module_small__S-t5B {
209
- --button-min-height-width: 2.5rem;
210
- --button-padding-x: calc(
211
- var(--spacing-8) - var(--border-solid-border-width)
212
- );
213
- --button-padding-y: calc(
214
- var(--spacing-8) - var(--border-solid-border-width)
215
- );
216
- --button-icon-size: var(--spacing-16);
217
- gap: var(--spacing-8);
218
- }
219
- .Focusable-module_focusableWrapper__NfuIi {
220
- display: inline-flex;
221
- }
222
407
  /** THIS IS AN AUTOGENERATED FILE **/
223
408
  /** THIS IS AN AUTOGENERATED FILE **/
224
409
  .OverlayArrow-module_overlayArrow__hoDyK {
@@ -1,11 +1,24 @@
1
+ import React from "react";
1
2
  import { ButtonProps as RACButtonProps } from "react-aria-components";
2
- export type ButtonVariants = "default";
3
- export type ButtonProps = RACButtonProps & {
3
+ import { ButtonSizes, ButtonVariants, PendingButtonProps } from "./types";
4
+ type ButtonBaseProps = Omit<RACButtonProps, "children"> & {
5
+ /** Used as the label for the button. */
6
+ children: RACButtonProps["children"];
7
+ /** Visually hides the Button's child content used as the label and the `pendingLabel`. Use for icon-only `Button`. @default "false" */
8
+ hasHiddenLabel?: boolean;
4
9
  /** The visual style of the button.
5
10
  * @default "default" */
6
11
  variant?: ButtonVariants;
7
12
  /** The visual size of the button. `medium` was formerly `regular`
8
13
  * @default "medium" */
9
- size?: "small" | "medium";
14
+ size?: ButtonSizes;
15
+ /** Renders an icon at the `iconPosition` provided. To the size scales with the button, we recommend using the `Icon` component from `"@kaizen/components/future"` */
16
+ icon?: JSX.Element;
17
+ /** Controls the position of the Icon passed in as props. @default "start" */
18
+ iconPosition?: "start" | "end";
19
+ /** Controls if the button inherits width from its parent. @default "false" */
20
+ isFullWidth?: boolean;
10
21
  };
11
- export declare const Button: ({ variant, className, size, children, ...otherProps }: ButtonProps) => JSX.Element;
22
+ export type ButtonProps = ButtonBaseProps & PendingButtonProps;
23
+ export declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
24
+ export {};
@@ -1 +1,2 @@
1
1
  export * from "./Button";
2
+ export * from "./types";
@@ -0,0 +1,11 @@
1
+ import { HTMLAttributes } from "react";
2
+ import { ButtonProps } from "../../Button";
3
+ type ButtonContentProps = {
4
+ size?: ButtonProps["size"];
5
+ icon?: ButtonProps["icon"];
6
+ iconPosition?: ButtonProps["iconPosition"];
7
+ hasHiddenLabel?: ButtonProps["hasHiddenLabel"];
8
+ } & HTMLAttributes<HTMLSpanElement>;
9
+ /** Renders the inner content of the button, handling icon and label visibility */
10
+ export declare const ButtonContent: ({ children, hasHiddenLabel, size, icon, iconPosition, className, ...restProps }: ButtonContentProps) => JSX.Element;
11
+ export {};
@@ -0,0 +1 @@
1
+ export * from "./ButtonContent";
@@ -0,0 +1,5 @@
1
+ import { ButtonSizes, PendingProps } from "../../types";
2
+ /** Renders the pending content of the button, handling pending label visibility and spinner positioning */
3
+ export declare const PendingContent: ({ pendingLabel, hasHiddenPendingLabel, size, }: PendingProps & {
4
+ size?: ButtonSizes;
5
+ }) => JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./PendingContent";
@@ -0,0 +1,2 @@
1
+ export * from "./PendingContent";
2
+ export * from "./ButtonContent";
@@ -0,0 +1,21 @@
1
+ export type ButtonVariants = "primary" | "secondary" | "tertiary";
2
+ export type ButtonSizes = "small" | "medium" | "large";
3
+ export type PendingPropsUndefined = {
4
+ isPending?: undefined;
5
+ /** Rendered as the child while `isPending` is `true`. This determines the accessible label for the Button while pending. */
6
+ pendingLabel?: never;
7
+ /** Visually hides the `pendingLabel` and renders the loading spinner. This will maintain the width of the Button's `children` to avoid layout shifts.
8
+ * @default false
9
+ */
10
+ hasHiddenPendingLabel?: never;
11
+ };
12
+ export type PendingProps = {
13
+ isPending: boolean;
14
+ /** Rendered as the child while `pendingLabel` is `true`. This determines the accessible label for the Button while pending. */
15
+ pendingLabel: string;
16
+ /** Visually Hides the `pendingLabel` and renders the loading spinner. This will maintain the width of the Button's `children` to avoid layout shifts.
17
+ * @default false
18
+ */
19
+ hasHiddenPendingLabel?: boolean;
20
+ };
21
+ export type PendingButtonProps = PendingProps | PendingPropsUndefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaizen/components",
3
- "version": "1.67.22",
3
+ "version": "1.68.0",
4
4
  "description": "Kaizen component library",
5
5
  "author": "Geoffrey Chong <geoff.chong@cultureamp.com>",
6
6
  "homepage": "https://cultureamp.design",