@nurix/ui-component-library 1.1.2 → 1.1.3-stage.102

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.
package/dist/index.d.mts CHANGED
@@ -1,13 +1,30 @@
1
- import * as class_variance_authority_types from 'class-variance-authority/types';
2
1
  import * as React$1 from 'react';
2
+ import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
3
+ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
4
+ import * as react_jsx_runtime from 'react/jsx-runtime';
5
+ import * as SelectPrimitive from '@radix-ui/react-select';
6
+ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
7
+ import { Toaster as Toaster$1 } from 'sonner';
8
+ import { LucideIcon } from 'lucide-react';
9
+ import { Schema } from 'ajv';
10
+ import { OnMount } from '@monaco-editor/react';
3
11
 
4
- type ButtonBorderRadius = "none" | "soft" | "rounded" | "pill";
5
- type ButtonVariant = "default" | "destructive" | "outline" | "secondary" | "ghost" | "link";
6
- type ButtonSize = "default" | "sm" | "lg" | "icon";
7
- interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
12
+ type ButtonBorderRadius = "none" | "soft" | "rounded";
13
+ type ButtonVariant = "primary" | "secondary" | "destructive" | "outline" | "link" | "iconPrimary" | "iconSecondary" | "iconOutline";
14
+ type ButtonSize = "default" | "sm" | "lg" | "link" | "icon" | "iconSm" | "iconXs";
15
+ interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
8
16
  variant?: ButtonVariant;
9
17
  size?: ButtonSize;
10
18
  onClick?: () => void;
19
+ disabled?: boolean;
20
+ /**
21
+ * Optional leading/trailing icons (e.g. lucide-react). If `asChild` is true,
22
+ * children layout is controlled by the consumer, so these are not injected.
23
+ */
24
+ leadingIcon?: React$1.ReactNode;
25
+ trailingIcon?: React$1.ReactNode;
26
+ showLeadingIcon?: boolean;
27
+ showTrailingIcon?: boolean;
11
28
  /**
12
29
  * Design-system controlled border radius
13
30
  */
@@ -15,13 +32,2011 @@ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
15
32
  asChild?: boolean;
16
33
  }
17
34
 
35
+ declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
36
+
37
+ type InputBorderRadius = "none" | "soft" | "rounded" | "pill";
38
+ type SupportingTextType = "help" | "error";
39
+ type InputForceState = "active" | "focussed" | "disabled";
40
+ interface InputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size"> {
41
+ /**
42
+ * Optional label shown above the field.
43
+ */
44
+ label?: string;
45
+ /**
46
+ * Whether to show a red "*" required indicator next to the label.
47
+ */
48
+ mandatory?: boolean;
49
+ /**
50
+ * Supporting/help/error text shown below the field.
51
+ */
52
+ supportingText?: string;
53
+ /**
54
+ * Visual style for supporting text.
55
+ */
56
+ supportingTextType?: SupportingTextType;
57
+ /**
58
+ * Hide the supporting text row (even if `supportingText` is provided).
59
+ */
60
+ hideSupportingText?: boolean;
61
+ /**
62
+ * Design-system controlled border radius.
63
+ */
64
+ input_border_radius?: InputBorderRadius;
65
+ /**
66
+ * Force a visual state (useful for sticker-sheet stories).
67
+ * When unset, focus/disabled styles are derived from real DOM state.
68
+ */
69
+ forceState?: InputForceState;
70
+ /**
71
+ * Marks the field as invalid (shadcn-style).
72
+ * Sets `aria-invalid` and applies destructive border/ring styling.
73
+ *
74
+ * Note: `supportingTextType="error"` will also style the field as invalid.
75
+ */
76
+ invalid?: boolean;
77
+ }
78
+ interface FileInputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "onChange"> {
79
+ label?: string;
80
+ mandatory?: boolean;
81
+ buttonLabel?: string;
82
+ placeholder?: string;
83
+ fileName?: string;
84
+ input_border_radius?: InputBorderRadius;
85
+ onFileChange?: (file: File | null) => void;
86
+ }
87
+
88
+ declare const Input: React$1.ForwardRefExoticComponent<InputProps & React$1.RefAttributes<HTMLInputElement>>;
89
+
90
+ declare const FileInput: React$1.ForwardRefExoticComponent<FileInputProps & React$1.RefAttributes<HTMLInputElement>>;
91
+
92
+ type InputGroupBorderRadius = "none" | "soft" | "rounded" | "pill";
93
+ type InputGroupForceState = "active" | "focussed" | "disabled";
94
+ interface InputGroupProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size"> {
95
+ /**
96
+ * Optional label shown above the field.
97
+ */
98
+ label?: string;
99
+ /**
100
+ * Whether to show a red "*" required indicator next to the label.
101
+ */
102
+ mandatory?: boolean;
103
+ /**
104
+ * Supporting/help/error text shown below the field.
105
+ */
106
+ supportingText?: string;
107
+ /**
108
+ * Force a visual state (useful for sticker-sheet stories).
109
+ */
110
+ forceState?: InputGroupForceState;
111
+ /**
112
+ * Marks the field as invalid.
113
+ */
114
+ invalid?: boolean;
115
+ /**
116
+ * Optional content shown on the left of the input (icon/text/button).
117
+ */
118
+ startAdornment?: React$1.ReactNode;
119
+ /**
120
+ * Optional content shown on the right of the input (icon/text/button).
121
+ */
122
+ endAdornment?: React$1.ReactNode;
123
+ /**
124
+ * Optional content separated by a divider on the far left (e.g. "https://").
125
+ */
126
+ startSegment?: React$1.ReactNode;
127
+ /**
128
+ * Optional content separated by a divider on the far right (e.g. ".com").
129
+ */
130
+ endSegment?: React$1.ReactNode;
131
+ input_border_radius?: InputGroupBorderRadius;
132
+ }
133
+
134
+ declare const InputGroup: React$1.ForwardRefExoticComponent<InputGroupProps & React$1.RefAttributes<HTMLInputElement>>;
135
+
136
+ type TextareaBorderRadius = "none" | "soft" | "rounded" | "pill";
137
+ type TextareaForceState = "active" | "focussed" | "disabled";
138
+ interface TextareaProps extends Omit<React$1.TextareaHTMLAttributes<HTMLTextAreaElement>, "style"> {
139
+ /**
140
+ * Optional label shown above the field.
141
+ */
142
+ label?: string;
143
+ /**
144
+ * Whether to show a red "*" required indicator next to the label.
145
+ */
146
+ mandatory?: boolean;
147
+ /**
148
+ * Supporting/help/error text shown below the field.
149
+ */
150
+ supportingText?: string;
151
+ /**
152
+ * Visual style for supporting text.
153
+ */
154
+ supportingTextType?: SupportingTextType;
155
+ /**
156
+ * Hide the supporting text row (even if `supportingText` is provided).
157
+ */
158
+ hideSupportingText?: boolean;
159
+ /**
160
+ * Design-system controlled border radius.
161
+ */
162
+ input_border_radius?: TextareaBorderRadius;
163
+ /**
164
+ * Force a visual state (useful for sticker-sheet stories).
165
+ * When unset, focus/disabled styles are derived from real DOM state.
166
+ */
167
+ forceState?: TextareaForceState;
168
+ /**
169
+ * Marks the field as invalid.
170
+ * Sets `aria-invalid` and applies destructive border/ring styling.
171
+ */
172
+ invalid?: boolean;
173
+ /**
174
+ * Resize behavior of the textarea.
175
+ */
176
+ resize?: "none" | "vertical" | "horizontal" | "both";
177
+ style?: React$1.CSSProperties;
178
+ }
179
+
18
180
  /**
19
- * Compile tokens CVA
181
+ * Textarea - Standalone textarea component.
182
+ * Matches Input component structure and states (label, supportingText, forceState, invalid, etc).
20
183
  */
21
- declare const buttonVariants: (props?: ({
22
- readonly variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined;
23
- readonly size?: "default" | "sm" | "lg" | "icon" | null | undefined;
24
- } & class_variance_authority_types.ClassProp) | undefined) => string;
25
- declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
184
+ declare const Textarea: React$1.ForwardRefExoticComponent<TextareaProps & React$1.RefAttributes<HTMLTextAreaElement>>;
185
+
186
+ type SwitchSize = "default" | "small";
187
+ interface SwitchProps {
188
+ /**
189
+ * Controlled checked state.
190
+ */
191
+ checked?: boolean;
192
+ /**
193
+ * Uncontrolled initial state.
194
+ */
195
+ defaultChecked?: boolean;
196
+ /**
197
+ * Called whenever the checked state changes.
198
+ */
199
+ onCheckedChange?: (checked: boolean) => void;
200
+ disabled?: boolean;
201
+ size?: SwitchSize;
202
+ /**
203
+ * Whether to show the label. When true, label will be displayed for both on and off states.
204
+ */
205
+ showLabel?: boolean;
206
+ /**
207
+ * The label text to display. Will show "Toggle On" or "Toggle Off" based on state if not provided.
208
+ */
209
+ labelText?: string;
210
+ /**
211
+ * Placement of the label relative to the switch.
212
+ * @default "right"
213
+ */
214
+ labelPlacement?: "left" | "right";
215
+ /**
216
+ * Optional id for associating external labels.
217
+ */
218
+ id?: string;
219
+ className?: string;
220
+ style?: React$1.CSSProperties;
221
+ }
222
+
223
+ declare const Switch: React$1.ForwardRefExoticComponent<SwitchProps & React$1.RefAttributes<HTMLButtonElement>>;
224
+
225
+ declare const Checkbox: React$1.ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
226
+
227
+ /**
228
+ * shadcn-style Checkbox props (Radix primitive props).
229
+ * Note: Radix supports `checked: boolean | "indeterminate"`. Figma uses boolean.
230
+ */
231
+ type CheckboxProps = React$1.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>;
232
+
233
+ declare const RadioGroup: React$1.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
234
+ declare const RadioGroupItem: React$1.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupItemProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
235
+
236
+ type RadioGroupProps = React$1.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>;
237
+ type RadioGroupItemProps = React$1.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>;
238
+
239
+ type DialogHeaderNavigationVariant = "primary" | "inner";
240
+ type BackButtonPosition = "left" | "right";
241
+ interface DialogHeaderNavigationProps extends React$1.HTMLAttributes<HTMLDivElement> {
242
+ title: string;
243
+ subtitle?: string;
244
+ /**
245
+ * `primary`: title/subtitle only
246
+ * `inner`: shows a back affordance (arrow)
247
+ */
248
+ variant?: DialogHeaderNavigationVariant;
249
+ onBack?: () => void;
250
+ backButtonAriaLabel?: string;
251
+ backButtonPosition?: BackButtonPosition;
252
+ disabled?: boolean;
253
+ }
254
+ type TabVariant = "top" | "side";
255
+ interface TabsProps extends React$1.HTMLAttributes<HTMLDivElement> {
256
+ value?: string;
257
+ defaultValue?: string;
258
+ onValueChange?: (value: string) => void;
259
+ variant?: TabVariant;
260
+ }
261
+ interface TabsListProps extends React$1.HTMLAttributes<HTMLDivElement> {
262
+ variant?: TabVariant;
263
+ }
264
+ interface TabsTriggerProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
265
+ value: string;
266
+ variant?: TabVariant;
267
+ iconLeft?: React$1.ReactNode;
268
+ }
269
+ interface TabsContentProps extends React$1.HTMLAttributes<HTMLDivElement> {
270
+ value: string;
271
+ forceMount?: boolean;
272
+ }
273
+
274
+ declare const DialogHeaderNavigation: React$1.ForwardRefExoticComponent<DialogHeaderNavigationProps & React$1.RefAttributes<HTMLDivElement>>;
275
+
276
+ declare function Tabs({ className, value, defaultValue, onValueChange, variant, ...props }: TabsProps): react_jsx_runtime.JSX.Element;
277
+ declare const TabsList: React$1.ForwardRefExoticComponent<TabsListProps & React$1.RefAttributes<HTMLDivElement>>;
278
+ declare const TabsTrigger: React$1.ForwardRefExoticComponent<TabsTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
279
+ declare function TabsContent({ value, forceMount, className, children, ...props }: TabsContentProps): react_jsx_runtime.JSX.Element | null;
280
+
281
+ type AccordionType = "single" | "multiple";
282
+ type AccordionValue<TType extends AccordionType> = TType extends "multiple" ? string[] : string | null;
283
+ type AccordionOnValueChange<TType extends AccordionType> = (value: AccordionValue<TType>) => void;
284
+ interface AccordionProps<TType extends AccordionType = "single"> extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "defaultValue" | "onChange"> {
285
+ type?: TType;
286
+ /**
287
+ * When `type="single"`, allows collapsing the open item.
288
+ */
289
+ collapsible?: boolean;
290
+ value?: AccordionValue<TType>;
291
+ defaultValue?: AccordionValue<TType>;
292
+ onValueChange?: AccordionOnValueChange<TType>;
293
+ disabled?: boolean;
294
+ }
295
+ interface AccordionItemProps extends React$1.HTMLAttributes<HTMLDivElement> {
296
+ value: string;
297
+ disabled?: boolean;
298
+ }
299
+ interface AccordionTriggerProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
300
+ /**
301
+ * Optional description under the label (matches Figma).
302
+ */
303
+ description?: React$1.ReactNode;
304
+ /**
305
+ * Optional right-side action (e.g. "Add" button).
306
+ * Note: click events are stopped from toggling the accordion.
307
+ */
308
+ action?: React$1.ReactNode;
309
+ }
310
+ interface AccordionContentProps extends React$1.HTMLAttributes<HTMLDivElement> {
311
+ }
312
+
313
+ declare function Accordion<TType extends AccordionType = "single">({ className, type, collapsible, value, defaultValue, onValueChange, disabled, ...props }: AccordionProps<TType>): react_jsx_runtime.JSX.Element;
314
+ declare const AccordionItem: React$1.ForwardRefExoticComponent<AccordionItemProps & React$1.RefAttributes<HTMLDivElement>>;
315
+ declare const AccordionTrigger: React$1.ForwardRefExoticComponent<AccordionTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
316
+ declare const AccordionContent: React$1.ForwardRefExoticComponent<AccordionContentProps & React$1.RefAttributes<HTMLDivElement>>;
317
+ declare function AccordionContentPlaceholder({ className, children, }: {
318
+ className?: string;
319
+ children?: React$1.ReactNode;
320
+ }): react_jsx_runtime.JSX.Element;
321
+
322
+ type AvatarSize = "sm" | "default" | "lg";
323
+ type AvatarShape = "circle" | "square";
324
+ interface AvatarProps {
325
+ /**
326
+ * The image source URL for the avatar.
327
+ */
328
+ src?: string;
329
+ /**
330
+ * Alt text for the avatar image.
331
+ */
332
+ alt?: string;
333
+ /**
334
+ * Fallback text to display when image fails to load (typically initials).
335
+ */
336
+ fallback?: string;
337
+ /**
338
+ * Size of the avatar.
339
+ * @default "default"
340
+ */
341
+ size?: AvatarSize;
342
+ /**
343
+ * Shape of the avatar.
344
+ * @default "circle"
345
+ */
346
+ shape?: AvatarShape;
347
+ className?: string;
348
+ style?: React$1.CSSProperties;
349
+ }
350
+ interface AvatarGroupProps {
351
+ /**
352
+ * Maximum number of avatars to display before showing overflow indicator.
353
+ * @default 3
354
+ */
355
+ max?: number;
356
+ /**
357
+ * Size of the avatars in the group.
358
+ * @default "default"
359
+ */
360
+ size?: AvatarSize;
361
+ /**
362
+ * Shape of the avatars in the group.
363
+ * @default "circle"
364
+ */
365
+ shape?: AvatarShape;
366
+ /**
367
+ * The avatar items to display.
368
+ */
369
+ children: React$1.ReactNode;
370
+ className?: string;
371
+ style?: React$1.CSSProperties;
372
+ }
373
+
374
+ /**
375
+ * Avatar component - An image element with a fallback for representing the user.
376
+ * Based on Figma design node: 3316:3490
377
+ */
378
+ declare const Avatar: React$1.ForwardRefExoticComponent<AvatarProps & React$1.RefAttributes<HTMLSpanElement>>;
379
+ /**
380
+ * AvatarGroup component - Displays multiple avatars in a stacked layout
381
+ */
382
+ declare const AvatarGroup: React$1.ForwardRefExoticComponent<AvatarGroupProps & React$1.RefAttributes<HTMLDivElement>>;
383
+
384
+ type BadgeVariant = "default" | "secondary" | "destructive" | "outline" | "success" | "warning";
385
+ interface BadgeProps {
386
+ /**
387
+ * The badge variant style.
388
+ * @default "default"
389
+ */
390
+ variant?: BadgeVariant;
391
+ /**
392
+ * The badge label text.
393
+ */
394
+ label?: string;
395
+ /**
396
+ * Optional leading icon (renders before the label).
397
+ */
398
+ leadingIcon?: React$1.ReactNode;
399
+ /**
400
+ * Optional trailing icon (renders after the label).
401
+ */
402
+ trailingIcon?: React$1.ReactNode;
403
+ /**
404
+ * Whether to show the leading icon.
405
+ * @default true
406
+ */
407
+ showLeadingIcon?: boolean;
408
+ /**
409
+ * Whether to show the trailing icon.
410
+ * @default true
411
+ */
412
+ showTrailingIcon?: boolean;
413
+ /**
414
+ * Badge content (alternative to label prop).
415
+ */
416
+ children?: React$1.ReactNode;
417
+ className?: string;
418
+ style?: React$1.CSSProperties;
419
+ }
420
+ type NumberBadgeVariant = "default" | "destructive" | "secondary";
421
+ interface NumberBadgeProps {
422
+ /**
423
+ * The number to display in the badge.
424
+ */
425
+ count: number;
426
+ /**
427
+ * Maximum count to display. Shows "max+" if exceeded.
428
+ * @default 99
429
+ */
430
+ max?: number;
431
+ /**
432
+ * The badge variant style.
433
+ * @default "default"
434
+ */
435
+ variant?: NumberBadgeVariant;
436
+ /**
437
+ * Whether to show zero count.
438
+ * @default false
439
+ */
440
+ showZero?: boolean;
441
+ className?: string;
442
+ style?: React$1.CSSProperties;
443
+ }
444
+
445
+ /**
446
+ * Badge component - Displays a badge with options for leading and trailing icons
447
+ * Based on Figma design node: 3333:1629
448
+ */
449
+ declare const Badge: React$1.ForwardRefExoticComponent<BadgeProps & React$1.RefAttributes<HTMLDivElement>>;
450
+ /**
451
+ * NumberBadge component - Displays a circular badge with a count
452
+ * Based on Figma design node: 3333:1629
453
+ */
454
+ declare const NumberBadge: React$1.ForwardRefExoticComponent<NumberBadgeProps & React$1.RefAttributes<HTMLDivElement>>;
455
+
456
+ type SelectType = "Single Line Regular" | "Single Line Large" | "Double Line";
457
+ type SelectState = "Default" | "Open";
458
+ interface SelectProps extends React$1.HTMLAttributes<HTMLDivElement> {
459
+ type?: SelectType;
460
+ state?: SelectState;
461
+ showLead?: boolean;
462
+ showSearch?: boolean;
463
+ value?: string;
464
+ onValueChange?: (value: string) => void;
465
+ placeholder?: string;
466
+ placeholderSubtext?: string;
467
+ }
468
+ interface SelectLabelProps extends React$1.HTMLAttributes<HTMLDivElement> {
469
+ label?: string;
470
+ mandatory?: boolean;
471
+ }
472
+ interface SelectMenuItemProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
473
+ value: string;
474
+ hover?: boolean;
475
+ menuItem?: string;
476
+ menuItemSubtext?: string;
477
+ showPlaybackControl?: boolean;
478
+ selected?: boolean;
479
+ }
480
+ interface SelectGroupProps extends React$1.HTMLAttributes<HTMLDivElement> {
481
+ showLabel?: boolean;
482
+ }
483
+ /** Item shape when using SelectContent `items` prop. Search filters by label and subtext. */
484
+ interface SelectContentItem {
485
+ value: string;
486
+ label: string;
487
+ subtext?: string;
488
+ leadIcon?: React$1.ReactNode;
489
+ leadIconSize?: "xs" | "sm" | "md";
490
+ }
491
+ /** Section with items when using SelectContent `items` prop. */
492
+ interface SelectContentItemWithSection {
493
+ sectionLabel: string;
494
+ items: SelectContentItem[];
495
+ }
496
+
497
+ declare const Select: React$1.FC<SelectPrimitive.SelectProps>;
498
+ declare const SelectGroup: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectGroupProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
499
+ /**
500
+ * Select value text (placeholder/value) using Typography tokens.
501
+ * We style placeholder color via `group-data-[placeholder]` on the trigger.
502
+ */
503
+ declare const SelectValue: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectValueProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
504
+ declare const SelectTrigger: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & {
505
+ showLead?: boolean;
506
+ leadIcon?: React$1.ReactNode;
507
+ /** Size of lead icon. "xs" = 16px, "sm" = 24px (default) */
508
+ leadIconSize?: "xs" | "sm";
509
+ size?: "regular" | "large";
510
+ } & React$1.RefAttributes<HTMLButtonElement>>;
511
+ declare const SelectScrollUpButton: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
512
+ declare const SelectScrollDownButton: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
513
+ declare const SelectContent: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
514
+ /** Dropdown list items. When provided, search filters them by default. Can be flat items or sections. */
515
+ items?: SelectContentItem[] | SelectContentItemWithSection[];
516
+ showSearch?: boolean;
517
+ searchPlaceholder?: string;
518
+ } & React$1.RefAttributes<HTMLDivElement>>;
519
+ declare const SelectLabel: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
520
+ declare const SelectItem: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
521
+ subtext?: string;
522
+ type?: "single" | "double";
523
+ leadIcon?: React$1.ReactNode;
524
+ /** Size of leadIcon area. "xs" = 16px, "sm" = 24px, "md" = 36px (for playback controls) */
525
+ leadIconSize?: "xs" | "sm" | "md";
526
+ } & React$1.RefAttributes<HTMLDivElement>>;
527
+ declare const SelectSeparator: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
528
+ declare function SelectFormLabel({ className, label, mandatory, }: SelectLabelProps): react_jsx_runtime.JSX.Element;
529
+
530
+ interface PlaySelectAudioItem {
531
+ value: string;
532
+ label: string;
533
+ subtext?: string;
534
+ url: string;
535
+ }
536
+ interface PlaySelectProps {
537
+ /** List of audio items to display. Each has value, label, subtext, and playable url. */
538
+ dropdownListItems: PlaySelectAudioItem[];
539
+ /** Trigger label (e.g. "Title") */
540
+ label?: string;
541
+ /** Placeholder when nothing selected */
542
+ placeholder?: string;
543
+ /** Show search input in dropdown */
544
+ showSearch?: boolean;
545
+ /** Search placeholder text */
546
+ searchPlaceholder?: string;
547
+ /** Controlled value */
548
+ value?: string;
549
+ /** Default value when uncontrolled */
550
+ defaultValue?: string;
551
+ /** Called when value changes (alias for onValueChange) */
552
+ onValueChange?: (value: string) => void;
553
+ /** Called when user clicks play/pause button. Receives url and item. */
554
+ onPlayClick?: (url: string, item: PlaySelectAudioItem) => void;
555
+ /** Called when user selects a value (clicks item text to select) */
556
+ onSelectValue?: (value: string) => void;
557
+ /** Called when dropdown closes (select, click outside, escape, etc.) */
558
+ onCloseDropdown?: () => void;
559
+ /** Disabled state */
560
+ disabled?: boolean;
561
+ /** Trigger size */
562
+ size?: "regular" | "large";
563
+ /** Optional lead icon for the trigger */
564
+ triggerLeadIcon?: React$1.ReactNode;
565
+ /** Optional wrapper className (e.g. to control width) */
566
+ className?: string;
567
+ /** Minimum width (e.g. "196px"). Override via className if needed. */
568
+ minWidth?: string;
569
+ }
570
+ declare const PlaySelect: React$1.ForwardRefExoticComponent<PlaySelectProps & React$1.RefAttributes<HTMLButtonElement>>;
571
+
572
+ type PlaybackState = "play" | "pause";
573
+ interface PlaybackControlProps extends Omit<React$1.ComponentProps<typeof Button>, "children"> {
574
+ /**
575
+ * Which icon to show. `play` = play icon (triangle), `pause` = pause icon (two bars).
576
+ */
577
+ state?: PlaybackState;
578
+ /**
579
+ * Alias for `state`. When true, show pause icon; when false, show play icon.
580
+ */
581
+ playing?: boolean;
582
+ }
583
+ declare const PlaybackControl: React$1.ForwardRefExoticComponent<Omit<PlaybackControlProps, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
584
+
585
+ interface UseSelectProps {
586
+ value?: string;
587
+ defaultValue?: string;
588
+ onValueChange?: (value: string) => void;
589
+ }
590
+ declare function useSelect({ value, defaultValue, onValueChange }: UseSelectProps): {
591
+ value: string | undefined;
592
+ setValue: React$1.Dispatch<React$1.SetStateAction<string | undefined>>;
593
+ handleValueChange: (newValue: string) => void;
594
+ };
595
+
596
+ interface UsePlaySelectProps {
597
+ value?: string;
598
+ defaultValue?: string;
599
+ onValueChange?: (value: string) => void;
600
+ /** Called when user clicks play/pause button */
601
+ onPlayClick?: (url: string, item: PlaySelectAudioItem) => void;
602
+ /** Called when user selects a value (clicks item text) */
603
+ onSelectValue?: (value: string) => void;
604
+ /** Called when dropdown closes (select, click outside, escape, etc.) */
605
+ onCloseDropdown?: () => void;
606
+ }
607
+ declare function usePlaySelect({ value, defaultValue, onValueChange, onPlayClick, onSelectValue, onCloseDropdown, }: UsePlaySelectProps): {
608
+ value: string | undefined;
609
+ playingUrl: string | null;
610
+ audioRef: React$1.MutableRefObject<HTMLAudioElement | null>;
611
+ handleValueChange: (newValue: string) => void;
612
+ handleOpenChange: (open: boolean) => void;
613
+ handlePlay: (url: string, item: PlaySelectAudioItem) => void;
614
+ stopEvent: (e: React$1.PointerEvent | React$1.MouseEvent) => void;
615
+ createPlayHandler: (item: PlaySelectAudioItem) => (e: React$1.PointerEvent | React$1.MouseEvent) => void;
616
+ pauseAudio: () => void;
617
+ };
618
+
619
+ /** Illustration position relative to text and CTAs. */
620
+ type EmptyStateIllustrationPosition = "top" | "bottom";
621
+ /** Illustration size variant. */
622
+ type EmptyStateIllustrationSize = "small" | "banner";
623
+ interface EmptyStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "description"> {
624
+ /** Illustration element (e.g. image, icon, or SVG). */
625
+ illustration?: React$1.ReactNode;
626
+ /** Where to place the illustration: above or below the text/CTAs. */
627
+ illustrationPosition?: EmptyStateIllustrationPosition;
628
+ /** Size of the illustration area. Small: 120×120px, Banner: 220×500px (overridden by width/height). */
629
+ illustrationSize?: EmptyStateIllustrationSize;
630
+ /** Custom illustration width (e.g. "500px", 300). Overrides illustrationSize for width. */
631
+ illustrationWidth?: string | number;
632
+ /** Custom illustration height (e.g. "220px", 200). Overrides illustrationSize for height. */
633
+ illustrationHeight?: string | number;
634
+ /** Primary title. String uses default title styles; Typography or other ReactNode is rendered as-is. */
635
+ title: string | React$1.ReactNode;
636
+ /** Secondary description. String uses default description styles; Typography or other ReactNode is rendered as-is. */
637
+ description?: string | React$1.ReactNode;
638
+ /** Action element(s) displayed below the text. Single button or array of buttons. */
639
+ action?: React$1.ReactNode | React$1.ReactNode[];
640
+ }
641
+
642
+ /**
643
+ * Empty state placeholder.
644
+ * Figma reference: 3619:3067 (Nurix Design System 2026)
645
+ */
646
+ declare const EmptyState: React$1.ForwardRefExoticComponent<EmptyStateProps & React$1.RefAttributes<HTMLDivElement>>;
647
+
648
+ type ListVariant = "default" | "outline" | "muted";
649
+ type ListType = "card" | "list";
650
+ type ListBorderRadius = "none" | "soft" | "rounded";
651
+ interface ListProps extends React$1.HTMLAttributes<HTMLDivElement> {
652
+ /**
653
+ * Layout type.
654
+ * - card: vertical card layout
655
+ * - list: horizontal row layout
656
+ * @default "card"
657
+ */
658
+ type?: ListType;
659
+ /**
660
+ * Visual style variant.
661
+ * - default: card bg only (card) / no border, no bg (list)
662
+ * - outline: border with horizontal padding
663
+ * - muted: subtle background fill
664
+ * @default "default"
665
+ */
666
+ variant?: ListVariant;
667
+ /**
668
+ * Design-system controlled border radius.
669
+ * @default "rounded"
670
+ */
671
+ list_border_radius?: ListBorderRadius;
672
+ children?: React$1.ReactNode;
673
+ }
674
+
675
+ /**
676
+ * List component - A composable card/list container with layout type,
677
+ * variant styles, hover overlay, and design-system border radius.
678
+ * Based on Figma design node: 3316:3511
679
+ */
680
+ declare const List: React$1.ForwardRefExoticComponent<ListProps & React$1.RefAttributes<HTMLDivElement>>;
681
+
682
+ /**
683
+ * Tooltip provider. Wrap your app (or a subtree) with this to enable tooltips.
684
+ * Based on shadcn/ui + Radix Tooltip.
685
+ */
686
+ declare const TooltipProvider: React$1.FC<TooltipPrimitive.TooltipProviderProps>;
687
+ /**
688
+ * Tooltip root. Groups trigger and content.
689
+ */
690
+ declare const Tooltip: React$1.FC<TooltipPrimitive.TooltipProps>;
691
+ /**
692
+ * Tooltip trigger. The element that shows the tooltip on hover.
693
+ */
694
+ declare const TooltipTrigger: React$1.ForwardRefExoticComponent<TooltipPrimitive.TooltipTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
695
+ /**
696
+ * Tooltip content. Renders the tooltip popover with optional arrow and shortcut badge.
697
+ * Figma design: primary background, rounded, optional keyboard shortcut on the right.
698
+ * Portals into .lego-land when present for correct theming.
699
+ */
700
+ declare const TooltipContent: React$1.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
701
+ shortcut?: string;
702
+ } & React$1.RefAttributes<HTMLDivElement>>;
703
+
704
+ type TooltipContentProps = React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {
705
+ /** Optional keyboard shortcut to display (e.g. "U", "⌘S") */
706
+ shortcut?: string;
707
+ };
708
+
709
+ type TypographyVariant = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p1" | "p2" | "p3";
710
+ type TypographyTone = "default" | "muted" | "inherit";
711
+ interface TypographyProps extends React$1.HTMLAttributes<HTMLElement> {
712
+ /**
713
+ * Typography variant (maps to Figma text styles).
714
+ * @default "p2"
715
+ */
716
+ variant?: TypographyVariant;
717
+ /**
718
+ * Text color tone.
719
+ * @default "default"
720
+ */
721
+ tone?: TypographyTone;
722
+ /**
723
+ * Render as the child element (Radix Slot).
724
+ * @default false
725
+ */
726
+ asChild?: boolean;
727
+ /**
728
+ * Override the default HTML tag for the selected variant.
729
+ * Ignored when `asChild` is true.
730
+ */
731
+ as?: React$1.ElementType;
732
+ }
733
+
734
+ /**
735
+ * Typography component
736
+ * Figma reference: 3732-2079 (Text aliases / use cases)
737
+ */
738
+ declare const Typography: React$1.ForwardRefExoticComponent<TypographyProps & React$1.RefAttributes<HTMLElement>>;
739
+
740
+ type Theme = "light" | "dark";
741
+ interface ThemeContextType {
742
+ theme: Theme;
743
+ setTheme: (theme: Theme) => void;
744
+ }
745
+ declare const ThemeProvider: React$1.FC<{
746
+ children: React$1.ReactNode;
747
+ defaultTheme?: Theme;
748
+ }>;
749
+ declare const NurixThemeProvider: React$1.FC<{
750
+ children: React$1.ReactNode;
751
+ defaultTheme?: Theme;
752
+ }>;
753
+ declare const useTheme: () => ThemeContextType;
754
+
755
+ interface LegoLandWrapperProps {
756
+ children: React$1.ReactNode;
757
+ theme: "light" | "dark";
758
+ className?: string;
759
+ style?: React$1.CSSProperties;
760
+ }
761
+ declare const LegoLandWrapper: React$1.FC<LegoLandWrapperProps>;
762
+
763
+ /**
764
+ * Hardcoded theme JSON (as requested).
765
+ * NOTE: `uIColors` values are hex, but at runtime we convert them to HSL channels
766
+ * so they work with `tailwind.config.ts` which uses `hsl(var(--...))`.
767
+ */
768
+ declare const DEFAULT_THEME: {
769
+ /**
770
+ * Design tokens (numbers) used by components.
771
+ * This file is the single source of truth (do not duplicate these elsewhere).
772
+ */
773
+ readonly twPadding: {
774
+ readonly mode1: {
775
+ readonly px0: 0;
776
+ readonly px05: 2;
777
+ readonly px1: 4;
778
+ readonly px15: 6;
779
+ readonly px2: 8;
780
+ readonly px25: 10;
781
+ readonly px3: 12;
782
+ readonly px35: 14;
783
+ readonly px4: 16;
784
+ readonly px5: 20;
785
+ readonly px6: 24;
786
+ readonly px7: 28;
787
+ readonly px8: 32;
788
+ readonly px9: 36;
789
+ readonly px10: 40;
790
+ readonly px11: 44;
791
+ readonly px12: 48;
792
+ readonly px14: 56;
793
+ readonly px16: 64;
794
+ readonly px20: 80;
795
+ readonly px24: 96;
796
+ readonly px28: 112;
797
+ readonly px32: 128;
798
+ readonly px36: 144;
799
+ readonly px40: 160;
800
+ readonly px44: 176;
801
+ readonly px48: 192;
802
+ readonly px52: 208;
803
+ readonly px56: 224;
804
+ readonly px60: 240;
805
+ readonly px64: 256;
806
+ readonly px72: 288;
807
+ readonly px80: 320;
808
+ readonly px96: 384;
809
+ readonly pxPx: 1;
810
+ };
811
+ };
812
+ readonly radius: {
813
+ readonly mode1: {
814
+ readonly roundedNone: 0;
815
+ readonly roundedXs: 2;
816
+ readonly roundedSm: 4;
817
+ readonly roundedMd: 6;
818
+ readonly roundedLg: 8;
819
+ readonly roundedXl: 12;
820
+ readonly rounded2xl: 16;
821
+ readonly rounded3xl: 24;
822
+ readonly rounded4xl: 32;
823
+ readonly roundedFull: 9999;
824
+ };
825
+ };
826
+ readonly tokens: {
827
+ readonly mode1: {
828
+ readonly 0: 0;
829
+ readonly 1: 1;
830
+ readonly 2: 2;
831
+ readonly 3: 3;
832
+ readonly 4: 4;
833
+ readonly 5: 5;
834
+ readonly 6: 6;
835
+ readonly 8: 8;
836
+ readonly 10: 10;
837
+ readonly 12: 12;
838
+ readonly 14: 14;
839
+ readonly 15: 15;
840
+ readonly 16: 16;
841
+ readonly 18: 18;
842
+ readonly 20: 20;
843
+ readonly 24: 24;
844
+ readonly 25: 25;
845
+ readonly 28: 28;
846
+ readonly 32: 32;
847
+ readonly 40: 40;
848
+ readonly 48: 48;
849
+ readonly 64: 64;
850
+ readonly 96: 96;
851
+ readonly 128: 128;
852
+ readonly 256: 256;
853
+ readonly 512: 512;
854
+ readonly 1024: 1024;
855
+ readonly 9999: 9999;
856
+ readonly "05": 0.5;
857
+ readonly "075": 0.75;
858
+ readonly "125": 1.25;
859
+ readonly "175": 1.75;
860
+ readonly "225": 2.25;
861
+ readonly "275": 2.75;
862
+ };
863
+ };
864
+ readonly twColors: {
865
+ readonly mode1: {
866
+ readonly slate50: "#f8fafc";
867
+ readonly slate100: "#f1f5f9";
868
+ readonly slate200: "#e2e8f0";
869
+ readonly slate300: "#cbd5e1";
870
+ readonly slate400: "#94a3b8";
871
+ readonly slate500: "#64748b";
872
+ readonly slate600: "#475569";
873
+ readonly slate700: "#334155";
874
+ readonly slate800: "#1e293b";
875
+ readonly slate900: "#0f172a";
876
+ readonly slate950: "#020617";
877
+ readonly gray50: "#f9fafb";
878
+ readonly gray100: "#f3f4f6";
879
+ readonly gray200: "#e5e7eb";
880
+ readonly gray300: "#d1d5db";
881
+ readonly gray400: "#9ca3af";
882
+ readonly gray500: "#6b7280";
883
+ readonly gray600: "#4b5563";
884
+ readonly gray700: "#374151";
885
+ readonly gray800: "#1f2937";
886
+ readonly gray900: "#111827";
887
+ readonly gray950: "#030712";
888
+ readonly zinc50: "#fafafa";
889
+ readonly zinc100: "#f4f4f5";
890
+ readonly zinc200: "#e4e4e7";
891
+ readonly zinc300: "#d4d4d8";
892
+ readonly zinc400: "#a1a1aa";
893
+ readonly zinc500: "#71717a";
894
+ readonly zinc600: "#52525b";
895
+ readonly zinc700: "#3f3f46";
896
+ readonly zinc800: "#27272a";
897
+ readonly zinc900: "#18181b";
898
+ readonly zinc950: "#09090b";
899
+ readonly neutral50: "#fafafa";
900
+ readonly neutral100: "#f5f5f5";
901
+ readonly neutral200: "#e5e5e5";
902
+ readonly neutral300: "#d4d4d4";
903
+ readonly neutral400: "#a3a3a3";
904
+ readonly neutral500: "#737373";
905
+ readonly neutral600: "#525252";
906
+ readonly neutral700: "#404040";
907
+ readonly neutral800: "#262626";
908
+ readonly neutral900: "#171717";
909
+ readonly neutral950: "#0a0a0a";
910
+ readonly stone50: "#fafaf9";
911
+ readonly stone100: "#f5f5f4";
912
+ readonly stone200: "#e7e5e4";
913
+ readonly stone300: "#d6d3d1";
914
+ readonly stone400: "#a8a29e";
915
+ readonly stone500: "#78716c";
916
+ readonly stone600: "#57534e";
917
+ readonly stone700: "#44403c";
918
+ readonly stone800: "#292524";
919
+ readonly stone900: "#1c1917";
920
+ readonly stone950: "#0c0a09";
921
+ readonly red50: "#fef2f2";
922
+ readonly red100: "#fee2e2";
923
+ readonly red200: "#fecaca";
924
+ readonly red300: "#fca5a5";
925
+ readonly red400: "#f87171";
926
+ readonly red500: "#ef4444";
927
+ readonly red600: "#dc2626";
928
+ readonly red700: "#b91c1c";
929
+ readonly red800: "#991b1b";
930
+ readonly red900: "#7f1d1d";
931
+ readonly red950: "#450a0a";
932
+ readonly orange50: "#fff7ed";
933
+ readonly orange100: "#ffedd5";
934
+ readonly orange200: "#fed7aa";
935
+ readonly orange300: "#fdba74";
936
+ readonly orange400: "#fb923c";
937
+ readonly orange500: "#f97316";
938
+ readonly orange600: "#ea580c";
939
+ readonly orange700: "#c2410c";
940
+ readonly orange800: "#9a3412";
941
+ readonly orange900: "#7c2d12";
942
+ readonly orange950: "#431407";
943
+ readonly amber50: "#fffbeb";
944
+ readonly amber100: "#fef3c7";
945
+ readonly amber200: "#fde68a";
946
+ readonly amber300: "#fcd34d";
947
+ readonly amber400: "#fbbf24";
948
+ readonly amber500: "#f59e0b";
949
+ readonly amber600: "#d97706";
950
+ readonly amber700: "#b45309";
951
+ readonly amber800: "#92400e";
952
+ readonly amber900: "#78350f";
953
+ readonly amber950: "#451a03";
954
+ readonly green50: "#f0fdf4";
955
+ readonly green100: "#dcfce7";
956
+ readonly green200: "#bbf7d0";
957
+ readonly green300: "#86efac";
958
+ readonly green400: "#4ade80";
959
+ readonly green500: "#22c55e";
960
+ readonly green600: "#16a34a";
961
+ readonly green700: "#15803d";
962
+ readonly green800: "#166534";
963
+ readonly green900: "#14532d";
964
+ readonly green950: "#052e16";
965
+ readonly emerald50: "#ecfdf5";
966
+ readonly emerald100: "#d1fae5";
967
+ readonly emerald200: "#a7f3d0";
968
+ readonly emerald300: "#6ee7b7";
969
+ readonly emerald400: "#34d399";
970
+ readonly emerald500: "#10b981";
971
+ readonly emerald600: "#059669";
972
+ readonly emerald700: "#047857";
973
+ readonly emerald800: "#065f46";
974
+ readonly emerald900: "#064e3b";
975
+ readonly emerald950: "#022c22";
976
+ readonly teal50: "#f0fdfa";
977
+ readonly teal100: "#ccfbf1";
978
+ readonly teal200: "#99f6e4";
979
+ readonly teal300: "#5eead4";
980
+ readonly teal400: "#2dd4bf";
981
+ readonly teal500: "#14b8a6";
982
+ readonly teal600: "#0d9488";
983
+ readonly teal700: "#0f766e";
984
+ readonly teal800: "#115e59";
985
+ readonly teal900: "#134e4a";
986
+ readonly teal950: "#042f2e";
987
+ readonly cyan50: "#ecfeff";
988
+ readonly cyan100: "#cffafe";
989
+ readonly cyan200: "#a5f3fc";
990
+ readonly cyan300: "#67e8f9";
991
+ readonly cyan400: "#22d3ee";
992
+ readonly cyan500: "#06b6d4";
993
+ readonly cyan600: "#0891b2";
994
+ readonly cyan700: "#0e7490";
995
+ readonly cyan800: "#155e75";
996
+ readonly cyan900: "#164e63";
997
+ readonly cyan950: "#083344";
998
+ readonly sky50: "#f0f9ff";
999
+ readonly sky100: "#e0f2fe";
1000
+ readonly sky200: "#bae6fd";
1001
+ readonly sky300: "#7dd3fc";
1002
+ readonly sky400: "#38bdf8";
1003
+ readonly sky500: "#0ea5e9";
1004
+ readonly sky600: "#0284c7";
1005
+ readonly sky700: "#0369a1";
1006
+ readonly sky800: "#075985";
1007
+ readonly sky900: "#0c4a6e";
1008
+ readonly sky950: "#082f49";
1009
+ readonly indigo50: "#eef2ff";
1010
+ readonly indigo100: "#e0e7ff";
1011
+ readonly indigo200: "#c7d2fe";
1012
+ readonly indigo300: "#a5b4fc";
1013
+ readonly indigo400: "#818cf8";
1014
+ readonly indigo500: "#6366f1";
1015
+ readonly indigo600: "#4f46e5";
1016
+ readonly indigo700: "#4338ca";
1017
+ readonly indigo800: "#3730a3";
1018
+ readonly indigo900: "#312e81";
1019
+ readonly indigo950: "#1e1b4b";
1020
+ readonly violet50: "#f5f3ff";
1021
+ readonly violet100: "#ede9fe";
1022
+ readonly violet200: "#ddd6fe";
1023
+ readonly violet300: "#c4b5fd";
1024
+ readonly violet400: "#a78bfa";
1025
+ readonly violet500: "#8b5cf6";
1026
+ readonly violet600: "#7c3aed";
1027
+ readonly violet700: "#6d28d9";
1028
+ readonly violet800: "#5b21b6";
1029
+ readonly violet900: "#4c1d95";
1030
+ readonly violet950: "#2e1065";
1031
+ readonly purple50: "#faf5ff";
1032
+ readonly purple100: "#f3e8ff";
1033
+ readonly purple200: "#e9d5ff";
1034
+ readonly purple300: "#d8b4fe";
1035
+ readonly purple400: "#c084fc";
1036
+ readonly purple500: "#a855f7";
1037
+ readonly purple600: "#9333ea";
1038
+ readonly purple700: "#7e22ce";
1039
+ readonly purple800: "#6b21a8";
1040
+ readonly purple900: "#581c87";
1041
+ readonly purple950: "#3b0764";
1042
+ readonly fuchsia50: "#fdf4ff";
1043
+ readonly fuchsia100: "#fae8ff";
1044
+ readonly fuchsia200: "#f5d0fe";
1045
+ readonly fuchsia300: "#f0abfc";
1046
+ readonly fuchsia400: "#e879f9";
1047
+ readonly fuchsia500: "#d946ef";
1048
+ readonly fuchsia600: "#c026d3";
1049
+ readonly fuchsia700: "#a21caf";
1050
+ readonly fuchsia800: "#86198f";
1051
+ readonly fuchsia900: "#701a75";
1052
+ readonly fuchsia950: "#4a044e";
1053
+ readonly pink50: "#fdf2f8";
1054
+ readonly pink100: "#fce7f3";
1055
+ readonly pink200: "#fbcfe8";
1056
+ readonly pink300: "#f9a8d4";
1057
+ readonly pink400: "#f472b6";
1058
+ readonly pink500: "#ec4899";
1059
+ readonly pink600: "#db2777";
1060
+ readonly pink700: "#be185d";
1061
+ readonly pink800: "#9d174d";
1062
+ readonly pink900: "#831843";
1063
+ readonly pink950: "#500724";
1064
+ readonly rose50: "#fff1f2";
1065
+ readonly rose100: "#ffe4e6";
1066
+ readonly rose200: "#fecdd3";
1067
+ readonly rose300: "#fda4af";
1068
+ readonly rose400: "#fb7185";
1069
+ readonly rose500: "#f43f5e";
1070
+ readonly rose600: "#e11d48";
1071
+ readonly rose700: "#be123c";
1072
+ readonly rose800: "#9f1239";
1073
+ readonly rose900: "#881337";
1074
+ readonly rose950: "#4c0519";
1075
+ readonly lime50: "#f7fee7";
1076
+ readonly lime100: "#ecfccb";
1077
+ readonly lime200: "#d9f99d";
1078
+ readonly lime300: "#bef264";
1079
+ readonly lime400: "#a3e635";
1080
+ readonly lime500: "#84cc16";
1081
+ readonly lime600: "#65a30d";
1082
+ readonly lime700: "#4d7c0f";
1083
+ readonly lime800: "#3f6212";
1084
+ readonly lime900: "#365314";
1085
+ readonly lime950: "#1a2e05";
1086
+ readonly yellow50: "#fefce8";
1087
+ readonly yellow100: "#fef9c3";
1088
+ readonly yellow200: "#fef08a";
1089
+ readonly yellow300: "#fde047";
1090
+ readonly yellow400: "#facc15";
1091
+ readonly yellow500: "#eab308";
1092
+ readonly yellow600: "#ca8a04";
1093
+ readonly yellow700: "#a16207";
1094
+ readonly yellow800: "#854d0e";
1095
+ readonly yellow900: "#713f12";
1096
+ readonly yellow950: "#422006";
1097
+ readonly blue50: "#eff6ff";
1098
+ readonly blue100: "#dbeafe";
1099
+ readonly blue200: "#bfdbfe";
1100
+ readonly blue300: "#93c5fd";
1101
+ readonly blue400: "#60a5fa";
1102
+ readonly blue500: "#3b82f6";
1103
+ readonly blue600: "#2563eb";
1104
+ readonly blue700: "#1d4ed8";
1105
+ readonly blue800: "#1e40af";
1106
+ readonly blue900: "#1e3a8a";
1107
+ readonly blue950: "#172554";
1108
+ readonly white: "#ffffff";
1109
+ readonly black: "#000000";
1110
+ };
1111
+ };
1112
+ readonly uIColors: {
1113
+ readonly lightMode: {
1114
+ readonly background: "#f5f5f5";
1115
+ readonly foreground: "#0a0a0a";
1116
+ readonly border: "#e5e5e5";
1117
+ readonly destructive: "#ef4444";
1118
+ readonly secondary: "#e5e5e5";
1119
+ readonly mutedForeground: "#737373";
1120
+ readonly muted: "#f5f5f5";
1121
+ readonly backgroundColor: "#0000004d";
1122
+ readonly primary: "#1d4885";
1123
+ readonly secondaryForeground: "#0a0a0a";
1124
+ readonly accentForeground: "#171717";
1125
+ readonly accent: "#f5f5f5";
1126
+ readonly ring: "#0090ff";
1127
+ readonly chart3: "#0588f0";
1128
+ readonly chart2: "#0090ff";
1129
+ readonly chart4: "#0d74ce";
1130
+ readonly chart1: "#5eb1ef";
1131
+ readonly chart5: "#113264";
1132
+ readonly card: "#ffffff";
1133
+ readonly cardForeground: "#0a0a0a";
1134
+ readonly popover: "#ffffff";
1135
+ readonly popoverForeground: "#0a0a0a";
1136
+ readonly primaryForeground: "#fafafa";
1137
+ readonly input: "#f5f5f5";
1138
+ readonly sidebar: "#fafafa";
1139
+ readonly sidebarForeground: "#0a0a0a";
1140
+ readonly sidebarPrimary: "#171717";
1141
+ readonly sidebarPrimaryForeground: "#fafafa";
1142
+ readonly sidebarAccent: "#f5f5f5";
1143
+ readonly sidebarAccentForeground: "#171717";
1144
+ readonly sidebarBorder: "#d4d4d4";
1145
+ readonly sidebarRing: "#737373";
1146
+ readonly semanticBackground: "#696867";
1147
+ readonly semanticBorder: "#898887";
1148
+ readonly semanticForeground: "#ffffff";
1149
+ readonly disabled: "#d4d4d4";
1150
+ readonly primary10: "#1d488519";
1151
+ readonly datePickerCircle: "#3d6aa8";
1152
+ readonly success: "#10b981";
1153
+ readonly warning: "#fef3c7";
1154
+ readonly warningForeground: "#78350f";
1155
+ readonly switchTrack: "#e5e5e5";
1156
+ readonly hover: "#0a0a0a1a";
1157
+ readonly filterInput: "#fff";
1158
+ readonly primarySelected: "#fff";
1159
+ readonly hoverSolid: "#efefef";
1160
+ readonly badgeDefaultBg: "#f0f9ff";
1161
+ readonly badgeDefaultFg: "#0369a1";
1162
+ readonly badgeSuccessBg: "#ecfdf5";
1163
+ readonly badgeSuccessFg: "#047857";
1164
+ readonly badgeWarningBg: "#fef3c7";
1165
+ readonly badgeWarningFg: "#92400e";
1166
+ readonly badgeNeutralBg: "#e5e5e5";
1167
+ readonly badgeNeutralFg: "#525252";
1168
+ readonly badgeDestructiveBg: "#fef2f2";
1169
+ readonly badgeDestructiveFg: "#b91c1c";
1170
+ };
1171
+ readonly darkMode: {
1172
+ readonly background: "#1e1e1e";
1173
+ readonly foreground: "#fafafa";
1174
+ readonly border: "#404040";
1175
+ readonly destructive: "#f87171";
1176
+ readonly secondary: "#262626";
1177
+ readonly mutedForeground: "#a3a3a3";
1178
+ readonly muted: "#262626";
1179
+ readonly backgroundColor: "#0000004d";
1180
+ readonly primary: "#b5d5fd";
1181
+ readonly secondaryForeground: "#fafafa";
1182
+ readonly accentForeground: "#fafafa";
1183
+ readonly accent: "#262626";
1184
+ readonly ring: "#acd8fc";
1185
+ readonly chart3: "#0588f0";
1186
+ readonly chart2: "#0090ff";
1187
+ readonly chart4: "#0d74ce";
1188
+ readonly chart1: "#5eb1ef";
1189
+ readonly chart5: "#113264";
1190
+ readonly card: "#262626";
1191
+ readonly cardForeground: "#fafafa";
1192
+ readonly popover: "#262626";
1193
+ readonly popoverForeground: "#fafafa";
1194
+ readonly primaryForeground: "#171717";
1195
+ readonly input: "#2e3034";
1196
+ readonly sidebar: "#171717";
1197
+ readonly sidebarForeground: "#fafafa";
1198
+ readonly sidebarPrimary: "#0588f0";
1199
+ readonly sidebarPrimaryForeground: "#fafafa";
1200
+ readonly sidebarAccent: "#262626";
1201
+ readonly sidebarAccentForeground: "#fafafa";
1202
+ readonly sidebarBorder: "#ffffffcc";
1203
+ readonly sidebarRing: "#737373";
1204
+ readonly semanticBackground: "#272625";
1205
+ readonly semanticBorder: "#535151";
1206
+ readonly semanticForeground: "#ffffff";
1207
+ readonly disabled: "#404040";
1208
+ readonly primary10: "#e6f1ff1a";
1209
+ readonly datePickerCircle: "#7aa5e8";
1210
+ readonly success: "#a7f3d0";
1211
+ readonly warning: "#fde68a";
1212
+ readonly warningForeground: "#78350f";
1213
+ readonly filterInput: "#171717";
1214
+ readonly badgeDefaultBg: "#0c4a6e";
1215
+ readonly badgeDefaultFg: "#7dd3fc";
1216
+ readonly badgeSuccessBg: "#064e3b";
1217
+ readonly badgeSuccessFg: "#6ee7b7";
1218
+ readonly badgeWarningBg: "#78350f";
1219
+ readonly badgeWarningFg: "#fcd34d";
1220
+ readonly badgeNeutralBg: "#404040";
1221
+ readonly badgeNeutralFg: "#d4d4d4";
1222
+ readonly badgeDestructiveBg: "#7f1d1d";
1223
+ readonly badgeDestructiveFg: "#fecaca";
1224
+ readonly switchTrack: "#ffffff";
1225
+ readonly hover: "#ffffff1a";
1226
+ readonly primarySelected: "#1A273A";
1227
+ readonly hoverSolid: "#171717";
1228
+ };
1229
+ };
1230
+ readonly components: {
1231
+ readonly mode1: {
1232
+ readonly inputRadius: 16;
1233
+ readonly inputHeight: 42;
1234
+ readonly inputHeightLarge: 56;
1235
+ readonly inputPaddingHorizontal: 16;
1236
+ readonly inputPaddingVertical: 8;
1237
+ readonly buttonHeight: 40;
1238
+ readonly buttonRadius: 24;
1239
+ readonly inputActiveBg: "#2e3034";
1240
+ readonly inputFocussedBg: "#2e3034";
1241
+ readonly inputFocussedRing: "#acd8fc";
1242
+ };
1243
+ };
1244
+ };
1245
+
1246
+ type DialogSize = "sm" | "default" | "wide";
1247
+ /**
1248
+ * Controls the dialog layout preset:
1249
+ * - `"default"` — header with × close, plain body, footer
1250
+ * - `"icon"` — large icon circle at top, no × close, body, footer
1251
+ * - `"scrollable"` — header with × close, scrollable body, footer
1252
+ * - `"scrollable-fixed"` — same as scrollable but header and footer have dividers (sticky feel)
1253
+ */
1254
+ type DialogType = "default" | "icon" | "scrollable" | "scrollable-fixed";
1255
+ interface DialogProps {
1256
+ open: boolean;
1257
+ onOpenChange: (open: boolean) => void;
1258
+ /** @default "default" */
1259
+ type?: DialogType;
1260
+ /** @default "default" */
1261
+ size?: DialogSize;
1262
+ title?: string;
1263
+ /** Icon element for the blue circle (only used when `type="icon"`). */
1264
+ icon?: React$1.ReactNode;
1265
+ children?: React$1.ReactNode;
1266
+ /** @default "Cancel" */
1267
+ cancelLabel?: string;
1268
+ /** @default "Continue" */
1269
+ confirmLabel?: string;
1270
+ /**
1271
+ * Show the Cancel button in the footer.
1272
+ * @default true
1273
+ */
1274
+ showCancel?: boolean;
1275
+ onCancel?: () => void;
1276
+ onConfirm?: () => void;
1277
+ className?: string;
1278
+ }
1279
+ interface DialogIconProps {
1280
+ children: React$1.ReactNode;
1281
+ className?: string;
1282
+ }
1283
+ interface DialogHeaderProps {
1284
+ title: string;
1285
+ showClose?: boolean;
1286
+ showDivider?: boolean;
1287
+ className?: string;
1288
+ }
1289
+ interface DialogBodyProps {
1290
+ children?: React$1.ReactNode;
1291
+ scrollable?: boolean;
1292
+ className?: string;
1293
+ }
1294
+ interface DialogFooterProps {
1295
+ cancelLabel?: string;
1296
+ confirmLabel?: string;
1297
+ /**
1298
+ * Show the Cancel button.
1299
+ * @default true
1300
+ */
1301
+ showCancel?: boolean;
1302
+ onCancel?: () => void;
1303
+ onConfirm?: () => void;
1304
+ showDivider?: boolean;
1305
+ className?: string;
1306
+ }
1307
+
1308
+ /**
1309
+ * Modal dialog. Rendered inline (no portal) so CSS variables from the
1310
+ * `.lego-land` ancestor always apply. Uses `fixed inset-0` so it still covers
1311
+ * the full viewport regardless of its position in the tree.
1312
+ *
1313
+ * Use the `type` prop to select a layout preset:
1314
+ * - `"default"` — header + × close + plain body + footer
1315
+ * - `"icon"` — icon circle at top + header (no ×) + body + footer
1316
+ * - `"scrollable"` — header + × close + scrollable body + footer
1317
+ * - `"scrollable-fixed"` — scrollable + dividers between header/body/footer
1318
+ *
1319
+ * Figma reference: 3316:3400 (Dialogs & Toasts)
1320
+ */
1321
+ declare const Dialog: React$1.ForwardRefExoticComponent<DialogProps & React$1.RefAttributes<HTMLDivElement>>;
1322
+ /**
1323
+ * Blue tinted icon circle for the top of a dialog.
1324
+ * Figma reference: 3364:1516
1325
+ */
1326
+ declare const DialogIcon: React$1.ForwardRefExoticComponent<DialogIconProps & React$1.RefAttributes<HTMLDivElement>>;
1327
+ /**
1328
+ * Header row with title and optional × close button / bottom divider.
1329
+ * Figma reference: 3364:1437
1330
+ */
1331
+ declare const DialogHeader: React$1.ForwardRefExoticComponent<DialogHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
1332
+ /**
1333
+ * Content area. Pass `scrollable` to constrain height and enable vertical scroll.
1334
+ * Figma reference: 3364:1541
1335
+ */
1336
+ declare const DialogBody: React$1.ForwardRefExoticComponent<DialogBodyProps & React$1.RefAttributes<HTMLDivElement>>;
1337
+ /**
1338
+ * Footer with Cancel + Confirm buttons and an optional top divider.
1339
+ * Figma reference: 3364:1397
1340
+ */
1341
+ declare const DialogFooter: React$1.ForwardRefExoticComponent<DialogFooterProps & React$1.RefAttributes<HTMLDivElement>>;
1342
+
1343
+ type ToastVariant = "success" | "error" | "default";
1344
+ interface ToastProps {
1345
+ /**
1346
+ * Determines the leading icon and title colour.
1347
+ * @default "default"
1348
+ */
1349
+ variant?: ToastVariant;
1350
+ /** Primary message text. */
1351
+ title: string;
1352
+ /** Optional secondary line shown below the title. */
1353
+ subtext?: string;
1354
+ /**
1355
+ * Show the icon-only Cancel action button on the right.
1356
+ * When used with `showToast()`, automatically dismisses the toast.
1357
+ * @default false
1358
+ */
1359
+ showCancel?: boolean;
1360
+ /** Called when the Cancel button is clicked. */
1361
+ onCancel?: () => void;
1362
+ /**
1363
+ * Show the thin progress bar pinned to the bottom of the toast.
1364
+ * @default false
1365
+ */
1366
+ showProgress?: boolean;
1367
+ /**
1368
+ * Progress percentage 0–100. Only used when `showProgress` is true.
1369
+ * @default 0
1370
+ */
1371
+ progress?: number;
1372
+ className?: string;
1373
+ style?: React$1.CSSProperties;
1374
+ }
1375
+ /** Options passed to `showToast()`. */
1376
+ interface ShowToastOptions extends Omit<ToastProps, "onCancel"> {
1377
+ /** Duration in ms before auto-dismiss. Defaults to Sonner's default (4000ms). */
1378
+ duration?: number;
1379
+ }
1380
+
1381
+ /**
1382
+ * Place `<Toaster />` once near the root of your app (inside `LegoLandWrapper`).
1383
+ * It is a thin wrapper around Sonner's Toaster with sensible defaults for this
1384
+ * design system.
1385
+ *
1386
+ * @example
1387
+ * // In your app root:
1388
+ * <LegoLandWrapper>
1389
+ * <Toaster />
1390
+ * <App />
1391
+ * </LegoLandWrapper>
1392
+ */
1393
+ declare const Toaster: {
1394
+ ({ position, ...props }: React$1.ComponentProps<typeof Toaster$1>): react_jsx_runtime.JSX.Element;
1395
+ displayName: string;
1396
+ };
1397
+ /**
1398
+ * Visual Toast component. Can be used standalone or via `showToast()` for
1399
+ * Sonner-powered positioning and auto-dismiss.
1400
+ *
1401
+ * Figma reference: 3364:1614 (success), 3728:2422 (default), 3728:2438 (error)
1402
+ */
1403
+ declare const Toast: React$1.ForwardRefExoticComponent<ToastProps & React$1.RefAttributes<HTMLDivElement>>;
1404
+ /**
1405
+ * Trigger a toast notification. Requires `<Toaster />` to be mounted in the app.
1406
+ *
1407
+ * @example
1408
+ * showToast({ variant: "success", title: "Saved!", subtext: "All changes saved." });
1409
+ * showToast({ variant: "error", title: "Something went wrong", showCancel: true });
1410
+ * showToast({ variant: "default", title: "Thanks for the feedback!", showProgress: true, progress: 40 });
1411
+ */
1412
+ declare const showToast: ({ duration, ...props }: ShowToastOptions) => string | number;
1413
+
1414
+ type StepState = "incomplete" | "active" | "complete";
1415
+ interface StepItem {
1416
+ /**
1417
+ * The label text shown next to the step indicator.
1418
+ */
1419
+ label: string;
1420
+ /**
1421
+ * The state of this step.
1422
+ * @default "incomplete"
1423
+ */
1424
+ state?: StepState;
1425
+ }
1426
+ interface StepperProps {
1427
+ /**
1428
+ * Array of step items to display.
1429
+ */
1430
+ steps: StepItem[];
1431
+ className?: string;
1432
+ style?: React$1.CSSProperties;
1433
+ }
1434
+ interface StepperBarProps {
1435
+ /**
1436
+ * Total number of steps (segments).
1437
+ * @default 4
1438
+ */
1439
+ totalSteps?: number;
1440
+ /**
1441
+ * Current active step (1-indexed). Segments up to this index are filled.
1442
+ */
1443
+ currentStep: number;
1444
+ className?: string;
1445
+ style?: React$1.CSSProperties;
1446
+ }
1447
+
1448
+ /**
1449
+ * StepperBar — Segmented progress bar indicating how many steps are complete.
1450
+ * Based on Figma design node: 3706:2092
1451
+ */
1452
+ declare const StepperBar: React$1.ForwardRefExoticComponent<StepperBarProps & React$1.RefAttributes<HTMLDivElement>>;
1453
+ /**
1454
+ * Stepper — Horizontal stepper with labeled steps and state indicators.
1455
+ * Each step can be "incomplete", "active", or "complete".
1456
+ * Based on Figma design node: 3729:2600
1457
+ */
1458
+ declare const Stepper: React$1.ForwardRefExoticComponent<StepperProps & React$1.RefAttributes<HTMLDivElement>>;
1459
+
1460
+ interface ShadowDOMWrapperProps {
1461
+ children: React$1.ReactNode;
1462
+ /**
1463
+ * CSS styles to inject into the shadow root.
1464
+ * If not provided, styles will be extracted from the document's stylesheets.
1465
+ * For best results, provide the compiled CSS string from your build process.
1466
+ */
1467
+ styles?: string;
1468
+ /**
1469
+ * Mode for the shadow root. Defaults to "open".
1470
+ * - "open": Shadow root is accessible via JavaScript
1471
+ * - "closed": Shadow root is not accessible via JavaScript
1472
+ */
1473
+ mode?: ShadowRootMode;
1474
+ /**
1475
+ * Additional CSS to inject into the shadow root.
1476
+ */
1477
+ additionalStyles?: string;
1478
+ /**
1479
+ * Whether to copy CSS variables from the document root.
1480
+ * Defaults to true.
1481
+ */
1482
+ copyCSSVariables?: boolean;
1483
+ }
1484
+ /**
1485
+ * ShadowDOMWrapper component that wraps children in a Shadow DOM.
1486
+ * This isolates component styles and DOM structure from the parent document.
1487
+ */
1488
+ declare const ShadowDOMWrapper: React$1.FC<ShadowDOMWrapperProps>;
1489
+
1490
+ /**
1491
+ * Cell content can be:
1492
+ * - string: plain text
1493
+ * - CellTextContent: text with optional className/style
1494
+ * - React.ReactNode: any renderable node (icon, badge, custom element)
1495
+ *
1496
+ * Figma reference node: 3338:6396
1497
+ */
1498
+ type CellTextContent = {
1499
+ text: string;
1500
+ className?: string;
1501
+ style?: React$1.CSSProperties;
1502
+ };
1503
+ type CellContent = string | CellTextContent | React$1.ReactNode;
1504
+ type SortDirection = "asc" | "desc";
1505
+ interface SortState {
1506
+ key: string;
1507
+ direction: SortDirection | null;
1508
+ }
1509
+ /**
1510
+ * Column width size options.
1511
+ * Defaults to "md" (160px).
1512
+ */
1513
+ declare enum ColumnWidth {
1514
+ xs = "xs",
1515
+ sm = "sm",
1516
+ md = "md",
1517
+ lg = "lg",
1518
+ xl = "xl"
1519
+ }
1520
+ interface ColumnDef<TRow> {
1521
+ /**
1522
+ * Unique identifier for the column. Used for pinning and sort state.
1523
+ */
1524
+ key: string;
1525
+ /**
1526
+ * Display label shown in the column header.
1527
+ */
1528
+ header: string;
1529
+ /**
1530
+ * Returns the cell content for a given row.
1531
+ */
1532
+ accessor: (row: TRow) => CellContent;
1533
+ /**
1534
+ * Whether this column supports sorting. Clicking the header cycles
1535
+ * null → asc → desc → null and fires onSortChange.
1536
+ */
1537
+ isSortable?: boolean;
1538
+ /**
1539
+ * Current sort direction for this column. When set, this column is sorted.
1540
+ * Updated by the consumer in onSortChange.
1541
+ */
1542
+ sort_direction?: SortDirection | null;
1543
+ /**
1544
+ * Column width size. Defaults to "md" (160px).
1545
+ * Required for accurate sticky offsets on pinned columns.
1546
+ */
1547
+ width?: ColumnWidth;
1548
+ }
1549
+ interface TableAction<TRow> {
1550
+ /**
1551
+ * Tooltip label shown on hover.
1552
+ */
1553
+ label: string;
1554
+ /**
1555
+ * Icon rendered inside the action button.
1556
+ */
1557
+ icon?: React$1.ReactNode;
1558
+ /**
1559
+ * Called when the action button is clicked.
1560
+ */
1561
+ onClick: (row: TRow) => void;
1562
+ }
1563
+ interface PaginationProps {
1564
+ handlePageChange: (page: number) => void;
1565
+ rowsPerPage: number;
1566
+ setRowsPerPage: (rowsPerPage: number) => void;
1567
+ currentPage: number;
1568
+ total: number;
1569
+ entityName?: string;
1570
+ }
1571
+ interface DataTableProps<TRow> {
1572
+ /**
1573
+ * Column definitions in display order. Pinned columns will be
1574
+ * reordered to the front automatically.
1575
+ */
1576
+ columns: ColumnDef<TRow>[];
1577
+ /**
1578
+ * Rows to render on the current page.
1579
+ */
1580
+ data: TRow[];
1581
+ /**
1582
+ * Array of column keys to pin. Listed in the desired left-to-right order.
1583
+ * Pinned columns are sticky and separated by a vertical line.
1584
+ */
1585
+ pinnedColumns?: string[];
1586
+ /**
1587
+ * When true, renders a checkbox column as the first column.
1588
+ */
1589
+ showCheckbox?: boolean;
1590
+ /**
1591
+ * Action buttons rendered in the last (Actions) column.
1592
+ */
1593
+ actions?: TableAction<TRow>[];
1594
+ /**
1595
+ * Returns a stable unique ID for a row (used for selection).
1596
+ * Defaults to JSON.stringify if not provided.
1597
+ */
1598
+ getRowId?: (row: TRow) => string;
1599
+ /**
1600
+ * Controlled selected row IDs.
1601
+ */
1602
+ selectedRows?: string[];
1603
+ /**
1604
+ * Called when selection changes.
1605
+ */
1606
+ onSelectionChange?: (ids: string[]) => void;
1607
+ /**
1608
+ * Called when sort state changes. The consumer should update columns to set
1609
+ * sort_direction on the sorted column (or clear it when sort is null).
1610
+ */
1611
+ onSortChange?: (sort: SortState | null) => void;
1612
+ /**
1613
+ * When false, hides the pagination footer. Defaults to true.
1614
+ */
1615
+ showPagination?: boolean;
1616
+ currentPage?: number;
1617
+ rowsPerPage?: number;
1618
+ total?: number;
1619
+ onPageChange?: (page: number) => void;
1620
+ onRowsPerPageChange?: (rowsPerPage: number) => void;
1621
+ entityName?: string;
1622
+ /**
1623
+ * When false, hides the outer border. Defaults to true.
1624
+ */
1625
+ showBorder?: boolean;
1626
+ /**
1627
+ * When true, the header row stays fixed at the top while the table body scrolls.
1628
+ */
1629
+ stickyHeader?: boolean;
1630
+ className?: string;
1631
+ /**
1632
+ * When true, shows skeleton loading state with 10 rows.
1633
+ */
1634
+ loading?: boolean;
1635
+ /**
1636
+ * Called when a data row is clicked. Receives the row data.
1637
+ */
1638
+ onRowClick?: (row: TRow) => void;
1639
+ }
1640
+
1641
+ /**
1642
+ * Pagination controls: rows-per-page selector + page navigation.
1643
+ * Can also be used standalone outside of DataTable.
1644
+ *
1645
+ * Figma reference node: 3338:6396
1646
+ */
1647
+ declare function Pagination({ handlePageChange, rowsPerPage, setRowsPerPage, currentPage, total, entityName, }: PaginationProps): react_jsx_runtime.JSX.Element;
1648
+ declare namespace Pagination {
1649
+ var displayName: string;
1650
+ }
1651
+ /**
1652
+ * A fully-featured data table with:
1653
+ * - Column pinning (sticky with vertical divider)
1654
+ * - Horizontal scrolling
1655
+ * - Optional checkbox selection column
1656
+ * - Flexible cell content (text, styled text, icon, badge, or any React node)
1657
+ * - Sortable columns (consumer-driven — fires onSortChange)
1658
+ * - Row action buttons
1659
+ * - Pagination via Pagination
1660
+ *
1661
+ * Figma reference node: 3338:6396
1662
+ */
1663
+ declare function DataTable<TRow>({ columns, data, pinnedColumns, showCheckbox, actions, getRowId, selectedRows, onSelectionChange, onSortChange, showPagination, currentPage, rowsPerPage, total, onPageChange, onRowsPerPageChange, entityName, showBorder, stickyHeader, className, loading, onRowClick, }: DataTableProps<TRow>): react_jsx_runtime.JSX.Element;
1664
+ declare namespace DataTable {
1665
+ var displayName: string;
1666
+ }
1667
+
1668
+ /**
1669
+ * Filter item structure
1670
+ */
1671
+ interface FilterItem<T = string> {
1672
+ value: T;
1673
+ label: string;
1674
+ }
1675
+ /**
1676
+ * Props for FilterSelect component
1677
+ */
1678
+ interface FilterSelectProps<T = string> extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onChange" | "className"> {
1679
+ /** Filter label displayed in the trigger button */
1680
+ label?: string;
1681
+ /** Icon displayed on the left side of the trigger */
1682
+ icon?: LucideIcon;
1683
+ /** Array of selected item values */
1684
+ selectedItems?: T[];
1685
+ /** Available items for selection */
1686
+ items: FilterItem<T>[];
1687
+ /** Enable drag-and-drop reordering (default: false) */
1688
+ draggable?: boolean;
1689
+ /** Callback when selection changes */
1690
+ onSelectionChange?: (values: T[]) => void;
1691
+ /** Callback when order changes (draggable mode) */
1692
+ onOrderChange?: (values: T[]) => void;
1693
+ /** Max width for selected items display (default: "35ch") */
1694
+ selectedItemsMaxWidth?: string;
1695
+ /** Override classes for selected items display area */
1696
+ selectedItemsClassName?: string;
1697
+ /** Default open state */
1698
+ defaultOpen?: boolean;
1699
+ /** Controlled open state */
1700
+ open?: boolean;
1701
+ /** Callback when open state changes */
1702
+ onOpenChange?: (open: boolean) => void;
1703
+ /** Max height for dropdown content (default: "20vh") */
1704
+ dropdownMaxHeight?: string;
1705
+ /** Show loading spinner in dropdown */
1706
+ loading?: boolean;
1707
+ onRemoveAll?: () => void;
1708
+ /** Type of filter select: "list" (default), "text", "text_with_operands", or "date" */
1709
+ type?: "list" | "text" | "text_with_operands" | "date";
1710
+ /** Controlled text value for textarea/input (for "text" and "text_with_operands" types) */
1711
+ text?: string;
1712
+ /** Callback when text changes (for "text" and "text_with_operands" types) */
1713
+ onTextChange?: (text: string) => void;
1714
+ /** Selected operand value (for "text_with_operands" type) */
1715
+ operand?: string;
1716
+ /** Callback when operand changes (for "text_with_operands" type) */
1717
+ onOperandChange?: (operand: string) => void;
1718
+ /** Available operands (for "text_with_operands" type) */
1719
+ operands?: {
1720
+ value: string;
1721
+ label: string;
1722
+ }[];
1723
+ /** Placeholder text for textarea/input (for "text" and "text_with_operands" types) */
1724
+ textPlaceholder?: string;
1725
+ /** Placeholder for operand select (for "text_with_operands" type, default: "") */
1726
+ operandPlaceholder?: string;
1727
+ /** Date range value (for "date" type): { start, end } */
1728
+ date?: {
1729
+ start?: Date;
1730
+ end?: Date;
1731
+ };
1732
+ /** Callback when date range changes (for "date" type) */
1733
+ onDateChange?: (date: {
1734
+ start?: Date;
1735
+ end?: Date;
1736
+ }) => void;
1737
+ /** Date presets to show (default: true = built-in presets). Set false to hide, or pass custom array */
1738
+ datePresets?: boolean | DatePreset[];
1739
+ /** Show time picker in date filter (default: true) */
1740
+ showTime?: boolean;
1741
+ /** Additional className for the trigger button */
1742
+ triggerClassName?: string;
1743
+ /** Additional className for the dropdown content */
1744
+ dropdownClassName?: string;
1745
+ }
1746
+ /** Date preset: label and function to compute the range */
1747
+ interface DatePreset {
1748
+ value: string;
1749
+ label: string;
1750
+ getRange: () => {
1751
+ start: Date;
1752
+ end: Date;
1753
+ };
1754
+ }
1755
+ /**
1756
+ * Props for FilterListItem component
1757
+ */
1758
+ interface FilterListItemProps<T = string> {
1759
+ /** Unique item value */
1760
+ value: T;
1761
+ /** Display text */
1762
+ label: string;
1763
+ /** Selection state */
1764
+ selected?: boolean;
1765
+ /** Show drag handle */
1766
+ draggable?: boolean;
1767
+ /** Selection handler */
1768
+ onSelect?: (value: T) => void;
1769
+ /** Hover state (for stories) */
1770
+ hover?: boolean;
1771
+ /** Additional className */
1772
+ className?: string;
1773
+ }
1774
+
1775
+ declare const FilterSelect: React$1.ForwardRefExoticComponent<FilterSelectProps<string> & React$1.RefAttributes<HTMLDivElement>>;
1776
+
1777
+ declare const FilterListItem: React$1.ForwardRefExoticComponent<FilterListItemProps<string> & {
1778
+ onDragStart?: (e: React$1.DragEvent) => void;
1779
+ onDragOver?: (e: React$1.DragEvent) => void;
1780
+ onDragLeave?: (e: React$1.DragEvent) => void;
1781
+ onDrop?: (e: React$1.DragEvent) => void;
1782
+ onDragEnd?: (e: React$1.DragEvent) => void;
1783
+ isDragging?: boolean;
1784
+ isDragOver?: boolean;
1785
+ } & React$1.RefAttributes<HTMLDivElement>>;
1786
+
1787
+ interface ButtonListItem {
1788
+ value: string;
1789
+ label: string;
1790
+ icon?: LucideIcon;
1791
+ }
1792
+ interface ButtonListProps {
1793
+ label?: string;
1794
+ leadingIcon?: LucideIcon;
1795
+ items: ButtonListItem[];
1796
+ onSelect?: (value: string) => void;
1797
+ defaultOpen?: boolean;
1798
+ open?: boolean;
1799
+ onOpenChange?: (open: boolean) => void;
1800
+ className?: string;
1801
+ dropdownClassName?: string;
1802
+ }
1803
+
1804
+ declare const ButtonList: React$1.ForwardRefExoticComponent<ButtonListProps & React$1.RefAttributes<HTMLDivElement>>;
1805
+
1806
+ type SpinnerSize = "sm" | "md" | "lg" | "xl";
1807
+ interface SpinnerProps extends React$1.HTMLAttributes<HTMLDivElement> {
1808
+ /**
1809
+ * Size of the spinner
1810
+ * @default "md"
1811
+ */
1812
+ size?: SpinnerSize;
1813
+ /**
1814
+ * Custom className for the spinner container
1815
+ */
1816
+ className?: string;
1817
+ }
1818
+
1819
+ /**
1820
+ * Spinner component - Displays a loading spinner with size variations
1821
+ * Based on Figma design node: 3357:4429
1822
+ */
1823
+ declare const Spinner: React$1.ForwardRefExoticComponent<SpinnerProps & React$1.RefAttributes<HTMLDivElement>>;
1824
+
1825
+ /**
1826
+ * Supported Monaco editor languages.
1827
+ */
1828
+ type JsonEditorLanguage = "json" | "javascript" | "typescript" | "yaml" | "xml" | "html" | "css" | "markdown" | "sql" | "plaintext";
1829
+ declare const JSON_EDITOR_LANGUAGE_OPTIONS: readonly JsonEditorLanguage[];
1830
+ interface JsonEditorProps {
1831
+ value: string;
1832
+ onChange: (val: string) => void;
1833
+ onParsedObject?: (obj: unknown | null) => void;
1834
+ height?: string;
1835
+ label?: string;
1836
+ schema?: Schema;
1837
+ nodeId?: string;
1838
+ language?: JsonEditorLanguage;
1839
+ showExpandButton?: boolean;
1840
+ /** When true, hide the header/toolbar (for embedding in KeyValueJsonEditor). */
1841
+ hideHeader?: boolean;
1842
+ }
1843
+
1844
+ declare function JsonEditor({ value, onChange, onParsedObject, height, label, schema, nodeId, language, showExpandButton, hideHeader, }: JsonEditorProps): react_jsx_runtime.JSX.Element;
1845
+
1846
+ interface UseJsonEditorParams {
1847
+ value: string;
1848
+ onChange: (val: string) => void;
1849
+ onParsedObject?: (obj: unknown | null) => void;
1850
+ schema?: Schema;
1851
+ nodeId?: string;
1852
+ language?: JsonEditorLanguage;
1853
+ }
1854
+ declare function useJsonEditor({ value, onChange, onParsedObject, schema, nodeId, language, }: UseJsonEditorParams): {
1855
+ handleMount: OnMount;
1856
+ handleExpandedMount: OnMount;
1857
+ handleChange: (val: string | undefined) => void;
1858
+ formatJson: () => Promise<void> | undefined;
1859
+ formatExpandedJson: () => Promise<void> | undefined;
1860
+ copyToClipboard: () => void;
1861
+ errors: string[];
1862
+ copied: boolean;
1863
+ };
1864
+
1865
+ declare const enhanceJsonError: (message: string) => string;
1866
+ declare const MONACO_OPTIONS: {
1867
+ fontSize: number;
1868
+ lineHeight: number;
1869
+ padding: {
1870
+ top: number;
1871
+ bottom: number;
1872
+ };
1873
+ minimap: {
1874
+ readonly enabled: false;
1875
+ };
1876
+ automaticLayout: true;
1877
+ scrollBeyondLastLine: false;
1878
+ folding: true;
1879
+ lineNumbers: "on";
1880
+ renderLineHighlight: "none";
1881
+ fontFamily: "'Geist Mono', 'Cascadia Code', 'Fira Code', monospace";
1882
+ fontLigatures: true;
1883
+ bracketPairColorization: {
1884
+ readonly enabled: true;
1885
+ };
1886
+ guides: {
1887
+ readonly bracketPairs: false;
1888
+ readonly indentation: false;
1889
+ };
1890
+ overviewRulerLanes: 0;
1891
+ hideCursorInOverviewRuler: true;
1892
+ overviewRulerBorder: false;
1893
+ scrollbar: {
1894
+ readonly vertical: "auto";
1895
+ readonly horizontal: "auto";
1896
+ readonly useShadows: false;
1897
+ readonly verticalScrollbarSize: 6;
1898
+ readonly horizontalScrollbarSize: 6;
1899
+ readonly arrowSize: 0;
1900
+ };
1901
+ };
1902
+ /** Dialog editor: tighter padding, slightly larger font for readability in expanded view */
1903
+ declare const MONACO_OPTIONS_DIALOG: {
1904
+ fontSize: number;
1905
+ lineHeight: number;
1906
+ padding: {
1907
+ top: number;
1908
+ bottom: number;
1909
+ };
1910
+ minimap: {
1911
+ readonly enabled: false;
1912
+ };
1913
+ automaticLayout: true;
1914
+ scrollBeyondLastLine: false;
1915
+ folding: true;
1916
+ lineNumbers: "on";
1917
+ renderLineHighlight: "none";
1918
+ fontFamily: "'Geist Mono', 'Cascadia Code', 'Fira Code', monospace";
1919
+ fontLigatures: true;
1920
+ bracketPairColorization: {
1921
+ readonly enabled: true;
1922
+ };
1923
+ guides: {
1924
+ readonly bracketPairs: false;
1925
+ readonly indentation: false;
1926
+ };
1927
+ overviewRulerLanes: 0;
1928
+ hideCursorInOverviewRuler: true;
1929
+ overviewRulerBorder: false;
1930
+ scrollbar: {
1931
+ readonly vertical: "auto";
1932
+ readonly horizontal: "auto";
1933
+ readonly useShadows: false;
1934
+ readonly verticalScrollbarSize: 6;
1935
+ readonly horizontalScrollbarSize: 6;
1936
+ readonly arrowSize: 0;
1937
+ };
1938
+ };
1939
+
1940
+ interface KeyValuePair {
1941
+ key: string;
1942
+ value: string;
1943
+ }
1944
+ interface KeyValueEditorProps {
1945
+ /**
1946
+ * Key-value pairs.
1947
+ */
1948
+ pairs: KeyValuePair[];
1949
+ /**
1950
+ * Called when pairs change.
1951
+ */
1952
+ onPairsChange: (pairs: KeyValuePair[]) => void;
1953
+ /**
1954
+ * Placeholder for key inputs.
1955
+ */
1956
+ keyPlaceholder?: string;
1957
+ /**
1958
+ * Placeholder for value inputs.
1959
+ */
1960
+ valuePlaceholder?: string;
1961
+ /**
1962
+ * Optional toolbar content (e.g. Toggle button) rendered in the header.
1963
+ */
1964
+ toolbar?: React$1.ReactNode;
1965
+ /**
1966
+ * When true, omit the header row. For use inside KeyValueJsonEditor.
1967
+ */
1968
+ hideHeader?: boolean;
1969
+ /**
1970
+ * When true, show delete button on each row. When false, delete is hidden.
1971
+ * Rows can only be deleted until 1 row remains.
1972
+ * @default true
1973
+ */
1974
+ allowDeleteRow?: boolean;
1975
+ className?: string;
1976
+ style?: React$1.CSSProperties;
1977
+ }
1978
+
1979
+ /**
1980
+ * KeyValueEditor - Table-style key-value pair editor.
1981
+ * Renders header (Key, Value) and editable rows with delete on hover.
1982
+ * Figma reference: 258:10275
1983
+ */
1984
+ declare const KeyValueEditor: React$1.ForwardRefExoticComponent<KeyValueEditorProps & React$1.RefAttributes<HTMLDivElement>>;
1985
+
1986
+ type KeyValueJsonEditorMode = "keyValue" | "json";
1987
+ interface KeyValueJsonEditorProps {
1988
+ /**
1989
+ * Current mode: key-value table or JSON editor.
1990
+ */
1991
+ mode?: KeyValueJsonEditorMode;
1992
+ /**
1993
+ * Initial mode when uncontrolled.
1994
+ */
1995
+ defaultMode?: KeyValueJsonEditorMode;
1996
+ /**
1997
+ * Called when mode changes (e.g. via toggle).
1998
+ */
1999
+ onModeChange?: (mode: KeyValueJsonEditorMode) => void;
2000
+ /**
2001
+ * Key-value pairs (controlled). Used when mode is "keyValue".
2002
+ */
2003
+ pairs?: KeyValuePair[];
2004
+ /**
2005
+ * JSON string (controlled). Used when mode is "json".
2006
+ */
2007
+ jsonValue?: string;
2008
+ /**
2009
+ * Called when pairs change (key-value mode).
2010
+ */
2011
+ onPairsChange?: (pairs: KeyValuePair[]) => void;
2012
+ /**
2013
+ * Called when JSON changes (json mode).
2014
+ */
2015
+ onJsonChange?: (json: string) => void;
2016
+ /**
2017
+ * Initial pairs when uncontrolled.
2018
+ */
2019
+ defaultPairs?: KeyValuePair[];
2020
+ /**
2021
+ * Initial JSON when uncontrolled.
2022
+ */
2023
+ defaultJson?: string;
2024
+ keyPlaceholder?: string;
2025
+ valuePlaceholder?: string;
2026
+ jsonHeight?: string;
2027
+ jsonLabel?: string;
2028
+ /**
2029
+ * JsonEditor language when in JSON mode.
2030
+ */
2031
+ jsonLanguage?: JsonEditorLanguage;
2032
+ className?: string;
2033
+ style?: React.CSSProperties;
2034
+ }
2035
+
2036
+ /**
2037
+ * KeyValueJsonEditor - Unified component with toggle between Key-Value and JSON modes.
2038
+ * Figma reference: 258:10275, 298:6652
2039
+ */
2040
+ declare const KeyValueJsonEditor: React$1.ForwardRefExoticComponent<KeyValueJsonEditorProps & React$1.RefAttributes<HTMLDivElement>>;
26
2041
 
27
- export { Button, type ButtonProps, buttonVariants };
2042
+ export { Accordion, AccordionContent, AccordionContentPlaceholder, type AccordionContentProps, AccordionItem, type AccordionItemProps, type AccordionProps, AccordionTrigger, type AccordionTriggerProps, type AccordionType, type AccordionValue, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarShape, type AvatarSize, type BackButtonPosition, Badge, type BadgeProps, type BadgeVariant, Button, type ButtonBorderRadius, ButtonList, type ButtonListItem, type ButtonListProps, type ButtonProps, type ButtonSize, type ButtonVariant, type CellContent, type CellTextContent, Checkbox, type CheckboxProps, type ColumnDef, ColumnWidth, DEFAULT_THEME, DataTable, type DataTableProps, type DatePreset, Dialog, DialogBody, type DialogBodyProps, DialogFooter, type DialogFooterProps, DialogHeader, DialogHeaderNavigation, type DialogHeaderNavigationProps, type DialogHeaderNavigationVariant, type DialogHeaderProps, DialogIcon, type DialogIconProps, type DialogProps, type DialogSize, type DialogType, EmptyState, type EmptyStateIllustrationPosition, type EmptyStateIllustrationSize, type EmptyStateProps, FileInput, type FileInputProps, type FilterItem, FilterListItem, type FilterListItemProps, FilterSelect, type FilterSelectProps, Input, type InputBorderRadius, type InputForceState, InputGroup, type InputGroupBorderRadius, type InputGroupForceState, type InputGroupProps, type InputProps, JSON_EDITOR_LANGUAGE_OPTIONS, JsonEditor, type JsonEditorLanguage, type JsonEditorProps, KeyValueEditor, type KeyValueEditorProps, KeyValueJsonEditor, type KeyValueJsonEditorMode, type KeyValueJsonEditorProps, type KeyValuePair, LegoLandWrapper, type LegoLandWrapperProps, List, type ListBorderRadius, type ListProps, type ListType, type ListVariant, MONACO_OPTIONS, MONACO_OPTIONS_DIALOG, NumberBadge, type NumberBadgeProps, type NumberBadgeVariant, NurixThemeProvider, Pagination, type PaginationProps, PlaySelect, type PlaySelectAudioItem, type PlaySelectProps, PlaybackControl, type PlaybackControlProps, type PlaybackState, RadioGroup, RadioGroupItem, type RadioGroupItemProps, type RadioGroupProps, Select, SelectContent, type SelectContentItem, SelectFormLabel, SelectGroup, type SelectGroupProps, SelectItem, SelectLabel, type SelectLabelProps, type SelectMenuItemProps, type SelectProps, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, ShadowDOMWrapper, type ShowToastOptions, type SortDirection, type SortState, Spinner, type SpinnerProps, type SpinnerSize, type StepItem, type StepState, Stepper, StepperBar, type StepperBarProps, type StepperProps, type SupportingTextType, Switch, type SwitchProps, type SwitchSize, type TabVariant, type TableAction, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, Textarea, type TextareaBorderRadius, type TextareaForceState, type TextareaProps, ThemeProvider, Toast, type ToastProps, type ToastVariant, Toaster, Tooltip, TooltipContent, type TooltipContentProps, TooltipProvider, TooltipTrigger, Typography, type TypographyProps, type TypographyTone, type TypographyVariant, type UsePlaySelectProps, type UseSelectProps, enhanceJsonError, showToast, useJsonEditor, usePlaySelect, useSelect, useTheme };