infinity-ui-elements 1.7.13 → 1.8.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 (43) hide show
  1. package/dist/components/Alert/Alert.d.ts +60 -0
  2. package/dist/components/Alert/Alert.d.ts.map +1 -0
  3. package/dist/components/Alert/Alert.stories.d.ts +16 -0
  4. package/dist/components/Alert/Alert.stories.d.ts.map +1 -0
  5. package/dist/components/Alert/index.d.ts +3 -0
  6. package/dist/components/Alert/index.d.ts.map +1 -0
  7. package/dist/components/Avatar/Avatar.d.ts +1 -1
  8. package/dist/components/Badge/Badge.d.ts +2 -2
  9. package/dist/components/Button/Button.d.ts +3 -3
  10. package/dist/components/Button/Button.d.ts.map +1 -1
  11. package/dist/components/ButtonGroup/ButtonGroup.d.ts +1 -1
  12. package/dist/components/Checkbox/Checkbox.d.ts +1 -1
  13. package/dist/components/Counter/Counter.d.ts +1 -1
  14. package/dist/components/Divider/Divider.d.ts +1 -1
  15. package/dist/components/Dropdown/Dropdown.d.ts +1 -1
  16. package/dist/components/Dropdown/Dropdown.stories.d.ts +60 -60
  17. package/dist/components/IconButton/IconButton.d.ts +22 -0
  18. package/dist/components/IconButton/IconButton.d.ts.map +1 -0
  19. package/dist/components/IconButton/IconButton.stories.d.ts +17 -0
  20. package/dist/components/IconButton/IconButton.stories.d.ts.map +1 -0
  21. package/dist/components/IconButton/index.d.ts +3 -0
  22. package/dist/components/IconButton/index.d.ts.map +1 -0
  23. package/dist/components/Link/Link.d.ts +3 -3
  24. package/dist/components/Link/Link.d.ts.map +1 -1
  25. package/dist/components/Pagination/Pagination.d.ts +1 -1
  26. package/dist/components/Radio/Radio.d.ts +1 -1
  27. package/dist/components/SearchableDropdown/SearchableDropdown.stories.d.ts +74 -74
  28. package/dist/components/Select/Select.d.ts +2 -2
  29. package/dist/components/Switch/Switch.d.ts +1 -1
  30. package/dist/components/TabItem/TabItem.d.ts +1 -1
  31. package/dist/components/Table/tableVariants.d.ts +3 -3
  32. package/dist/components/TextArea/TextArea.d.ts +2 -2
  33. package/dist/components/TextField/TextField.d.ts +2 -2
  34. package/dist/index.css +1 -1
  35. package/dist/index.d.ts +2 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.esm.js +930 -505
  38. package/dist/index.esm.js.map +1 -1
  39. package/dist/index.js +932 -503
  40. package/dist/index.js.map +1 -1
  41. package/dist/lib/icons.d.ts +3 -0
  42. package/dist/lib/icons.d.ts.map +1 -1
  43. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -3,10 +3,10 @@
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var classVarianceAuthority = require('class-variance-authority');
6
- var clsx = require('clsx');
7
- var tailwindMerge = require('tailwind-merge');
8
6
  var reactSlot = require('@radix-ui/react-slot');
9
7
  var reactSpinners = require('react-spinners');
8
+ var clsx = require('clsx');
9
+ var tailwindMerge = require('tailwind-merge');
10
10
  var lucideReact = require('lucide-react');
11
11
  var reactDom = require('react-dom');
12
12
  var reactTable = require('@tanstack/react-table');
@@ -30,6 +30,112 @@ function _interopNamespaceDefault(e) {
30
30
 
31
31
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
32
32
 
33
+ /**
34
+ * ==============================================
35
+ * HOW TO ADD A NEW ICON:
36
+ * ==============================================
37
+ *
38
+ * 1. Add your SVG file to: src/assets/icons/{iconName}.svg
39
+ *
40
+ * 2. Copy the SVG content from the file
41
+ *
42
+ * 3. Add it to the iconRegistry below:
43
+ * iconName: `<svg>...</svg>`,
44
+ *
45
+ * 4. Use it anywhere in your app:
46
+ * <Icon name="iconName" size={24} />
47
+ *
48
+ * The Icon component will automatically:
49
+ * - Replace hardcoded colors with currentColor
50
+ * - Allow you to control color via className or style
51
+ * - Resize based on the size prop
52
+ * ==============================================
53
+ */
54
+ /**
55
+ * Icon registry - maps icon names to their SVG content
56
+ * Add your icons here by copying the SVG content from your icon files
57
+ */
58
+ const iconRegistry = {
59
+ // Tick/Check icon
60
+ tick: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
61
+ <path d="M10.364 15.1924L19.5564 6L20.9706 7.41421L10.364 18.0208L4 11.6569L5.41422 10.2427L10.364 15.1924Z" fill="#081416"/>
62
+ </svg>`,
63
+ // Alias: check points to the same icon as tick
64
+ check: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
65
+ <path d="M10.364 15.1924L19.5564 6L20.9706 7.41421L10.364 18.0208L4 11.6569L5.41422 10.2427L10.364 15.1924Z" fill="#081416"/>
66
+ </svg>`,
67
+ add: `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
68
+ <path d="M12.9 11.0999L21 11.0997V12.8997L12.9 12.8999V21H11.1V12.8999L3.00004 12.9001L3 11.1001L11.1 11.0999L11.0999 3.00001L12.8999 3L12.9 11.0999Z" fill="#081416"/>
69
+ </svg>`,
70
+ // Info icon
71
+ info: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
72
+ <path d="M12 22.5C6.20101 22.5 1.5 17.7989 1.5 12C1.5 6.20101 6.20101 1.5 12 1.5C17.7989 1.5 22.5 6.20101 22.5 12C22.5 17.7989 17.7989 22.5 12 22.5ZM12 20.4C16.6392 20.4 20.4 16.6392 20.4 12C20.4 7.36081 16.6392 3.6 12 3.6C7.36081 3.6 3.6 7.36081 3.6 12C3.6 16.6392 7.36081 20.4 12 20.4ZM10.95 6.75H13.05V8.85H10.95V6.75ZM10.95 10.95H13.05V17.25H10.95V10.95Z" fill="#081416"/>
73
+ </svg>
74
+ `,
75
+ // Exclamation/Warning icon
76
+ exclamation: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
77
+ <path d="M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM13 17H11V15H13V17ZM13 13H11V7H13V13Z" fill="#081416"/>
78
+ </svg>`,
79
+ // Close/X icon
80
+ close: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
81
+ <path d="M18 6L6 18M6 6L18 18" stroke="#081416" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
82
+ </svg>`,
83
+ };
84
+ const Icon = ({ name, size = 24, className = "", style = {}, ...props }) => {
85
+ const svgContent = iconRegistry[name];
86
+ if (!svgContent) {
87
+ console.warn(`Icon "${String(name)}" not found in registry.\n` +
88
+ `Available icons: ${Object.keys(iconRegistry).join(", ")}`);
89
+ return null;
90
+ }
91
+ // Parse the SVG content
92
+ const parser = new DOMParser();
93
+ const svgDoc = parser.parseFromString(svgContent, "image/svg+xml");
94
+ const svgElement = svgDoc.querySelector("svg");
95
+ if (!svgElement) {
96
+ console.error(`Invalid SVG content for icon "${String(name)}"`);
97
+ return null;
98
+ }
99
+ // Get the viewBox for proper scaling
100
+ const viewBox = svgElement.getAttribute("viewBox") || "0 0 24 24";
101
+ // Get all SVG content as string and replace hardcoded colors with currentColor
102
+ let innerSVG = svgElement.innerHTML;
103
+ // Replace common hardcoded colors with currentColor
104
+ // This allows the icon to inherit text color from parent
105
+ innerSVG = innerSVG
106
+ .replace(/fill="[^"]*"/g, 'fill="currentColor"')
107
+ .replace(/stroke="[^"]*"/g, 'stroke="currentColor"');
108
+ return (jsxRuntime.jsx("svg", { width: size, height: size, viewBox: viewBox, className: className, style: style, xmlns: "http://www.w3.org/2000/svg", ...props, dangerouslySetInnerHTML: { __html: innerSVG } }));
109
+ };
110
+ /**
111
+ * Get all available icon names from the registry
112
+ * @returns Array of registered icon names
113
+ *
114
+ * @example
115
+ * ```tsx
116
+ * const icons = getAvailableIcons();
117
+ * console.log(icons); // ['tick', 'check', ...]
118
+ * ```
119
+ */
120
+ function getAvailableIcons() {
121
+ return Object.keys(iconRegistry);
122
+ }
123
+ /**
124
+ * Check if an icon exists in the registry
125
+ * @param name - Icon name to check
126
+ * @returns true if the icon exists
127
+ *
128
+ * @example
129
+ * ```tsx
130
+ * if (hasIcon('tick')) {
131
+ * // Icon exists
132
+ * }
133
+ * ```
134
+ */
135
+ function hasIcon(name) {
136
+ return name in iconRegistry;
137
+ }
138
+
33
139
  // Define patterns for custom classes that should be preserved
34
140
  // This approach is more scalable than hardcoding individual class names
35
141
  const CUSTOM_CLASS_PATTERNS = [
@@ -69,123 +175,12 @@ function cn(...inputs) {
69
175
  return clsx.clsx(mergedStandard, customClasses);
70
176
  }
71
177
 
72
- // Helper function to get the text utility class name
73
- function getTextClassName(variant = "body", size = "medium", weight = "regular", color = "default") {
74
- // Build the base class name
75
- let baseClass = `text-${variant}`;
76
- // Add size
77
- if (size) {
78
- baseClass += `-${size}`;
79
- }
80
- // Add weight
81
- if (weight) {
82
- baseClass += `-${weight}`;
83
- }
84
- // Add color class separately
85
- const colorClass = `text-color-${color}`;
86
- return `${baseClass} ${colorClass}`;
87
- }
88
- const Text = React__namespace.forwardRef(({ className, variant = "body", size = "medium", weight = "regular", color = "default", as = "p", children, ...props }, ref) => {
89
- const Component = as;
90
- const textClass = getTextClassName(variant, size, weight, color);
91
- return React__namespace.createElement(Component, {
92
- className: cn(textClass, className),
93
- ref,
94
- ...props,
95
- }, children);
96
- });
97
- Text.displayName = "Text";
98
-
99
- const inverseColorClasses = {
100
- a1: "bg-avatar-fill-a1-on-bg text-avatar-fill-a1-bg",
101
- a2: "bg-avatar-fill-a2-on-bg text-avatar-fill-a2-bg",
102
- a3: "bg-avatar-fill-a3-on-bg text-avatar-fill-a3-bg",
103
- a4: "bg-avatar-fill-a4-on-bg text-avatar-fill-a4-bg",
104
- a5: "bg-avatar-fill-a5-on-bg text-avatar-fill-a5-bg",
105
- };
106
- const avatarVariants = classVarianceAuthority.cva("inline-flex items-center justify-center font-medium text-center select-none", {
107
- variants: {
108
- color: {
109
- a1: "bg-avatar-fill-a1-bg text-avatar-fill-a1-on-bg",
110
- a2: "bg-avatar-fill-a2-bg text-avatar-fill-a2-on-bg",
111
- a3: "bg-avatar-fill-a3-bg text-avatar-fill-a3-on-bg",
112
- a4: "bg-avatar-fill-a4-bg text-avatar-fill-a4-on-bg",
113
- a5: "bg-avatar-fill-a5-bg text-avatar-fill-a5-on-bg",
114
- },
115
- size: {
116
- small: "h-[24px] w-[24px] text-body-medium-regular rounded-large",
117
- medium: "h-[32px] w-[32px] text-body-medium-regular rounded-xlarge",
118
- xlarge: "h-[36px] w-[36px] text-body-medium-regular rounded-xlarge",
119
- },
120
- },
121
- defaultVariants: {
122
- color: "a1",
123
- size: "medium",
124
- },
125
- });
126
- const statusVariants = classVarianceAuthority.cva("absolute flex items-center justify-center rounded-full border-2 border-surface-fill-neutral-intense", {
127
- variants: {
128
- size: {
129
- small: "h-5 w-5 -bottom-0.5 -right-0.5",
130
- medium: "h-6 w-6 -bottom-1 -right-1",
131
- xlarge: "h-6 w-6 -bottom-1 -right-1",
132
- },
133
- statusColor: {
134
- positive: "bg-action-fill-positive-default",
135
- negative: "bg-action-fill-negative-default",
136
- notice: "bg-action-fill-notice-default",
137
- info: "bg-action-fill-info-default",
138
- neutral: "bg-action-fill-neutral-default",
139
- },
140
- },
141
- defaultVariants: {
142
- size: "medium",
143
- statusColor: "notice",
144
- },
145
- });
146
- const Avatar = React__namespace.forwardRef(({ className, appearance = "default", color, size, children, src, alt, showStatus = false, statusColor = "notice", statusIcon, label, trailingComponent, containerClassName, ...props }, ref) => {
147
- const [imageError, setImageError] = React__namespace.useState(false);
148
- const handleImageError = () => {
149
- setImageError(true);
150
- };
151
- const getStatusIconSize = () => {
152
- switch (size) {
153
- case "small":
154
- return "h-3.5 w-3.5";
155
- case "medium":
156
- return "h-4 w-4";
157
- default:
158
- return "h-4 w-4";
159
- }
160
- };
161
- const getTextSize = () => {
162
- switch (size) {
163
- case "small":
164
- return "small";
165
- case "medium":
166
- return "medium";
167
- default:
168
- return "medium";
169
- }
170
- };
171
- const resolvedColor = color ?? "a1";
172
- const avatarElement = (jsxRuntime.jsxs("div", { className: "relative inline-block", children: [jsxRuntime.jsx("div", { className: cn(avatarVariants({ color: resolvedColor, size }), appearance === "inverse"
173
- ? inverseColorClasses[resolvedColor]
174
- : undefined, className), ...props, children: src && !imageError ? (jsxRuntime.jsx("img", { src: src, alt: alt || "Avatar", className: cn("h-full w-full object-cover", size === "small" ? "rounded-large" : "rounded-xlarge"), onError: handleImageError })) : (children) }), showStatus && (jsxRuntime.jsx("div", { className: cn(statusVariants({ size, statusColor })), children: statusIcon && (jsxRuntime.jsx("span", { className: cn("text-action-ink-on-primary-normal", getStatusIconSize()), children: statusIcon })) }))] }));
175
- // If no label or trailing component, return just the avatar
176
- if (!label && !trailingComponent) {
177
- return jsxRuntime.jsx("div", { ref: ref, children: avatarElement });
178
- }
179
- // Otherwise, return avatar with label and/or trailing component
180
- return (jsxRuntime.jsxs("div", { ref: ref, className: cn("inline-flex items-center gap-3", containerClassName), children: [avatarElement, label && (jsxRuntime.jsx(Text, { variant: "body", size: getTextSize(), weight: "medium", color: "default", as: "span", children: label })), trailingComponent && (jsxRuntime.jsx("span", { className: "ml-auto", children: trailingComponent }))] }));
181
- });
182
- Avatar.displayName = "Avatar";
183
-
184
- const badgeVariants = classVarianceAuthority.cva("inline-flex items-center whitespace-nowrap transition-colors", {
178
+ const buttonVariants = classVarianceAuthority.cva("items-center gap-3 justify-center whitespace-nowrap ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none", {
185
179
  variants: {
186
180
  variant: {
187
- light: "",
188
- filled: "",
181
+ primary: "bg-action-fill-primary-default text-action-ink-on-primary-normal hover:bg-action-fill-primary-hover",
182
+ secondary: "border",
183
+ tertiary: "hover:bg-accent hover:text-accent-foreground",
189
184
  },
190
185
  color: {
191
186
  primary: "",
@@ -194,171 +189,45 @@ const badgeVariants = classVarianceAuthority.cva("inline-flex items-center white
194
189
  notice: "",
195
190
  info: "",
196
191
  neutral: "",
192
+ white: "",
197
193
  },
198
194
  size: {
199
- small: "px-2 h-[var(--size-20)] gap-2 rounded-large text-body-small-medium",
200
- medium: "px-3 h-[var(--size-24)] gap-3 rounded-large text-body-medium-medium",
201
- large: "px-4 h-[var(--size-28)] gap-3 rounded-xlarge text-body-large-medium",
195
+ xsmall: "md:h-[28px] px-3 rounded-medium text-body-small-medium",
196
+ small: "md:h-[32px] px-4 rounded-medium text-body-small-medium",
197
+ medium: "md:h-[36px] px-5 py-2 rounded-large text-body-medium-medium",
198
+ large: "md:h-[44px] px-6 rounded-large text-body-large-medium",
199
+ },
200
+ isIconOnly: {
201
+ true: "aspect-square p-0",
202
+ false: "",
203
+ },
204
+ isLoading: {
205
+ true: "cursor-not-allowed",
206
+ false: "",
207
+ },
208
+ isDisabled: {
209
+ true: "cursor-not-allowed",
210
+ false: "cursor-pointer",
211
+ },
212
+ isFullWidth: {
213
+ true: "flex w-full",
214
+ false: "flex w-fit",
202
215
  },
203
216
  },
204
217
  compoundVariants: [
205
- // Light variant colors
218
+ // Primary variant colors
206
219
  {
207
- variant: "light",
220
+ variant: "primary",
208
221
  color: "primary",
209
- class: "bg-action-fill-primary-faded text-action-ink-primary-normal",
222
+ class: `bg-action-fill-primary-default text-action-ink-on-primary-normal
223
+ hover:bg-action-fill-primary-hover
224
+ disabled:bg-action-fill-primary-disabled
225
+ disabled:text-action-ink-primary-disabled,
226
+ active:bg-action-fill-primary-activated
227
+ `,
210
228
  },
211
229
  {
212
- variant: "light",
213
- color: "positive",
214
- class: "bg-action-fill-positive-faded text-action-ink-positive-normal",
215
- },
216
- {
217
- variant: "light",
218
- color: "negative",
219
- class: "bg-action-fill-negative-faded text-action-ink-negative-normal",
220
- },
221
- {
222
- variant: "light",
223
- color: "notice",
224
- class: "bg-action-fill-notice-faded text-action-ink-notice-normal",
225
- },
226
- {
227
- variant: "light",
228
- color: "info",
229
- class: "bg-action-fill-info-faded text-action-ink-info-normal",
230
- },
231
- {
232
- variant: "light",
233
- color: "neutral",
234
- class: "bg-action-fill-neutral-faded text-action-ink-neutral-normal",
235
- },
236
- // Filled variant colors
237
- {
238
- variant: "filled",
239
- color: "primary",
240
- class: "bg-action-fill-primary-default text-action-ink-on-primary-normal",
241
- },
242
- {
243
- variant: "filled",
244
- color: "positive",
245
- class: "bg-action-fill-positive-default text-action-ink-on-primary-normal",
246
- },
247
- {
248
- variant: "filled",
249
- color: "negative",
250
- class: "bg-action-fill-negative-default text-action-ink-on-primary-normal",
251
- },
252
- {
253
- variant: "filled",
254
- color: "notice",
255
- class: "bg-action-fill-notice-default text-action-ink-on-primary-normal",
256
- },
257
- {
258
- variant: "filled",
259
- color: "info",
260
- class: "bg-action-fill-info-default text-action-ink-on-primary-normal",
261
- },
262
- {
263
- variant: "filled",
264
- color: "neutral",
265
- class: "bg-action-fill-neutral-default text-action-ink-on-primary-normal",
266
- },
267
- ],
268
- defaultVariants: {
269
- variant: "light",
270
- color: "info",
271
- size: "medium",
272
- },
273
- });
274
- const Badge = React__namespace.forwardRef(({ className, variant, size, color, showDot = false, children, ...props }, ref) => {
275
- const getDotColor = () => {
276
- if (variant === "filled") {
277
- return "bg-action-ink-on-primary-normal";
278
- }
279
- // Light variant - use the corresponding action color
280
- switch (color) {
281
- case "primary":
282
- return "bg-action-fill-primary-default";
283
- case "positive":
284
- return "bg-action-fill-positive-default";
285
- case "negative":
286
- return "bg-action-fill-negative-default";
287
- case "notice":
288
- return "bg-action-fill-notice-default";
289
- case "info":
290
- return "bg-action-fill-info-default";
291
- case "neutral":
292
- return "bg-action-fill-neutral-default";
293
- default:
294
- return "bg-action-fill-info-default";
295
- }
296
- };
297
- const getDotSize = () => {
298
- if (size === "small") {
299
- return "h-2 w-2";
300
- }
301
- if (size === "medium") {
302
- return "h-[6px] w-[6px]";
303
- }
304
- return "h-3 w-3";
305
- };
306
- return (jsxRuntime.jsxs("div", { ref: ref, className: cn(badgeVariants({ variant, size, color }), className), ...props, children: [showDot && (jsxRuntime.jsx("span", { className: cn("rounded-full", getDotColor(), getDotSize()), "aria-hidden": "true" })), children] }));
307
- });
308
- Badge.displayName = "Badge";
309
-
310
- const buttonVariants = classVarianceAuthority.cva("items-center gap-3 justify-center whitespace-nowrap ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none", {
311
- variants: {
312
- variant: {
313
- primary: "bg-action-fill-primary-default text-action-ink-on-primary-normal hover:bg-action-fill-primary-hover",
314
- secondary: "border",
315
- tertiary: "hover:bg-accent hover:text-accent-foreground",
316
- },
317
- color: {
318
- primary: "",
319
- positive: "",
320
- negative: "",
321
- notice: "",
322
- info: "",
323
- neutral: "",
324
- },
325
- size: {
326
- xsmall: "md:h-[28px] px-3 rounded-medium text-body-small-medium",
327
- small: "md:h-[32px] px-4 rounded-medium text-body-small-medium",
328
- medium: "md:h-[36px] px-5 py-2 rounded-large text-body-medium-medium",
329
- large: "md:h-[44px] px-6 rounded-large text-body-large-medium",
330
- },
331
- isIconOnly: {
332
- true: "aspect-square p-0",
333
- false: "",
334
- },
335
- isLoading: {
336
- true: "cursor-not-allowed",
337
- false: "",
338
- },
339
- isDisabled: {
340
- true: "cursor-not-allowed",
341
- false: "cursor-pointer",
342
- },
343
- isFullWidth: {
344
- true: "flex w-full",
345
- false: "flex w-fit",
346
- },
347
- },
348
- compoundVariants: [
349
- // Primary variant colors
350
- {
351
- variant: "primary",
352
- color: "primary",
353
- class: `bg-action-fill-primary-default text-action-ink-on-primary-normal
354
- hover:bg-action-fill-primary-hover
355
- disabled:bg-action-fill-primary-disabled
356
- disabled:text-action-ink-primary-disabled,
357
- active:bg-action-fill-primary-activated
358
- `,
359
- },
360
- {
361
- variant: "primary",
230
+ variant: "primary",
362
231
  color: "positive",
363
232
  class: `bg-action-fill-positive-default text-action-ink-on-primary-normal
364
233
  hover:bg-action-fill-positive-hover
@@ -407,6 +276,16 @@ const buttonVariants = classVarianceAuthority.cva("items-center gap-3 justify-ce
407
276
  active:bg-action-fill-neutral-activated
408
277
  `,
409
278
  },
279
+ {
280
+ variant: "primary",
281
+ color: "white",
282
+ class: `bg-action-fill-white-default text-action-ink-neutral-subtle
283
+ hover:bg-action-fill-white-hover
284
+ disabled:bg-action-fill-white-disabled
285
+ disabled:text-action-ink-neutral-disabled
286
+ active:bg-action-fill-white-activated
287
+ `,
288
+ },
410
289
  // Secondary variant colors
411
290
  {
412
291
  variant: "secondary",
@@ -495,6 +374,19 @@ const buttonVariants = classVarianceAuthority.cva("items-center gap-3 justify-ce
495
374
  active:bg-action-fill-neutral-faded-activated
496
375
  `,
497
376
  },
377
+ {
378
+ variant: "secondary",
379
+ color: "white",
380
+ class: `border-action-outline-white-faded
381
+ text-action-ink-on-primary-subtle
382
+ hover:border-action-outline-white-faded-hover
383
+ hover:bg-action-fill-white-faded-hover
384
+ disabled:text-surface-ink-white-disabled
385
+ disabled:border-action-outline-white-disabled
386
+ active:border-action-outline-white-faded-activated
387
+ active:bg-action-fill-white-faded-activated
388
+ `,
389
+ },
498
390
  // Tertiary variant colors
499
391
  {
500
392
  variant: "tertiary",
@@ -550,6 +442,16 @@ const buttonVariants = classVarianceAuthority.cva("items-center gap-3 justify-ce
550
442
  active:bg-action-fill-neutral-faded-activated
551
443
  `,
552
444
  },
445
+ {
446
+ variant: "tertiary",
447
+ color: "white",
448
+ class: `text-action-ink-white-subtle
449
+ hover:bg-action-white-faded-hover
450
+ disabled:text-action-ink-white-disabled
451
+ disabled:bg-action-fill-white-disabled
452
+ active:bg-action-white-faded-activated
453
+ `,
454
+ },
553
455
  // Icon only sizing
554
456
  {
555
457
  isIconOnly: true,
@@ -584,7 +486,13 @@ const buttonVariants = classVarianceAuthority.cva("items-center gap-3 justify-ce
584
486
  const Button = React__namespace.forwardRef(({ className, variant = "primary", color = "primary", size, isIconOnly, isLoading, asChild = false, leadingIcon, trailingIcon, isFullWidth = false, children, disabled, ...props }, ref) => {
585
487
  const Comp = asChild ? reactSlot.Slot : "button";
586
488
  const isDisabled = disabled || isLoading || false;
587
- const buttonContent = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [isLoading && !isIconOnly && (jsxRuntime.jsx(reactSpinners.PulseLoader, { color: `var(--color-action-ink-${color}-normal)`, size: 10 })), isLoading && isIconOnly && (jsxRuntime.jsx(reactSpinners.ClipLoader, { color: `var(--color-action-ink-${color}-normal)`, size: 20 })), !isLoading && leadingIcon && (jsxRuntime.jsx("span", { className: "mr-2", children: leadingIcon })), !isIconOnly && !isLoading && children, isIconOnly && !isLoading && children, !isLoading && trailingIcon && jsxRuntime.jsx("span", { children: trailingIcon })] }));
489
+ const getLoaderColor = () => {
490
+ if (color === "white") {
491
+ return "var(--color-surface-ink-neutral-normal)";
492
+ }
493
+ return `var(--color-action-ink-${color}-normal)`;
494
+ };
495
+ const buttonContent = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [isLoading && !isIconOnly && (jsxRuntime.jsx(reactSpinners.PulseLoader, { color: getLoaderColor(), size: 10 })), isLoading && isIconOnly && (jsxRuntime.jsx(reactSpinners.ClipLoader, { color: getLoaderColor(), size: 20 })), !isLoading && leadingIcon && (jsxRuntime.jsx("span", { className: "mr-2", children: leadingIcon })), !isIconOnly && !isLoading && children, isIconOnly && !isLoading && children, !isLoading && trailingIcon && jsxRuntime.jsx("span", { children: trailingIcon })] }));
588
496
  return (jsxRuntime.jsx(Comp, { className: cn(buttonVariants({
589
497
  variant,
590
498
  color,
@@ -595,7 +503,752 @@ const Button = React__namespace.forwardRef(({ className, variant = "primary", co
595
503
  isFullWidth,
596
504
  }), className), ref: ref, disabled: isDisabled, ...props, children: buttonContent }));
597
505
  });
598
- Button.displayName = "Button";
506
+ Button.displayName = "Button";
507
+
508
+ const iconButtonVariants = classVarianceAuthority.cva("inline-flex items-center justify-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none p-0 border-0 bg-transparent", {
509
+ variants: {
510
+ color: {
511
+ primary: "",
512
+ positive: "",
513
+ negative: "",
514
+ notice: "",
515
+ info: "",
516
+ neutral: "",
517
+ white: "",
518
+ },
519
+ size: {
520
+ xsmall: "",
521
+ small: "",
522
+ medium: "",
523
+ large: "",
524
+ },
525
+ isLoading: {
526
+ true: "cursor-not-allowed",
527
+ false: "",
528
+ },
529
+ isDisabled: {
530
+ true: "cursor-not-allowed",
531
+ false: "cursor-pointer",
532
+ },
533
+ },
534
+ defaultVariants: {
535
+ color: "primary",
536
+ size: "medium",
537
+ isLoading: false,
538
+ },
539
+ });
540
+ const IconButton = React__namespace.forwardRef(({ className, color = "primary", size = "medium", isLoading, asChild = false, icon, iconElement, disabled, ...props }, ref) => {
541
+ const Comp = asChild ? reactSlot.Slot : "button";
542
+ const isDisabled = disabled || isLoading || false;
543
+ const getLoaderColor = () => {
544
+ if (color === "white") {
545
+ return "var(--color-surface-ink-neutral-normal)";
546
+ }
547
+ return `var(--color-action-ink-${color}-normal)`;
548
+ };
549
+ const getIconSize = () => {
550
+ switch (size) {
551
+ case "xsmall":
552
+ return 16;
553
+ case "small":
554
+ return 18;
555
+ case "medium":
556
+ return 20;
557
+ case "large":
558
+ return 24;
559
+ default:
560
+ return 20;
561
+ }
562
+ };
563
+ const getIconColorClass = () => {
564
+ // Color classes with normal, hover, focus, and disabled states
565
+ const colorMap = {
566
+ primary: "text-action-ink-primary-normal hover:text-action-ink-primary-subtle focus-visible:text-action-ink-primary-subtle disabled:text-action-ink-primary-muted",
567
+ positive: "text-action-ink-positive-normal hover:text-action-ink-positive-subtle focus-visible:text-action-ink-positive-subtle disabled:text-action-ink-positive-muted",
568
+ negative: "text-action-ink-negative-normal hover:text-action-ink-negative-subtle focus-visible:text-action-ink-negative-subtle disabled:text-action-ink-negative-muted",
569
+ notice: "text-action-ink-notice-normal hover:text-action-ink-notice-subtle focus-visible:text-action-ink-notice-subtle disabled:text-action-ink-notice-muted",
570
+ info: "text-action-ink-info-normal hover:text-action-ink-info-subtle focus-visible:text-action-ink-info-subtle disabled:text-action-ink-info-muted",
571
+ neutral: "text-action-ink-neutral-normal hover:text-action-ink-neutral-subtle focus-visible:text-action-ink-neutral-subtle disabled:text-action-ink-neutral-muted",
572
+ white: "text-surface-ink-white-subtle hover:text-surface-ink-white-normal focus-visible:text-surface-ink-white-normal disabled:text-surface-ink-white-muted",
573
+ };
574
+ return colorMap[color] || colorMap.primary;
575
+ };
576
+ const buttonContent = (jsxRuntime.jsx(jsxRuntime.Fragment, { children: isLoading ? (jsxRuntime.jsx(reactSpinners.ClipLoader, { color: getLoaderColor(), size: getIconSize() })) : icon ? (jsxRuntime.jsx(Icon, { name: icon, size: getIconSize(), className: getIconColorClass() })) : iconElement ? (jsxRuntime.jsx("span", { className: getIconColorClass(), children: iconElement })) : null }));
577
+ return (jsxRuntime.jsx(Comp, { className: cn(iconButtonVariants({
578
+ color,
579
+ size,
580
+ isLoading,
581
+ isDisabled,
582
+ }), className), ref: ref, disabled: isDisabled, ...props, children: buttonContent }));
583
+ });
584
+ IconButton.displayName = "IconButton";
585
+
586
+ const linkVariants = classVarianceAuthority.cva("inline-flex items-center gap-1 whitespace-nowrap transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none decoration-1 underline-offset-4", {
587
+ variants: {
588
+ type: {
589
+ anchor: "hover:underline",
590
+ action: "no-underline cursor-pointer",
591
+ },
592
+ color: {
593
+ primary: "",
594
+ positive: "",
595
+ negative: "",
596
+ notice: "",
597
+ info: "",
598
+ neutral: "",
599
+ white: "",
600
+ },
601
+ size: {
602
+ xsmall: "text-body-xsmall-medium gap-1",
603
+ small: "text-body-small-medium gap-1",
604
+ medium: "text-body-medium-medium gap-1.5",
605
+ large: "text-body-large-medium gap-1.5",
606
+ },
607
+ isIconOnly: {
608
+ true: "no-underline",
609
+ false: "",
610
+ },
611
+ isDisabled: {
612
+ true: "cursor-not-allowed opacity-50",
613
+ false: "cursor-pointer",
614
+ },
615
+ },
616
+ compoundVariants: [
617
+ // Primary color variants
618
+ {
619
+ color: "primary",
620
+ class: `text-action-ink-primary-normal
621
+ hover:text-action-ink-primary-subtle
622
+ hover:decoration-action-outline-primary-hover
623
+ disabled:text-action-ink-primary-disabled
624
+ focus:text-action-ink-primary-hover
625
+ `,
626
+ },
627
+ // Positive color variants
628
+ {
629
+ color: "positive",
630
+ class: `text-action-ink-positive-normal
631
+ hover:text-action-ink-positive-subtle
632
+ hover:decoration-action-outline-positive-hover
633
+ hover:text-action-ink-positive-hover
634
+ disabled:text-action-ink-positive-disabled
635
+ focus:text-action-ink-positive-hover
636
+ `,
637
+ },
638
+ // Negative color variants
639
+ {
640
+ color: "negative",
641
+ class: `text-action-ink-negative-normal
642
+ hover:text-action-ink-negative-subtle
643
+ hover:decoration-action-outline-negative-hover
644
+ hover:text-action-ink-negative-hover
645
+ disabled:text-action-ink-negative-disabled
646
+ focus:text-action-ink-negative-hover
647
+ `,
648
+ },
649
+ // Notice color variants
650
+ {
651
+ color: "notice",
652
+ class: `text-action-ink-notice-normal
653
+ hover:text-action-ink-notice-subtle
654
+ hover:decoration-action-outline-notice-hover
655
+ hover:text-action-ink-notice-hover
656
+ disabled:text-action-ink-notice-disabled
657
+ focus:text-action-ink-notice-hover
658
+ `,
659
+ },
660
+ // Info color variants
661
+ {
662
+ color: "info",
663
+ class: `text-action-ink-info-normal
664
+ hover:text-action-ink-info-subtle
665
+ hover:decoration-action-outline-info-hover
666
+ hover:text-action-ink-info-hover
667
+ disabled:text-action-ink-info-disabled
668
+ focus:text-action-ink-info-hover
669
+ `,
670
+ },
671
+ // Neutral color variants
672
+ {
673
+ color: "neutral",
674
+ class: `text-action-ink-neutral-normal
675
+ hover:text-action-ink-neutral-subtle
676
+ hover:decoration-action-outline-neutral-hover
677
+ hover:text-action-ink-neutral-hover
678
+ disabled:text-action-ink-neutral-disabled
679
+ focus:text-action-ink-neutral-hover
680
+ `,
681
+ },
682
+ {
683
+ color: "white",
684
+ class: `text-action-ink-white-subtle
685
+ hover:text-action-ink-white-subtle
686
+ hover:decoration-action-outline-white-hover
687
+ hover:text-action-ink-white-hover
688
+ disabled:text-action-ink-white-disabled
689
+ focus:text-action-ink-white-hover
690
+ `,
691
+ },
692
+ ],
693
+ defaultVariants: {
694
+ type: "anchor",
695
+ color: "primary",
696
+ size: "medium",
697
+ isIconOnly: false,
698
+ isDisabled: false,
699
+ },
700
+ });
701
+ const Link = React__namespace.forwardRef(({ className, type = "anchor", color = "primary", size = "medium", isIconOnly = false, isDisabled = false, asChild = false, showIcon = false, icon, leadingIcon, trailingIcon, children, onClick, ...props }, ref) => {
702
+ const Comp = asChild ? reactSlot.Slot : "a";
703
+ const handleClick = (e) => {
704
+ if (isDisabled) {
705
+ e.preventDefault();
706
+ return;
707
+ }
708
+ onClick?.(e);
709
+ };
710
+ // Icon size based on link size
711
+ const iconSize = {
712
+ xsmall: 12,
713
+ small: 14,
714
+ medium: 16,
715
+ large: 18,
716
+ }[size];
717
+ // Determine what to show as trailing icon
718
+ // Priority: trailingIcon > (showIcon && icon) > (showIcon && default ExternalLink)
719
+ const finalTrailingIcon = trailingIcon || (showIcon && (icon || jsxRuntime.jsx(lucideReact.ExternalLink, { size: iconSize })));
720
+ const linkContent = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [leadingIcon && !isIconOnly && (jsxRuntime.jsx("span", { className: "inline-flex items-center", children: leadingIcon })), !isIconOnly && children, isIconOnly && children, finalTrailingIcon && !isIconOnly && (jsxRuntime.jsx("span", { className: "inline-flex items-center", children: finalTrailingIcon })), isIconOnly &&
721
+ (leadingIcon || finalTrailingIcon || (jsxRuntime.jsx(lucideReact.ExternalLink, { size: iconSize })))] }));
722
+ return (jsxRuntime.jsx(Comp, { className: cn(linkVariants({
723
+ type,
724
+ color,
725
+ size,
726
+ isIconOnly,
727
+ isDisabled,
728
+ }), className), ref: ref, onClick: handleClick, "aria-disabled": isDisabled, tabIndex: isDisabled ? -1 : undefined, ...props, children: linkContent }));
729
+ });
730
+ Link.displayName = "Link";
731
+
732
+ const alertVariants = classVarianceAuthority.cva("relative flex gap-4 p-4 rounded-large transition-colors", {
733
+ variants: {
734
+ emphasis: {
735
+ subtle: "",
736
+ intense: "",
737
+ },
738
+ intent: {
739
+ positive: "",
740
+ negative: "",
741
+ notice: "",
742
+ info: "",
743
+ neutral: "",
744
+ },
745
+ },
746
+ compoundVariants: [
747
+ // Subtle emphasis
748
+ {
749
+ emphasis: "subtle",
750
+ intent: "positive",
751
+ class: "bg-feedback-fill-positive-subtle",
752
+ },
753
+ {
754
+ emphasis: "subtle",
755
+ intent: "negative",
756
+ class: "bg-feedback-fill-negative-subtle",
757
+ },
758
+ {
759
+ emphasis: "subtle",
760
+ intent: "notice",
761
+ class: "bg-feedback-fill-notice-subtle",
762
+ },
763
+ {
764
+ emphasis: "subtle",
765
+ intent: "info",
766
+ class: "bg-feedback-fill-info-subtle",
767
+ },
768
+ {
769
+ emphasis: "subtle",
770
+ intent: "neutral",
771
+ class: "bg-feedback-fill-neutral-subtle",
772
+ },
773
+ // Intense emphasis
774
+ {
775
+ emphasis: "intense",
776
+ intent: "positive",
777
+ class: "bg-feedback-fill-positive-intense",
778
+ },
779
+ {
780
+ emphasis: "intense",
781
+ intent: "negative",
782
+ class: "bg-feedback-fill-negative-intense",
783
+ },
784
+ {
785
+ emphasis: "intense",
786
+ intent: "notice",
787
+ class: "bg-feedback-fill-notice-intense",
788
+ },
789
+ {
790
+ emphasis: "intense",
791
+ intent: "info",
792
+ class: "bg-feedback-fill-info-intense",
793
+ },
794
+ {
795
+ emphasis: "intense",
796
+ intent: "neutral",
797
+ class: "bg-feedback-fill-neutral-intense",
798
+ },
799
+ ],
800
+ defaultVariants: {
801
+ emphasis: "subtle",
802
+ intent: "info",
803
+ },
804
+ });
805
+ const alertIconVariants = classVarianceAuthority.cva("flex-shrink-0 rounded-full flex items-center justify-center mt-1", {
806
+ variants: {
807
+ emphasis: {
808
+ subtle: "",
809
+ intense: "text-white",
810
+ },
811
+ intent: {
812
+ positive: "",
813
+ negative: "",
814
+ notice: "",
815
+ info: "",
816
+ neutral: "",
817
+ },
818
+ },
819
+ compoundVariants: [
820
+ // Subtle emphasis - colored backgrounds with white icons
821
+ {
822
+ emphasis: "subtle",
823
+ intent: "positive",
824
+ class: "text-action-ink-positive-normal",
825
+ },
826
+ {
827
+ emphasis: "subtle",
828
+ intent: "negative",
829
+ class: " text-action-ink-negative-normal",
830
+ },
831
+ {
832
+ emphasis: "subtle",
833
+ intent: "notice",
834
+ class: " text-action-ink-notice-normal",
835
+ },
836
+ {
837
+ emphasis: "subtle",
838
+ intent: "info",
839
+ class: " text-action-ink-info-normal",
840
+ },
841
+ {
842
+ emphasis: "subtle",
843
+ intent: "neutral",
844
+ class: " text-action-ink-neutral-normal",
845
+ },
846
+ // Intense emphasis - white backgrounds with colored icons
847
+ {
848
+ emphasis: "intense",
849
+ intent: "positive",
850
+ class: " text-action-ink-on-primary-normal",
851
+ },
852
+ {
853
+ emphasis: "intense",
854
+ intent: "negative",
855
+ class: " text-action-ink-on-primary-normal",
856
+ },
857
+ {
858
+ emphasis: "intense",
859
+ intent: "notice",
860
+ class: " text-action-ink-on-primary-normal",
861
+ },
862
+ {
863
+ emphasis: "intense",
864
+ intent: "info",
865
+ class: " text-action-fill-info-default",
866
+ },
867
+ {
868
+ emphasis: "intense",
869
+ intent: "neutral",
870
+ class: " text-action-fill-neutral-default",
871
+ },
872
+ ],
873
+ defaultVariants: {
874
+ emphasis: "subtle",
875
+ intent: "info",
876
+ },
877
+ });
878
+ const alertTextVariants = classVarianceAuthority.cva("", {
879
+ variants: {
880
+ emphasis: {
881
+ subtle: "",
882
+ intense: "",
883
+ },
884
+ intent: {
885
+ positive: "",
886
+ negative: "",
887
+ notice: "",
888
+ info: "",
889
+ neutral: "",
890
+ },
891
+ },
892
+ compoundVariants: [
893
+ // Subtle emphasis - dark text
894
+ {
895
+ emphasis: "subtle",
896
+ intent: "positive",
897
+ class: "text-surface-ink-neutral-normal",
898
+ },
899
+ {
900
+ emphasis: "subtle",
901
+ intent: "negative",
902
+ class: "text-surface-ink-neutral-normal",
903
+ },
904
+ {
905
+ emphasis: "subtle",
906
+ intent: "notice",
907
+ class: "text-surface-ink-neutral-normal",
908
+ },
909
+ {
910
+ emphasis: "subtle",
911
+ intent: "info",
912
+ class: "text-surface-ink-neutral-normal",
913
+ },
914
+ {
915
+ emphasis: "subtle",
916
+ intent: "neutral",
917
+ class: "text-surface-ink-neutral-normal",
918
+ },
919
+ // Intense emphasis - white text
920
+ {
921
+ emphasis: "intense",
922
+ intent: "positive",
923
+ class: "text-action-ink-on-primary-normal",
924
+ },
925
+ {
926
+ emphasis: "intense",
927
+ intent: "negative",
928
+ class: "text-action-ink-on-primary-normal",
929
+ },
930
+ {
931
+ emphasis: "intense",
932
+ intent: "notice",
933
+ class: "text-action-ink-on-primary-normal",
934
+ },
935
+ {
936
+ emphasis: "intense",
937
+ intent: "info",
938
+ class: "text-action-ink-on-primary-normal",
939
+ },
940
+ {
941
+ emphasis: "intense",
942
+ intent: "neutral",
943
+ class: "text-action-ink-on-primary-normal",
944
+ },
945
+ ],
946
+ defaultVariants: {
947
+ emphasis: "subtle",
948
+ intent: "info",
949
+ },
950
+ });
951
+ const getDefaultIcon = (intent, emphasis) => {
952
+ const iconSize = 16;
953
+ switch (emphasis) {
954
+ case "intense":
955
+ return (jsxRuntime.jsx(Icon, { name: "info", size: iconSize, className: "text-white", "aria-hidden": "true" }));
956
+ default:
957
+ return jsxRuntime.jsx(Icon, { name: "info", size: iconSize, "aria-hidden": "true" });
958
+ }
959
+ };
960
+ const getButtonColor = (intent) => {
961
+ switch (intent) {
962
+ case "positive":
963
+ return "positive";
964
+ case "negative":
965
+ return "negative";
966
+ case "notice":
967
+ return "notice";
968
+ case "info":
969
+ return "info";
970
+ case "neutral":
971
+ return "neutral";
972
+ default:
973
+ return "neutral";
974
+ }
975
+ };
976
+ const getActionButton = (actionButtonText, onActionButtonClick, emphasis, intent) => {
977
+ if (!actionButtonText)
978
+ return null;
979
+ // For intense emphasis: secondary variant with white border and white text
980
+ // For subtle emphasis: secondary variant with colored border and colored text (default behavior)
981
+ if (emphasis === "intense") {
982
+ return (jsxRuntime.jsx(Button, { variant: "secondary", color: "white", size: "small", onClick: onActionButtonClick, children: actionButtonText }));
983
+ }
984
+ // Subtle emphasis: use default secondary variant styling
985
+ return (jsxRuntime.jsx(Button, { variant: "secondary", color: intent, size: "small", onClick: onActionButtonClick, children: actionButtonText }));
986
+ };
987
+ const getActionLink = (actionButtonText, onActionLinkClick, emphasis, intent) => {
988
+ if (!actionButtonText)
989
+ return null;
990
+ // For intense emphasis: secondary variant with white border and white text
991
+ // For subtle emphasis: secondary variant with colored border and colored text (default behavior)
992
+ if (emphasis === "intense") {
993
+ return (jsxRuntime.jsx(Link, { type: "action", color: "white", size: "small", onClick: onActionLinkClick, children: actionButtonText }));
994
+ }
995
+ // Subtle emphasis: use default secondary variant styling
996
+ return (jsxRuntime.jsx(Link, { type: "action", color: intent, size: "small", onClick: onActionLinkClick, children: actionButtonText }));
997
+ };
998
+ const Alert = React__namespace.forwardRef(({ className, emphasis = "subtle", intent = "info", title, children, isFullWidth = false, onClose, icon, actionButtonText, onActionButtonClick, actionLinkText, onActionLinkClick, ...props }, ref) => {
999
+ const displayIcon = icon ?? getDefaultIcon(intent, emphasis);
1000
+ const actionButton = getActionButton(actionButtonText, onActionButtonClick, emphasis, intent);
1001
+ const actionLink = getActionLink(actionLinkText, onActionLinkClick, emphasis, intent);
1002
+ const hasActions = actionButton || actionLink;
1003
+ return (jsxRuntime.jsxs("div", { ref: ref, className: cn(alertVariants({ emphasis, intent }), className), role: "alert", ...props, children: [jsxRuntime.jsx("div", { className: cn(alertIconVariants({ emphasis, intent }), "h-5 w-5 shrink-0"), children: displayIcon }), isFullWidth ? (
1004
+ /* Full Width Layout: Icon, Content, Actions/Close in one row */
1005
+ jsxRuntime.jsxs("div", { className: "flex-1 min-w-0 flex items-center justify-between gap-4", children: [jsxRuntime.jsxs("div", { className: "flex-1 min-w-0 flex flex-col gap-1", children: [title && (jsxRuntime.jsx("div", { className: cn("text-body-medium-semibold", alertTextVariants({ emphasis, intent })), children: title })), jsxRuntime.jsx("div", { className: cn("text-body-small-regular", alertTextVariants({ emphasis, intent })), children: children })] }), jsxRuntime.jsxs("div", { className: "flex items-center gap-3 shrink-0", children: [hasActions && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [actionButton, actionLink] })), onClose && (jsxRuntime.jsx(IconButton, { icon: "close", color: emphasis === "intense" ? "white" : getButtonColor(intent), size: "xsmall", onClick: onClose, className: cn("shrink-0 h-5 w-5", emphasis === "intense"
1006
+ ? "hover:bg-white/20"
1007
+ : "hover:bg-black/10"), "aria-label": "Close alert" }))] })] })) : (
1008
+ /* Not Full Width Layout: Icon and Content in row, Actions below, Close top-right */
1009
+ jsxRuntime.jsxs("div", { className: "flex-1 min-w-0 relative", children: [onClose && (jsxRuntime.jsx("div", { className: "absolute top-0 right-0", children: jsxRuntime.jsx(IconButton, { icon: "close", color: emphasis === "intense" ? "white" : getButtonColor(intent), size: "xsmall", onClick: onClose, className: cn("shrink-0 h-5 w-5", emphasis === "intense"
1010
+ ? "hover:bg-white/20"
1011
+ : "hover:bg-black/10"), "aria-label": "Close alert" }) })), jsxRuntime.jsxs("div", { className: "flex flex-col gap-3 pr-8", children: [title && (jsxRuntime.jsx("div", { className: cn("text-body-medium-semibold", alertTextVariants({ emphasis, intent })), children: title })), jsxRuntime.jsx("div", { className: cn("text-body-small-regular", alertTextVariants({ emphasis, intent })), children: children }), hasActions && (jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [actionButton, actionLink] }))] })] }))] }));
1012
+ });
1013
+ Alert.displayName = "Alert";
1014
+
1015
+ // Helper function to get the text utility class name
1016
+ function getTextClassName(variant = "body", size = "medium", weight = "regular", color = "default") {
1017
+ // Build the base class name
1018
+ let baseClass = `text-${variant}`;
1019
+ // Add size
1020
+ if (size) {
1021
+ baseClass += `-${size}`;
1022
+ }
1023
+ // Add weight
1024
+ if (weight) {
1025
+ baseClass += `-${weight}`;
1026
+ }
1027
+ // Add color class separately
1028
+ const colorClass = `text-color-${color}`;
1029
+ return `${baseClass} ${colorClass}`;
1030
+ }
1031
+ const Text = React__namespace.forwardRef(({ className, variant = "body", size = "medium", weight = "regular", color = "default", as = "p", children, ...props }, ref) => {
1032
+ const Component = as;
1033
+ const textClass = getTextClassName(variant, size, weight, color);
1034
+ return React__namespace.createElement(Component, {
1035
+ className: cn(textClass, className),
1036
+ ref,
1037
+ ...props,
1038
+ }, children);
1039
+ });
1040
+ Text.displayName = "Text";
1041
+
1042
+ const inverseColorClasses = {
1043
+ a1: "bg-avatar-fill-a1-on-bg text-avatar-fill-a1-bg",
1044
+ a2: "bg-avatar-fill-a2-on-bg text-avatar-fill-a2-bg",
1045
+ a3: "bg-avatar-fill-a3-on-bg text-avatar-fill-a3-bg",
1046
+ a4: "bg-avatar-fill-a4-on-bg text-avatar-fill-a4-bg",
1047
+ a5: "bg-avatar-fill-a5-on-bg text-avatar-fill-a5-bg",
1048
+ };
1049
+ const avatarVariants = classVarianceAuthority.cva("inline-flex items-center justify-center font-medium text-center select-none", {
1050
+ variants: {
1051
+ color: {
1052
+ a1: "bg-avatar-fill-a1-bg text-avatar-fill-a1-on-bg",
1053
+ a2: "bg-avatar-fill-a2-bg text-avatar-fill-a2-on-bg",
1054
+ a3: "bg-avatar-fill-a3-bg text-avatar-fill-a3-on-bg",
1055
+ a4: "bg-avatar-fill-a4-bg text-avatar-fill-a4-on-bg",
1056
+ a5: "bg-avatar-fill-a5-bg text-avatar-fill-a5-on-bg",
1057
+ },
1058
+ size: {
1059
+ small: "h-[24px] w-[24px] text-body-medium-regular rounded-large",
1060
+ medium: "h-[32px] w-[32px] text-body-medium-regular rounded-xlarge",
1061
+ xlarge: "h-[36px] w-[36px] text-body-medium-regular rounded-xlarge",
1062
+ },
1063
+ },
1064
+ defaultVariants: {
1065
+ color: "a1",
1066
+ size: "medium",
1067
+ },
1068
+ });
1069
+ const statusVariants = classVarianceAuthority.cva("absolute flex items-center justify-center rounded-full border-2 border-surface-fill-neutral-intense", {
1070
+ variants: {
1071
+ size: {
1072
+ small: "h-5 w-5 -bottom-0.5 -right-0.5",
1073
+ medium: "h-6 w-6 -bottom-1 -right-1",
1074
+ xlarge: "h-6 w-6 -bottom-1 -right-1",
1075
+ },
1076
+ statusColor: {
1077
+ positive: "bg-action-fill-positive-default",
1078
+ negative: "bg-action-fill-negative-default",
1079
+ notice: "bg-action-fill-notice-default",
1080
+ info: "bg-action-fill-info-default",
1081
+ neutral: "bg-action-fill-neutral-default",
1082
+ },
1083
+ },
1084
+ defaultVariants: {
1085
+ size: "medium",
1086
+ statusColor: "notice",
1087
+ },
1088
+ });
1089
+ const Avatar = React__namespace.forwardRef(({ className, appearance = "default", color, size, children, src, alt, showStatus = false, statusColor = "notice", statusIcon, label, trailingComponent, containerClassName, ...props }, ref) => {
1090
+ const [imageError, setImageError] = React__namespace.useState(false);
1091
+ const handleImageError = () => {
1092
+ setImageError(true);
1093
+ };
1094
+ const getStatusIconSize = () => {
1095
+ switch (size) {
1096
+ case "small":
1097
+ return "h-3.5 w-3.5";
1098
+ case "medium":
1099
+ return "h-4 w-4";
1100
+ default:
1101
+ return "h-4 w-4";
1102
+ }
1103
+ };
1104
+ const getTextSize = () => {
1105
+ switch (size) {
1106
+ case "small":
1107
+ return "small";
1108
+ case "medium":
1109
+ return "medium";
1110
+ default:
1111
+ return "medium";
1112
+ }
1113
+ };
1114
+ const resolvedColor = color ?? "a1";
1115
+ const avatarElement = (jsxRuntime.jsxs("div", { className: "relative inline-block", children: [jsxRuntime.jsx("div", { className: cn(avatarVariants({ color: resolvedColor, size }), appearance === "inverse"
1116
+ ? inverseColorClasses[resolvedColor]
1117
+ : undefined, className), ...props, children: src && !imageError ? (jsxRuntime.jsx("img", { src: src, alt: alt || "Avatar", className: cn("h-full w-full object-cover", size === "small" ? "rounded-large" : "rounded-xlarge"), onError: handleImageError })) : (children) }), showStatus && (jsxRuntime.jsx("div", { className: cn(statusVariants({ size, statusColor })), children: statusIcon && (jsxRuntime.jsx("span", { className: cn("text-action-ink-on-primary-normal", getStatusIconSize()), children: statusIcon })) }))] }));
1118
+ // If no label or trailing component, return just the avatar
1119
+ if (!label && !trailingComponent) {
1120
+ return jsxRuntime.jsx("div", { ref: ref, children: avatarElement });
1121
+ }
1122
+ // Otherwise, return avatar with label and/or trailing component
1123
+ return (jsxRuntime.jsxs("div", { ref: ref, className: cn("inline-flex items-center gap-3", containerClassName), children: [avatarElement, label && (jsxRuntime.jsx(Text, { variant: "body", size: getTextSize(), weight: "medium", color: "default", as: "span", children: label })), trailingComponent && (jsxRuntime.jsx("span", { className: "ml-auto", children: trailingComponent }))] }));
1124
+ });
1125
+ Avatar.displayName = "Avatar";
1126
+
1127
+ const badgeVariants = classVarianceAuthority.cva("inline-flex items-center whitespace-nowrap transition-colors", {
1128
+ variants: {
1129
+ variant: {
1130
+ light: "",
1131
+ filled: "",
1132
+ },
1133
+ color: {
1134
+ primary: "",
1135
+ positive: "",
1136
+ negative: "",
1137
+ notice: "",
1138
+ info: "",
1139
+ neutral: "",
1140
+ },
1141
+ size: {
1142
+ small: "px-2 h-[var(--size-20)] gap-2 rounded-large text-body-small-medium",
1143
+ medium: "px-3 h-[var(--size-24)] gap-3 rounded-large text-body-medium-medium",
1144
+ large: "px-4 h-[var(--size-28)] gap-3 rounded-xlarge text-body-large-medium",
1145
+ },
1146
+ },
1147
+ compoundVariants: [
1148
+ // Light variant colors
1149
+ {
1150
+ variant: "light",
1151
+ color: "primary",
1152
+ class: "bg-action-fill-primary-faded text-action-ink-primary-normal",
1153
+ },
1154
+ {
1155
+ variant: "light",
1156
+ color: "positive",
1157
+ class: "bg-action-fill-positive-faded text-action-ink-positive-normal",
1158
+ },
1159
+ {
1160
+ variant: "light",
1161
+ color: "negative",
1162
+ class: "bg-action-fill-negative-faded text-action-ink-negative-normal",
1163
+ },
1164
+ {
1165
+ variant: "light",
1166
+ color: "notice",
1167
+ class: "bg-action-fill-notice-faded text-action-ink-notice-normal",
1168
+ },
1169
+ {
1170
+ variant: "light",
1171
+ color: "info",
1172
+ class: "bg-action-fill-info-faded text-action-ink-info-normal",
1173
+ },
1174
+ {
1175
+ variant: "light",
1176
+ color: "neutral",
1177
+ class: "bg-action-fill-neutral-faded text-action-ink-neutral-normal",
1178
+ },
1179
+ // Filled variant colors
1180
+ {
1181
+ variant: "filled",
1182
+ color: "primary",
1183
+ class: "bg-action-fill-primary-default text-action-ink-on-primary-normal",
1184
+ },
1185
+ {
1186
+ variant: "filled",
1187
+ color: "positive",
1188
+ class: "bg-action-fill-positive-default text-action-ink-on-primary-normal",
1189
+ },
1190
+ {
1191
+ variant: "filled",
1192
+ color: "negative",
1193
+ class: "bg-action-fill-negative-default text-action-ink-on-primary-normal",
1194
+ },
1195
+ {
1196
+ variant: "filled",
1197
+ color: "notice",
1198
+ class: "bg-action-fill-notice-default text-action-ink-on-primary-normal",
1199
+ },
1200
+ {
1201
+ variant: "filled",
1202
+ color: "info",
1203
+ class: "bg-action-fill-info-default text-action-ink-on-primary-normal",
1204
+ },
1205
+ {
1206
+ variant: "filled",
1207
+ color: "neutral",
1208
+ class: "bg-action-fill-neutral-default text-action-ink-on-primary-normal",
1209
+ },
1210
+ ],
1211
+ defaultVariants: {
1212
+ variant: "light",
1213
+ color: "info",
1214
+ size: "medium",
1215
+ },
1216
+ });
1217
+ const Badge = React__namespace.forwardRef(({ className, variant, size, color, showDot = false, children, ...props }, ref) => {
1218
+ const getDotColor = () => {
1219
+ if (variant === "filled") {
1220
+ return "bg-action-ink-on-primary-normal";
1221
+ }
1222
+ // Light variant - use the corresponding action color
1223
+ switch (color) {
1224
+ case "primary":
1225
+ return "bg-action-fill-primary-default";
1226
+ case "positive":
1227
+ return "bg-action-fill-positive-default";
1228
+ case "negative":
1229
+ return "bg-action-fill-negative-default";
1230
+ case "notice":
1231
+ return "bg-action-fill-notice-default";
1232
+ case "info":
1233
+ return "bg-action-fill-info-default";
1234
+ case "neutral":
1235
+ return "bg-action-fill-neutral-default";
1236
+ default:
1237
+ return "bg-action-fill-info-default";
1238
+ }
1239
+ };
1240
+ const getDotSize = () => {
1241
+ if (size === "small") {
1242
+ return "h-2 w-2";
1243
+ }
1244
+ if (size === "medium") {
1245
+ return "h-[6px] w-[6px]";
1246
+ }
1247
+ return "h-3 w-3";
1248
+ };
1249
+ return (jsxRuntime.jsxs("div", { ref: ref, className: cn(badgeVariants({ variant, size, color }), className), ...props, children: [showDot && (jsxRuntime.jsx("span", { className: cn("rounded-full", getDotColor(), getDotSize()), "aria-hidden": "true" })), children] }));
1250
+ });
1251
+ Badge.displayName = "Badge";
599
1252
 
600
1253
  const buttonGroupVariants = classVarianceAuthority.cva("inline-flex", {
601
1254
  variants: {
@@ -777,99 +1430,6 @@ const FormFooter = React__namespace.forwardRef(({ helperText, trailingText, vali
777
1430
  });
778
1431
  FormFooter.displayName = "FormFooter";
779
1432
 
780
- /**
781
- * ==============================================
782
- * HOW TO ADD A NEW ICON:
783
- * ==============================================
784
- *
785
- * 1. Add your SVG file to: src/assets/icons/{iconName}.svg
786
- *
787
- * 2. Copy the SVG content from the file
788
- *
789
- * 3. Add it to the iconRegistry below:
790
- * iconName: `<svg>...</svg>`,
791
- *
792
- * 4. Use it anywhere in your app:
793
- * <Icon name="iconName" size={24} />
794
- *
795
- * The Icon component will automatically:
796
- * - Replace hardcoded colors with currentColor
797
- * - Allow you to control color via className or style
798
- * - Resize based on the size prop
799
- * ==============================================
800
- */
801
- /**
802
- * Icon registry - maps icon names to their SVG content
803
- * Add your icons here by copying the SVG content from your icon files
804
- */
805
- const iconRegistry = {
806
- // Tick/Check icon
807
- tick: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
808
- <path d="M10.364 15.1924L19.5564 6L20.9706 7.41421L10.364 18.0208L4 11.6569L5.41422 10.2427L10.364 15.1924Z" fill="#081416"/>
809
- </svg>`,
810
- // Alias: check points to the same icon as tick
811
- check: `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
812
- <path d="M10.364 15.1924L19.5564 6L20.9706 7.41421L10.364 18.0208L4 11.6569L5.41422 10.2427L10.364 15.1924Z" fill="#081416"/>
813
- </svg>`,
814
- add: `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
815
- <path d="M12.9 11.0999L21 11.0997V12.8997L12.9 12.8999V21H11.1V12.8999L3.00004 12.9001L3 11.1001L11.1 11.0999L11.0999 3.00001L12.8999 3L12.9 11.0999Z" fill="#081416"/>
816
- </svg>`,
817
- };
818
- const Icon = ({ name, size = 24, className = "", style = {}, ...props }) => {
819
- const svgContent = iconRegistry[name];
820
- if (!svgContent) {
821
- console.warn(`Icon "${String(name)}" not found in registry.\n` +
822
- `Available icons: ${Object.keys(iconRegistry).join(", ")}`);
823
- return null;
824
- }
825
- // Parse the SVG content
826
- const parser = new DOMParser();
827
- const svgDoc = parser.parseFromString(svgContent, "image/svg+xml");
828
- const svgElement = svgDoc.querySelector("svg");
829
- if (!svgElement) {
830
- console.error(`Invalid SVG content for icon "${String(name)}"`);
831
- return null;
832
- }
833
- // Get the viewBox for proper scaling
834
- const viewBox = svgElement.getAttribute("viewBox") || "0 0 24 24";
835
- // Get all SVG content as string and replace hardcoded colors with currentColor
836
- let innerSVG = svgElement.innerHTML;
837
- // Replace common hardcoded colors with currentColor
838
- // This allows the icon to inherit text color from parent
839
- innerSVG = innerSVG
840
- .replace(/fill="[^"]*"/g, 'fill="currentColor"')
841
- .replace(/stroke="[^"]*"/g, 'stroke="currentColor"');
842
- return (jsxRuntime.jsx("svg", { width: size, height: size, viewBox: viewBox, className: className, style: style, xmlns: "http://www.w3.org/2000/svg", ...props, dangerouslySetInnerHTML: { __html: innerSVG } }));
843
- };
844
- /**
845
- * Get all available icon names from the registry
846
- * @returns Array of registered icon names
847
- *
848
- * @example
849
- * ```tsx
850
- * const icons = getAvailableIcons();
851
- * console.log(icons); // ['tick', 'check', ...]
852
- * ```
853
- */
854
- function getAvailableIcons() {
855
- return Object.keys(iconRegistry);
856
- }
857
- /**
858
- * Check if an icon exists in the registry
859
- * @param name - Icon name to check
860
- * @returns true if the icon exists
861
- *
862
- * @example
863
- * ```tsx
864
- * if (hasIcon('tick')) {
865
- * // Icon exists
866
- * }
867
- * ```
868
- */
869
- function hasIcon(name) {
870
- return name in iconRegistry;
871
- }
872
-
873
1433
  const checkboxVariants = classVarianceAuthority.cva("relative inline-flex items-center justify-center shrink-0 transition-all cursor-pointer", {
874
1434
  variants: {
875
1435
  size: {
@@ -1319,141 +1879,6 @@ const ListItem = React__namespace.forwardRef(({ className, type = "single", lead
1319
1879
  });
1320
1880
  ListItem.displayName = "ListItem";
1321
1881
 
1322
- const linkVariants = classVarianceAuthority.cva("inline-flex items-center gap-1 whitespace-nowrap transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none decoration-1 underline-offset-4", {
1323
- variants: {
1324
- type: {
1325
- anchor: "hover:underline",
1326
- action: "no-underline cursor-pointer",
1327
- },
1328
- color: {
1329
- primary: "",
1330
- positive: "",
1331
- negative: "",
1332
- notice: "",
1333
- info: "",
1334
- neutral: "",
1335
- },
1336
- size: {
1337
- xsmall: "text-body-xsmall-medium gap-1",
1338
- small: "text-body-small-medium gap-1",
1339
- medium: "text-body-medium-medium gap-1.5",
1340
- large: "text-body-large-medium gap-1.5",
1341
- },
1342
- isIconOnly: {
1343
- true: "no-underline",
1344
- false: "",
1345
- },
1346
- isDisabled: {
1347
- true: "cursor-not-allowed opacity-50",
1348
- false: "cursor-pointer",
1349
- },
1350
- },
1351
- compoundVariants: [
1352
- // Primary color variants
1353
- {
1354
- color: "primary",
1355
- class: `text-action-ink-primary-normal
1356
- hover:text-action-ink-primary-subtle
1357
- hover:decoration-action-outline-primary-hover
1358
- disabled:text-action-ink-primary-disabled
1359
- focus:text-action-ink-primary-hover
1360
- `,
1361
- },
1362
- // Positive color variants
1363
- {
1364
- color: "positive",
1365
- class: `text-action-ink-positive-normal
1366
- hover:text-action-ink-positive-subtle
1367
- hover:decoration-action-outline-positive-hover
1368
- hover:text-action-ink-positive-hover
1369
- disabled:text-action-ink-positive-disabled
1370
- focus:text-action-ink-positive-hover
1371
- `,
1372
- },
1373
- // Negative color variants
1374
- {
1375
- color: "negative",
1376
- class: `text-action-ink-negative-normal
1377
- hover:text-action-ink-negative-subtle
1378
- hover:decoration-action-outline-negative-hover
1379
- hover:text-action-ink-negative-hover
1380
- disabled:text-action-ink-negative-disabled
1381
- focus:text-action-ink-negative-hover
1382
- `,
1383
- },
1384
- // Notice color variants
1385
- {
1386
- color: "notice",
1387
- class: `text-action-ink-notice-normal
1388
- hover:text-action-ink-notice-subtle
1389
- hover:decoration-action-outline-notice-hover
1390
- hover:text-action-ink-notice-hover
1391
- disabled:text-action-ink-notice-disabled
1392
- focus:text-action-ink-notice-hover
1393
- `,
1394
- },
1395
- // Info color variants
1396
- {
1397
- color: "info",
1398
- class: `text-action-ink-info-normal
1399
- hover:text-action-ink-info-subtle
1400
- hover:decoration-action-outline-info-hover
1401
- hover:text-action-ink-info-hover
1402
- disabled:text-action-ink-info-disabled
1403
- focus:text-action-ink-info-hover
1404
- `,
1405
- },
1406
- // Neutral color variants
1407
- {
1408
- color: "neutral",
1409
- class: `text-action-ink-neutral-normal
1410
- hover:text-action-ink-neutral-subtle
1411
- hover:decoration-action-outline-neutral-hover
1412
- hover:text-action-ink-neutral-hover
1413
- disabled:text-action-ink-neutral-disabled
1414
- focus:text-action-ink-neutral-hover
1415
- `,
1416
- },
1417
- ],
1418
- defaultVariants: {
1419
- type: "anchor",
1420
- color: "primary",
1421
- size: "medium",
1422
- isIconOnly: false,
1423
- isDisabled: false,
1424
- },
1425
- });
1426
- const Link = React__namespace.forwardRef(({ className, type = "anchor", color = "primary", size = "medium", isIconOnly = false, isDisabled = false, asChild = false, showIcon = false, icon, leadingIcon, trailingIcon, children, onClick, ...props }, ref) => {
1427
- const Comp = asChild ? reactSlot.Slot : "a";
1428
- const handleClick = (e) => {
1429
- if (isDisabled) {
1430
- e.preventDefault();
1431
- return;
1432
- }
1433
- onClick?.(e);
1434
- };
1435
- // Icon size based on link size
1436
- const iconSize = {
1437
- xsmall: 12,
1438
- small: 14,
1439
- medium: 16,
1440
- large: 18,
1441
- }[size];
1442
- // Determine what to show as trailing icon
1443
- // Priority: trailingIcon > (showIcon && icon) > (showIcon && default ExternalLink)
1444
- const finalTrailingIcon = trailingIcon || (showIcon && (icon || jsxRuntime.jsx(lucideReact.ExternalLink, { size: iconSize })));
1445
- const linkContent = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [leadingIcon && !isIconOnly && (jsxRuntime.jsx("span", { className: "inline-flex items-center", children: leadingIcon })), !isIconOnly && children, isIconOnly && children, finalTrailingIcon && !isIconOnly && (jsxRuntime.jsx("span", { className: "inline-flex items-center", children: finalTrailingIcon })), isIconOnly &&
1446
- (leadingIcon || finalTrailingIcon || (jsxRuntime.jsx(lucideReact.ExternalLink, { size: iconSize })))] }));
1447
- return (jsxRuntime.jsx(Comp, { className: cn(linkVariants({
1448
- type,
1449
- color,
1450
- size,
1451
- isIconOnly,
1452
- isDisabled,
1453
- }), className), ref: ref, onClick: handleClick, "aria-disabled": isDisabled, tabIndex: isDisabled ? -1 : undefined, ...props, children: linkContent }));
1454
- });
1455
- Link.displayName = "Link";
1456
-
1457
1882
  const DropdownMenu = React__namespace.forwardRef(({ items = [], customContent, sectionHeading, isLoading = false, isEmpty = false, emptyTitle = "No Search Results Found", emptyDescription = "Add description of what the user can search for here.", emptyLinkText = "Link to support site", onEmptyLinkClick, primaryButtonText = "Primary", secondaryButtonText = "Secondary", onPrimaryClick, onSecondaryClick, showChevron = false, emptyIcon, disableFooter = false, showFooter, footerLayout = "horizontal", onClose, focusedIndex = -1, className, width = "auto", }, ref) => {
1458
1883
  const renderContent = () => {
1459
1884
  if (isLoading) {
@@ -3262,6 +3687,7 @@ const TextArea = React__namespace.forwardRef(({ label, helperText, errorText, su
3262
3687
  });
3263
3688
  TextArea.displayName = "TextArea";
3264
3689
 
3690
+ exports.Alert = Alert;
3265
3691
  exports.Avatar = Avatar;
3266
3692
  exports.AvatarCell = AvatarCell;
3267
3693
  exports.Badge = Badge;
@@ -3275,6 +3701,7 @@ exports.DropdownMenu = DropdownMenu;
3275
3701
  exports.FormFooter = FormFooter;
3276
3702
  exports.FormHeader = FormHeader;
3277
3703
  exports.Icon = Icon;
3704
+ exports.IconButton = IconButton;
3278
3705
  exports.IconCell = IconCell;
3279
3706
  exports.Link = Link;
3280
3707
  exports.ListItem = ListItem;
@@ -3296,6 +3723,7 @@ exports.Text = Text;
3296
3723
  exports.TextArea = TextArea;
3297
3724
  exports.TextField = TextField;
3298
3725
  exports.Tooltip = Tooltip;
3726
+ exports.alertVariants = alertVariants;
3299
3727
  exports.avatarVariants = avatarVariants;
3300
3728
  exports.badgeVariants = badgeVariants;
3301
3729
  exports.buttonGroupVariants = buttonGroupVariants;
@@ -3306,6 +3734,7 @@ exports.counterVariants = counterVariants;
3306
3734
  exports.dropdownVariants = dropdownVariants;
3307
3735
  exports.getAvailableIcons = getAvailableIcons;
3308
3736
  exports.hasIcon = hasIcon;
3737
+ exports.iconButtonVariants = iconButtonVariants;
3309
3738
  exports.iconRegistry = iconRegistry;
3310
3739
  exports.linkVariants = linkVariants;
3311
3740
  exports.listItemVariants = listItemVariants;