@nurix/ui-component-library 1.1.4 → 1.1.5-stage.129

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,19 +1,3632 @@
1
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';
2
11
 
3
- type ButtonBorderRadius = "none" | "soft" | "rounded" | "pill";
4
- type ButtonVariant = "primary" | "destructive" | "outline" | "secondary" | "link";
5
- type ButtonSize = "default" | "sm" | "lg" | "icon";
6
- interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
12
+ type ButtonBorderRadius = "none" | "soft" | "rounded" | "nestedLeft" | "nestedMiddle" | "nestedRight";
13
+ type ButtonVariant = "primary" | "secondary" | "destructive" | "outline" | "link" | "iconPrimary" | "iconSecondary" | "iconOutline" | "iconLink";
14
+ type ButtonSize = "lg" | "default" | "sm" | "xs" | "link" | "icon" | "iconMd" | "iconSm" | "iconXs";
15
+ interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
7
16
  variant?: ButtonVariant;
8
17
  size?: ButtonSize;
9
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;
10
28
  /**
11
29
  * Design-system controlled border radius
12
30
  */
13
31
  button_border_radius?: ButtonBorderRadius;
14
32
  asChild?: boolean;
33
+ /**
34
+ * Optional `data-testid` for Playwright. Defaults to `"btn"` if omitted.
35
+ * By convention pass a descriptive name like `"btn-create-agent"`.
36
+ */
37
+ "data-testid"?: string;
15
38
  }
16
39
 
17
40
  declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
41
+ interface NestedButtonGroupProps extends React$1.HTMLAttributes<HTMLDivElement> {
42
+ children: React$1.ReactNode;
43
+ }
44
+ /**
45
+ * NestedButtonGroup — renders any number of `<Button>` children as one pill.
46
+ * Assigns the correct `button_border_radius` (nestedLeft / nestedMiddle /
47
+ * nestedRight) per position and overlaps borders by -1px so the shared edge
48
+ * draws once. Figma: 5490:33596.
49
+ */
50
+ declare const NestedButtonGroup: React$1.ForwardRefExoticComponent<NestedButtonGroupProps & React$1.RefAttributes<HTMLDivElement>>;
51
+
52
+ type InputBorderRadius = "none" | "soft" | "rounded" | "pill";
53
+ type InputVariant = "grey" | "white" | "borderless";
54
+ type SupportingTextType = "help" | "error" | "success";
55
+ type InputForceState = "active" | "focussed" | "disabled";
56
+ /**
57
+ * Input size variant.
58
+ * - `md` (default): 40px height — standard forms.
59
+ * - `sm`: 32px height — compact use (filter dropdowns, toolbars).
60
+ */
61
+ type InputSize = "md" | "sm";
62
+ interface InputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size"> {
63
+ /**
64
+ * Optional label shown above the field.
65
+ */
66
+ label?: string;
67
+ /**
68
+ * Whether to show a red "*" required indicator next to the label.
69
+ */
70
+ mandatory?: boolean;
71
+ /**
72
+ * Icon or element rendered in the leading slot (left side, 16px).
73
+ */
74
+ leadingIcon?: React$1.ReactNode;
75
+ /**
76
+ * Icon or element rendered in the trailing slot (right side, 16px).
77
+ */
78
+ trailingIcon?: React$1.ReactNode;
79
+ /**
80
+ * Suffix text rendered at the trailing end (e.g. ".com", "kg").
81
+ * Ignored when `trailingIcon` is provided.
82
+ */
83
+ suffix?: string;
84
+ /**
85
+ * Supporting/help/error text shown below the field.
86
+ */
87
+ supportingText?: string;
88
+ /**
89
+ * Visual style for supporting text.
90
+ */
91
+ supportingTextType?: SupportingTextType;
92
+ /**
93
+ * Hide the supporting text row (even if `supportingText` is provided).
94
+ */
95
+ hideSupportingText?: boolean;
96
+ /**
97
+ * Input field background variant in light mode.
98
+ * grey: light grey background (--input). white: white background (--card).
99
+ * @default "grey"
100
+ */
101
+ inputVariant?: InputVariant;
102
+ /**
103
+ * Size variant of the input field.
104
+ * - `md` (default): 40px height. Standard forms.
105
+ * - `sm`: 32px height, compact vertical padding. Used in filter dropdowns / toolbars.
106
+ * @default "md"
107
+ */
108
+ inputSize?: InputSize;
109
+ /**
110
+ * Design-system controlled border radius.
111
+ */
112
+ input_border_radius?: InputBorderRadius;
113
+ /**
114
+ * Force a visual state (useful for sticker-sheet stories).
115
+ * When unset, focus/disabled styles are derived from real DOM state.
116
+ */
117
+ forceState?: InputForceState;
118
+ /**
119
+ * Marks the field as invalid (shadcn-style).
120
+ * Sets `aria-invalid` and applies destructive border/ring styling.
121
+ *
122
+ * Note: `supportingTextType="error"` will also style the field as invalid.
123
+ */
124
+ invalid?: boolean;
125
+ /**
126
+ * Optional `data-testid` for Playwright. Defaults to `"input"` if omitted.
127
+ * By convention pass a descriptive name like `"input-agent-name"`.
128
+ */
129
+ "data-testid"?: string;
130
+ }
131
+ interface FileInputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "onChange"> {
132
+ label?: string;
133
+ mandatory?: boolean;
134
+ buttonLabel?: string;
135
+ placeholder?: string;
136
+ fileName?: string;
137
+ input_border_radius?: InputBorderRadius;
138
+ inputVariant?: InputVariant;
139
+ onFileChange?: (file: File | null) => void;
140
+ /**
141
+ * Optional `data-testid` for Playwright. Defaults to `"input"` if omitted.
142
+ */
143
+ "data-testid"?: string;
144
+ }
145
+
146
+ declare const Input: React$1.ForwardRefExoticComponent<InputProps & React$1.RefAttributes<HTMLInputElement>>;
147
+
148
+ declare const FileInput: React$1.ForwardRefExoticComponent<FileInputProps & React$1.RefAttributes<HTMLInputElement>>;
149
+
150
+ type InputGroupBorderRadius = "none" | "soft" | "rounded" | "pill";
151
+ type InputGroupForceState = "active" | "focussed" | "disabled";
152
+ interface InputGroupProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size"> {
153
+ /**
154
+ * Optional label shown above the field.
155
+ */
156
+ label?: string;
157
+ /**
158
+ * Whether to show a red "*" required indicator next to the label.
159
+ */
160
+ mandatory?: boolean;
161
+ /**
162
+ * Supporting/help/error text shown below the field.
163
+ */
164
+ supportingText?: string;
165
+ /**
166
+ * Force a visual state (useful for sticker-sheet stories).
167
+ */
168
+ forceState?: InputGroupForceState;
169
+ /**
170
+ * Marks the field as invalid.
171
+ */
172
+ invalid?: boolean;
173
+ /**
174
+ * Optional content shown on the left of the input (icon/text/button).
175
+ */
176
+ startAdornment?: React$1.ReactNode;
177
+ /**
178
+ * Optional content shown on the right of the input (icon/text/button).
179
+ */
180
+ endAdornment?: React$1.ReactNode;
181
+ /**
182
+ * Optional content separated by a divider on the far left (e.g. "https://").
183
+ */
184
+ startSegment?: React$1.ReactNode;
185
+ /**
186
+ * Optional content separated by a divider on the far right (e.g. ".com").
187
+ */
188
+ endSegment?: React$1.ReactNode;
189
+ input_border_radius?: InputGroupBorderRadius;
190
+ /**
191
+ * Input field background variant in light mode.
192
+ * grey: light grey (--input). white: white (--card).
193
+ * @default "grey"
194
+ */
195
+ inputVariant?: InputVariant;
196
+ /**
197
+ * Optional `data-testid` for Playwright. Defaults to `"input"` if omitted.
198
+ */
199
+ "data-testid"?: string;
200
+ }
201
+
202
+ declare const InputGroup: React$1.ForwardRefExoticComponent<InputGroupProps & React$1.RefAttributes<HTMLInputElement>>;
203
+
204
+ type TextareaBorderRadius = "none" | "soft" | "rounded" | "pill";
205
+ type TextareaForceState = "active" | "focussed" | "disabled";
206
+ interface TextareaProps extends Omit<React$1.TextareaHTMLAttributes<HTMLTextAreaElement>, "style"> {
207
+ /**
208
+ * Optional label shown above the field.
209
+ */
210
+ label?: string;
211
+ /**
212
+ * Whether to show a red "*" required indicator next to the label.
213
+ */
214
+ mandatory?: boolean;
215
+ /**
216
+ * Supporting/help/error text shown below the field.
217
+ */
218
+ supportingText?: string;
219
+ /**
220
+ * Visual style for supporting text.
221
+ */
222
+ supportingTextType?: SupportingTextType;
223
+ /**
224
+ * Hide the supporting text row (even if `supportingText` is provided).
225
+ */
226
+ hideSupportingText?: boolean;
227
+ /**
228
+ * Input field background variant in light mode.
229
+ * grey: light grey (--input). white: white (--card).
230
+ * @default "grey"
231
+ */
232
+ inputVariant?: InputVariant;
233
+ /**
234
+ * Design-system controlled border radius.
235
+ */
236
+ input_border_radius?: TextareaBorderRadius;
237
+ /**
238
+ * Force a visual state (useful for sticker-sheet stories).
239
+ * When unset, focus/disabled styles are derived from real DOM state.
240
+ */
241
+ forceState?: TextareaForceState;
242
+ /**
243
+ * Marks the field as invalid.
244
+ * Sets `aria-invalid` and applies destructive border/ring styling.
245
+ */
246
+ invalid?: boolean;
247
+ /**
248
+ * Resize behavior of the textarea.
249
+ */
250
+ resize?: "none" | "vertical" | "horizontal" | "both";
251
+ style?: React$1.CSSProperties;
252
+ /**
253
+ * Optional `data-testid` for Playwright. Defaults to `"input"` if omitted.
254
+ * By convention pass a descriptive name like `"input-description"`.
255
+ */
256
+ "data-testid"?: string;
257
+ }
258
+
259
+ /**
260
+ * Textarea - Standalone textarea component.
261
+ * Matches Input component structure and states (label, supportingText, forceState, invalid, etc).
262
+ */
263
+ declare const Textarea: React$1.ForwardRefExoticComponent<TextareaProps & React$1.RefAttributes<HTMLTextAreaElement>>;
264
+
265
+ type SwitchSize = "default" | "small";
266
+ interface SwitchProps {
267
+ /**
268
+ * Controlled checked state.
269
+ */
270
+ checked?: boolean;
271
+ /**
272
+ * Uncontrolled initial state.
273
+ */
274
+ defaultChecked?: boolean;
275
+ /**
276
+ * Called whenever the checked state changes.
277
+ */
278
+ onCheckedChange?: (checked: boolean) => void;
279
+ disabled?: boolean;
280
+ size?: SwitchSize;
281
+ /**
282
+ * Whether to show the label. When true, label will be displayed for both on and off states.
283
+ */
284
+ showLabel?: boolean;
285
+ /**
286
+ * The label text to display. Will show "Toggle On" or "Toggle Off" based on state if not provided.
287
+ */
288
+ labelText?: string;
289
+ /**
290
+ * Placement of the label relative to the switch.
291
+ * @default "right"
292
+ */
293
+ labelPlacement?: "left" | "right";
294
+ /**
295
+ * Optional id for associating external labels.
296
+ */
297
+ id?: string;
298
+ className?: string;
299
+ style?: React$1.CSSProperties;
300
+ /**
301
+ * Optional `data-testid` for Playwright. Defaults to `"toggle"` if omitted
302
+ * (Switch uses the same prefix as Toggle since they're the same control family).
303
+ * By convention pass a descriptive name like `"toggle-streaming"`.
304
+ */
305
+ "data-testid"?: string;
306
+ }
307
+
308
+ declare const Switch: React$1.ForwardRefExoticComponent<SwitchProps & React$1.RefAttributes<HTMLButtonElement>>;
309
+
310
+ interface SliderProps {
311
+ /**
312
+ * Controlled value. Single-thumb slider — pass a single number.
313
+ */
314
+ value?: number;
315
+ /**
316
+ * Uncontrolled initial value.
317
+ * @default min
318
+ */
319
+ defaultValue?: number;
320
+ /**
321
+ * Called whenever the value changes (during drag and on commit).
322
+ */
323
+ onValueChange?: (value: number) => void;
324
+ /**
325
+ * Called when the user finishes interacting (pointer up / blur).
326
+ */
327
+ onValueCommit?: (value: number) => void;
328
+ /**
329
+ * Minimum allowed value.
330
+ * @default 0
331
+ */
332
+ min?: number;
333
+ /**
334
+ * Maximum allowed value.
335
+ * @default 100
336
+ */
337
+ max?: number;
338
+ /**
339
+ * Step granularity.
340
+ * @default 1
341
+ */
342
+ step?: number;
343
+ disabled?: boolean;
344
+ /**
345
+ * Label shown at the left edge (under the min end of the track).
346
+ * The label row renders automatically when either `minLabel` or
347
+ * `maxLabel` is provided.
348
+ */
349
+ minLabel?: React$1.ReactNode;
350
+ /**
351
+ * Label shown at the right edge (under the max end of the track).
352
+ * The label row renders automatically when either `minLabel` or
353
+ * `maxLabel` is provided.
354
+ */
355
+ maxLabel?: React$1.ReactNode;
356
+ /**
357
+ * Accessible name for the thumb.
358
+ */
359
+ "aria-label"?: string;
360
+ /**
361
+ * Optional id forwarded to the underlying root element.
362
+ */
363
+ id?: string;
364
+ className?: string;
365
+ style?: React$1.CSSProperties;
366
+ /**
367
+ * Optional `data-testid` for Playwright. Defaults to `"slider"` if omitted.
368
+ * By convention pass a descriptive name like `"slider-temperature"`.
369
+ */
370
+ "data-testid"?: string;
371
+ }
372
+
373
+ /**
374
+ * Slider — single-thumb range input with optional min/max edge labels.
375
+ *
376
+ * Figma reference: 557:22788, 557:23017.
377
+ */
378
+ declare const Slider: React$1.ForwardRefExoticComponent<SliderProps & React$1.RefAttributes<HTMLSpanElement>>;
379
+
380
+ /**
381
+ * Toggle (segmented pill / card) — Figma references:
382
+ * - 4960:33812 — IconToggleSetRegular (size = "regular", 36×36 pills)
383
+ * - 4960:33890 — ToggleIconSmall (size = "small", 24×24 pills + card)
384
+ *
385
+ * A segmented control rendered inside a grey rounded container. The
386
+ * selected option is filled white with a 1px xlight border and a
387
+ * shadow-xs drop.
388
+ *
389
+ * Two shapes:
390
+ * - `pill` — single-line option (icon, icon + text, or text only)
391
+ * - `card` — square option with title row + subtext below (only valid
392
+ * for `size="small"`).
393
+ */
394
+ type ToggleType = "iconText" | "iconOnly" | "textOnly";
395
+ type ToggleShape = "pill" | "card";
396
+ type ToggleSize = "regular" | "small";
397
+ interface ToggleProps {
398
+ /**
399
+ * Controlled selected value. When set, the parent owns state.
400
+ */
401
+ value?: string;
402
+ /**
403
+ * Initial selected value when uncontrolled.
404
+ */
405
+ defaultValue?: string;
406
+ /**
407
+ * Called when the user picks a different option.
408
+ */
409
+ onValueChange?: (value: string) => void;
410
+ /**
411
+ * Layout for items inside the pill. Ignored when `shape="card"`.
412
+ * @default "iconText"
413
+ */
414
+ type?: ToggleType;
415
+ /**
416
+ * Item shape.
417
+ * - "pill" — single-line rounded-full option
418
+ * - "card" — square option with stacked title + subtext (small size)
419
+ * @default "pill"
420
+ */
421
+ shape?: ToggleShape;
422
+ /**
423
+ * Size of items.
424
+ * - "regular" — 36×36 pills, 16×16 icons, 14px semibold label
425
+ * - "small" — 24h pills, 12×12 icons, 12px medium label; required
426
+ * for `shape="card"`
427
+ * @default "regular"
428
+ */
429
+ size?: ToggleSize;
430
+ /**
431
+ * Disable the entire toggle.
432
+ */
433
+ disabled?: boolean;
434
+ /**
435
+ * Toggle items — one or more `<ToggleItem>` children.
436
+ */
437
+ children?: React$1.ReactNode;
438
+ className?: string;
439
+ style?: React$1.CSSProperties;
440
+ /**
441
+ * Optional `data-testid` for Playwright. Defaults to `"toggle"` if omitted.
442
+ */
443
+ "data-testid"?: string;
444
+ }
445
+ interface ToggleItemProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, "value" | "onClick" | "type" | "role" | "aria-checked" | "children"> {
446
+ /**
447
+ * Stable value for this item. Compared against the parent's `value`.
448
+ */
449
+ value: string;
450
+ /**
451
+ * Optional leading icon. Rendered when the parent type is `iconText`
452
+ * or `iconOnly` (or for `shape="card"`).
453
+ */
454
+ icon?: React$1.ReactNode;
455
+ /**
456
+ * Optional secondary line below the title — only rendered when the
457
+ * parent's `shape="card"`.
458
+ */
459
+ subtext?: React$1.ReactNode;
460
+ /**
461
+ * Label content. Rendered when the parent type is `iconText` or `textOnly`,
462
+ * and always for `shape="card"`.
463
+ */
464
+ children?: React$1.ReactNode;
465
+ /**
466
+ * Optional `data-testid` for Playwright. Defaults to `"toggle"` if omitted.
467
+ */
468
+ "data-testid"?: string;
469
+ }
470
+
471
+ /**
472
+ * Toggle — segmented pill / card control.
473
+ * Figma: 4960:33812 (regular) and 4960:33890 (small + card).
474
+ *
475
+ * @example
476
+ * // Pill (default)
477
+ * <Toggle value={direction} onValueChange={setDirection}>
478
+ * <ToggleItem value="inbound" icon={<PhoneIncoming />}>Inbound</ToggleItem>
479
+ * <ToggleItem value="outbound" icon={<PhoneOutgoing />}>Outbound</ToggleItem>
480
+ * </Toggle>
481
+ *
482
+ * // Square card with subtext
483
+ * <Toggle value={mode} onValueChange={setMode} shape="card" size="small">
484
+ * <ToggleItem value="single" icon={<File />} subtext="Natural-language prompt only.">
485
+ * Single Prompt
486
+ * </ToggleItem>
487
+ * <ToggleItem value="flow" icon={<Workflow />} subtext="Structured map of nodes.">
488
+ * Conversation Flow
489
+ * </ToggleItem>
490
+ * </Toggle>
491
+ */
492
+ declare const Toggle: React$1.ForwardRefExoticComponent<ToggleProps & React$1.RefAttributes<HTMLDivElement>>;
493
+ /**
494
+ * ToggleItem — single segment inside a `<Toggle>`. Pulls active value
495
+ * from context and signals selection back via `setValue`.
496
+ */
497
+ declare const ToggleItem: React$1.ForwardRefExoticComponent<ToggleItemProps & React$1.RefAttributes<HTMLButtonElement>>;
498
+
499
+ declare const Checkbox: React$1.ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & {
500
+ "data-testid"?: string;
501
+ } & React$1.RefAttributes<HTMLButtonElement>>;
502
+
503
+ /**
504
+ * shadcn-style Checkbox props (Radix primitive props).
505
+ * Note: Radix supports `checked: boolean | "indeterminate"`. Figma uses boolean.
506
+ */
507
+ type CheckboxProps = React$1.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> & {
508
+ /**
509
+ * Optional `data-testid` for Playwright. Defaults to `"checkbox"` if omitted.
510
+ */
511
+ "data-testid"?: string;
512
+ };
513
+
514
+ declare const RadioGroup: React$1.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
515
+ "data-testid"?: string;
516
+ } & React$1.RefAttributes<HTMLDivElement>>;
517
+ declare const RadioGroupItem: React$1.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupItemProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & {
518
+ "data-testid"?: string;
519
+ } & React$1.RefAttributes<HTMLButtonElement>>;
520
+
521
+ type RadioGroupProps = React$1.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> & {
522
+ /**
523
+ * Optional `data-testid` for Playwright. Defaults to `"radio-group"` if omitted.
524
+ */
525
+ "data-testid"?: string;
526
+ };
527
+ type RadioGroupItemProps = React$1.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item> & {
528
+ /**
529
+ * Optional `data-testid` for Playwright. Defaults to `"radio"` if omitted.
530
+ */
531
+ "data-testid"?: string;
532
+ };
533
+
534
+ type DialogHeaderNavigationVariant = "primary" | "inner";
535
+ type BackButtonPosition = "left" | "right";
536
+ interface DialogHeaderNavigationProps extends React$1.HTMLAttributes<HTMLDivElement> {
537
+ title: string;
538
+ subtitle?: string;
539
+ /**
540
+ * `primary`: title/subtitle only
541
+ * `inner`: shows a back affordance (arrow)
542
+ */
543
+ variant?: DialogHeaderNavigationVariant;
544
+ onBack?: () => void;
545
+ backButtonAriaLabel?: string;
546
+ backButtonPosition?: BackButtonPosition;
547
+ disabled?: boolean;
548
+ /**
549
+ * Optional `data-testid` for Playwright. Defaults to `"dialog-header"` if omitted.
550
+ */
551
+ "data-testid"?: string;
552
+ }
553
+ type TabVariant = "top" | "side" | "section";
554
+ interface ListNavItemProps {
555
+ /** Unique identifier */
556
+ id: string;
557
+ /** Primary text */
558
+ title: string;
559
+ /** Secondary text */
560
+ subtitle?: string;
561
+ /** Trailing content (badges, icons, etc.) */
562
+ trailing?: React$1.ReactNode;
563
+ }
564
+ interface ListNavigationProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onSelect"> {
565
+ /** List of items */
566
+ items: ListNavItemProps[];
567
+ /** Currently selected item id */
568
+ selectedId?: string | null;
569
+ /** Callback when an item is clicked */
570
+ onSelect?: (id: string) => void;
571
+ /**
572
+ * Optional `data-testid` for Playwright. Defaults to `"nav"` if omitted.
573
+ */
574
+ "data-testid"?: string;
575
+ }
576
+ interface TabsProps extends React$1.HTMLAttributes<HTMLDivElement> {
577
+ value?: string;
578
+ defaultValue?: string;
579
+ onValueChange?: (value: string) => void;
580
+ variant?: TabVariant;
581
+ }
582
+ interface TabsListProps extends React$1.HTMLAttributes<HTMLDivElement> {
583
+ variant?: TabVariant;
584
+ }
585
+ interface TabsTriggerProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
586
+ value: string;
587
+ variant?: TabVariant;
588
+ iconLeft?: React$1.ReactNode;
589
+ /**
590
+ * Optional `data-testid` for Playwright. Defaults to `"tab"` if omitted.
591
+ * By convention pass a descriptive name like `"tab-configure"`.
592
+ */
593
+ "data-testid"?: string;
594
+ }
595
+ interface TabsContentProps extends React$1.HTMLAttributes<HTMLDivElement> {
596
+ value: string;
597
+ forceMount?: boolean;
598
+ }
599
+
600
+ declare const DialogHeaderNavigation: React$1.ForwardRefExoticComponent<DialogHeaderNavigationProps & React$1.RefAttributes<HTMLDivElement>>;
601
+
602
+ declare function Tabs({ className, value, defaultValue, onValueChange, variant, ...props }: TabsProps): react_jsx_runtime.JSX.Element;
603
+ declare const TabsList: React$1.ForwardRefExoticComponent<TabsListProps & React$1.RefAttributes<HTMLDivElement>>;
604
+ declare const TabsTrigger: React$1.ForwardRefExoticComponent<TabsTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
605
+ declare function TabsContent({ value, forceMount, className, children, ...props }: TabsContentProps): react_jsx_runtime.JSX.Element | null;
606
+ /**
607
+ * ListNavigation — A vertical list of selectable items (e.g. call history).
608
+ * Based on Figma design node: 5503:34142
609
+ */
610
+ declare const ListNavigation: React$1.ForwardRefExoticComponent<ListNavigationProps & React$1.RefAttributes<HTMLDivElement>>;
611
+
612
+ type AccordionType = "single" | "multiple";
613
+ type AccordionValue<TType extends AccordionType> = TType extends "multiple" ? string[] : string | null;
614
+ type AccordionOnValueChange<TType extends AccordionType> = (value: AccordionValue<TType>) => void;
615
+ interface AccordionProps<TType extends AccordionType = "single"> extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "defaultValue" | "onChange"> {
616
+ type?: TType;
617
+ /**
618
+ * When `type="single"`, allows collapsing the open item.
619
+ */
620
+ collapsible?: boolean;
621
+ value?: AccordionValue<TType>;
622
+ defaultValue?: AccordionValue<TType>;
623
+ onValueChange?: AccordionOnValueChange<TType>;
624
+ disabled?: boolean;
625
+ }
626
+ interface AccordionItemProps extends React$1.HTMLAttributes<HTMLDivElement> {
627
+ value: string;
628
+ disabled?: boolean;
629
+ /**
630
+ * Visual variant for the item.
631
+ * - `"default"` (back-compat) — flat row with a bottom divider; used in
632
+ * long lists where items share a single border baseline.
633
+ * - `"card"` — bordered, rounded, drop-shadowed pill that reads as its own
634
+ * surface (Figma 707:17455 / 6441:22282). Use when each item is a
635
+ * self-contained section, e.g. a Speech Settings card.
636
+ * @default "default"
637
+ */
638
+ variant?: "default" | "card";
639
+ }
640
+ type AccordionTriggerSize = "default" | "sm";
641
+ interface AccordionTriggerProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
642
+ /**
643
+ * Optional description under the label (matches Figma).
644
+ */
645
+ description?: React$1.ReactNode;
646
+ /**
647
+ * Optional right-side action (e.g. "Add" button, Switch toggle).
648
+ * Note: click events are stopped from toggling the accordion.
649
+ */
650
+ action?: React$1.ReactNode;
651
+ /**
652
+ * Hide the trailing chevron. Useful for a card whose header is purely a
653
+ * toggle (e.g. `action` is a `Switch`) — when off, there's no body to
654
+ * expand, so a chevron would be misleading.
655
+ * @default false
656
+ */
657
+ hideChevron?: boolean;
658
+ /**
659
+ * Trigger sizing.
660
+ * - `"default"` — `py-4`, title is `text-lg` (legacy long-list look).
661
+ * - `"sm"` — `p-3`, title is `text-sm font-semibold` (Heading/H5);
662
+ * pairs with `AccordionItem variant="card"` per Figma
663
+ * 707:17455.
664
+ * @default "default"
665
+ */
666
+ size?: AccordionTriggerSize;
667
+ /**
668
+ * Optional `data-testid` for Playwright. Defaults to `"accordion"` if omitted.
669
+ */
670
+ "data-testid"?: string;
671
+ }
672
+ interface AccordionContentProps extends React$1.HTMLAttributes<HTMLDivElement> {
673
+ }
674
+ interface AccordionSectionTriggerProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
675
+ /**
676
+ * Label shown inside the pill (Figma: "Summary"). Children override.
677
+ */
678
+ label?: React$1.ReactNode;
679
+ /**
680
+ * Optional `data-testid` for Playwright. Defaults to `"accordion"` if omitted.
681
+ */
682
+ "data-testid"?: string;
683
+ }
684
+
685
+ declare function Accordion<TType extends AccordionType = "single">({ className, type, collapsible, value, defaultValue, onValueChange, disabled, ...props }: AccordionProps<TType>): react_jsx_runtime.JSX.Element;
686
+ declare const AccordionItem: React$1.ForwardRefExoticComponent<AccordionItemProps & React$1.RefAttributes<HTMLDivElement>>;
687
+ declare const AccordionTrigger: React$1.ForwardRefExoticComponent<AccordionTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
688
+ /**
689
+ * Section-separator trigger (Figma 6128:5627). A compact pill that separates
690
+ * sections within a card or page. Use in place of `AccordionTrigger` inside
691
+ * an `AccordionItem` — it wires into the same Radix state and flips the
692
+ * chevron when `data-state=open`.
693
+ */
694
+ declare const AccordionSectionTrigger: React$1.ForwardRefExoticComponent<AccordionSectionTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
695
+ declare const AccordionContent: React$1.ForwardRefExoticComponent<AccordionContentProps & React$1.RefAttributes<HTMLDivElement>>;
696
+ declare function AccordionContentPlaceholder({ className, children, }: {
697
+ className?: string;
698
+ children?: React$1.ReactNode;
699
+ }): react_jsx_runtime.JSX.Element;
700
+
701
+ type AvatarSize = "xxs" | "xs" | "sm" | "default" | "lg";
702
+ type AvatarShape = "circle" | "square";
703
+ interface AvatarProps {
704
+ /**
705
+ * The image source URL for the avatar.
706
+ */
707
+ src?: string;
708
+ /**
709
+ * Alt text for the avatar image.
710
+ */
711
+ alt?: string;
712
+ /**
713
+ * Fallback text to display when image fails to load (typically initials).
714
+ */
715
+ fallback?: string;
716
+ /**
717
+ * Size of the avatar.
718
+ * @default "default"
719
+ */
720
+ size?: AvatarSize;
721
+ /**
722
+ * Shape of the avatar.
723
+ * @default "circle"
724
+ */
725
+ shape?: AvatarShape;
726
+ className?: string;
727
+ style?: React$1.CSSProperties;
728
+ /**
729
+ * Optional `data-testid` for Playwright. Defaults to `"avatar"` if omitted.
730
+ */
731
+ "data-testid"?: string;
732
+ }
733
+ interface AvatarGroupProps {
734
+ /**
735
+ * Maximum number of avatars to display before showing overflow indicator.
736
+ * @default 3
737
+ */
738
+ max?: number;
739
+ /**
740
+ * Size of the avatars in the group.
741
+ * @default "default"
742
+ */
743
+ size?: AvatarSize;
744
+ /**
745
+ * Shape of the avatars in the group.
746
+ * @default "circle"
747
+ */
748
+ shape?: AvatarShape;
749
+ /**
750
+ * The avatar items to display.
751
+ */
752
+ children: React$1.ReactNode;
753
+ className?: string;
754
+ style?: React$1.CSSProperties;
755
+ /**
756
+ * Optional `data-testid` for Playwright. Defaults to `"avatar-group"` if omitted.
757
+ */
758
+ "data-testid"?: string;
759
+ }
760
+
761
+ /**
762
+ * Avatar component - An image element with a fallback for representing the user.
763
+ * Based on Figma design node: 3316:3490
764
+ */
765
+ declare const Avatar: React$1.ForwardRefExoticComponent<AvatarProps & React$1.RefAttributes<HTMLSpanElement>>;
766
+ /**
767
+ * AvatarGroup component - Displays multiple avatars in a stacked layout
768
+ */
769
+ declare const AvatarGroup: React$1.ForwardRefExoticComponent<AvatarGroupProps & React$1.RefAttributes<HTMLDivElement>>;
770
+
771
+ type BadgeVariant = "default" | "secondary" | "destructive" | "outline" | "success" | "warning";
772
+ /**
773
+ * A tag option for the TagBadge dropdown menu.
774
+ */
775
+ interface TagOption {
776
+ value: string;
777
+ label: string;
778
+ /** Badge variant to use when this tag is selected */
779
+ variant?: BadgeVariant;
780
+ /** Custom background color (overrides variant) */
781
+ background?: string;
782
+ /** Custom text color (overrides variant) */
783
+ color?: string;
784
+ }
785
+ interface BadgeProps {
786
+ /**
787
+ * The badge variant style.
788
+ * @default "default"
789
+ */
790
+ variant?: BadgeVariant;
791
+ /**
792
+ * The badge label text.
793
+ */
794
+ label?: string;
795
+ /**
796
+ * Optional leading icon (renders before the label).
797
+ */
798
+ leadingIcon?: React$1.ReactNode;
799
+ /**
800
+ * Optional trailing icon (renders after the label).
801
+ */
802
+ trailingIcon?: React$1.ReactNode;
803
+ /**
804
+ * Whether to show the leading icon.
805
+ * @default true
806
+ */
807
+ showLeadingIcon?: boolean;
808
+ /**
809
+ * Whether to show the trailing icon.
810
+ * @default true
811
+ */
812
+ showTrailingIcon?: boolean;
813
+ /**
814
+ * Badge content (alternative to label prop).
815
+ */
816
+ children?: React$1.ReactNode;
817
+ /**
818
+ * Click handler. When provided, badge renders as a button.
819
+ */
820
+ onClick?: (e: React$1.MouseEvent) => void;
821
+ /**
822
+ * When false, disables hover/pressed/focus affordances and cursor-pointer.
823
+ * Useful for read-only / view-only badges that should not appear clickable.
824
+ * @default true
825
+ */
826
+ interactive?: boolean;
827
+ className?: string;
828
+ style?: React$1.CSSProperties;
829
+ /**
830
+ * Optional `data-testid` for Playwright. Defaults to `"badge"` if omitted.
831
+ */
832
+ "data-testid"?: string;
833
+ }
834
+ /**
835
+ * Props for TagBadge - an interactive badge that opens a dropdown to select a tag.
836
+ * Mirrors the TagsDropdown pattern from the zero repo.
837
+ */
838
+ interface TagBadgeProps {
839
+ /** Currently selected tag value */
840
+ value: string | null;
841
+ /** Callback when a tag is selected */
842
+ onValueChange?: (value: string) => void;
843
+ /** Available tag options */
844
+ options: TagOption[];
845
+ /** When true, renders as a non-interactive badge (no dropdown) */
846
+ viewOnly?: boolean;
847
+ /** Placeholder text when no tag is selected */
848
+ placeholder?: string;
849
+ /** Default variant when no tag is selected */
850
+ defaultVariant?: BadgeVariant;
851
+ className?: string;
852
+ style?: React$1.CSSProperties;
853
+ /**
854
+ * Optional `data-testid` for Playwright. Defaults to `"badge"` if omitted.
855
+ */
856
+ "data-testid"?: string;
857
+ }
858
+ type NumberBadgeVariant = "default" | "destructive" | "secondary";
859
+ interface NumberBadgeProps {
860
+ /**
861
+ * The number to display in the badge.
862
+ */
863
+ count: number;
864
+ /**
865
+ * Maximum count to display. Shows "max+" if exceeded.
866
+ * @default 99
867
+ */
868
+ max?: number;
869
+ /**
870
+ * The badge variant style.
871
+ * @default "default"
872
+ */
873
+ variant?: NumberBadgeVariant;
874
+ /**
875
+ * Whether to show zero count.
876
+ * @default false
877
+ */
878
+ showZero?: boolean;
879
+ className?: string;
880
+ style?: React$1.CSSProperties;
881
+ /**
882
+ * Optional `data-testid` for Playwright. Defaults to `"badge"` if omitted.
883
+ */
884
+ "data-testid"?: string;
885
+ }
886
+
887
+ /**
888
+ * Badge component - Displays a badge with options for leading and trailing icons
889
+ * Based on Figma design node: 3333:1629
890
+ */
891
+ declare const Badge: React$1.ForwardRefExoticComponent<BadgeProps & React$1.RefAttributes<HTMLDivElement>>;
892
+ /**
893
+ * NumberBadge component - Displays a circular badge with a count
894
+ * Based on Figma design node: 3333:1629
895
+ */
896
+ declare const NumberBadge: React$1.ForwardRefExoticComponent<NumberBadgeProps & React$1.RefAttributes<HTMLDivElement>>;
897
+ /**
898
+ * TagBadge - An interactive badge that opens a dropdown to pick a tag.
899
+ * Mirrors the TagsDropdown behavior from the zero repo:
900
+ * - viewOnly=true: renders as a static badge
901
+ * - viewOnly=false (default): renders as a clickable badge with chevron that opens a tag menu
902
+ */
903
+ declare const TagBadge: React$1.ForwardRefExoticComponent<TagBadgeProps & React$1.RefAttributes<HTMLDivElement>>;
904
+
905
+ type SelectType = "Single Line Regular" | "Single Line Large" | "Double Line";
906
+ type SelectState = "Default" | "Open";
907
+ interface SelectProps extends React$1.HTMLAttributes<HTMLDivElement> {
908
+ type?: SelectType;
909
+ state?: SelectState;
910
+ showLead?: boolean;
911
+ showSearch?: boolean;
912
+ value?: string;
913
+ onValueChange?: (value: string) => void;
914
+ placeholder?: string;
915
+ placeholderSubtext?: string;
916
+ }
917
+ interface SelectLabelProps extends React$1.HTMLAttributes<HTMLDivElement> {
918
+ label?: string;
919
+ mandatory?: boolean;
920
+ }
921
+ interface SelectMenuItemProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
922
+ value: string;
923
+ hover?: boolean;
924
+ menuItem?: string;
925
+ menuItemSubtext?: string;
926
+ showPlaybackControl?: boolean;
927
+ selected?: boolean;
928
+ }
929
+ interface SelectGroupProps extends React$1.HTMLAttributes<HTMLDivElement> {
930
+ showLabel?: boolean;
931
+ }
932
+ /** Item shape when using SelectContent `items` prop. Search filters by label and subtext. */
933
+ interface SelectContentItem {
934
+ value: string;
935
+ label: string;
936
+ subtext?: string;
937
+ leadIcon?: React$1.ReactNode;
938
+ leadIconSize?: "xs" | "sm" | "md";
939
+ /**
940
+ * Optional trailing content rendered between the label/subtext and the
941
+ * checkmark — typically used for tag badges, status pills, or counts.
942
+ */
943
+ trailing?: React$1.ReactNode;
944
+ }
945
+ /** Section with items when using SelectContent `items` prop. */
946
+ interface SelectContentItemWithSection {
947
+ sectionLabel: string;
948
+ items: SelectContentItem[];
949
+ }
950
+
951
+ declare const Select: React$1.FC<SelectPrimitive.SelectProps>;
952
+ declare const SelectGroup: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectGroupProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
953
+ /**
954
+ * Select value text (placeholder/value) using Typography tokens.
955
+ *
956
+ * Radix's `SelectPrimitive.Value` destructures `className` and `style` out of
957
+ * its props and never forwards them to the rendered span (see
958
+ * @radix-ui/react-select source) — so styling MUST live on a wrapper around
959
+ * it, not on the primitive itself. We wrap with a `<span>` that carries the
960
+ * truncation rules so long selected values ellipsize within the trigger
961
+ * instead of bleeding past the chevron / pushing siblings off the row.
962
+ */
963
+ declare const SelectValue: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectValueProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & React$1.RefAttributes<HTMLSpanElement>>;
964
+ declare const SelectTrigger: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & {
965
+ showLead?: boolean;
966
+ leadIcon?: React$1.ReactNode;
967
+ /** Size of lead icon wrapper. "xs" = 12px, "sm" = 16px (default), "md" = 20px */
968
+ leadIconSize?: "xs" | "sm" | "md";
969
+ /** Size variant. "small" = 32px height, "regular" = 48px, "large" = 64px */
970
+ size?: "small" | "regular" | "large";
971
+ /** Background variant. "default" = input grey, "white" = card white */
972
+ bg?: "default" | "white";
973
+ /**
974
+ * Optional `data-testid` for Playwright. Defaults to `"select"` if omitted.
975
+ * By convention pass a descriptive name like `"select-timezone"`.
976
+ */
977
+ "data-testid"?: string;
978
+ } & React$1.RefAttributes<HTMLButtonElement>>;
979
+ declare const SelectScrollUpButton: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
980
+ declare const SelectScrollDownButton: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
981
+ declare const SelectContent: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
982
+ /** Dropdown list items. When provided, search filters them by default. Can be flat items or sections. */
983
+ items?: SelectContentItem[] | SelectContentItemWithSection[];
984
+ showSearch?: boolean;
985
+ searchPlaceholder?: string;
986
+ /**
987
+ * Ref forwarded to the internal `SelectPrimitive.Viewport` (the scroll
988
+ * container for items). Lets consumers attach an `IntersectionObserver`
989
+ * — typical use is wiring an `InfiniteScroll` so items lazy-load as the
990
+ * user scrolls a long list (e.g. paginated transfer agents). Function
991
+ * refs are also supported.
992
+ */
993
+ viewportRef?: React$1.Ref<HTMLDivElement> | ((node: HTMLDivElement | null) => void);
994
+ } & React$1.RefAttributes<HTMLDivElement>>;
995
+ declare const SelectLabel: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
996
+ declare const SelectItem: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
997
+ subtext?: string;
998
+ type?: "single" | "double";
999
+ leadIcon?: React$1.ReactNode;
1000
+ /** Size of leadIcon area. "xs" = 16px, "sm" = 24px, "md" = 36px (for playback controls) */
1001
+ leadIconSize?: "xs" | "sm" | "md";
1002
+ /**
1003
+ * Optional trailing content rendered between the label/subtext and the
1004
+ * checkmark — typically used for tag badges, status pills, or counts.
1005
+ */
1006
+ trailing?: React$1.ReactNode;
1007
+ /**
1008
+ * Optional `data-testid` for Playwright. Defaults to `"select-item"` if omitted.
1009
+ */
1010
+ "data-testid"?: string;
1011
+ } & React$1.RefAttributes<HTMLDivElement>>;
1012
+ declare const SelectSeparator: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1013
+ declare function SelectFormLabel({ className, label, mandatory, }: SelectLabelProps): react_jsx_runtime.JSX.Element;
1014
+
1015
+ interface PlaySelectAudioItem {
1016
+ value: string;
1017
+ label: string;
1018
+ subtext?: string;
1019
+ /**
1020
+ * Audio preview URL. When empty/falsy, the play button is rendered in a
1021
+ * disabled visual state and clicks are no-ops — no playback state change.
1022
+ */
1023
+ url: string;
1024
+ /**
1025
+ * Optional trailing content rendered between the label and the checkmark.
1026
+ * Typically used for tag badges (e.g. gender, language pills).
1027
+ */
1028
+ tags?: React$1.ReactNode;
1029
+ }
1030
+ interface PlaySelectProps {
1031
+ /** List of audio items to display. Each has value, label, subtext, and playable url. */
1032
+ dropdownListItems: PlaySelectAudioItem[];
1033
+ /** Trigger label (e.g. "Title") */
1034
+ label?: string;
1035
+ /** Whether to show the form label above the trigger. @default true */
1036
+ showLabel?: boolean;
1037
+ /** Whether the label shows the red `*` mandatory indicator. @default true */
1038
+ mandatory?: boolean;
1039
+ /** Placeholder when nothing selected */
1040
+ placeholder?: string;
1041
+ /** Show search input in dropdown */
1042
+ showSearch?: boolean;
1043
+ /** Search placeholder text */
1044
+ searchPlaceholder?: string;
1045
+ /** Controlled value */
1046
+ value?: string;
1047
+ /** Default value when uncontrolled */
1048
+ defaultValue?: string;
1049
+ /** Called when value changes (alias for onValueChange) */
1050
+ onValueChange?: (value: string) => void;
1051
+ /** Called when user clicks play/pause button. Receives url and item. */
1052
+ onPlayClick?: (url: string, item: PlaySelectAudioItem) => void;
1053
+ /** Called when user selects a value (clicks item text to select) */
1054
+ onSelectValue?: (value: string) => void;
1055
+ /** Called when dropdown closes (select, click outside, escape, etc.) */
1056
+ onCloseDropdown?: () => void;
1057
+ /** Disabled state */
1058
+ disabled?: boolean;
1059
+ /** Trigger size */
1060
+ size?: "regular" | "large";
1061
+ /** Optional lead icon for the trigger */
1062
+ triggerLeadIcon?: React$1.ReactNode;
1063
+ /** Optional wrapper className (e.g. to control width) */
1064
+ className?: string;
1065
+ /** Optional className passed to the SelectTrigger button */
1066
+ triggerClassName?: string;
1067
+ /** Optional className passed to the SelectContent dropdown panel */
1068
+ contentClassName?: string;
1069
+ /** Minimum width (e.g. "196px"). Override via className if needed. */
1070
+ minWidth?: string;
1071
+ }
1072
+ declare const PlaySelect: React$1.ForwardRefExoticComponent<PlaySelectProps & React$1.RefAttributes<HTMLButtonElement>>;
1073
+
1074
+ type PlaybackState = "play" | "pause";
1075
+ interface PlaybackControlProps extends Omit<React$1.ComponentProps<typeof Button>, "children"> {
1076
+ /**
1077
+ * Which icon to show. `play` = play icon (triangle), `pause` = pause icon (two bars).
1078
+ */
1079
+ state?: PlaybackState;
1080
+ /**
1081
+ * Alias for `state`. When true, show pause icon; when false, show play icon.
1082
+ */
1083
+ playing?: boolean;
1084
+ }
1085
+ declare const PlaybackControl: React$1.ForwardRefExoticComponent<Omit<PlaybackControlProps, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
1086
+
1087
+ interface UseSelectProps {
1088
+ value?: string;
1089
+ defaultValue?: string;
1090
+ onValueChange?: (value: string) => void;
1091
+ }
1092
+ declare function useSelect({ value, defaultValue, onValueChange, }: UseSelectProps): {
1093
+ value: string | undefined;
1094
+ setValue: React$1.Dispatch<React$1.SetStateAction<string | undefined>>;
1095
+ handleValueChange: (newValue: string) => void;
1096
+ };
1097
+
1098
+ interface UsePlaySelectProps {
1099
+ value?: string;
1100
+ defaultValue?: string;
1101
+ onValueChange?: (value: string) => void;
1102
+ /** Called when user clicks play/pause button */
1103
+ onPlayClick?: (url: string, item: PlaySelectAudioItem) => void;
1104
+ /** Called when user selects a value (clicks item text) */
1105
+ onSelectValue?: (value: string) => void;
1106
+ /** Called when dropdown closes (select, click outside, escape, etc.) */
1107
+ onCloseDropdown?: () => void;
1108
+ }
1109
+ declare function usePlaySelect({ value, defaultValue, onValueChange, onPlayClick, onSelectValue, onCloseDropdown, }: UsePlaySelectProps): {
1110
+ value: string | undefined;
1111
+ playingUrl: string | null;
1112
+ audioRef: React$1.MutableRefObject<HTMLAudioElement | null>;
1113
+ handleValueChange: (newValue: string) => void;
1114
+ handleOpenChange: (open: boolean) => void;
1115
+ handlePlay: (url: string, item: PlaySelectAudioItem) => void;
1116
+ stopEvent: (e: React$1.PointerEvent | React$1.MouseEvent) => void;
1117
+ createPlayHandler: (item: PlaySelectAudioItem) => (e: React$1.PointerEvent | React$1.MouseEvent) => void;
1118
+ pauseAudio: () => void;
1119
+ };
1120
+
1121
+ /** Illustration position relative to text and CTAs. */
1122
+ type EmptyStateIllustrationPosition = "top" | "bottom";
1123
+ /** Illustration size variant. */
1124
+ type EmptyStateIllustrationSize = "small" | "banner";
1125
+ interface EmptyStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "description"> {
1126
+ /** Illustration element (e.g. image, icon, or SVG). */
1127
+ illustration?: React$1.ReactNode;
1128
+ /** Where to place the illustration: above or below the text/CTAs. */
1129
+ illustrationPosition?: EmptyStateIllustrationPosition;
1130
+ /** Size of the illustration area. Small: 120×120px, Banner: 220×500px (overridden by width/height). */
1131
+ illustrationSize?: EmptyStateIllustrationSize;
1132
+ /** Custom illustration width (e.g. "500px", 300). Overrides illustrationSize for width. */
1133
+ illustrationWidth?: string | number;
1134
+ /** Custom illustration height (e.g. "220px", 200). Overrides illustrationSize for height. */
1135
+ illustrationHeight?: string | number;
1136
+ /** Primary title. String uses default title styles; Typography or other ReactNode is rendered as-is. */
1137
+ title: string | React$1.ReactNode;
1138
+ /** Secondary description. String uses default description styles; Typography or other ReactNode is rendered as-is. */
1139
+ description?: string | React$1.ReactNode;
1140
+ /** Action element(s) displayed below the text. Single button or array of buttons. */
1141
+ action?: React$1.ReactNode | React$1.ReactNode[];
1142
+ /**
1143
+ * Optional `data-testid` for Playwright. Defaults to `"empty-state"` if omitted.
1144
+ * By convention pass a descriptive name like `"empty-state-no-agents"`.
1145
+ */
1146
+ "data-testid"?: string;
1147
+ }
1148
+
1149
+ /**
1150
+ * Empty state placeholder.
1151
+ * Figma reference: 3619:3067 (Nurix Design System 2026)
1152
+ */
1153
+ declare const EmptyState: React$1.ForwardRefExoticComponent<EmptyStateProps & React$1.RefAttributes<HTMLDivElement>>;
1154
+
1155
+ type ListVariant = "default" | "outline" | "muted";
1156
+ type ListType = "card" | "list";
1157
+ type ListBorderRadius = "none" | "soft" | "rounded";
1158
+ interface ListProps extends React$1.HTMLAttributes<HTMLDivElement> {
1159
+ /**
1160
+ * Layout type.
1161
+ * - card: vertical card layout
1162
+ * - list: horizontal row layout
1163
+ * @default "card"
1164
+ */
1165
+ type?: ListType;
1166
+ /**
1167
+ * Visual style variant.
1168
+ * - default: card bg only (card) / no border, no bg (list)
1169
+ * - outline: border with horizontal padding
1170
+ * - muted: subtle background fill
1171
+ * @default "default"
1172
+ */
1173
+ variant?: ListVariant;
1174
+ /**
1175
+ * Design-system controlled border radius.
1176
+ * @default "rounded"
1177
+ */
1178
+ list_border_radius?: ListBorderRadius;
1179
+ children?: React$1.ReactNode;
1180
+ /**
1181
+ * Optional `data-testid` for Playwright. Defaults to `"card"` if omitted.
1182
+ * By convention pass a descriptive name like `"card-agent-${id}"`.
1183
+ */
1184
+ "data-testid"?: string;
1185
+ }
1186
+
1187
+ /**
1188
+ * List component - A composable card/list container with layout type,
1189
+ * variant styles, hover overlay, and design-system border radius.
1190
+ * Based on Figma design node: 3316:3511
1191
+ */
1192
+ declare const List: React$1.ForwardRefExoticComponent<ListProps & React$1.RefAttributes<HTMLDivElement>>;
1193
+
1194
+ type SurfaceBackground = "white" | "grey";
1195
+ interface SurfaceProps extends React$1.HTMLAttributes<HTMLDivElement> {
1196
+ /**
1197
+ * Surface fill style.
1198
+ * - white: `bg-token-white`
1199
+ * - grey: `bg-token-light-grey`
1200
+ * @default "white"
1201
+ */
1202
+ background?: SurfaceBackground;
1203
+ /**
1204
+ * When true the surface reserves padding so that content can sit
1205
+ * directly inside without a secondary wrapper. Disable when the
1206
+ * children handle their own padding (for example when composing
1207
+ * full-bleed headers or images).
1208
+ * @default true
1209
+ */
1210
+ padded?: boolean;
1211
+ children?: React$1.ReactNode;
1212
+ }
1213
+ interface SurfaceHeaderProps extends React$1.HTMLAttributes<HTMLDivElement> {
1214
+ children?: React$1.ReactNode;
1215
+ }
1216
+ interface SurfaceBodyProps extends React$1.HTMLAttributes<HTMLDivElement> {
1217
+ children?: React$1.ReactNode;
1218
+ }
1219
+ interface SurfaceFooterProps extends React$1.HTMLAttributes<HTMLDivElement> {
1220
+ children?: React$1.ReactNode;
1221
+ }
1222
+
1223
+ /**
1224
+ * Surface - neutral elevated surface used to group related content.
1225
+ *
1226
+ * Matches the Figma "Card - Surface" primitive:
1227
+ * - 16px radius, 1.5px xlight border, xs drop shadow
1228
+ * - white / light-grey background variants
1229
+ * - overflow hidden so nested media clip to the radius
1230
+ *
1231
+ * Figma: 6100:42420 (surface), 6100:42423 (white bg), 6100:42428 (grey bg)
1232
+ */
1233
+ declare const Surface: React$1.ForwardRefExoticComponent<SurfaceProps & React$1.RefAttributes<HTMLDivElement>>;
1234
+ /**
1235
+ * Optional header slot — intended for a short title row.
1236
+ */
1237
+ declare const SurfaceHeader: React$1.ForwardRefExoticComponent<SurfaceHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
1238
+ /**
1239
+ * Optional body slot — vertical content area with a default 8px gap.
1240
+ */
1241
+ declare const SurfaceBody: React$1.ForwardRefExoticComponent<SurfaceBodyProps & React$1.RefAttributes<HTMLDivElement>>;
1242
+ /**
1243
+ * Optional footer slot — right-aligned action row.
1244
+ */
1245
+ declare const SurfaceFooter: React$1.ForwardRefExoticComponent<SurfaceFooterProps & React$1.RefAttributes<HTMLDivElement>>;
1246
+
1247
+ /**
1248
+ * Figma 6249:35100 — Side Panel.
1249
+ * - sm: 420px wide
1250
+ * - md: 620px wide
1251
+ * - lg: 900px wide (Figma 6553:165)
1252
+ */
1253
+ type SidePanelSize = "sm" | "md" | "lg";
1254
+ interface SidePanelProps extends React$1.HTMLAttributes<HTMLDivElement> {
1255
+ /**
1256
+ * Width preset. `sm` = 420px, `md` = 620px, `lg` = 900px.
1257
+ * @default "sm"
1258
+ */
1259
+ size?: SidePanelSize;
1260
+ /**
1261
+ * Which edge the panel is anchored to. Controls which corners are rounded
1262
+ * — the panel's inner edge (facing the app) gets the radius, the outer
1263
+ * edge (flush against the screen) stays square.
1264
+ * @default "right"
1265
+ */
1266
+ side?: "left" | "right";
1267
+ /** Panel content */
1268
+ children?: React$1.ReactNode;
1269
+ /**
1270
+ * Optional `data-testid` for Playwright. Defaults to `"side-panel"` if omitted.
1271
+ * By convention pass a descriptive name like `"side-panel-create-campaign"`.
1272
+ */
1273
+ "data-testid"?: string;
1274
+ }
1275
+
1276
+ /**
1277
+ * SidePanel — fixed-width panel with a single rounded inward edge.
1278
+ *
1279
+ * The panel is a plain shell — the consumer is responsible for positioning
1280
+ * (e.g., `fixed right-0 top-0`), slide-in animation, and the overlay. This
1281
+ * matches the Figma spec at 6249:35100 / 6553:165, which shows just the
1282
+ * geometry: a 420px / 620px / 900px wide white surface with 16px radius on
1283
+ * its inner edge.
1284
+ */
1285
+ declare const SidePanel: React$1.ForwardRefExoticComponent<SidePanelProps & React$1.RefAttributes<HTMLDivElement>>;
1286
+
1287
+ /**
1288
+ * Tooltip provider. Wrap your app (or a subtree) with this to enable tooltips.
1289
+ * Based on shadcn/ui + Radix Tooltip.
1290
+ */
1291
+ declare const TooltipProvider: React$1.FC<TooltipPrimitive.TooltipProviderProps>;
1292
+ /**
1293
+ * Tooltip root. Groups trigger and content.
1294
+ */
1295
+ declare const Tooltip: React$1.FC<TooltipPrimitive.TooltipProps>;
1296
+ /**
1297
+ * Tooltip trigger. The element that shows the tooltip on hover.
1298
+ */
1299
+ declare const TooltipTrigger: React$1.ForwardRefExoticComponent<TooltipPrimitive.TooltipTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
1300
+ /**
1301
+ * Tooltip content. Renders the tooltip popover with optional arrow and shortcut badge.
1302
+ * Figma design: primary background, rounded, optional keyboard shortcut on the right.
1303
+ * Portals into .lego-land when present for correct theming.
1304
+ */
1305
+ declare const TooltipContent: React$1.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
1306
+ shortcut?: string;
1307
+ } & React$1.RefAttributes<HTMLDivElement>>;
1308
+
1309
+ type TooltipContentProps = React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {
1310
+ /** Optional keyboard shortcut to display (e.g. "U", "⌘S") */
1311
+ shortcut?: string;
1312
+ };
1313
+
1314
+ /**
1315
+ * Semantic text-style variants (mapped 1:1 from Figma text styles).
1316
+ * Each has a predefined font-size, line-height, and font-weight.
1317
+ */
1318
+ type TypographyVariant = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p1" | "p2" | "p3" | "b1" | "b2" | "subtext-xs" | "subtext-sm" | "input-xs" | "input-sm" | "label-sm" | "label-sm-mono" | "label-md" | "label-lg";
1319
+ /** Utility text sizes (text-xs through text-6xl). Use with `weight` prop. */
1320
+ type TypographySize = "xs" | "sm" | "base" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl";
1321
+ /** Font weight options (maps to Figma weight tokens). */
1322
+ type TypographyWeight = "thin" | "extra-light" | "light" | "regular" | "medium" | "semi-bold" | "bold" | "extra-bold" | "black";
1323
+ type TypographyTone = "default" | "muted" | "inherit";
1324
+ interface TypographyProps extends React$1.HTMLAttributes<HTMLElement> {
1325
+ /**
1326
+ * Semantic typography variant (maps to Figma text styles).
1327
+ * Provides predefined size + weight combos.
1328
+ * Cannot be used together with `size`.
1329
+ * @default "p2"
1330
+ */
1331
+ variant?: TypographyVariant;
1332
+ /**
1333
+ * Utility text size. Use together with `weight` for fine-grained control.
1334
+ * Cannot be used together with `variant`.
1335
+ */
1336
+ size?: TypographySize;
1337
+ /**
1338
+ * Font weight. Used with `size` for utility text styles.
1339
+ * When used with `variant`, overrides the variant's default weight.
1340
+ * @default "regular" (when using `size`)
1341
+ */
1342
+ weight?: TypographyWeight;
1343
+ /**
1344
+ * Text color tone.
1345
+ * @default "default"
1346
+ */
1347
+ tone?: TypographyTone;
1348
+ /**
1349
+ * Render as the child element (Radix Slot).
1350
+ * @default false
1351
+ */
1352
+ asChild?: boolean;
1353
+ /**
1354
+ * Override the default HTML tag for the selected variant.
1355
+ * Ignored when `asChild` is true.
1356
+ */
1357
+ as?: React$1.ElementType;
1358
+ }
1359
+
1360
+ /**
1361
+ * Typography component
1362
+ * Figma reference: 3732-2079 (Text aliases / use cases)
1363
+ *
1364
+ * Two usage modes:
1365
+ * 1. Semantic: `<Typography variant="h1">` — uses predefined size+weight from Figma
1366
+ * 2. Utility: `<Typography size="lg" weight="bold">` — fine-grained size × weight control
1367
+ */
1368
+ declare const Typography: React$1.ForwardRefExoticComponent<TypographyProps & React$1.RefAttributes<HTMLElement>>;
1369
+
1370
+ type Theme = "light" | "dark";
1371
+ interface ThemeContextType {
1372
+ theme: Theme;
1373
+ setTheme: (theme: Theme) => void;
1374
+ }
1375
+ declare const ThemeProvider: React$1.FC<{
1376
+ children: React$1.ReactNode;
1377
+ defaultTheme?: Theme;
1378
+ /** See `LegoLandWrapper.fill` — opt the wrapper into `display: contents`. */
1379
+ fill?: boolean;
1380
+ }>;
1381
+ declare const NurixThemeProvider: React$1.FC<{
1382
+ children: React$1.ReactNode;
1383
+ defaultTheme?: Theme;
1384
+ /** See `LegoLandWrapper.fill` — opt the wrapper into `display: contents`. */
1385
+ fill?: boolean;
1386
+ }>;
1387
+ declare const useTheme: () => ThemeContextType;
1388
+
1389
+ interface LegoLandWrapperProps {
1390
+ children: React$1.ReactNode;
1391
+ theme: "light" | "dark";
1392
+ className?: string;
1393
+ style?: React$1.CSSProperties;
1394
+ /**
1395
+ * Opt-in: render the wrapper with `display: contents` (via a `data-fill`
1396
+ * attribute the host app can target) so it doesn't form its own layout
1397
+ * box. Use when a child needs height/flex propagation from the wrapper's
1398
+ * parent (e.g. `h-full` on a Surface inside).
1399
+ */
1400
+ fill?: boolean;
1401
+ }
1402
+ declare const LegoLandWrapper: React$1.FC<LegoLandWrapperProps>;
1403
+
1404
+ /**
1405
+ * Hardcoded theme JSON (as requested).
1406
+ * NOTE: `uIColors` values are hex, but at runtime we convert them to HSL channels
1407
+ * so they work with `tailwind.config.ts` which uses `hsl(var(--...))`.
1408
+ */
1409
+ declare const DEFAULT_THEME: {
1410
+ /**
1411
+ * Design tokens (numbers) used by components.
1412
+ * This file is the single source of truth (do not duplicate these elsewhere).
1413
+ */
1414
+ readonly twPadding: {
1415
+ readonly mode1: {
1416
+ readonly px0: 0;
1417
+ readonly px05: 2;
1418
+ readonly px1: 4;
1419
+ readonly px15: 6;
1420
+ readonly px2: 8;
1421
+ readonly px25: 10;
1422
+ readonly px3: 12;
1423
+ readonly px35: 14;
1424
+ readonly px4: 16;
1425
+ readonly px5: 20;
1426
+ readonly px6: 24;
1427
+ readonly px7: 28;
1428
+ readonly px8: 32;
1429
+ readonly px9: 36;
1430
+ readonly px10: 40;
1431
+ readonly px11: 44;
1432
+ readonly px12: 48;
1433
+ readonly px14: 56;
1434
+ readonly px16: 64;
1435
+ readonly px20: 80;
1436
+ readonly px24: 96;
1437
+ readonly px28: 112;
1438
+ readonly px32: 128;
1439
+ readonly px36: 144;
1440
+ readonly px40: 160;
1441
+ readonly px44: 176;
1442
+ readonly px48: 192;
1443
+ readonly px52: 208;
1444
+ readonly px56: 224;
1445
+ readonly px60: 240;
1446
+ readonly px64: 256;
1447
+ readonly px72: 288;
1448
+ readonly px80: 320;
1449
+ readonly px96: 384;
1450
+ readonly pxPx: 1;
1451
+ };
1452
+ };
1453
+ readonly radius: {
1454
+ readonly mode1: {
1455
+ readonly roundedNone: 0;
1456
+ readonly roundedXs: 2;
1457
+ readonly roundedSm: 4;
1458
+ readonly roundedMd: 6;
1459
+ readonly roundedLg: 8;
1460
+ readonly roundedXl: 12;
1461
+ readonly rounded2xl: 16;
1462
+ readonly rounded3xl: 24;
1463
+ readonly rounded4xl: 32;
1464
+ readonly roundedFull: 9999;
1465
+ };
1466
+ };
1467
+ readonly tokens: {
1468
+ readonly mode1: {
1469
+ readonly 0: 0;
1470
+ readonly 1: 1;
1471
+ readonly 2: 2;
1472
+ readonly 3: 3;
1473
+ readonly 4: 4;
1474
+ readonly 5: 5;
1475
+ readonly 6: 6;
1476
+ readonly 8: 8;
1477
+ readonly 10: 10;
1478
+ readonly 12: 12;
1479
+ readonly 14: 14;
1480
+ readonly 15: 15;
1481
+ readonly 16: 16;
1482
+ readonly 18: 18;
1483
+ readonly 20: 20;
1484
+ readonly 24: 24;
1485
+ readonly 25: 25;
1486
+ readonly 28: 28;
1487
+ readonly 32: 32;
1488
+ readonly 40: 40;
1489
+ readonly 48: 48;
1490
+ readonly 64: 64;
1491
+ readonly 96: 96;
1492
+ readonly 128: 128;
1493
+ readonly 256: 256;
1494
+ readonly 512: 512;
1495
+ readonly 1024: 1024;
1496
+ readonly 9999: 9999;
1497
+ readonly "05": 0.5;
1498
+ readonly "075": 0.75;
1499
+ readonly "125": 1.25;
1500
+ readonly "175": 1.75;
1501
+ readonly "225": 2.25;
1502
+ readonly "275": 2.75;
1503
+ };
1504
+ };
1505
+ readonly twColors: {
1506
+ readonly mode1: {
1507
+ readonly slate50: "#f8fafc";
1508
+ readonly slate100: "#f1f5f9";
1509
+ readonly slate200: "#e2e8f0";
1510
+ readonly slate300: "#cbd5e1";
1511
+ readonly slate400: "#94a3b8";
1512
+ readonly slate500: "#64748b";
1513
+ readonly slate600: "#475569";
1514
+ readonly slate700: "#334155";
1515
+ readonly slate800: "#1e293b";
1516
+ readonly slate900: "#0f172a";
1517
+ readonly slate950: "#020617";
1518
+ readonly gray50: "#f9fafb";
1519
+ readonly gray100: "#f3f4f6";
1520
+ readonly gray200: "#e5e7eb";
1521
+ readonly gray300: "#d1d5db";
1522
+ readonly gray400: "#9ca3af";
1523
+ readonly gray500: "#6b7280";
1524
+ readonly gray600: "#4b5563";
1525
+ readonly gray700: "#374151";
1526
+ readonly gray800: "#1f2937";
1527
+ readonly gray900: "#111827";
1528
+ readonly gray950: "#030712";
1529
+ readonly zinc50: "#fafafa";
1530
+ readonly zinc100: "#f4f4f5";
1531
+ readonly zinc200: "#e4e4e7";
1532
+ readonly zinc300: "#d4d4d8";
1533
+ readonly zinc400: "#a1a1aa";
1534
+ readonly zinc500: "#71717a";
1535
+ readonly zinc600: "#52525b";
1536
+ readonly zinc700: "#3f3f46";
1537
+ readonly zinc800: "#27272a";
1538
+ readonly zinc900: "#18181b";
1539
+ readonly zinc950: "#09090b";
1540
+ readonly neutral50: "#fafafa";
1541
+ readonly neutral100: "#f5f5f5";
1542
+ readonly neutral200: "#e5e5e5";
1543
+ readonly neutral300: "#d4d4d4";
1544
+ readonly neutral400: "#a3a3a3";
1545
+ readonly neutral500: "#737373";
1546
+ readonly neutral600: "#525252";
1547
+ readonly neutral700: "#404040";
1548
+ readonly neutral800: "#262626";
1549
+ readonly neutral900: "#171717";
1550
+ readonly neutral950: "#0a0a0a";
1551
+ readonly stone50: "#fafaf9";
1552
+ readonly stone100: "#f5f5f4";
1553
+ readonly stone200: "#e7e5e4";
1554
+ readonly stone300: "#d6d3d1";
1555
+ readonly stone400: "#a8a29e";
1556
+ readonly stone500: "#78716c";
1557
+ readonly stone600: "#57534e";
1558
+ readonly stone700: "#44403c";
1559
+ readonly stone800: "#292524";
1560
+ readonly stone900: "#1c1917";
1561
+ readonly stone950: "#0c0a09";
1562
+ readonly red50: "#fef2f2";
1563
+ readonly red100: "#fee2e2";
1564
+ readonly red200: "#fecaca";
1565
+ readonly red300: "#fca5a5";
1566
+ readonly red400: "#f87171";
1567
+ readonly red500: "#ef4444";
1568
+ readonly red600: "#dc2626";
1569
+ readonly red700: "#b91c1c";
1570
+ readonly red800: "#991b1b";
1571
+ readonly red900: "#7f1d1d";
1572
+ readonly red950: "#450a0a";
1573
+ readonly orange50: "#fff7ed";
1574
+ readonly orange100: "#ffedd5";
1575
+ readonly orange200: "#fed7aa";
1576
+ readonly orange300: "#fdba74";
1577
+ readonly orange400: "#fb923c";
1578
+ readonly orange500: "#f97316";
1579
+ readonly orange600: "#ea580c";
1580
+ readonly orange700: "#c2410c";
1581
+ readonly orange800: "#9a3412";
1582
+ readonly orange900: "#7c2d12";
1583
+ readonly orange950: "#431407";
1584
+ readonly amber50: "#fffbeb";
1585
+ readonly amber100: "#fef3c7";
1586
+ readonly amber200: "#fde68a";
1587
+ readonly amber300: "#fcd34d";
1588
+ readonly amber400: "#fbbf24";
1589
+ readonly amber500: "#f59e0b";
1590
+ readonly amber600: "#d97706";
1591
+ readonly amber700: "#b45309";
1592
+ readonly amber800: "#92400e";
1593
+ readonly amber900: "#78350f";
1594
+ readonly amber950: "#451a03";
1595
+ readonly green50: "#f0fdf4";
1596
+ readonly green100: "#dcfce7";
1597
+ readonly green200: "#bbf7d0";
1598
+ readonly green300: "#86efac";
1599
+ readonly green400: "#4ade80";
1600
+ readonly green500: "#22c55e";
1601
+ readonly green600: "#16a34a";
1602
+ readonly green700: "#15803d";
1603
+ readonly green800: "#166534";
1604
+ readonly green900: "#14532d";
1605
+ readonly green950: "#052e16";
1606
+ readonly emerald50: "#ecfdf5";
1607
+ readonly emerald100: "#d1fae5";
1608
+ readonly emerald200: "#a7f3d0";
1609
+ readonly emerald300: "#6ee7b7";
1610
+ readonly emerald400: "#34d399";
1611
+ readonly emerald500: "#10b981";
1612
+ readonly emerald600: "#059669";
1613
+ readonly emerald700: "#047857";
1614
+ readonly emerald800: "#065f46";
1615
+ readonly emerald900: "#064e3b";
1616
+ readonly emerald950: "#022c22";
1617
+ readonly teal50: "#f0fdfa";
1618
+ readonly teal100: "#ccfbf1";
1619
+ readonly teal200: "#99f6e4";
1620
+ readonly teal300: "#5eead4";
1621
+ readonly teal400: "#2dd4bf";
1622
+ readonly teal500: "#14b8a6";
1623
+ readonly teal600: "#0d9488";
1624
+ readonly teal700: "#0f766e";
1625
+ readonly teal800: "#115e59";
1626
+ readonly teal900: "#134e4a";
1627
+ readonly teal950: "#042f2e";
1628
+ readonly cyan50: "#ecfeff";
1629
+ readonly cyan100: "#cffafe";
1630
+ readonly cyan200: "#a5f3fc";
1631
+ readonly cyan300: "#67e8f9";
1632
+ readonly cyan400: "#22d3ee";
1633
+ readonly cyan500: "#06b6d4";
1634
+ readonly cyan600: "#0891b2";
1635
+ readonly cyan700: "#0e7490";
1636
+ readonly cyan800: "#155e75";
1637
+ readonly cyan900: "#164e63";
1638
+ readonly cyan950: "#083344";
1639
+ readonly sky50: "#f0f9ff";
1640
+ readonly sky100: "#e0f2fe";
1641
+ readonly sky200: "#bae6fd";
1642
+ readonly sky300: "#7dd3fc";
1643
+ readonly sky400: "#38bdf8";
1644
+ readonly sky500: "#0ea5e9";
1645
+ readonly sky600: "#0284c7";
1646
+ readonly sky700: "#0369a1";
1647
+ readonly sky800: "#075985";
1648
+ readonly sky900: "#0c4a6e";
1649
+ readonly sky950: "#082f49";
1650
+ readonly indigo50: "#eef2ff";
1651
+ readonly indigo100: "#e0e7ff";
1652
+ readonly indigo200: "#c7d2fe";
1653
+ readonly indigo300: "#a5b4fc";
1654
+ readonly indigo400: "#818cf8";
1655
+ readonly indigo500: "#6366f1";
1656
+ readonly indigo600: "#4f46e5";
1657
+ readonly indigo700: "#4338ca";
1658
+ readonly indigo800: "#3730a3";
1659
+ readonly indigo900: "#312e81";
1660
+ readonly indigo950: "#1e1b4b";
1661
+ readonly violet50: "#f5f3ff";
1662
+ readonly violet100: "#ede9fe";
1663
+ readonly violet200: "#ddd6fe";
1664
+ readonly violet300: "#c4b5fd";
1665
+ readonly violet400: "#a78bfa";
1666
+ readonly violet500: "#8b5cf6";
1667
+ readonly violet600: "#7c3aed";
1668
+ readonly violet700: "#6d28d9";
1669
+ readonly violet800: "#5b21b6";
1670
+ readonly violet900: "#4c1d95";
1671
+ readonly violet950: "#2e1065";
1672
+ readonly purple50: "#faf5ff";
1673
+ readonly purple100: "#f3e8ff";
1674
+ readonly purple200: "#e9d5ff";
1675
+ readonly purple300: "#d8b4fe";
1676
+ readonly purple400: "#c084fc";
1677
+ readonly purple500: "#a855f7";
1678
+ readonly purple600: "#9333ea";
1679
+ readonly purple700: "#7e22ce";
1680
+ readonly purple800: "#6b21a8";
1681
+ readonly purple900: "#581c87";
1682
+ readonly purple950: "#3b0764";
1683
+ readonly fuchsia50: "#fdf4ff";
1684
+ readonly fuchsia100: "#fae8ff";
1685
+ readonly fuchsia200: "#f5d0fe";
1686
+ readonly fuchsia300: "#f0abfc";
1687
+ readonly fuchsia400: "#e879f9";
1688
+ readonly fuchsia500: "#d946ef";
1689
+ readonly fuchsia600: "#c026d3";
1690
+ readonly fuchsia700: "#a21caf";
1691
+ readonly fuchsia800: "#86198f";
1692
+ readonly fuchsia900: "#701a75";
1693
+ readonly fuchsia950: "#4a044e";
1694
+ readonly pink50: "#fdf2f8";
1695
+ readonly pink100: "#fce7f3";
1696
+ readonly pink200: "#fbcfe8";
1697
+ readonly pink300: "#f9a8d4";
1698
+ readonly pink400: "#f472b6";
1699
+ readonly pink500: "#ec4899";
1700
+ readonly pink600: "#db2777";
1701
+ readonly pink700: "#be185d";
1702
+ readonly pink800: "#9d174d";
1703
+ readonly pink900: "#831843";
1704
+ readonly pink950: "#500724";
1705
+ readonly rose50: "#fff1f2";
1706
+ readonly rose100: "#ffe4e6";
1707
+ readonly rose200: "#fecdd3";
1708
+ readonly rose300: "#fda4af";
1709
+ readonly rose400: "#fb7185";
1710
+ readonly rose500: "#f43f5e";
1711
+ readonly rose600: "#e11d48";
1712
+ readonly rose700: "#be123c";
1713
+ readonly rose800: "#9f1239";
1714
+ readonly rose900: "#881337";
1715
+ readonly rose950: "#4c0519";
1716
+ readonly lime50: "#f7fee7";
1717
+ readonly lime100: "#ecfccb";
1718
+ readonly lime200: "#d9f99d";
1719
+ readonly lime300: "#bef264";
1720
+ readonly lime400: "#a3e635";
1721
+ readonly lime500: "#84cc16";
1722
+ readonly lime600: "#65a30d";
1723
+ readonly lime700: "#4d7c0f";
1724
+ readonly lime800: "#3f6212";
1725
+ readonly lime900: "#365314";
1726
+ readonly lime950: "#1a2e05";
1727
+ readonly yellow50: "#fefce8";
1728
+ readonly yellow100: "#fef9c3";
1729
+ readonly yellow200: "#fef08a";
1730
+ readonly yellow300: "#fde047";
1731
+ readonly yellow400: "#facc15";
1732
+ readonly yellow500: "#eab308";
1733
+ readonly yellow600: "#ca8a04";
1734
+ readonly yellow700: "#a16207";
1735
+ readonly yellow800: "#854d0e";
1736
+ readonly yellow900: "#713f12";
1737
+ readonly yellow950: "#422006";
1738
+ readonly blue50: "#eff6ff";
1739
+ readonly blue100: "#dbeafe";
1740
+ readonly blue200: "#bfdbfe";
1741
+ readonly blue300: "#93c5fd";
1742
+ readonly blue400: "#60a5fa";
1743
+ readonly blue500: "#3b82f6";
1744
+ readonly blue600: "#2563eb";
1745
+ readonly blue700: "#1d4ed8";
1746
+ readonly blue800: "#1e40af";
1747
+ readonly blue900: "#1e3a8a";
1748
+ readonly blue950: "#172554";
1749
+ readonly white: "#ffffff";
1750
+ readonly black: "#000000";
1751
+ };
1752
+ };
1753
+ readonly uIColors: {
1754
+ readonly lightMode: {
1755
+ readonly backgroundColor: "#0000004d";
1756
+ readonly chart3: "#0588f0";
1757
+ readonly chart2: "#0090ff";
1758
+ readonly chart4: "#0d74ce";
1759
+ readonly chart1: "#5eb1ef";
1760
+ readonly chart5: "#113264";
1761
+ readonly sidebar: "#fafafa";
1762
+ readonly sidebarForeground: "#0a0a0a";
1763
+ readonly sidebarPrimary: "#171717";
1764
+ readonly sidebarPrimaryForeground: "#fafafa";
1765
+ readonly sidebarAccent: "#f5f5f5";
1766
+ readonly sidebarAccentForeground: "#171717";
1767
+ readonly sidebarBorder: "#d4d4d4";
1768
+ readonly sidebarRing: "#737373";
1769
+ readonly semanticBackground: "#696867";
1770
+ readonly semanticBorder: "#898887";
1771
+ readonly semanticForeground: "#ffffff";
1772
+ readonly primary10: "#1d488519";
1773
+ readonly datePickerCircle: "#3d6aa8";
1774
+ readonly filterInput: "#fff";
1775
+ readonly primarySelected: "#fff";
1776
+ readonly bgWhite: "#ffffff";
1777
+ readonly bgLightGrey: "#fafafa";
1778
+ readonly bgGrey: "#f5f5f5";
1779
+ readonly bgDarkGrey: "#e5e5e5";
1780
+ readonly bgDark: "#0a0a0a";
1781
+ readonly bgBrandPrimary: "#1d4885";
1782
+ readonly bgBrandSecondary: "#eff8ff";
1783
+ readonly bgDestructivePrimary: "#b91c1c";
1784
+ readonly bgDestructiveSecondary: "#fef2f2";
1785
+ readonly bgWarningPrimary: "#92400e";
1786
+ readonly bgWarningSecondary: "#fef3c7";
1787
+ readonly bgSuccessPrimary: "#047857";
1788
+ readonly bgSuccessSecondary: "#ecfdf5";
1789
+ readonly bgBluePrimary: "#0369a1";
1790
+ readonly bgBlueSecondary: "#f0f9ff";
1791
+ readonly borderXlight: "#f5f5f5";
1792
+ readonly borderLight: "#e5e5e5";
1793
+ readonly borderBrand: "#1d4885";
1794
+ readonly borderDestructive: "#b91c1c";
1795
+ readonly borderInput: "#e5e5e5";
1796
+ readonly borderInputHover: "#dadada";
1797
+ readonly hovOpacityPrimary: "#0a0a0a0d";
1798
+ readonly hovOpacitySecondary: "#0a0a0a0d";
1799
+ readonly hovSolidPrimary: "#fafafa";
1800
+ readonly hovSolidSecondary: "#f5f5f5";
1801
+ readonly pressedOpacityPrimary: "#0a0a0a1a";
1802
+ readonly pressedOpacitySecondary: "#0a0a0a1a";
1803
+ readonly pressedSolid: "#e5e5e5";
1804
+ readonly inFocusOpacity: "#0a0a0a26";
1805
+ readonly inFocusSolid: "#f5f5f5";
1806
+ readonly interactionSelected: "#eff8ff";
1807
+ readonly iconWhite: "#fafafa";
1808
+ readonly iconBlack: "#0a0a0a";
1809
+ readonly iconDisable: "#a3a3a3";
1810
+ readonly iconPlaceholder: "#a3a3a3";
1811
+ readonly iconGreyPrimary: "#a3a3a3";
1812
+ readonly iconGreySecondary: "#737373";
1813
+ readonly iconGreyTertiary: "#525252";
1814
+ readonly iconDestructive: "#b91c1c";
1815
+ readonly iconLink: "#1d4885";
1816
+ readonly iconSuccess: "#047857";
1817
+ readonly iconWarning: "#92400e";
1818
+ readonly iconBlue: "#0369a1";
1819
+ readonly textWhite: "#fafafa";
1820
+ readonly textBlack: "#0a0a0a";
1821
+ readonly textDisable: "#a3a3a3";
1822
+ readonly textPlaceholder: "#a3a3a3";
1823
+ readonly textGreyPrimary: "#a3a3a3";
1824
+ readonly textGreySecondary: "#737373";
1825
+ readonly textGreyTertiary: "#525252";
1826
+ readonly textDestructive: "#b91c1c";
1827
+ readonly textBrand: "#1d4885";
1828
+ readonly textSuccess: "#047857";
1829
+ readonly textWarning: "#92400e";
1830
+ readonly textBlue: "#0369a1";
1831
+ readonly badgeDefaultBg: "#f0f9ff";
1832
+ readonly badgeDefaultFg: "#0369a1";
1833
+ readonly badgeSuccessBg: "#ecfdf5";
1834
+ readonly badgeSuccessFg: "#047857";
1835
+ readonly badgeWarningBg: "#fef3c7";
1836
+ readonly badgeWarningFg: "#92400e";
1837
+ readonly badgeNeutralBg: "#e5e5e5";
1838
+ readonly badgeNeutralFg: "#525252";
1839
+ readonly badgeDestructiveBg: "#fef2f2";
1840
+ readonly badgeDestructiveFg: "#b91c1c";
1841
+ };
1842
+ readonly darkMode: {
1843
+ readonly backgroundColor: "#0000004d";
1844
+ readonly chart3: "#0588f0";
1845
+ readonly chart2: "#0090ff";
1846
+ readonly chart4: "#0d74ce";
1847
+ readonly chart1: "#5eb1ef";
1848
+ readonly chart5: "#113264";
1849
+ readonly sidebar: "#171717";
1850
+ readonly sidebarForeground: "#fafafa";
1851
+ readonly sidebarPrimary: "#0588f0";
1852
+ readonly sidebarPrimaryForeground: "#fafafa";
1853
+ readonly sidebarAccent: "#262626";
1854
+ readonly sidebarAccentForeground: "#fafafa";
1855
+ readonly sidebarBorder: "#ffffffcc";
1856
+ readonly sidebarRing: "#737373";
1857
+ readonly semanticBackground: "#272625";
1858
+ readonly semanticBorder: "#535151";
1859
+ readonly semanticForeground: "#ffffff";
1860
+ readonly primary10: "#e6f1ff1a";
1861
+ readonly datePickerCircle: "#7aa5e8";
1862
+ readonly filterInput: "#171717";
1863
+ readonly bgWhite: "#0a0a0a";
1864
+ readonly bgLightGrey: "#171717";
1865
+ readonly bgGrey: "#262626";
1866
+ readonly bgDarkGrey: "#262626";
1867
+ readonly bgDark: "#ffffff";
1868
+ readonly bgBrandPrimary: "#bfdbfe";
1869
+ readonly bgBrandSecondary: "#262626";
1870
+ readonly bgDestructivePrimary: "#f87171";
1871
+ readonly bgDestructiveSecondary: "#0a0a0a";
1872
+ readonly bgWarningPrimary: "#fbbf24";
1873
+ readonly bgWarningSecondary: "#0a0a0a";
1874
+ readonly bgSuccessPrimary: "#a7f3d0";
1875
+ readonly bgSuccessSecondary: "#0a0a0a";
1876
+ readonly bgBluePrimary: "#7dd3fc";
1877
+ readonly bgBlueSecondary: "#0a0a0a";
1878
+ readonly borderXlight: "#262626";
1879
+ readonly borderLight: "#404040";
1880
+ readonly borderBrand: "#bfdbfe";
1881
+ readonly borderDestructive: "#f87171";
1882
+ readonly borderInput: "#262626";
1883
+ readonly borderInputHover: "#404040";
1884
+ readonly hovOpacityPrimary: "#ffffff0d";
1885
+ readonly hovOpacitySecondary: "#ffffff1a";
1886
+ readonly hovSolidPrimary: "#262626";
1887
+ readonly hovSolidSecondary: "#262626";
1888
+ readonly pressedOpacityPrimary: "#ffffff26";
1889
+ readonly pressedOpacitySecondary: "#ffffff26";
1890
+ readonly pressedSolid: "#171717";
1891
+ readonly inFocusOpacity: "#ffffff40";
1892
+ readonly inFocusSolid: "#262626";
1893
+ readonly interactionSelected: "#262626";
1894
+ readonly iconWhite: "#171717";
1895
+ readonly iconBlack: "#d4d4d4";
1896
+ readonly iconDisable: "#525252";
1897
+ readonly iconPlaceholder: "#a3a3a3";
1898
+ readonly iconGreyPrimary: "#737373";
1899
+ readonly iconGreySecondary: "#a3a3a3";
1900
+ readonly iconGreyTertiary: "#d4d4d4";
1901
+ readonly iconDestructive: "#f87171";
1902
+ readonly iconLink: "#bfdbfe";
1903
+ readonly iconSuccess: "#a7f3d0";
1904
+ readonly iconWarning: "#fbbf24";
1905
+ readonly iconBlue: "#7dd3fc";
1906
+ readonly textWhite: "#0a0a0a";
1907
+ readonly textBlack: "#d4d4d4";
1908
+ readonly textDisable: "#525252";
1909
+ readonly textPlaceholder: "#a3a3a3";
1910
+ readonly textGreyPrimary: "#737373";
1911
+ readonly textGreySecondary: "#a3a3a3";
1912
+ readonly textGreyTertiary: "#d4d4d4";
1913
+ readonly textDestructive: "#f87171";
1914
+ readonly textBrand: "#bfdbfe";
1915
+ readonly textSuccess: "#a7f3d0";
1916
+ readonly textWarning: "#fbbf24";
1917
+ readonly textBlue: "#7dd3fc";
1918
+ readonly badgeDefaultBg: "#0c4a6e";
1919
+ readonly badgeDefaultFg: "#7dd3fc";
1920
+ readonly badgeSuccessBg: "#064e3b";
1921
+ readonly badgeSuccessFg: "#6ee7b7";
1922
+ readonly badgeWarningBg: "#78350f";
1923
+ readonly badgeWarningFg: "#fcd34d";
1924
+ readonly badgeNeutralBg: "#404040";
1925
+ readonly badgeNeutralFg: "#d4d4d4";
1926
+ readonly badgeDestructiveBg: "#7f1d1d";
1927
+ readonly badgeDestructiveFg: "#fecaca";
1928
+ readonly primarySelected: "#1A273A";
1929
+ };
1930
+ };
1931
+ readonly components: {
1932
+ readonly mode1: {
1933
+ readonly inputRadius: 12;
1934
+ readonly inputHeight: 40;
1935
+ readonly inputHeightLarge: 56;
1936
+ readonly inputPaddingHorizontal: 12;
1937
+ readonly inputPaddingVertical: 10;
1938
+ readonly buttonHeight: 40;
1939
+ readonly buttonRadius: 24;
1940
+ readonly inputActiveBg: "#2e3034";
1941
+ readonly inputFocussedBg: "#2e3034";
1942
+ readonly inputFocussedRing: "#acd8fc";
1943
+ };
1944
+ };
1945
+ };
1946
+
1947
+ type DialogSize = "sm" | "default" | "wide";
1948
+ /**
1949
+ * Controls the dialog layout preset:
1950
+ * - `"default"` — header with × close, plain body, footer
1951
+ * - `"icon"` — large icon circle at top, no × close, body, footer
1952
+ * - `"scrollable"` — header with × close, scrollable body, footer
1953
+ * - `"scrollable-fixed"` — same as scrollable but header and footer have dividers (sticky feel)
1954
+ */
1955
+ type DialogType = "default" | "icon" | "scrollable" | "scrollable-fixed";
1956
+ interface DialogProps {
1957
+ open: boolean;
1958
+ onOpenChange: (open: boolean) => void;
1959
+ /** @default "default" */
1960
+ type?: DialogType;
1961
+ /** @default "default" */
1962
+ size?: DialogSize;
1963
+ title?: string;
1964
+ /** Icon element for the blue circle (only used when `type="icon"`). */
1965
+ icon?: React$1.ReactNode;
1966
+ children?: React$1.ReactNode;
1967
+ /** @default "Cancel" */
1968
+ cancelLabel?: string;
1969
+ /** @default "Continue" */
1970
+ confirmLabel?: string;
1971
+ /**
1972
+ * Show the Cancel button in the footer.
1973
+ * @default true
1974
+ */
1975
+ showCancel?: boolean;
1976
+ onCancel?: () => void;
1977
+ onConfirm?: () => void;
1978
+ /** @default "primary" */
1979
+ confirmVariant?: ButtonVariant;
1980
+ /** Disable the confirm button. */
1981
+ confirmDisabled?: boolean;
1982
+ /**
1983
+ * Base data-testid. Forwarded to the dialog container, with
1984
+ * `${value}-close`, `${value}-cancel`, and `${value}-confirm` auto-derived
1985
+ * onto the close (×), cancel, and confirm buttons.
1986
+ */
1987
+ "data-testid"?: string;
1988
+ className?: string;
1989
+ }
1990
+ interface DialogIconProps {
1991
+ children: React$1.ReactNode;
1992
+ className?: string;
1993
+ }
1994
+ interface DialogHeaderProps {
1995
+ title: string;
1996
+ showClose?: boolean;
1997
+ showDivider?: boolean;
1998
+ /**
1999
+ * Base data-testid. Forwarded to the header container, with
2000
+ * `${value}-close` auto-derived onto the close (×) button.
2001
+ */
2002
+ "data-testid"?: string;
2003
+ className?: string;
2004
+ }
2005
+ interface DialogBodyProps {
2006
+ children?: React$1.ReactNode;
2007
+ scrollable?: boolean;
2008
+ className?: string;
2009
+ }
2010
+ interface DialogFooterProps {
2011
+ cancelLabel?: string;
2012
+ confirmLabel?: string;
2013
+ /**
2014
+ * Show the Cancel button.
2015
+ * @default true
2016
+ */
2017
+ showCancel?: boolean;
2018
+ onCancel?: () => void;
2019
+ onConfirm?: () => void;
2020
+ /** @default "primary" */
2021
+ confirmVariant?: ButtonVariant;
2022
+ /** Disable the confirm button. */
2023
+ confirmDisabled?: boolean;
2024
+ /**
2025
+ * Base data-testid. Forwarded to the footer container, with
2026
+ * `${value}-cancel` and `${value}-confirm` auto-derived onto the cancel
2027
+ * and confirm buttons.
2028
+ */
2029
+ "data-testid"?: string;
2030
+ showDivider?: boolean;
2031
+ className?: string;
2032
+ }
2033
+
2034
+ /**
2035
+ * Modal dialog. Rendered inline (no portal) so CSS variables from the
2036
+ * `.lego-land` ancestor always apply. Uses `fixed inset-0` so it still covers
2037
+ * the full viewport regardless of its position in the tree.
2038
+ *
2039
+ * Use the `type` prop to select a layout preset:
2040
+ * - `"default"` — header + × close + plain body + footer
2041
+ * - `"icon"` — icon circle at top + header (no ×) + body + footer
2042
+ * - `"scrollable"` — header + × close + scrollable body + footer
2043
+ * - `"scrollable-fixed"` — scrollable + dividers between header/body/footer
2044
+ *
2045
+ * Figma reference: 3316:3400 (Dialogs & Toasts)
2046
+ */
2047
+ declare const Dialog: React$1.ForwardRefExoticComponent<DialogProps & React$1.RefAttributes<HTMLDivElement>>;
2048
+ /**
2049
+ * Blue tinted icon circle for the top of a dialog.
2050
+ * Figma reference: 3364:1516
2051
+ */
2052
+ declare const DialogIcon: React$1.ForwardRefExoticComponent<DialogIconProps & React$1.RefAttributes<HTMLDivElement>>;
2053
+ /**
2054
+ * Header row with title and optional × close button / bottom divider.
2055
+ * Figma reference: 3364:1437
2056
+ */
2057
+ declare const DialogHeader: React$1.ForwardRefExoticComponent<DialogHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
2058
+ /**
2059
+ * Content area. Pass `scrollable` to constrain height and enable vertical scroll.
2060
+ * Figma reference: 3364:1541
2061
+ */
2062
+ declare const DialogBody: React$1.ForwardRefExoticComponent<DialogBodyProps & React$1.RefAttributes<HTMLDivElement>>;
2063
+ /**
2064
+ * Footer with Cancel + Confirm buttons and an optional top divider.
2065
+ * Figma reference: 3364:1397
2066
+ */
2067
+ declare const DialogFooter: React$1.ForwardRefExoticComponent<DialogFooterProps & React$1.RefAttributes<HTMLDivElement>>;
2068
+
2069
+ type ToastVariant = "success" | "error" | "default";
2070
+ interface ToastProps {
2071
+ /**
2072
+ * Determines the leading icon and title colour.
2073
+ * @default "default"
2074
+ */
2075
+ variant?: ToastVariant;
2076
+ /** Primary message text. */
2077
+ title: string;
2078
+ /** Optional secondary line shown below the title. */
2079
+ subtext?: string;
2080
+ /**
2081
+ * Show the icon-only Cancel action button on the right.
2082
+ * When used with `showToast()`, automatically dismisses the toast.
2083
+ * @default false
2084
+ */
2085
+ showCancel?: boolean;
2086
+ /** Called when the Cancel button is clicked. */
2087
+ onCancel?: () => void;
2088
+ /**
2089
+ * Show the thin progress bar pinned to the bottom of the toast.
2090
+ * @default false
2091
+ */
2092
+ showProgress?: boolean;
2093
+ /**
2094
+ * Progress percentage 0–100. Only used when `showProgress` is true.
2095
+ * @default 0
2096
+ */
2097
+ progress?: number;
2098
+ className?: string;
2099
+ style?: React$1.CSSProperties;
2100
+ /**
2101
+ * Optional `data-testid` for Playwright. Defaults to `"toast"` if omitted.
2102
+ * By convention pass a descriptive name like `"toast-success"`.
2103
+ */
2104
+ "data-testid"?: string;
2105
+ }
2106
+ /** Options passed to `showToast()`. */
2107
+ interface ShowToastOptions extends Omit<ToastProps, "onCancel"> {
2108
+ /** Duration in ms before auto-dismiss. Defaults to Sonner's default (4000ms). */
2109
+ duration?: number;
2110
+ }
2111
+
2112
+ /**
2113
+ * Place `<Toaster />` once near the root of your app (inside `LegoLandWrapper`).
2114
+ *
2115
+ * @example
2116
+ * <LegoLandWrapper>
2117
+ * <Toaster />
2118
+ * <App />
2119
+ * </LegoLandWrapper>
2120
+ */
2121
+ declare const Toaster: {
2122
+ ({ position, ...props }: React$1.ComponentProps<typeof Toaster$1>): react_jsx_runtime.JSX.Element;
2123
+ displayName: string;
2124
+ };
2125
+ /**
2126
+ * Visual Toast component. Can be used standalone or via `showToast()` for
2127
+ * Sonner-powered positioning and auto-dismiss.
2128
+ *
2129
+ * Figma reference: 3364:1614 (success), 3728:2422 (default), 3728:2438 (error)
2130
+ */
2131
+ declare const Toast: React$1.ForwardRefExoticComponent<ToastProps & React$1.RefAttributes<HTMLDivElement>>;
2132
+ /**
2133
+ * Trigger a toast notification. Requires `<Toaster />` to be mounted in the app.
2134
+ *
2135
+ * @example
2136
+ * showToast({ variant: "success", title: "Saved!", subtext: "All changes saved." });
2137
+ * showToast({ variant: "error", title: "Something went wrong", showCancel: true });
2138
+ * showToast({ variant: "default", title: "Thanks for the feedback!", showProgress: true, progress: 40 });
2139
+ */
2140
+ declare const showToast: ({ duration, ...props }: ShowToastOptions) => string | number;
2141
+
2142
+ type StepState = "incomplete" | "active" | "complete";
2143
+ interface StepItem {
2144
+ /**
2145
+ * The label text shown next to the step indicator.
2146
+ */
2147
+ label: string;
2148
+ /**
2149
+ * The state of this step.
2150
+ * @default "incomplete"
2151
+ */
2152
+ state?: StepState;
2153
+ /**
2154
+ * Optional click handler. When provided, the step renders as a `<button>`
2155
+ * (rather than a static `<div>`) so consumers can use the stepper as
2156
+ * navigation — e.g. clicking a completed step jumps the wizard back to it.
2157
+ */
2158
+ onClick?: (event: React$1.MouseEvent<HTMLButtonElement>) => void;
2159
+ /**
2160
+ * Disable click navigation even when `onClick` is provided. Useful for the
2161
+ * currently active step or steps that aren't reachable from the current
2162
+ * position.
2163
+ */
2164
+ disabled?: boolean;
2165
+ }
2166
+ interface StepperProps {
2167
+ /**
2168
+ * Array of step items to display.
2169
+ */
2170
+ steps: StepItem[];
2171
+ className?: string;
2172
+ style?: React$1.CSSProperties;
2173
+ /**
2174
+ * Optional `data-testid` for Playwright. Defaults to `"stepper"` if omitted.
2175
+ * By convention pass a descriptive name like `"stepper-onboarding"`.
2176
+ */
2177
+ "data-testid"?: string;
2178
+ }
2179
+ interface StepperBarProps {
2180
+ /**
2181
+ * Total number of steps (segments).
2182
+ * @default 4
2183
+ */
2184
+ totalSteps?: number;
2185
+ /**
2186
+ * Current active step (1-indexed). Segments up to this index are filled.
2187
+ */
2188
+ currentStep: number;
2189
+ className?: string;
2190
+ style?: React$1.CSSProperties;
2191
+ /**
2192
+ * Optional `data-testid` for Playwright. Defaults to `"stepper-bar"` if omitted.
2193
+ * By convention pass a descriptive name like `"stepper-bar-create-agent"`.
2194
+ */
2195
+ "data-testid"?: string;
2196
+ }
2197
+ interface ProgressBarProps {
2198
+ /**
2199
+ * Progress value from 0 to 100.
2200
+ */
2201
+ value: number;
2202
+ /**
2203
+ * Maximum value.
2204
+ * @default 100
2205
+ */
2206
+ max?: number;
2207
+ className?: string;
2208
+ style?: React$1.CSSProperties;
2209
+ /**
2210
+ * Optional `data-testid` for Playwright. Defaults to `"progress-bar"` if omitted.
2211
+ * By convention pass a descriptive name like `"progress-bar-upload"`.
2212
+ */
2213
+ "data-testid"?: string;
2214
+ }
2215
+
2216
+ /**
2217
+ * StepperBar — Segmented progress bar indicating how many steps are complete.
2218
+ * Based on Figma design node: 3706:2092
2219
+ */
2220
+ declare const StepperBar: React$1.ForwardRefExoticComponent<StepperBarProps & React$1.RefAttributes<HTMLDivElement>>;
2221
+ /**
2222
+ * Stepper — Horizontal stepper with labeled steps and state indicators.
2223
+ * Each step can be "incomplete", "active", or "complete".
2224
+ * Based on Figma design node: 3729:2600
2225
+ */
2226
+ declare const Stepper: React$1.ForwardRefExoticComponent<StepperProps & React$1.RefAttributes<HTMLDivElement>>;
2227
+ /**
2228
+ * ProgressBar — Continuous progress bar with fill percentage.
2229
+ * Based on Figma design node: 3357:4677
2230
+ */
2231
+ declare const ProgressBar: React$1.ForwardRefExoticComponent<ProgressBarProps & React$1.RefAttributes<HTMLDivElement>>;
2232
+
2233
+ /**
2234
+ * Icon component tokens.
2235
+ * Maps semantic color names to the icon CSS variable tokens.
2236
+ * These automatically adapt to light/dark mode.
2237
+ */
2238
+ declare const ICON_TOKENS: {
2239
+ readonly color: {
2240
+ readonly default: "text-icon-black";
2241
+ readonly white: "text-icon-white";
2242
+ readonly black: "text-icon-black";
2243
+ readonly disable: "text-icon-disable";
2244
+ readonly placeholder: "text-icon-placeholder";
2245
+ readonly "grey-primary": "text-icon-grey-primary";
2246
+ readonly "grey-secondary": "text-icon-grey-secondary";
2247
+ readonly "grey-tertiary": "text-icon-grey-tertiary";
2248
+ readonly destructive: "text-icon-destructive";
2249
+ readonly link: "text-icon-link";
2250
+ readonly success: "text-icon-success";
2251
+ readonly warning: "text-icon-warning";
2252
+ readonly blue: "text-icon-blue";
2253
+ };
2254
+ readonly size: {
2255
+ readonly xs: "size-3";
2256
+ readonly sm: "size-4";
2257
+ readonly md: "size-5";
2258
+ readonly lg: "size-6";
2259
+ readonly xl: "size-8";
2260
+ };
2261
+ readonly picker: {
2262
+ readonly trigger: "inline-flex items-center justify-center border border-token-light rounded-xl p-2 cursor-pointer hover:bg-token-dark/5 transition-colors";
2263
+ readonly dropdown: "bg-token-white rounded-xl p-3 shadow-sm border border-token-xlight w-[320px] max-h-[400px] flex flex-col gap-2";
2264
+ readonly search: "bg-token-light-grey rounded-xl px-3 py-2 text-xs text-fg-black placeholder:text-fg-placeholder outline-none border border-token-xlight focus:border-token-brand w-full";
2265
+ readonly grid: "grid grid-cols-8 gap-1 overflow-y-auto max-h-[280px] p-1";
2266
+ readonly gridItem: "flex items-center justify-center p-2 rounded-xl cursor-pointer hover:bg-interaction-hov-solid-primary transition-colors";
2267
+ readonly gridItemSelected: "bg-token-brand-secondary";
2268
+ readonly emptyText: "text-xs text-fg-grey-secondary text-center py-4";
2269
+ };
2270
+ };
2271
+ type IconColor = keyof typeof ICON_TOKENS.color;
2272
+ type IconSize = keyof typeof ICON_TOKENS.size;
2273
+
2274
+ interface IconWrapperProps {
2275
+ /**
2276
+ * Semantic icon color. Automatically adapts to light/dark mode.
2277
+ * @default "default" (icon-black in light, icon-d4d4d4 in dark)
2278
+ */
2279
+ color?: IconColor;
2280
+ /**
2281
+ * Icon size preset.
2282
+ * @default "sm" (16px)
2283
+ */
2284
+ size?: IconSize;
2285
+ /**
2286
+ * The icon to render. Can be a Lucide icon element or any ReactNode.
2287
+ */
2288
+ children: React$1.ReactNode;
2289
+ className?: string;
2290
+ style?: React$1.CSSProperties;
2291
+ }
2292
+ interface IconPickerProps {
2293
+ /**
2294
+ * Currently selected icon name (e.g. "Home", "Search").
2295
+ */
2296
+ value?: string | null;
2297
+ /**
2298
+ * Callback when an icon is selected.
2299
+ */
2300
+ onValueChange?: (iconName: string) => void;
2301
+ /**
2302
+ * Subset of Lucide icon names to show. If not provided, shows all common icons.
2303
+ */
2304
+ icons?: string[];
2305
+ /**
2306
+ * Icon color for the trigger and grid.
2307
+ * @default "default"
2308
+ */
2309
+ color?: IconColor;
2310
+ /**
2311
+ * Icon size in the trigger.
2312
+ * @default "md"
2313
+ */
2314
+ size?: IconSize;
2315
+ /**
2316
+ * Placeholder text when no icon is selected.
2317
+ * @default "Pick icon"
2318
+ */
2319
+ placeholder?: string;
2320
+ className?: string;
2321
+ style?: React$1.CSSProperties;
2322
+ /**
2323
+ * Optional `data-testid` for Playwright. Defaults to `"btn"` (the trigger
2324
+ * is a button) if omitted.
2325
+ */
2326
+ "data-testid"?: string;
2327
+ }
2328
+
2329
+ /**
2330
+ * IconWrapper — Wraps any icon (Lucide or custom SVG) with theme-aware colors.
2331
+ *
2332
+ * Automatically adapts icon color to light/dark mode using the icon/* CSS variable tokens.
2333
+ * Solves the problem of icons breaking when switching themes.
2334
+ *
2335
+ * Usage:
2336
+ * ```tsx
2337
+ * <IconWrapper color="destructive" size="lg">
2338
+ * <Trash2 />
2339
+ * </IconWrapper>
2340
+ * ```
2341
+ */
2342
+ declare const IconWrapper: React$1.ForwardRefExoticComponent<IconWrapperProps & React$1.RefAttributes<HTMLSpanElement>>;
2343
+ /**
2344
+ * IconPicker — A dropdown grid of Lucide icons for the user to pick from.
2345
+ *
2346
+ * Usage:
2347
+ * ```tsx
2348
+ * <IconPicker value={icon} onValueChange={setIcon} />
2349
+ * ```
2350
+ */
2351
+ declare const IconPicker: React$1.ForwardRefExoticComponent<IconPickerProps & React$1.RefAttributes<HTMLDivElement>>;
2352
+
2353
+ interface ShadowDOMWrapperProps {
2354
+ children: React$1.ReactNode;
2355
+ /**
2356
+ * CSS styles to inject into the shadow root.
2357
+ * If not provided, styles will be extracted from the document's stylesheets.
2358
+ * For best results, provide the compiled CSS string from your build process.
2359
+ */
2360
+ styles?: string;
2361
+ /**
2362
+ * Mode for the shadow root. Defaults to "open".
2363
+ * - "open": Shadow root is accessible via JavaScript
2364
+ * - "closed": Shadow root is not accessible via JavaScript
2365
+ */
2366
+ mode?: ShadowRootMode;
2367
+ /**
2368
+ * Additional CSS to inject into the shadow root.
2369
+ */
2370
+ additionalStyles?: string;
2371
+ /**
2372
+ * Whether to copy CSS variables from the document root.
2373
+ * Defaults to true.
2374
+ */
2375
+ copyCSSVariables?: boolean;
2376
+ }
2377
+ /**
2378
+ * ShadowDOMWrapper component that wraps children in a Shadow DOM.
2379
+ * This isolates component styles and DOM structure from the parent document.
2380
+ */
2381
+ declare const ShadowDOMWrapper: React$1.FC<ShadowDOMWrapperProps>;
2382
+
2383
+ /**
2384
+ * Cell content can be:
2385
+ * - string: plain text
2386
+ * - CellTextContent: text with optional className/style
2387
+ * - React.ReactNode: any renderable node (icon, badge, custom element)
2388
+ *
2389
+ * Figma reference node: 3338:6396
2390
+ */
2391
+ type CellTextContent = {
2392
+ text: string;
2393
+ className?: string;
2394
+ style?: React$1.CSSProperties;
2395
+ };
2396
+ type CellContent = string | CellTextContent | React$1.ReactNode;
2397
+ type SortDirection = "asc" | "desc";
2398
+ interface SortState {
2399
+ key: string;
2400
+ direction: SortDirection | null;
2401
+ }
2402
+ /**
2403
+ * Column width size options.
2404
+ * Defaults to "md" (160px).
2405
+ */
2406
+ declare enum ColumnWidth {
2407
+ xs = "xs",
2408
+ sm = "sm",
2409
+ md = "md",
2410
+ lg = "lg",
2411
+ xl = "xl"
2412
+ }
2413
+ interface ColumnDef<TRow> {
2414
+ /**
2415
+ * Unique identifier for the column. Used for pinning and sort state.
2416
+ */
2417
+ key: string;
2418
+ /**
2419
+ * Display label shown in the column header.
2420
+ */
2421
+ header: string;
2422
+ /**
2423
+ * Returns the cell content for a given row.
2424
+ */
2425
+ accessor: (row: TRow) => CellContent;
2426
+ /**
2427
+ * Whether this column supports sorting. Clicking the header cycles
2428
+ * null → asc → desc → null and fires onSortChange.
2429
+ */
2430
+ isSortable?: boolean;
2431
+ /**
2432
+ * Current sort direction for this column. When set, this column is sorted.
2433
+ * Updated by the consumer in onSortChange.
2434
+ */
2435
+ sort_direction?: SortDirection | null;
2436
+ /**
2437
+ * Column width size. Defaults to "md" (160px).
2438
+ * Required for accurate sticky offsets on pinned columns.
2439
+ */
2440
+ width?: ColumnWidth;
2441
+ }
2442
+ interface TableAction<TRow> {
2443
+ /**
2444
+ * Tooltip label shown on hover.
2445
+ */
2446
+ label: string;
2447
+ /**
2448
+ * Icon rendered inside the action button.
2449
+ */
2450
+ icon?: React$1.ReactNode;
2451
+ /**
2452
+ * Called when the action button is clicked.
2453
+ */
2454
+ onClick: (row: TRow) => void;
2455
+ /**
2456
+ * data-testid for the action button. Static string, or a function that
2457
+ * receives the row so consumers can build per-row testids
2458
+ * (e.g. `(row) => `btn-delete-${row.id}``).
2459
+ */
2460
+ "data-testid"?: string | ((row: TRow) => string);
2461
+ }
2462
+ interface PaginationProps {
2463
+ handlePageChange: (page: number) => void;
2464
+ rowsPerPage: number;
2465
+ setRowsPerPage: (rowsPerPage: number) => void;
2466
+ currentPage: number;
2467
+ total: number;
2468
+ entityName?: string;
2469
+ /**
2470
+ * Optional `data-testid` for Playwright. Defaults to `"pagination"` if omitted.
2471
+ */
2472
+ "data-testid"?: string;
2473
+ }
2474
+ interface DataTableProps<TRow> {
2475
+ /**
2476
+ * Column definitions in display order. Pinned columns will be
2477
+ * reordered to the front automatically.
2478
+ */
2479
+ columns: ColumnDef<TRow>[];
2480
+ /**
2481
+ * Rows to render on the current page.
2482
+ */
2483
+ data: TRow[];
2484
+ /**
2485
+ * Array of column keys to pin. Listed in the desired left-to-right order.
2486
+ * Pinned columns are sticky and separated by a vertical line.
2487
+ */
2488
+ pinnedColumns?: string[];
2489
+ /**
2490
+ * When true, renders a checkbox column as the first column.
2491
+ */
2492
+ showCheckbox?: boolean;
2493
+ /**
2494
+ * Action buttons rendered in the last (Actions) column.
2495
+ */
2496
+ actions?: TableAction<TRow>[];
2497
+ /**
2498
+ * Returns a stable unique ID for a row (used for selection).
2499
+ * Defaults to JSON.stringify if not provided.
2500
+ */
2501
+ getRowId?: (row: TRow) => string;
2502
+ /**
2503
+ * Controlled selected row IDs.
2504
+ */
2505
+ selectedRows?: string[];
2506
+ /**
2507
+ * Called when selection changes.
2508
+ */
2509
+ onSelectionChange?: (ids: string[]) => void;
2510
+ /**
2511
+ * Called when sort state changes. The consumer should update columns to set
2512
+ * sort_direction on the sorted column (or clear it when sort is null).
2513
+ */
2514
+ onSortChange?: (sort: SortState | null) => void;
2515
+ /**
2516
+ * When false, hides the pagination footer. Defaults to true.
2517
+ */
2518
+ showPagination?: boolean;
2519
+ currentPage?: number;
2520
+ rowsPerPage?: number;
2521
+ total?: number;
2522
+ onPageChange?: (page: number) => void;
2523
+ onRowsPerPageChange?: (rowsPerPage: number) => void;
2524
+ entityName?: string;
2525
+ /**
2526
+ * When false, hides the outer border. Defaults to true.
2527
+ */
2528
+ showBorder?: boolean;
2529
+ /**
2530
+ * When true, the header row stays fixed at the top while the table body scrolls.
2531
+ */
2532
+ stickyHeader?: boolean;
2533
+ /**
2534
+ * Optional React node to render in the header's top-right corner.
2535
+ * Useful for header-level actions like column filters or settings.
2536
+ */
2537
+ headerAction?: React$1.ReactNode;
2538
+ className?: string;
2539
+ /**
2540
+ * When true, shows skeleton loading state with 10 rows.
2541
+ */
2542
+ loading?: boolean;
2543
+ /**
2544
+ * Called when a data row is clicked. Receives the row data.
2545
+ */
2546
+ onRowClick?: (row: TRow) => void;
2547
+ /**
2548
+ * Optional `data-testid` for Playwright. Defaults to `"table"` if omitted.
2549
+ * Each data row also gets `data-testid={`row-${id}`}` automatically.
2550
+ */
2551
+ "data-testid"?: string;
2552
+ }
2553
+
2554
+ /**
2555
+ * Pagination controls: rows-per-page selector + page navigation.
2556
+ * Can also be used standalone outside of DataTable.
2557
+ *
2558
+ * Figma reference node: 3338:6396
2559
+ */
2560
+ declare function Pagination({ handlePageChange, rowsPerPage, setRowsPerPage, currentPage, total, entityName, "data-testid": dataTestId, }: PaginationProps): react_jsx_runtime.JSX.Element;
2561
+ declare namespace Pagination {
2562
+ var displayName: string;
2563
+ }
2564
+ /**
2565
+ * A fully-featured data table with:
2566
+ * - Column pinning (sticky with vertical divider)
2567
+ * - Horizontal scrolling
2568
+ * - Optional checkbox selection column
2569
+ * - Flexible cell content (text, styled text, icon, badge, or any React node)
2570
+ * - Sortable columns (consumer-driven — fires onSortChange)
2571
+ * - Row action buttons
2572
+ * - Pagination via Pagination
2573
+ *
2574
+ * Figma reference node: 3338:6396
2575
+ */
2576
+ declare function DataTable<TRow>({ columns, data, pinnedColumns, showCheckbox, actions, getRowId, selectedRows, onSelectionChange, onSortChange, showPagination, currentPage, rowsPerPage, total, onPageChange, onRowsPerPageChange, entityName, showBorder, stickyHeader, headerAction, className, loading, onRowClick, "data-testid": dataTestId, }: DataTableProps<TRow>): react_jsx_runtime.JSX.Element;
2577
+ declare namespace DataTable {
2578
+ var displayName: string;
2579
+ }
2580
+
2581
+ /**
2582
+ * Optional per-item trailing action button. Rendered before the
2583
+ * selected-tick slot, visible only on row hover (so the row stays calm when
2584
+ * idle). Use for destructive or secondary actions like "delete this saved
2585
+ * view" without making them part of the row's primary click.
2586
+ */
2587
+ interface FilterItemAction {
2588
+ icon: React$1.ReactNode;
2589
+ ariaLabel: string;
2590
+ onClick: (e: React$1.MouseEvent<HTMLButtonElement>) => void;
2591
+ }
2592
+ /**
2593
+ * Filter item structure
2594
+ */
2595
+ interface FilterItem<T = string> {
2596
+ value: T;
2597
+ label: string;
2598
+ /** Optional secondary line shown under the label (two-line option support) */
2599
+ subtext?: string;
2600
+ /** Optional icon for this item (per-item icon support) */
2601
+ icon?: LucideIcon | React$1.ReactNode;
2602
+ /** Show loading state for this item (per-item loading) */
2603
+ loading?: boolean;
2604
+ /** Optional custom display node to render instead of plain label */
2605
+ labelNode?: React$1.ReactNode;
2606
+ /** Optional trailing hover-action (e.g. delete) */
2607
+ action?: FilterItemAction;
2608
+ }
2609
+ /**
2610
+ * Filter item with section grouping
2611
+ */
2612
+ interface FilterItemWithSection<T = string> {
2613
+ sectionLabel: string;
2614
+ items: FilterItem<T>[];
2615
+ }
2616
+ /**
2617
+ * Filter types.
2618
+ * - "list" : multi-select list (with optional search, sections, drag)
2619
+ * - "text" : textarea
2620
+ * - "text_with_operands" : operand dropdown + textarea
2621
+ * - "numeric" : single numeric input
2622
+ * - "numeric_with_operands" : operand dropdown + numeric input (+ optional range mode for "is between")
2623
+ * - "in_between" : two numeric inputs (min / max) — no operand dropdown
2624
+ * - "duration" : numeric input + unit dropdown (sec / min / hours)
2625
+ * - "date" : date range picker with optional presets
2626
+ */
2627
+ type FilterSelectType = "list" | "text" | "text_with_operands" | "numeric" | "numeric_with_operands" | "in_between" | "duration" | "date";
2628
+ /**
2629
+ * Props for FilterSelect component
2630
+ */
2631
+ interface FilterSelectProps<T = string> extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onChange" | "className"> {
2632
+ /** Filter label displayed in the trigger button */
2633
+ label?: string;
2634
+ /** Icon displayed on the left side of the trigger */
2635
+ icon?: LucideIcon;
2636
+ /** Array of selected item values */
2637
+ selectedItems?: T[];
2638
+ /** Available items for selection (flat or sectioned) */
2639
+ items: (FilterItem<T> | FilterItemWithSection<T>)[];
2640
+ /** Enable drag-and-drop reordering (default: false) */
2641
+ draggable?: boolean;
2642
+ /** To show clear button regardless of selected items or text / date content (default: true) */
2643
+ showClearBtn?: boolean;
2644
+ /**
2645
+ * When `true`, the footer action reads "Clear" (non-destructive: wipes the value but
2646
+ * keeps the filter in the bar). When `false` (default), it reads "Remove" (implies
2647
+ * the filter itself is removed from the bar).
2648
+ */
2649
+ isPersistent?: boolean;
2650
+ /** Callback when selection changes */
2651
+ onSelectionChange?: (values: T[]) => void;
2652
+ /** Callback when order changes (draggable mode) */
2653
+ onOrderChange?: (values: T[]) => void;
2654
+ /** Max width for selected items display */
2655
+ selectedItemsMaxWidth?: string;
2656
+ /** Override classes for selected items display area */
2657
+ selectedItemsClassName?: string;
2658
+ /** Default open state */
2659
+ defaultOpen?: boolean;
2660
+ /** Controlled open state */
2661
+ open?: boolean;
2662
+ /** Callback when open state changes */
2663
+ onOpenChange?: (open: boolean) => void;
2664
+ /** Max height for dropdown content */
2665
+ dropdownMaxHeight?: string;
2666
+ /** Show loading spinner in dropdown */
2667
+ loading?: boolean;
2668
+ onRemoveAll?: () => void;
2669
+ /** Type of filter select */
2670
+ type?: FilterSelectType;
2671
+ /** Controlled text value */
2672
+ text?: string;
2673
+ /** Callback when text changes */
2674
+ onTextChange?: (text: string) => void;
2675
+ /** Selected operand value */
2676
+ operand?: string;
2677
+ /** Callback when operand changes */
2678
+ onOperandChange?: (operand: string) => void;
2679
+ /** Available operands with label and value */
2680
+ operands?: {
2681
+ value: string;
2682
+ label: string;
2683
+ }[];
2684
+ /** Placeholder text for textarea/input */
2685
+ textPlaceholder?: string;
2686
+ /** Placeholder for operand select (default: "") */
2687
+ operandPlaceholder?: string;
2688
+ /** Unit label suffix shown inside numeric input (e.g. "sec", "min") */
2689
+ unitLabel?: string;
2690
+ /** Enable range mode for "numeric_with_operands" - shows min/max inputs */
2691
+ isRangeMode?: boolean;
2692
+ /** Range min value */
2693
+ rangeMin?: string;
2694
+ /** Range max value */
2695
+ rangeMax?: string;
2696
+ /** Callback when range min changes */
2697
+ onRangeMinChange?: (value: string) => void;
2698
+ /** Callback when range max changes */
2699
+ onRangeMaxChange?: (value: string) => void;
2700
+ /**
2701
+ * Duration filter options — when type="duration" this defines the unit dropdown choices.
2702
+ * Defaults to [{ value: "sec", label: "sec" }, { value: "min", label: "min" }, { value: "hours", label: "hours" }].
2703
+ */
2704
+ durationUnits?: {
2705
+ value: string;
2706
+ label: string;
2707
+ }[];
2708
+ /** Currently selected duration unit value */
2709
+ durationUnit?: string;
2710
+ /** Callback when duration unit changes */
2711
+ onDurationUnitChange?: (unit: string) => void;
2712
+ /** Show search input to filter list items */
2713
+ showSearch?: boolean;
2714
+ /** Search placeholder text (default: "Search...") */
2715
+ searchPlaceholder?: string;
2716
+ /** Date range value (for "date" type) */
2717
+ date?: {
2718
+ start?: Date;
2719
+ end?: Date;
2720
+ };
2721
+ /** Callback when date range changes */
2722
+ onDateChange?: (date: {
2723
+ start?: Date;
2724
+ end?: Date;
2725
+ }) => void;
2726
+ /** Date presets to show (default: true) */
2727
+ datePresets?: boolean | DatePreset[];
2728
+ /** Show time picker in date filter (default: true) */
2729
+ showTime?: boolean;
2730
+ /**
2731
+ * Allow selecting dates in the future. Defaults to `false` because the
2732
+ * date filter is typically used to filter past data (logs, conversations,
2733
+ * etc.). Enable for use cases like scheduling.
2734
+ */
2735
+ allowFutureDates?: boolean;
2736
+ /**
2737
+ * Disable selecting dates before today. Useful for scheduling flows where
2738
+ * the start date must be today or later. Combines with `allowFutureDates`.
2739
+ */
2740
+ disablePastDates?: boolean;
2741
+ /** Empty state label when no items available */
2742
+ emptyStateLabel?: string;
2743
+ /** Additional className for the trigger button */
2744
+ triggerClassName?: string;
2745
+ /** Additional className for the dropdown content */
2746
+ dropdownClassName?: string;
2747
+ /**
2748
+ * Override className for the `label` span inside the trigger. Useful when embedding
2749
+ * FilterSelect as the right pill of `<CompoundFilterSelect>`, where the Figma spec
2750
+ * paints the label in `text-fg-brand` (Subtext/xs) — see Figma 5427:32334.
2751
+ */
2752
+ labelClassName?: string;
2753
+ /**
2754
+ * Optional `data-testid` for Playwright. Defaults to `"select"` if omitted.
2755
+ * By convention pass a descriptive name like `"select-language"`.
2756
+ */
2757
+ "data-testid"?: string;
2758
+ }
2759
+ /** Date preset: label and function to compute the range */
2760
+ interface DatePreset {
2761
+ value: string;
2762
+ label: string;
2763
+ getRange: () => {
2764
+ start: Date;
2765
+ end: Date;
2766
+ };
2767
+ }
2768
+ /**
2769
+ * Props for FilterListItem component
2770
+ */
2771
+ interface FilterListItemProps<T = string> {
2772
+ /** Unique item value */
2773
+ value: T;
2774
+ /** Display text */
2775
+ label: string;
2776
+ /** Optional subtext displayed below the label (two-line option) */
2777
+ subtext?: string;
2778
+ /** Selection state */
2779
+ selected?: boolean;
2780
+ /** Show drag handle */
2781
+ draggable?: boolean;
2782
+ /** Selection handler */
2783
+ onSelect?: (value: T) => void;
2784
+ /** Optional icon for this item */
2785
+ icon?: React$1.ComponentType<any> | React$1.ReactNode;
2786
+ /** Show loading spinner on this item */
2787
+ loading?: boolean;
2788
+ /** Optional custom display node replacing the plain label */
2789
+ labelNode?: React$1.ReactNode;
2790
+ /** Hover state (for stories) */
2791
+ hover?: boolean;
2792
+ /** Additional className */
2793
+ className?: string;
2794
+ /** Optional trailing hover-action (e.g. delete) */
2795
+ action?: FilterItemAction;
2796
+ }
2797
+
2798
+ declare const FilterSelect: React$1.ForwardRefExoticComponent<FilterSelectProps<string> & React$1.RefAttributes<HTMLDivElement>>;
2799
+
2800
+ /**
2801
+ * FilterListItem — single row in a FilterSelect dropdown list.
2802
+ *
2803
+ * Figma spec (4085:5872, 4085:5885):
2804
+ * [drag handle?] [leading icon?] [label / optional subtext] [trailing tick when selected]
2805
+ *
2806
+ * Key fix: only the SELECTED option renders a tick — NOT every option.
2807
+ * We do not render a Checkbox; the design uses trailing check + bg-brand-secondary for selection.
2808
+ *
2809
+ * Layout-shift: the trailing tick slot is always reserved (same width) so selection does not
2810
+ * jitter item width. Hover / selected use background swaps only — no padding or border changes.
2811
+ */
2812
+ declare const FilterListItem: React$1.ForwardRefExoticComponent<FilterListItemProps<string> & {
2813
+ onDragStart?: (e: React$1.DragEvent) => void;
2814
+ onDragOver?: (e: React$1.DragEvent) => void;
2815
+ onDragLeave?: (e: React$1.DragEvent) => void;
2816
+ onDrop?: (e: React$1.DragEvent) => void;
2817
+ onDragEnd?: (e: React$1.DragEvent) => void;
2818
+ isDragging?: boolean;
2819
+ isDragOver?: boolean;
2820
+ } & React$1.RefAttributes<HTMLDivElement>>;
2821
+
2822
+ /**
2823
+ * Option for the left-side toggle dropdown (e.g., Agent/Crew).
2824
+ */
2825
+ interface CompoundFilterToggleOption<T extends string = string> {
2826
+ value: T;
2827
+ label: string;
2828
+ /** Icon shown inside the dropdown menu next to the label */
2829
+ icon?: LucideIcon | React$1.ReactNode;
2830
+ }
2831
+ interface CompoundFilterSelectProps<T extends string = string> extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onChange"> {
2832
+ /** Options for the left-side toggle dropdown */
2833
+ options: CompoundFilterToggleOption<T>[];
2834
+ /** Current selected value for the left toggle */
2835
+ value: T;
2836
+ /** Callback when left toggle value changes */
2837
+ onChange: (value: T) => void;
2838
+ /**
2839
+ * Leading icon shown on the left pill (e.g., an icon representing the current selection).
2840
+ * If omitted, falls back to the icon on the currently-selected option.
2841
+ */
2842
+ leadingIcon?: LucideIcon | React$1.ReactNode;
2843
+ /** Optional label shown on the left pill next to the icon. If omitted, only icon + chevron are shown (compact mode). */
2844
+ leftLabel?: string;
2845
+ /** Right-side content, typically a <FilterSelect /> */
2846
+ children?: React$1.ReactNode;
2847
+ /** Disable the left toggle */
2848
+ disabled?: boolean;
2849
+ }
2850
+ /**
2851
+ * CompoundFilterSelect
2852
+ *
2853
+ * A compound filter comprising:
2854
+ * - Left pill: a dropdown toggle (e.g., Agent / Crew) with its own rounded-left border
2855
+ * - Right pill: any content (typically a <FilterSelect />) with its own rounded-right border
2856
+ *
2857
+ * The two pills overlap by 1px so their borders merge visually into a single continuous pill.
2858
+ * Per Figma spec (1XTtQGgJ2Tb0wycZ7O1Ez9 · 5427:32324).
2859
+ */
2860
+ declare function CompoundFilterSelect<T extends string = string>({ options, value, onChange, leadingIcon, leftLabel, children, disabled, className, ...props }: CompoundFilterSelectProps<T>): react_jsx_runtime.JSX.Element;
2861
+ declare namespace CompoundFilterSelect {
2862
+ var displayName: string;
2863
+ }
2864
+
2865
+ interface ButtonListItem {
2866
+ value: string;
2867
+ label: string;
2868
+ icon?: LucideIcon;
2869
+ }
2870
+ interface ButtonListProps {
2871
+ label?: string;
2872
+ leadingIcon?: LucideIcon;
2873
+ items: ButtonListItem[];
2874
+ onSelect?: (value: string) => void;
2875
+ defaultOpen?: boolean;
2876
+ open?: boolean;
2877
+ onOpenChange?: (open: boolean) => void;
2878
+ className?: string;
2879
+ dropdownClassName?: string;
2880
+ /**
2881
+ * Optional `data-testid` for Playwright. Defaults to `"btn"` if omitted.
2882
+ * By convention pass a descriptive name like `"btn-actions"`.
2883
+ */
2884
+ "data-testid"?: string;
2885
+ }
2886
+
2887
+ declare const ButtonList: React$1.ForwardRefExoticComponent<ButtonListProps & React$1.RefAttributes<HTMLDivElement>>;
2888
+
2889
+ type SpinnerSize = "sm" | "md" | "lg" | "xl";
2890
+ interface SpinnerProps extends React$1.HTMLAttributes<HTMLDivElement> {
2891
+ /**
2892
+ * Size of the spinner
2893
+ * @default "md"
2894
+ */
2895
+ size?: SpinnerSize;
2896
+ /**
2897
+ * Custom className for the spinner container
2898
+ */
2899
+ className?: string;
2900
+ /**
2901
+ * Optional title shown beneath the spinner (Typography `label-md`,
2902
+ * foreground black). Passing `title` or `texts` switches the spinner
2903
+ * into composed loader mode (centered vertical stack, gap-3).
2904
+ */
2905
+ title?: string;
2906
+ /**
2907
+ * Optional list of sub-texts rotated every 2000ms beneath the title
2908
+ * (Typography `subtext-xs`, muted tone). The rotation stops on the
2909
+ * last item. Resets to index 0 when the array reference changes.
2910
+ */
2911
+ texts?: string[];
2912
+ }
2913
+
2914
+ /**
2915
+ * Spinner component - Displays a loading spinner with size variations
2916
+ * Based on Figma design node: 3357:4429
2917
+ *
2918
+ * When `title` or `texts` is supplied, renders a composed loader layout:
2919
+ * spinner + title (`label-md`) + rotating sub-text (`subtext-xs`, muted).
2920
+ * Sub-texts advance every 2000ms and stop on the last item. With neither
2921
+ * prop set, output is byte-identical to the legacy bare spinner.
2922
+ */
2923
+ declare const Spinner: React$1.ForwardRefExoticComponent<SpinnerProps & React$1.RefAttributes<HTMLDivElement>>;
2924
+
2925
+ /**
2926
+ * Supported Monaco editor languages.
2927
+ */
2928
+ type JsonEditorLanguage = "json" | "javascript" | "typescript" | "yaml" | "xml" | "html" | "css" | "markdown" | "sql" | "plaintext";
2929
+ declare const JSON_EDITOR_LANGUAGE_OPTIONS: readonly JsonEditorLanguage[];
2930
+ interface JsonEditorProps {
2931
+ value: string;
2932
+ onChange: (val: string) => void;
2933
+ onParsedObject?: (obj: unknown | null) => void;
2934
+ height?: string;
2935
+ label?: string;
2936
+ schema?: Schema;
2937
+ nodeId?: string;
2938
+ language?: JsonEditorLanguage;
2939
+ showExpandButton?: boolean;
2940
+ /** When true, hide the header/toolbar (for embedding in KeyValueJsonEditor). */
2941
+ hideHeader?: boolean;
2942
+ /**
2943
+ * Optional `data-testid` for Playwright. Defaults to `"input"` if omitted.
2944
+ */
2945
+ "data-testid"?: string;
2946
+ }
2947
+
2948
+ declare function JsonEditor({ value, onChange, onParsedObject, height, label, schema, nodeId, language, showExpandButton, hideHeader, "data-testid": dataTestId, }: JsonEditorProps): react_jsx_runtime.JSX.Element;
2949
+
2950
+ interface UseJsonEditorParams {
2951
+ value: string;
2952
+ onChange: (val: string) => void;
2953
+ onParsedObject?: (obj: unknown | null) => void;
2954
+ schema?: Schema;
2955
+ nodeId?: string;
2956
+ language?: JsonEditorLanguage;
2957
+ }
2958
+ declare function useJsonEditor({ value, onChange, onParsedObject, schema, nodeId, language, }: UseJsonEditorParams): {
2959
+ handleMount: OnMount;
2960
+ handleExpandedMount: OnMount;
2961
+ handleChange: (val: string | undefined) => void;
2962
+ formatJson: () => Promise<void> | undefined;
2963
+ formatExpandedJson: () => Promise<void> | undefined;
2964
+ copyToClipboard: () => void;
2965
+ errors: string[];
2966
+ copied: boolean;
2967
+ };
2968
+
2969
+ declare const enhanceJsonError: (message: string) => string;
2970
+ declare const MONACO_OPTIONS: {
2971
+ fontSize: number;
2972
+ lineHeight: number;
2973
+ padding: {
2974
+ top: number;
2975
+ bottom: number;
2976
+ };
2977
+ minimap: {
2978
+ readonly enabled: false;
2979
+ };
2980
+ automaticLayout: true;
2981
+ scrollBeyondLastLine: false;
2982
+ folding: true;
2983
+ lineNumbers: "on";
2984
+ renderLineHighlight: "none";
2985
+ fontFamily: "'Geist Mono', 'Cascadia Code', 'Fira Code', monospace";
2986
+ fontLigatures: true;
2987
+ bracketPairColorization: {
2988
+ readonly enabled: true;
2989
+ };
2990
+ guides: {
2991
+ readonly bracketPairs: false;
2992
+ readonly indentation: false;
2993
+ };
2994
+ overviewRulerLanes: 0;
2995
+ hideCursorInOverviewRuler: true;
2996
+ overviewRulerBorder: false;
2997
+ scrollbar: {
2998
+ readonly vertical: "auto";
2999
+ readonly horizontal: "auto";
3000
+ readonly useShadows: false;
3001
+ readonly verticalScrollbarSize: 6;
3002
+ readonly horizontalScrollbarSize: 6;
3003
+ readonly arrowSize: 0;
3004
+ };
3005
+ };
3006
+ /** Dialog editor: tighter padding, slightly larger font for readability in expanded view */
3007
+ declare const MONACO_OPTIONS_DIALOG: {
3008
+ fontSize: number;
3009
+ lineHeight: number;
3010
+ padding: {
3011
+ top: number;
3012
+ bottom: number;
3013
+ };
3014
+ minimap: {
3015
+ readonly enabled: false;
3016
+ };
3017
+ automaticLayout: true;
3018
+ scrollBeyondLastLine: false;
3019
+ folding: true;
3020
+ lineNumbers: "on";
3021
+ renderLineHighlight: "none";
3022
+ fontFamily: "'Geist Mono', 'Cascadia Code', 'Fira Code', monospace";
3023
+ fontLigatures: true;
3024
+ bracketPairColorization: {
3025
+ readonly enabled: true;
3026
+ };
3027
+ guides: {
3028
+ readonly bracketPairs: false;
3029
+ readonly indentation: false;
3030
+ };
3031
+ overviewRulerLanes: 0;
3032
+ hideCursorInOverviewRuler: true;
3033
+ overviewRulerBorder: false;
3034
+ scrollbar: {
3035
+ readonly vertical: "auto";
3036
+ readonly horizontal: "auto";
3037
+ readonly useShadows: false;
3038
+ readonly verticalScrollbarSize: 6;
3039
+ readonly horizontalScrollbarSize: 6;
3040
+ readonly arrowSize: 0;
3041
+ };
3042
+ };
3043
+
3044
+ interface KeyValuePair {
3045
+ key: string;
3046
+ value: string;
3047
+ /**
3048
+ * Optional per-row error for the key field. When set, the key Input is
3049
+ * rendered with `invalid` + this message as supporting-text.
3050
+ */
3051
+ keyError?: string;
3052
+ /**
3053
+ * Optional per-row error for the value field. When set, the value Input is
3054
+ * rendered with `invalid` + this message as supporting-text.
3055
+ */
3056
+ valueError?: string;
3057
+ }
3058
+ interface KeyValueEditorProps {
3059
+ /**
3060
+ * Key-value pairs.
3061
+ */
3062
+ pairs: KeyValuePair[];
3063
+ /**
3064
+ * Called when pairs change.
3065
+ */
3066
+ onPairsChange: (pairs: KeyValuePair[]) => void;
3067
+ /**
3068
+ * Placeholder for key inputs.
3069
+ */
3070
+ keyPlaceholder?: string;
3071
+ /**
3072
+ * Placeholder for value inputs.
3073
+ */
3074
+ valuePlaceholder?: string;
3075
+ /**
3076
+ * Optional toolbar content (e.g. Toggle button) rendered in the header.
3077
+ */
3078
+ toolbar?: React$1.ReactNode;
3079
+ /**
3080
+ * When true, omit the header row. For use inside KeyValueJsonEditor.
3081
+ */
3082
+ hideHeader?: boolean;
3083
+ /**
3084
+ * When true, show delete button on each row. When false, delete is hidden.
3085
+ * Rows can only be deleted until 1 row remains.
3086
+ * @default true
3087
+ */
3088
+ allowDeleteRow?: boolean;
3089
+ /**
3090
+ * Optional leading icon rendered inside the value field (e.g. a type
3091
+ * indicator like `<Brackets />`). Defaults to the git-compare glyph that
3092
+ * matches the Figma reference.
3093
+ */
3094
+ valueLeadingIcon?: React$1.ReactNode;
3095
+ /**
3096
+ * Override the header label for the key column. Defaults to "Key".
3097
+ * Use for domain-specific tables (e.g. `keyHeader="Restricted Term"`).
3098
+ */
3099
+ keyHeader?: string;
3100
+ /**
3101
+ * Override the header label for the value column. Defaults to "Value".
3102
+ * Use for domain-specific tables (e.g. `valueHeader="Preferred Term"`).
3103
+ */
3104
+ valueHeader?: string;
3105
+ /**
3106
+ * Render an extra cell at the end of every row, between the value field
3107
+ * and the delete button. Use it for per-row controls that don't fit the
3108
+ * key/value contract (e.g. a `Toggle` for a third boolean field).
3109
+ *
3110
+ * `pair` is the current pair, `index` is the row index. Return `null` /
3111
+ * `undefined` to render nothing for that row. The trailing slot is
3112
+ * absent from the header — pass a `header` label string to render a
3113
+ * matching column header, otherwise the spot stays empty.
3114
+ *
3115
+ * Backwards-compatible: omit both props and the editor renders the
3116
+ * legacy 2-column layout.
3117
+ */
3118
+ renderRowTrailing?: (pair: KeyValuePair, index: number) => React$1.ReactNode;
3119
+ /**
3120
+ * Header label for the trailing column. Only rendered when
3121
+ * `renderRowTrailing` is also set and `hideHeader` is false.
3122
+ */
3123
+ trailingHeader?: string;
3124
+ className?: string;
3125
+ style?: React$1.CSSProperties;
3126
+ /**
3127
+ * Optional `data-testid` for Playwright. Defaults to `"input"` if omitted.
3128
+ */
3129
+ "data-testid"?: string;
3130
+ }
3131
+
3132
+ /**
3133
+ * KeyValueEditor - Table-style key-value pair editor.
3134
+ * Renders header (Key, Value) and editable rows with delete on hover.
3135
+ *
3136
+ * Each row's key and value fields use the shared <Input> component
3137
+ * (inputSize="sm"), so focus/hover/pressed/invalid states and typography
3138
+ * are inherited from the design system — no ad-hoc input styling lives
3139
+ * here.
3140
+ *
3141
+ * Figma reference: 5905:39527
3142
+ */
3143
+ declare const KeyValueEditor: React$1.ForwardRefExoticComponent<KeyValueEditorProps & React$1.RefAttributes<HTMLDivElement>>;
3144
+
3145
+ interface AudioPlayerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "onSeek" | "onRateChange"> {
3146
+ /** Whether audio is currently playing. Controls the play/pause icon. */
3147
+ isPlaying: boolean;
3148
+ /** Current playback position, in seconds. */
3149
+ currentTime: number;
3150
+ /** Total duration, in seconds. */
3151
+ duration: number;
3152
+ /**
3153
+ * Normalized bar heights for the waveform, each between 0 and 1.
3154
+ * If omitted, a flat baseline line is rendered.
3155
+ */
3156
+ waveform?: number[];
3157
+ /** Current playback speed (e.g. 1, 1.5, 2). Shown in a trailing pill. */
3158
+ playbackRate?: number;
3159
+ /** Available playback speeds to cycle through on pill click. */
3160
+ playbackRateOptions?: number[];
3161
+ /** Called when the play/pause button is clicked. */
3162
+ onPlayPause?: () => void;
3163
+ /** Called when the user clicks a position on the waveform. */
3164
+ onSeek?: (seconds: number) => void;
3165
+ /** Called when the user clicks the speed pill. */
3166
+ onRateChange?: (rate: number) => void;
3167
+ /** Custom formatter for times. Defaults to `m:ss`. */
3168
+ formatTime?: (seconds: number) => string;
3169
+ /**
3170
+ * Optional `data-testid` for Playwright. Defaults to `"player"` if omitted.
3171
+ * By convention pass a descriptive name like `"player-call-recording"`.
3172
+ */
3173
+ "data-testid"?: string;
3174
+ }
3175
+
3176
+ /**
3177
+ * AudioPlayer — presentational waveform audio player.
3178
+ *
3179
+ * Pure / controlled: all state (playing, time, rate) is driven by props.
3180
+ * Clicks on the waveform emit `onSeek(seconds)`; clicking the speed pill
3181
+ * cycles through `playbackRateOptions` (default `[1, 1.5, 2]`).
3182
+ *
3183
+ * Figma: 3576:2351
3184
+ */
3185
+ declare const AudioPlayer: React$1.ForwardRefExoticComponent<AudioPlayerProps & React$1.RefAttributes<HTMLDivElement>>;
3186
+
3187
+ interface ChatBubbleBaseProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "children"> {
3188
+ /** Message body (string or rich node). */
3189
+ message: React$1.ReactNode;
3190
+ /** Timestamp text (e.g. "04:47 PM"). Revealed on hover by default. */
3191
+ timestamp?: string;
3192
+ /** When true, timestamp is always visible. */
3193
+ alwaysShowTimestamp?: boolean;
3194
+ /** Override for the 16px avatar slot. */
3195
+ avatar?: React$1.ReactNode;
3196
+ /**
3197
+ * Optional `data-testid` for Playwright. Defaults to `"chat-bubble"` if omitted.
3198
+ * By convention pass a descriptive name like `"chat-bubble-agent-greeting"`.
3199
+ */
3200
+ "data-testid"?: string;
3201
+ }
3202
+ interface ChatBubbleAgentProps extends ChatBubbleBaseProps {
3203
+ /** Shown below the bubble (e.g. a "Tool Call" tag). */
3204
+ trailing?: React$1.ReactNode;
3205
+ /** In-Focus state — draws the brand ring around the bubble. */
3206
+ focused?: boolean;
3207
+ /**
3208
+ * Workspace icon URL rendered inside the 16px avatar slot. Used when
3209
+ * `avatar` isn't explicitly provided. Falls back to the bundled default
3210
+ * Nurix avatar when neither prop is set.
3211
+ */
3212
+ workspaceIcon?: string;
3213
+ }
3214
+ interface ChatBubbleUserProps extends ChatBubbleBaseProps {
3215
+ /** Shown below the message (e.g. a "Tool Call" tag). */
3216
+ trailing?: React$1.ReactNode;
3217
+ /** In-Focus state — draws the brand ring around the row. */
3218
+ focused?: boolean;
3219
+ }
3220
+
3221
+ /**
3222
+ * ChatBubbleAgent — right-aligned agent message with an avatar dot.
3223
+ * Figma: 3575:10095 / 3575:10154 (hover) / 5494:33659 (in-focus).
3224
+ */
3225
+ declare const ChatBubbleAgent: React$1.ForwardRefExoticComponent<ChatBubbleAgentProps & React$1.RefAttributes<HTMLDivElement>>;
3226
+ /**
3227
+ * ChatBubbleUser — left-aligned user message with a grey avatar icon.
3228
+ * No bubble background; just inline icon + grey text.
3229
+ * Figma: 3575:10815 / 3575:10829 (hover).
3230
+ */
3231
+ declare const ChatBubbleUser: React$1.ForwardRefExoticComponent<ChatBubbleUserProps & React$1.RefAttributes<HTMLDivElement>>;
3232
+
3233
+ type PopoverSide = "top" | "right" | "bottom" | "left";
3234
+ type PopoverAlign = "start" | "center" | "end";
3235
+ type PopoverShadow = "none" | "xs" | "sm" | "md" | "lg";
3236
+ interface PopoverProps {
3237
+ /** Controlled open state. If omitted, component is uncontrolled. */
3238
+ open?: boolean;
3239
+ /** Called when open state changes (both controlled and uncontrolled). */
3240
+ onOpenChange?: (open: boolean) => void;
3241
+ /** Uncontrolled default open. */
3242
+ defaultOpen?: boolean;
3243
+ /** The trigger element (e.g. button). Rendered in place. */
3244
+ trigger: React$1.ReactNode;
3245
+ /** Popover body content — can be anything. */
3246
+ children: React$1.ReactNode;
3247
+ /**
3248
+ * Optional search input rendered at the top of the popover.
3249
+ * When provided, renders a search bar above `children`.
3250
+ */
3251
+ search?: {
3252
+ /** Controlled search value */
3253
+ value?: string;
3254
+ /** Called when the search input changes */
3255
+ onValueChange?: (value: string) => void;
3256
+ /** Placeholder text */
3257
+ placeholder?: string;
3258
+ /** Auto-focus the search input when popover opens */
3259
+ autoFocus?: boolean;
3260
+ };
3261
+ /**
3262
+ * Position relative to trigger.
3263
+ * @default "bottom"
3264
+ */
3265
+ side?: PopoverSide;
3266
+ /**
3267
+ * Alignment along the side.
3268
+ * @default "start"
3269
+ */
3270
+ align?: PopoverAlign;
3271
+ /**
3272
+ * Offset (px) between trigger and popover.
3273
+ * @default 4
3274
+ */
3275
+ sideOffset?: number;
3276
+ /**
3277
+ * Show border around the popover container.
3278
+ * @default false
3279
+ */
3280
+ bordered?: boolean;
3281
+ /**
3282
+ * Shadow variant.
3283
+ * @default "md"
3284
+ */
3285
+ shadow?: PopoverShadow;
3286
+ /** Width (px or CSS value). If omitted, popover sizes to content. */
3287
+ width?: number | string;
3288
+ /** Min width (defaults to trigger width if omitted) */
3289
+ minWidth?: number | string;
3290
+ /** Max height — content scrolls beyond this. */
3291
+ maxHeight?: number | string;
3292
+ /** Additional className for the popover container. */
3293
+ className?: string;
3294
+ /** Additional className for the outer wrapper (trigger + popover). */
3295
+ wrapperClassName?: string;
3296
+ /** Close popover on outside click. @default true */
3297
+ closeOnOutsideClick?: boolean;
3298
+ /** Close popover on Escape key. @default true */
3299
+ closeOnEscape?: boolean;
3300
+ /**
3301
+ * Optional `data-testid` for Playwright. Defaults to `"popover"` if omitted.
3302
+ * Applied to the floating popover content container (the `role="dialog"` element).
3303
+ */
3304
+ "data-testid"?: string;
3305
+ }
3306
+
3307
+ /**
3308
+ * Popover — generic floating container.
3309
+ *
3310
+ * Supports:
3311
+ * - Any children as content
3312
+ * - Optional search bar at the top
3313
+ * - Border / shadow variants
3314
+ * - Controlled or uncontrolled open state
3315
+ * - Positioning (side + align)
3316
+ * - Click-outside / Escape to close
3317
+ *
3318
+ * Figma reference: 43:10346 (Menu Dropdown)
3319
+ *
3320
+ * @example
3321
+ * <Popover trigger={<Button>Open</Button>}>
3322
+ * <div>Any content here</div>
3323
+ * </Popover>
3324
+ *
3325
+ * @example with search
3326
+ * <Popover
3327
+ * trigger={<Button>Filter</Button>}
3328
+ * search={{ value: q, onValueChange: setQ, placeholder: "Search…" }}
3329
+ * >
3330
+ * <ListItems />
3331
+ * </Popover>
3332
+ */
3333
+ declare const Popover: React$1.ForwardRefExoticComponent<PopoverProps & React$1.RefAttributes<HTMLDivElement>>;
3334
+
3335
+ /**
3336
+ * Plain item shape for `MultiSelect`. Mirrors the minimal subset of
3337
+ * `SelectContentItem` that's actually meaningful for a checkbox list — no
3338
+ * leadIcon / subtext / trailing slots.
3339
+ */
3340
+ interface MultiSelectItem<T extends string = string> {
3341
+ value: T;
3342
+ label: string;
3343
+ /** Optional: disable a single item. */
3344
+ disabled?: boolean;
3345
+ }
3346
+ interface MultiSelectProps<T extends string = string> {
3347
+ /**
3348
+ * Selected values (controlled).
3349
+ */
3350
+ value: T[];
3351
+ /**
3352
+ * Called whenever the selection changes.
3353
+ */
3354
+ onValueChange: (values: T[]) => void;
3355
+ /**
3356
+ * Items to render inside the dropdown.
3357
+ */
3358
+ items: MultiSelectItem<T>[];
3359
+ /**
3360
+ * Placeholder shown in the trigger when nothing is selected.
3361
+ * @default "Select…"
3362
+ */
3363
+ placeholder?: string;
3364
+ /**
3365
+ * Optional label rendered on the left of the trigger before a vertical
3366
+ * separator and the selected-items summary — mirrors `FilterSelect`'s
3367
+ * "Label | selected1, selected2 +N" layout. Use this when the field's
3368
+ * external label is also part of the trigger (e.g. compact rows where
3369
+ * the form-level label is omitted).
3370
+ */
3371
+ label?: string;
3372
+ /**
3373
+ * Render a search input above the list.
3374
+ * @default false
3375
+ */
3376
+ showSearch?: boolean;
3377
+ /**
3378
+ * Placeholder for the search input.
3379
+ * @default "Search…"
3380
+ */
3381
+ searchPlaceholder?: string;
3382
+ /**
3383
+ * Render a "(Select All)" toggle row above the items.
3384
+ * @default true
3385
+ */
3386
+ showSelectAll?: boolean;
3387
+ /**
3388
+ * Size variant. Same vocabulary as `SelectTrigger.size` so a paired
3389
+ * single-select and multi-select stay visually aligned.
3390
+ * @default "regular"
3391
+ */
3392
+ size?: "small" | "regular" | "large";
3393
+ /**
3394
+ * Background variant. Same vocabulary as `SelectTrigger.bg`.
3395
+ * @default "default"
3396
+ */
3397
+ bg?: "default" | "white";
3398
+ /**
3399
+ * Disable the entire control.
3400
+ */
3401
+ disabled?: boolean;
3402
+ /**
3403
+ * Max height for the items list. Content scrolls beyond this.
3404
+ * @default 260
3405
+ */
3406
+ maxHeight?: number | string;
3407
+ /**
3408
+ * id for the trigger button.
3409
+ */
3410
+ id?: string;
3411
+ /**
3412
+ * Optional className applied to the trigger button.
3413
+ */
3414
+ className?: string;
3415
+ /**
3416
+ * Optional `data-testid` for Playwright. Defaults to `"multi-select"`.
3417
+ */
3418
+ "data-testid"?: string;
3419
+ }
3420
+
3421
+ /**
3422
+ * MultiSelect — checkbox-list dropdown styled to match `Select`.
3423
+ *
3424
+ * Why this exists separately from `Select`: Radix Select is fundamentally
3425
+ * single-select (it commits + closes on each pick). MultiSelect is built on
3426
+ * `Popover` + `Checkbox` so the dropdown stays open while the user picks
3427
+ * multiple items — but its trigger reuses `SELECT_TOKENS.container.*` so
3428
+ * the height, border, chevron, and spacing match a sibling `Select` pixel-
3429
+ * for-pixel.
3430
+ *
3431
+ * Behaviour mirrors FilterSelect's `type="list"` (search + Select-All +
3432
+ * checkboxes), but the trigger is a form-field Select trigger rather than
3433
+ * a filter pill — so it slots into form layouts next to a normal Select
3434
+ * without visual drift.
3435
+ */
3436
+ declare function MultiSelect<T extends string = string>({ value, onValueChange, items, placeholder, label, showSearch, searchPlaceholder, showSelectAll, size, bg, disabled, maxHeight, id, className, "data-testid": dataTestId, }: MultiSelectProps<T>): react_jsx_runtime.JSX.Element;
3437
+
3438
+ interface ChipProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, "type" | "onClick"> {
3439
+ /**
3440
+ * Whether the chip is in the selected state. Selected chips use the
3441
+ * brand-secondary background and brand text color.
3442
+ * @default false
3443
+ */
3444
+ selected?: boolean;
3445
+ /**
3446
+ * Click handler. When omitted, the chip renders as a non-interactive
3447
+ * `<div>` (no hover, no press scale) — useful for read-only displays.
3448
+ */
3449
+ onClick?: () => void;
3450
+ /**
3451
+ * Optional icon shown before the label. Sized to 16px by the chip's
3452
+ * own `[&>svg]:size-4` rule, so consumers can pass a raw lucide icon
3453
+ * without wrapping.
3454
+ */
3455
+ leadingIcon?: React$1.ReactNode;
3456
+ /**
3457
+ * Optional icon shown after the label — typically a remove `<X />`
3458
+ * for filter-style chips.
3459
+ */
3460
+ trailingIcon?: React$1.ReactNode;
3461
+ /**
3462
+ * Disable interactions. Renders dim and ignores pointer events.
3463
+ */
3464
+ disabled?: boolean;
3465
+ /**
3466
+ * Optional `data-testid` for Playwright. Defaults to `"chip"`.
3467
+ */
3468
+ "data-testid"?: string;
3469
+ }
3470
+
3471
+ /**
3472
+ * Chip — small selectable pill with optional leading/trailing icons.
3473
+ *
3474
+ * Figma reference: 6332:23079.
3475
+ *
3476
+ * @example
3477
+ * <Chip selected={isOn} onClick={() => setIsOn((v) => !v)} leadingIcon={<GitCompare />}>
3478
+ * Uncle Chips
3479
+ * </Chip>
3480
+ *
3481
+ * When `onClick` is omitted, the chip renders as a non-interactive
3482
+ * `<div>` (no hover tint, no press scale) so it doesn't read as
3483
+ * clickable in read-only contexts.
3484
+ */
3485
+ declare const Chip: React$1.ForwardRefExoticComponent<ChipProps & React$1.RefAttributes<HTMLButtonElement>>;
3486
+
3487
+ interface RuleBuilderProps {
3488
+ /**
3489
+ * Badge label shown in the header (e.g. "Rule 1").
3490
+ */
3491
+ title: string;
3492
+ /**
3493
+ * Controlled open state. When provided, `defaultOpen` is ignored and
3494
+ * the consumer is responsible for toggling via `onOpenChange`.
3495
+ */
3496
+ open?: boolean;
3497
+ /**
3498
+ * Initial open state for the uncontrolled mode. Defaults to `true`.
3499
+ */
3500
+ defaultOpen?: boolean;
3501
+ /**
3502
+ * Called when the user toggles the chevron in the header.
3503
+ */
3504
+ onOpenChange?: (open: boolean) => void;
3505
+ /**
3506
+ * Called when the user clicks the trash icon in the header. Omit to
3507
+ * hide the delete button entirely.
3508
+ */
3509
+ onDelete?: () => void;
3510
+ /**
3511
+ * Optional icon shown in the title badge before the label. Defaults to
3512
+ * a `Workflow` glyph matching the Figma reference.
3513
+ */
3514
+ titleIcon?: React$1.ReactNode;
3515
+ /**
3516
+ * Bottom strip rendered in the grey wrapper area below the white card.
3517
+ * Pass an `<Input />` (or similar) — the label, icon, and layout are
3518
+ * provided by RuleBuilder. Omit to hide the strip entirely (e.g. for
3519
+ * rules that don't set a field value).
3520
+ */
3521
+ thenContent?: React$1.ReactNode;
3522
+ /**
3523
+ * Override the default "Then set field value to" label.
3524
+ */
3525
+ thenLabel?: React$1.ReactNode;
3526
+ /**
3527
+ * Override the default leading icon in the Then strip (`FileOutput`).
3528
+ */
3529
+ thenIcon?: React$1.ReactNode;
3530
+ /**
3531
+ * Body content — typically `<RuleBuilderClause />` with conditions and
3532
+ * connectors composed inside. Rendered only when the card is open.
3533
+ */
3534
+ children?: React$1.ReactNode;
3535
+ className?: string;
3536
+ style?: React$1.CSSProperties;
3537
+ /**
3538
+ * Optional `data-testid` for Playwright. Defaults to `"rule-builder"`.
3539
+ */
3540
+ "data-testid"?: string;
3541
+ }
3542
+ interface RuleBuilderClauseProps {
3543
+ /**
3544
+ * Clause label shown above the conditions (e.g. "IF", "WHEN"). Pass a
3545
+ * string or any node for full custom control.
3546
+ */
3547
+ label?: React$1.ReactNode;
3548
+ /**
3549
+ * Conditions, connectors, and the `<RuleBuilderAddCondition />` button.
3550
+ */
3551
+ children?: React$1.ReactNode;
3552
+ className?: string;
3553
+ }
3554
+ interface RuleBuilderConditionProps {
3555
+ /**
3556
+ * The cells of the condition row — typically 3 `<Select />` triggers
3557
+ * (field, operator, value). Rendered with `gap-2` between them.
3558
+ */
3559
+ children?: React$1.ReactNode;
3560
+ /**
3561
+ * Called when the trash icon at the end of the row is clicked. Omit to
3562
+ * hide the icon entirely (e.g. for the only / first condition).
3563
+ */
3564
+ onDelete?: () => void;
3565
+ className?: string;
3566
+ }
3567
+ interface RuleBuilderConnectorProps {
3568
+ /**
3569
+ * Connector control — usually a `<Select />` showing "AND" / "OR".
3570
+ * Rendered between two condition rows with vertical lines above and
3571
+ * below for visual continuity.
3572
+ */
3573
+ children?: React$1.ReactNode;
3574
+ className?: string;
3575
+ }
3576
+ interface RuleBuilderAddConditionProps {
3577
+ /**
3578
+ * Button label — defaults to "Add Condition".
3579
+ */
3580
+ label?: React$1.ReactNode;
3581
+ onClick?: () => void;
3582
+ disabled?: boolean;
3583
+ className?: string;
3584
+ "data-testid"?: string;
3585
+ }
3586
+
3587
+ /**
3588
+ * RuleBuilder — composable card for defining a single rule.
3589
+ *
3590
+ * Figma reference: 6587:462
3591
+ *
3592
+ * Layout: a grey-wrapped card with a header (badge + delete + collapse
3593
+ * toggle), a collapsible body that hosts the IF clause(s), and an
3594
+ * optional bottom strip ("Then set field value to ...") in the grey
3595
+ * wrapper area below the white card.
3596
+ *
3597
+ * Children compose the body using the sibling exports:
3598
+ * - `<RuleBuilderClause label="IF">` — wraps a group of conditions
3599
+ * - `<RuleBuilderCondition>` — a single row, typically 3 Selects
3600
+ * - `<RuleBuilderConnector>` — AND/OR pill between two conditions
3601
+ * - `<RuleBuilderAddCondition onClick={...} />` — outline pill button
3602
+ *
3603
+ * Open state is controlled (`open` + `onOpenChange`) or uncontrolled
3604
+ * (`defaultOpen`), mirroring the pattern used by `<Accordion />`.
3605
+ */
3606
+ declare const RuleBuilder: React$1.ForwardRefExoticComponent<RuleBuilderProps & React$1.RefAttributes<HTMLDivElement>>;
3607
+ /**
3608
+ * Group of conditions under a labelled clause (e.g. "IF"). Typically
3609
+ * holds `<RuleBuilderCondition />` rows separated by
3610
+ * `<RuleBuilderConnector />`, terminated by `<RuleBuilderAddCondition />`.
3611
+ */
3612
+ declare const RuleBuilderClause: React$1.ForwardRefExoticComponent<RuleBuilderClauseProps & React$1.RefAttributes<HTMLDivElement>>;
3613
+ /**
3614
+ * A single condition row. Children are usually 3 Selects (field,
3615
+ * operator, value); the row appends a trailing trash icon when
3616
+ * `onDelete` is provided. Use `className="w-[144px]"` on the
3617
+ * `<SelectTrigger />` for the wide cells to match the Figma layout.
3618
+ */
3619
+ declare const RuleBuilderCondition: React$1.ForwardRefExoticComponent<RuleBuilderConditionProps & React$1.RefAttributes<HTMLDivElement>>;
3620
+ /**
3621
+ * AND/OR connector pill rendered between two conditions. Wraps the
3622
+ * connector control with vertical lines above and below to mirror the
3623
+ * Figma reference. Pass a `<Select />` (or any node) as children.
3624
+ */
3625
+ declare const RuleBuilderConnector: React$1.ForwardRefExoticComponent<RuleBuilderConnectorProps & React$1.RefAttributes<HTMLDivElement>>;
3626
+ /**
3627
+ * "+ Add Condition" outline-pill button. Forwards all native button
3628
+ * props (`onClick`, `disabled`, etc.) — `label` overrides the text.
3629
+ */
3630
+ declare const RuleBuilderAddCondition: React$1.ForwardRefExoticComponent<RuleBuilderAddConditionProps & React$1.RefAttributes<HTMLButtonElement>>;
18
3631
 
19
- export { Button, type ButtonProps };
3632
+ export { Accordion, AccordionContent, AccordionContentPlaceholder, type AccordionContentProps, AccordionItem, type AccordionItemProps, type AccordionProps, AccordionSectionTrigger, type AccordionSectionTriggerProps, AccordionTrigger, type AccordionTriggerProps, type AccordionType, type AccordionValue, AudioPlayer, type AudioPlayerProps, 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, ChatBubbleAgent, type ChatBubbleAgentProps, ChatBubbleUser, type ChatBubbleUserProps, Checkbox, type CheckboxProps, Chip, type ChipProps, type ColumnDef, ColumnWidth, CompoundFilterSelect, type CompoundFilterSelectProps, type CompoundFilterToggleOption, 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, type FilterItemWithSection, FilterListItem, type FilterListItemProps, FilterSelect, type FilterSelectProps, type IconColor, IconPicker, type IconPickerProps, type IconSize, IconWrapper, type IconWrapperProps, Input, type InputBorderRadius, type InputForceState, InputGroup, type InputGroupBorderRadius, type InputGroupForceState, type InputGroupProps, type InputProps, type InputVariant, JSON_EDITOR_LANGUAGE_OPTIONS, JsonEditor, type JsonEditorLanguage, type JsonEditorProps, KeyValueEditor, type KeyValueEditorProps, type KeyValuePair, LegoLandWrapper, type LegoLandWrapperProps, List, type ListBorderRadius, type ListNavItemProps, ListNavigation, type ListNavigationProps, type ListProps, type ListType, type ListVariant, MONACO_OPTIONS, MONACO_OPTIONS_DIALOG, MultiSelect, type MultiSelectItem, type MultiSelectProps, NestedButtonGroup, type NestedButtonGroupProps, NumberBadge, type NumberBadgeProps, type NumberBadgeVariant, NurixThemeProvider, Pagination, type PaginationProps, PlaySelect, type PlaySelectAudioItem, type PlaySelectProps, PlaybackControl, type PlaybackControlProps, type PlaybackState, Popover, type PopoverAlign, type PopoverProps, type PopoverShadow, type PopoverSide, ProgressBar, type ProgressBarProps, RadioGroup, RadioGroupItem, type RadioGroupItemProps, type RadioGroupProps, RuleBuilder, RuleBuilderAddCondition, type RuleBuilderAddConditionProps, RuleBuilderClause, type RuleBuilderClauseProps, RuleBuilderCondition, type RuleBuilderConditionProps, RuleBuilderConnector, type RuleBuilderConnectorProps, type RuleBuilderProps, Select, SelectContent, type SelectContentItem, SelectFormLabel, SelectGroup, type SelectGroupProps, SelectItem, SelectLabel, type SelectLabelProps, type SelectMenuItemProps, type SelectProps, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, ShadowDOMWrapper, type ShowToastOptions, SidePanel, type SidePanelProps, type SidePanelSize, Slider, type SliderProps, type SortDirection, type SortState, Spinner, type SpinnerProps, type SpinnerSize, type StepItem, type StepState, Stepper, StepperBar, type StepperBarProps, type StepperProps, type SupportingTextType, Surface, type SurfaceBackground, SurfaceBody, type SurfaceBodyProps, SurfaceFooter, type SurfaceFooterProps, SurfaceHeader, type SurfaceHeaderProps, type SurfaceProps, Switch, type SwitchProps, type SwitchSize, type TabVariant, type TableAction, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, TagBadge, type TagBadgeProps, type TagOption, Textarea, type TextareaBorderRadius, type TextareaForceState, type TextareaProps, ThemeProvider, Toast, type ToastProps, type ToastVariant, Toaster, Toggle, ToggleItem, type ToggleItemProps, type ToggleProps, type ToggleType, Tooltip, TooltipContent, type TooltipContentProps, TooltipProvider, TooltipTrigger, Typography, type TypographyProps, type TypographySize, type TypographyTone, type TypographyVariant, type TypographyWeight, type UsePlaySelectProps, type UseSelectProps, enhanceJsonError, showToast, useJsonEditor, usePlaySelect, useSelect, useTheme };