@voltstack/bravais 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1318 @@
1
+ import * as react from 'react';
2
+ import react__default, { ElementType, HTMLAttributes, ReactNode, Ref, ReactElement, ButtonHTMLAttributes, MouseEventHandler, CSSProperties, InputHTMLAttributes, TextareaHTMLAttributes, ChangeEventHandler } from 'react';
3
+ import { Placement } from '@floating-ui/react';
4
+
5
+ /**
6
+ * Shared design tokens for Volt primitives.
7
+ *
8
+ * These tokens map 1:1 to utility classes already declared in
9
+ * `src/shared/presentation/assets/stylesheets/general.css` and `base.css`.
10
+ * Primitives MUST NOT emit classes whose CSS definitions don't exist.
11
+ */
12
+ type Display = 'flex' | 'grid' | 'block' | 'none';
13
+ type FlexDirection = 'row' | 'column' | 'row-reverse';
14
+ type AlignItems = 'start' | 'center' | 'end';
15
+ type JustifyContent = 'start' | 'center' | 'end' | 'between' | 'around';
16
+ type GapToken = '01' | '02' | '025' | '035' | '05' | '075' | '1' | '1-5' | '2' | '3';
17
+ type PaddingToken = '0' | '025' | '05' | '075' | '1' | '1-5' | '2' | '3';
18
+ type PaddingXToken = '1';
19
+ type MarginTopToken = '05' | '1' | '3';
20
+ type MarginBottomToken = '1-5' | '3';
21
+ type MarginXToken = 'auto';
22
+ type RadiusToken = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';
23
+ type BorderToken = 'soft' | 'none' | 'bottom-soft' | 'top-soft';
24
+ type PositionToken = 'relative' | 'sticky' | 'absolute' | 'fixed';
25
+ type OverflowToken = 'auto' | 'hidden' | 'x-auto' | 'x-scroll' | 'y-auto' | 'y-scroll';
26
+ type WidthToken = 'max' | '50' | 'vw-max';
27
+ type HeightToken = 'max' | 'vh-max';
28
+ type FlexToken = '1';
29
+ type TransitionToken = 'fast' | 'normal';
30
+ /**
31
+ * Typography tokens. These match `font-size-*` / `font-weight-*` / `color-*`
32
+ * utilities declared in `general.css`.
33
+ */
34
+ type TextSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';
35
+ type TextWeight = 'regular' | 'medium' | 'semibold' | 'bold';
36
+ type TextTone = 'primary' | 'secondary' | 'muted' | 'muted-foreground';
37
+ type TextAlign = 'left' | 'center' | 'right';
38
+ type SurfaceVariant = 'primary' | 'glass' | 'elevated' | 'danger' | 'warning';
39
+ /**
40
+ * Canonical semantic tone shared by every status/feedback primitive
41
+ * (Tag, StatusBadge, StatusDot, InlineStatus, IconFrame, Callout, StatCard, Timeline).
42
+ * Maps 1:1 to the `--status-*` / accent tokens and the `.color-*` text utilities.
43
+ */
44
+ type StatusTone = 'neutral' | 'brand' | 'success' | 'warning' | 'danger' | 'info';
45
+ /** Canonical control size scale shared by interactive primitives. */
46
+ type ControlSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
47
+ /** Canonical shape vocabulary shared by button-like / chip-like primitives. */
48
+ type Shape = 'rounded' | 'pill' | 'square' | 'circle';
49
+ /**
50
+ * Resolves a {@link StatusTone} to the CSS custom properties that express it.
51
+ * Single source of truth so primitives stop hardcoding per-tone colors.
52
+ */
53
+ declare const STATUS_TONE_VARS: Record<StatusTone, {
54
+ fg: string;
55
+ bg: string;
56
+ border: string;
57
+ }>;
58
+
59
+ /**
60
+ * Style-related props shared by all box-like primitives: `Box`, `Stack`, `Row`,
61
+ * `Surface`, `Card`, `Alert`, etc.
62
+ *
63
+ * Every value maps to an existing CSS utility class. Unknown values are never
64
+ * emitted so we don't produce dead classnames.
65
+ */
66
+ interface BoxStyleProps {
67
+ display?: Display;
68
+ direction?: FlexDirection;
69
+ align?: AlignItems;
70
+ justify?: JustifyContent;
71
+ wrap?: boolean;
72
+ gap?: GapToken;
73
+ p?: PaddingToken;
74
+ px?: PaddingXToken;
75
+ m?: '0';
76
+ mt?: MarginTopToken;
77
+ mb?: MarginBottomToken;
78
+ mx?: MarginXToken;
79
+ radius?: RadiusToken;
80
+ border?: BorderToken;
81
+ position?: PositionToken;
82
+ overflow?: OverflowToken;
83
+ width?: WidthToken;
84
+ height?: HeightToken;
85
+ flex?: FlexToken;
86
+ textAlign?: TextAlign;
87
+ shrink?: '0';
88
+ minH?: '0';
89
+ minW?: '0';
90
+ inset?: '0';
91
+ top?: '0' | '1';
92
+ left?: '0' | '1';
93
+ bottom?: '0' | '1';
94
+ right?: '0' | '1';
95
+ zIndex?: '5' | '10' | '20';
96
+ transition?: TransitionToken;
97
+ cursor?: 'pointer';
98
+ selectNone?: boolean;
99
+ }
100
+ declare const buildBoxClasses: (props: BoxStyleProps) => string[];
101
+ /**
102
+ * Keys of `BoxStyleProps`. Used by primitives to strip style-only props
103
+ * from the rest passed through to the DOM element.
104
+ */
105
+ declare const BOX_STYLE_KEYS: readonly ["display", "direction", "align", "justify", "wrap", "gap", "p", "px", "m", "mt", "mb", "mx", "radius", "border", "position", "overflow", "width", "height", "flex", "textAlign", "shrink", "minH", "minW", "inset", "top", "left", "bottom", "right", "zIndex", "transition", "cursor", "selectNone"];
106
+ declare const splitBoxProps: <T extends BoxStyleProps>(props: T) => {
107
+ styleProps: BoxStyleProps;
108
+ rest: Omit<T, keyof BoxStyleProps>;
109
+ };
110
+
111
+ interface TypographyClassOptions {
112
+ size?: TextSize;
113
+ weight?: TextWeight;
114
+ tone?: TextTone;
115
+ align?: TextAlign;
116
+ truncate?: boolean;
117
+ lineHeight?: '5';
118
+ className?: string;
119
+ }
120
+ declare const buildTypographyClasses: ({ size, weight, tone, align, truncate, lineHeight, className }: TypographyClassOptions) => string;
121
+
122
+ type PolymorphicProps<E extends ElementType> = Omit<HTMLAttributes<HTMLElement>, 'children'> & {
123
+ as?: E;
124
+ children?: ReactNode;
125
+ className?: string;
126
+ };
127
+ type BoxProps<E extends ElementType = 'div'> = PolymorphicProps<E> & BoxStyleProps;
128
+ declare const BoxImpl: <E extends ElementType = "div">({ as, className, children, ...props }: BoxProps<E>, ref: Ref<Element>) => react.JSX.Element;
129
+ declare const Box: <E extends ElementType = "div">(props: BoxProps<E> & {
130
+ ref?: Ref<Element>;
131
+ }) => ReturnType<typeof BoxImpl>;
132
+
133
+ /**
134
+ * Vertical flex stack. Defaults to `d-flex column`.
135
+ * Accepts every `Box` style prop.
136
+ */
137
+ type StackProps<E extends ElementType = 'div'> = Omit<BoxProps<E>, 'display' | 'direction'>;
138
+ declare const Stack: <E extends ElementType = "div">(props: StackProps<E> & {
139
+ ref?: Ref<HTMLElement>;
140
+ }) => ReactElement;
141
+
142
+ /**
143
+ * Horizontal flex row. Defaults to `d-flex items-center`.
144
+ * Accepts every `Box` style prop plus `reverse`.
145
+ */
146
+ type RowProps<E extends ElementType = 'div'> = Omit<BoxProps<E>, 'display' | 'direction'> & {
147
+ reverse?: boolean;
148
+ };
149
+ declare const Row: <E extends ElementType = "div">(props: RowProps<E> & {
150
+ ref?: Ref<HTMLElement>;
151
+ }) => ReactElement;
152
+
153
+ type GridColumns = 2 | 3 | 4 | 'auto-fit' | 'auto-fill';
154
+ /**
155
+ * CSS-grid layout primitive. Defaults to `d-grid` and accepts every `Box` style prop
156
+ * (gap, padding, etc.). Use `columns` for fixed/auto tracks; `minColumnWidth` tunes the
157
+ * auto-fit/auto-fill minimum track size.
158
+ */
159
+ type GridProps<E extends ElementType = 'div'> = Omit<BoxProps<E>, 'display'> & {
160
+ columns?: GridColumns;
161
+ /** Min track size for auto-fit/auto-fill (e.g. '180px', '12rem'). Defaults to 180px. */
162
+ minColumnWidth?: string;
163
+ };
164
+ declare const Grid: <E extends ElementType = "div">(props: GridProps<E> & {
165
+ ref?: Ref<HTMLElement>;
166
+ }) => ReactElement;
167
+
168
+ interface SurfaceProps extends Omit<HTMLAttributes<HTMLElement>, 'children'>, BoxStyleProps {
169
+ as?: ElementType;
170
+ variant?: SurfaceVariant;
171
+ children?: ReactNode;
172
+ className?: string;
173
+ }
174
+ declare const Surface: react.ForwardRefExoticComponent<SurfaceProps & react.RefAttributes<HTMLElement>>;
175
+
176
+ interface DividerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role' | 'aria-orientation'> {
177
+ orientation?: 'horizontal' | 'vertical';
178
+ }
179
+ /**
180
+ * Thin divider line. Maps to the existing `.volt-divider` + orientation variant
181
+ * CSS declared in `general.css`.
182
+ */
183
+ declare const Divider: react.ForwardRefExoticComponent<DividerProps & react.RefAttributes<HTMLDivElement>>;
184
+
185
+ interface TextProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {
186
+ as?: 'span' | 'p' | 'div' | 'label' | 'small' | 'strong' | 'em' | 'li';
187
+ size?: TextSize;
188
+ weight?: TextWeight;
189
+ tone?: TextTone;
190
+ align?: TextAlign;
191
+ truncate?: boolean;
192
+ lineHeight?: '5';
193
+ children?: ReactNode;
194
+ className?: string;
195
+ }
196
+ declare const Text: react.ForwardRefExoticComponent<TextProps & react.RefAttributes<HTMLElement>>;
197
+
198
+ type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
199
+ interface HeadingProps extends Omit<HTMLAttributes<HTMLHeadingElement>, 'children'> {
200
+ level: HeadingLevel;
201
+ size?: TextSize;
202
+ weight?: TextWeight;
203
+ tone?: TextTone;
204
+ truncate?: boolean;
205
+ children?: ReactNode;
206
+ className?: string;
207
+ }
208
+ declare const Heading: react.ForwardRefExoticComponent<HeadingProps & react.RefAttributes<HTMLHeadingElement>>;
209
+
210
+ interface SectionLabelProps extends HTMLAttributes<HTMLSpanElement> {
211
+ children?: ReactNode;
212
+ }
213
+ /**
214
+ * Eyebrow / section label. Uppercase, letter-spaced, muted.
215
+ * Replaces ad-hoc `text-uppercase` + `font-size-05` combos.
216
+ */
217
+ declare const SectionLabel: react.ForwardRefExoticComponent<SectionLabelProps & react.RefAttributes<HTMLSpanElement>>;
218
+
219
+ type NativeButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'>;
220
+ interface ButtonProps extends NativeButtonProps {
221
+ variant?: 'solid' | 'soft' | 'outline' | 'ghost' | 'toggle';
222
+ children?: ReactNode;
223
+ intent?: 'neutral' | 'brand' | 'danger' | 'success' | 'white' | 'canvas';
224
+ size?: 'sm' | 'md' | 'lg' | 'xl';
225
+ shape?: 'rounded' | 'pill' | 'square' | 'circle';
226
+ block?: boolean;
227
+ align?: 'start' | 'center' | 'end';
228
+ isLoading?: boolean;
229
+ to?: string;
230
+ leftIcon?: ReactNode;
231
+ rightIcon?: ReactNode;
232
+ iconOnly?: boolean;
233
+ iconSize?: number;
234
+ premium?: boolean;
235
+ onClick?: MouseEventHandler<HTMLElement>;
236
+ }
237
+ declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
238
+
239
+ interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
240
+ children: ReactNode;
241
+ variant?: 'default' | 'ghost';
242
+ size?: 'sm' | 'md' | 'lg';
243
+ }
244
+ declare const IconButton: react.ForwardRefExoticComponent<IconButtonProps & react.RefAttributes<HTMLButtonElement>>;
245
+
246
+ interface CloseButtonProps {
247
+ onClick?: () => void;
248
+ /** For dialog command API - use with commandfor */
249
+ command?: 'close';
250
+ /** Dialog ID for command API */
251
+ commandfor?: string;
252
+ 'aria-label'?: string;
253
+ }
254
+ declare const CloseButton: react.ForwardRefExoticComponent<CloseButtonProps & react.RefAttributes<HTMLButtonElement>>;
255
+
256
+ interface SelectOption {
257
+ value: string;
258
+ title: string;
259
+ description?: string;
260
+ }
261
+ interface SelectProps {
262
+ options: SelectOption[];
263
+ id?: string;
264
+ value?: string | null;
265
+ onChange?: (value: string) => void;
266
+ disabled?: boolean;
267
+ onDark?: boolean;
268
+ placeholder?: string;
269
+ className?: string;
270
+ style?: react__default.CSSProperties;
271
+ optionClassName?: string;
272
+ showSelectionIcon?: boolean;
273
+ isLoading?: boolean;
274
+ onScrollEnd?: () => void;
275
+ renderOptionAction?: (option: SelectOption, isSelected: boolean) => react__default.ReactNode;
276
+ isEditable?: boolean;
277
+ inputClassName?: string;
278
+ title?: string;
279
+ onFocusCapture?: react__default.FocusEventHandler<HTMLElement>;
280
+ /** Multi-select mode */
281
+ isMulti?: boolean;
282
+ /** Currently selected values in multi-select mode */
283
+ selectedValues?: string[];
284
+ /** Callback when multi-select values change */
285
+ onMultiChange?: (values: string[]) => void;
286
+ /** "All" option rendered as the first item in multi-select */
287
+ allOption?: {
288
+ value: string;
289
+ title: string;
290
+ };
291
+ /** Custom trigger label for multi-select */
292
+ renderTriggerLabel?: (selectedCount: number, total: number) => string;
293
+ /** Render a search input inside the dropdown body */
294
+ hasSearch?: boolean;
295
+ /** Placeholder for the dropdown search input */
296
+ searchPlaceholder?: string;
297
+ 'aria-label'?: string;
298
+ 'aria-labelledby'?: string;
299
+ 'aria-describedby'?: string;
300
+ 'aria-invalid'?: boolean;
301
+ 'aria-errormessage'?: string;
302
+ }
303
+ declare const Select: react__default.ForwardRefExoticComponent<SelectProps & react__default.RefAttributes<HTMLButtonElement | HTMLInputElement>>;
304
+
305
+ interface SegmentedTabOption<TId extends string = string> {
306
+ id: TId;
307
+ label: string;
308
+ icon?: ReactNode;
309
+ }
310
+ interface SegmentedTabsProps<TId extends string = string> {
311
+ tabs: ReadonlyArray<SegmentedTabOption<TId>>;
312
+ activeTab: TId;
313
+ onChange: (id: TId) => void;
314
+ ariaLabel: string;
315
+ /** Unique per instance. Defaults to a React-generated id — override only to share animation across mount boundaries. */
316
+ layoutId?: string;
317
+ size?: 'sm' | 'md';
318
+ fullWidth?: boolean;
319
+ className?: string;
320
+ }
321
+ declare const SegmentedTabs: <TId extends string>(props: SegmentedTabsProps<TId> & {
322
+ ref?: Ref<HTMLDivElement>;
323
+ }) => ReactElement;
324
+
325
+ interface SliderProps {
326
+ min: number;
327
+ max: number;
328
+ value: number;
329
+ onChange: (value: number) => void;
330
+ step?: number;
331
+ disabled?: boolean;
332
+ className?: string;
333
+ style?: CSSProperties;
334
+ }
335
+ declare const _default$1: react.NamedExoticComponent<SliderProps & react.RefAttributes<HTMLDivElement>>;
336
+
337
+ interface LiquidToggleProps {
338
+ className?: string;
339
+ id?: string;
340
+ pressed?: boolean;
341
+ defaultPressed?: boolean;
342
+ onChange?: (pressed: boolean) => void;
343
+ bounce?: boolean;
344
+ disabled?: boolean;
345
+ 'aria-label'?: string;
346
+ 'aria-labelledby'?: string;
347
+ 'aria-describedby'?: string;
348
+ 'aria-invalid'?: boolean;
349
+ 'aria-errormessage'?: string;
350
+ }
351
+ declare const LiquidToggle: react.ForwardRefExoticComponent<LiquidToggleProps & react.RefAttributes<HTMLDivElement>>;
352
+
353
+ interface Step<K extends string> {
354
+ key: K;
355
+ content: ReactNode;
356
+ }
357
+ interface StepTitle {
358
+ title: string;
359
+ subtitle: string;
360
+ }
361
+ type StepTitles<K extends string> = Record<K, StepTitle>;
362
+ interface StepIndicator<K extends string> {
363
+ key: K;
364
+ label: string;
365
+ description?: string;
366
+ }
367
+ interface StepperProps<K extends string> {
368
+ steps: Step<K>[];
369
+ activeStep: K;
370
+ className?: string;
371
+ indicators?: StepIndicator<K>[];
372
+ onStepClick?: (key: K) => void;
373
+ canNavigateTo?: (key: K) => boolean;
374
+ }
375
+ declare const Stepper: <K extends string>(props: StepperProps<K> & {
376
+ ref?: Ref<HTMLDivElement>;
377
+ }) => ReactElement;
378
+
379
+ type InputSize = 'sm' | 'md' | 'lg';
380
+ interface TextInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
381
+ /** Vertical rhythm of the control. Surface tokens stay constant across sizes. */
382
+ size?: InputSize;
383
+ /** Renders the danger border treatment; pair with `aria-invalid`. */
384
+ hasError?: boolean;
385
+ /** Leading adornment (e.g. a lucide icon). Decorative — kept out of the a11y tree. */
386
+ leftIcon?: ReactNode;
387
+ /** Trailing adornment (e.g. a lucide icon or action). Decorative. */
388
+ rightIcon?: ReactNode;
389
+ /** Stretch the control to fill its container. */
390
+ fullWidth?: boolean;
391
+ /** Extra class for the outer surface wrapper. */
392
+ containerClassName?: string;
393
+ }
394
+ declare const TextInput: react.ForwardRefExoticComponent<TextInputProps & react.RefAttributes<HTMLInputElement>>;
395
+
396
+ type TextareaSize = 'sm' | 'md' | 'lg';
397
+ interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'rows'> {
398
+ /** Vertical rhythm of the control. Surface tokens stay constant across sizes. */
399
+ size?: TextareaSize;
400
+ /** Renders the danger border treatment; pair with `aria-invalid`. */
401
+ hasError?: boolean;
402
+ /** Grow the field with its content (up to `maxRows`) instead of scrolling. */
403
+ autosize?: boolean;
404
+ /** Minimum visible rows (and the floor for autosize). */
405
+ minRows?: number;
406
+ /** Ceiling for autosize growth; beyond this the field scrolls. */
407
+ maxRows?: number;
408
+ }
409
+ declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.RefAttributes<HTMLTextAreaElement>>;
410
+
411
+ interface NumberInputProps extends Omit<TextInputProps, 'type' | 'value' | 'defaultValue' | 'onChange'> {
412
+ min?: number;
413
+ max?: number;
414
+ /** Increment applied by the steppers and arrow keys. Defaults to 1. */
415
+ step?: number;
416
+ value?: number | '';
417
+ defaultValue?: number;
418
+ /** Native change passthrough (fires with the raw string event). */
419
+ onChange?: ChangeEventHandler<HTMLInputElement>;
420
+ /** Parsed-number callback; receives `NaN` when the field is cleared/invalid. */
421
+ onValueChange?: (value: number) => void;
422
+ /** Render the increment/decrement stepper buttons. */
423
+ showSteppers?: boolean;
424
+ }
425
+ declare const NumberInput: react.ForwardRefExoticComponent<NumberInputProps & react.RefAttributes<HTMLInputElement>>;
426
+
427
+ interface SearchInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {
428
+ containerClassName?: string;
429
+ variant?: 'default' | 'small';
430
+ overlayContent?: ReactNode;
431
+ overlayVisible?: boolean;
432
+ }
433
+ declare const SearchInput: react.ForwardRefExoticComponent<SearchInputProps & react.RefAttributes<HTMLInputElement>>;
434
+
435
+ type FormFieldLayout = 'stacked' | 'inline';
436
+ interface FormFieldProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
437
+ /** Visible field label. Rendered as a `<label>` bound to `htmlFor` when present. */
438
+ label?: ReactNode;
439
+ /** Associates the label with the control it wraps (the control's `id`). */
440
+ htmlFor?: string;
441
+ /** Marks the field as required and renders a danger-toned asterisk after the label. */
442
+ required?: boolean;
443
+ /** Error message. When set, the field is described by a danger-toned message. */
444
+ error?: ReactNode;
445
+ /** Secondary helper text shown when there's no error. */
446
+ helpText?: ReactNode;
447
+ /** `stacked` (default) renders label above the control; `inline` uses a label-column grid. */
448
+ layout?: FormFieldLayout;
449
+ /** The control (input/select/checkbox/etc.) this field wraps. */
450
+ children?: ReactNode;
451
+ className?: string;
452
+ }
453
+ /**
454
+ * Generic field wrapper that pairs a label and helper/error messaging with an
455
+ * arbitrary control. Composes {@link Stack} + {@link Text}; carries no input
456
+ * styling of its own so any control primitive can sit inside it.
457
+ *
458
+ * Accessibility: the label is a real `<label htmlFor>` when `htmlFor` is given,
459
+ * and the helper/error text gets a stable id so callers can wire
460
+ * `aria-describedby` on the control (exposed via the resolved id on the message).
461
+ */
462
+ declare const FormField: react.ForwardRefExoticComponent<FormFieldProps & react.RefAttributes<HTMLDivElement>>;
463
+
464
+ type CheckboxSize = 'sm' | 'md' | 'lg';
465
+ type NativeCheckboxProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'>;
466
+ interface CheckboxProps extends NativeCheckboxProps {
467
+ /** Controlled checked state. */
468
+ checked?: boolean;
469
+ onChange?: ChangeEventHandler<HTMLInputElement>;
470
+ /** Inline text label rendered after the box and wired to the input. */
471
+ label?: ReactNode;
472
+ /** Renders the mixed (—) state. Maps to the input's `indeterminate` property. */
473
+ indeterminate?: boolean;
474
+ disabled?: boolean;
475
+ size?: CheckboxSize;
476
+ className?: string;
477
+ /** Class applied to the outer wrapper `<label>`. */
478
+ containerClassName?: string;
479
+ }
480
+ /**
481
+ * Accessible custom-styled checkbox built on a real `<input type="checkbox">`.
482
+ * The native input is visually hidden but remains the source of truth for state,
483
+ * keyboard interaction (Space toggles), and assistive tech. The brand-tinted box
484
+ * is purely presentational (`aria-hidden`).
485
+ *
486
+ * `--color-brand-primary` fills the checked box; `--color-on-accent` colors the check.
487
+ */
488
+ declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLInputElement>>;
489
+
490
+ type RadioSize = 'sm' | 'md' | 'lg';
491
+ type NativeRadioProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'>;
492
+ interface RadioProps extends NativeRadioProps {
493
+ /** Controlled checked state. */
494
+ checked?: boolean;
495
+ onChange?: ChangeEventHandler<HTMLInputElement>;
496
+ /** Inline text label rendered after the dot and wired to the input. */
497
+ label?: ReactNode;
498
+ /** Radio group name. Required for native single-selection within a group. */
499
+ name?: string;
500
+ /** Submitted value for this option. */
501
+ value?: string;
502
+ disabled?: boolean;
503
+ size?: RadioSize;
504
+ className?: string;
505
+ /** Class applied to the outer wrapper `<label>`. */
506
+ containerClassName?: string;
507
+ }
508
+ /**
509
+ * Accessible custom-styled radio built on a real `<input type="radio">`.
510
+ * The native input remains the source of truth for state, keyboard interaction
511
+ * (arrow keys move within a `name` group), and assistive tech; the brand-tinted
512
+ * circle is presentational (`aria-hidden`).
513
+ *
514
+ * `--color-brand-primary` fills the selected circle; `--color-on-accent` is the dot.
515
+ */
516
+ declare const Radio: react.ForwardRefExoticComponent<RadioProps & react.RefAttributes<HTMLInputElement>>;
517
+
518
+ /** Tabs supports the standard control sizes; underline content tabs read best at sm/md/lg. */
519
+ type TabsSize = Extract<ControlSize, 'sm' | 'md' | 'lg'>;
520
+ interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
521
+ /** Controlled selected value. Pair with `onChange`. */
522
+ value?: string;
523
+ /** Initial selected value when uncontrolled. */
524
+ defaultValue?: string;
525
+ /** Fires with the next value whenever selection changes. */
526
+ onChange?: (value: string) => void;
527
+ /** Visual scale shared by every tab + panel. */
528
+ size?: TabsSize;
529
+ children?: ReactNode;
530
+ className?: string;
531
+ }
532
+ interface TabsComponent extends React.ForwardRefExoticComponent<TabsProps & React.RefAttributes<HTMLDivElement>> {
533
+ List: typeof TabsList;
534
+ Tab: typeof Tab;
535
+ Panel: typeof TabsPanel;
536
+ }
537
+ interface TabsListProps extends HTMLAttributes<HTMLDivElement> {
538
+ children?: ReactNode;
539
+ className?: string;
540
+ }
541
+ declare const TabsList: react.ForwardRefExoticComponent<TabsListProps & react.RefAttributes<HTMLDivElement>>;
542
+ type NativeTabButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value' | 'onClick'>;
543
+ interface TabProps extends NativeTabButtonProps {
544
+ /** Identifies this tab; must match the Panel `value` it controls. */
545
+ value: string;
546
+ children?: ReactNode;
547
+ /** Optional leading icon, rendered decoratively (aria-hidden). */
548
+ leftIcon?: ReactNode;
549
+ disabled?: boolean;
550
+ className?: string;
551
+ }
552
+ declare const Tab: react.ForwardRefExoticComponent<TabProps & react.RefAttributes<HTMLButtonElement>>;
553
+ interface TabsPanelProps extends HTMLAttributes<HTMLDivElement> {
554
+ /** Identifies the tab whose selection reveals this panel. */
555
+ value: string;
556
+ children?: ReactNode;
557
+ /**
558
+ * Keep the panel mounted (just hidden) when inactive. Defaults to `false`,
559
+ * which unmounts inactive panels so heavy 3D/chart content does not stay live.
560
+ */
561
+ keepMounted?: boolean;
562
+ className?: string;
563
+ }
564
+ declare const TabsPanel: react.ForwardRefExoticComponent<TabsPanelProps & react.RefAttributes<HTMLDivElement>>;
565
+ declare const Tabs: TabsComponent;
566
+
567
+ interface BreadcrumbItem {
568
+ id: string;
569
+ title: string;
570
+ leftIcon?: ReactNode;
571
+ onClick?: () => void;
572
+ }
573
+ type BreadcrumbsVariant = 'default' | 'compact' | 'pill';
574
+ interface BreadcrumbsProps {
575
+ items: BreadcrumbItem[];
576
+ variant?: BreadcrumbsVariant;
577
+ separator?: ReactNode;
578
+ ariaLabel?: string;
579
+ title?: string;
580
+ className?: string;
581
+ onItemClick?: (item: BreadcrumbItem, index: number) => void;
582
+ }
583
+ declare const Breadcrumbs: react.ForwardRefExoticComponent<BreadcrumbsProps & react.RefAttributes<HTMLElement>>;
584
+
585
+ type CollapsibleSectionHeadingTag = 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
586
+ interface CollapsibleSectionProps {
587
+ title: string;
588
+ children: ReactNode;
589
+ defaultExpanded?: boolean;
590
+ expanded?: boolean;
591
+ onExpandedChange?: (next: boolean) => void;
592
+ className?: string;
593
+ headerClassName?: string;
594
+ titleClassName?: string;
595
+ iconClassName?: string;
596
+ bodyClassName?: string;
597
+ contentClassName?: string;
598
+ noSpacing?: boolean;
599
+ arrowSize?: number;
600
+ useDefaultHeaderStyles?: boolean;
601
+ useDefaultTitleStyles?: boolean;
602
+ onDelete?: () => void;
603
+ deleteActionLabel?: string;
604
+ deleteActionAlwaysVisible?: boolean;
605
+ onAdd?: () => void;
606
+ icon?: ReactNode;
607
+ headerAction?: ReactNode;
608
+ collapsible?: boolean;
609
+ titleAs?: CollapsibleSectionHeadingTag;
610
+ }
611
+ declare const _default: react.NamedExoticComponent<CollapsibleSectionProps & react.RefAttributes<HTMLElement>>;
612
+
613
+ declare module 'react' {
614
+ interface ButtonHTMLAttributes<T> extends react__default.HTMLAttributes<T> {
615
+ command?: string;
616
+ commandfor?: string;
617
+ }
618
+ }
619
+ interface ModalProps {
620
+ id: string;
621
+ trigger?: ReactNode;
622
+ title?: string;
623
+ description?: string;
624
+ children: ReactNode;
625
+ footer?: ReactNode;
626
+ className?: string;
627
+ width?: string;
628
+ onClose?: () => void;
629
+ dismissible?: boolean;
630
+ lazyMount?: boolean;
631
+ }
632
+ declare const Modal: ({ id, trigger, title, description, children, footer, className, width, onClose, dismissible, lazyMount }: ModalProps) => react__default.JSX.Element;
633
+
634
+ /** Opens a modal dialog by id when it is not already open. */
635
+ declare const openModal: (id: string) => void;
636
+ /** Closes a modal dialog by id when it is open. */
637
+ declare const closeModal: (id: string) => void;
638
+ /** Closes a modal and runs reset work after the close animation delay. */
639
+ declare const resetModal: (id: string, reset: () => void, delay?: number) => void;
640
+
641
+ type PopoverRole = 'dialog' | 'menu' | 'listbox' | 'tooltip';
642
+ type ContextMenuOpenPredicate = (event: react__default.MouseEvent<Element>) => boolean;
643
+ interface PopoverProps {
644
+ id: string;
645
+ trigger: ReactNode;
646
+ children: ReactNode | ((close: () => void) => ReactNode);
647
+ className?: string;
648
+ noPadding?: boolean;
649
+ triggerAction?: 'click' | 'contextmenu';
650
+ onOpenChange?: (isOpen: boolean) => void;
651
+ placement?: Placement;
652
+ role?: PopoverRole;
653
+ triggerAriaHaspopup?: 'menu' | 'dialog';
654
+ ariaLabel?: string;
655
+ ariaLabelledBy?: string;
656
+ ariaDescribedBy?: string;
657
+ shouldOpenOnContextMenu?: ContextMenuOpenPredicate;
658
+ }
659
+ declare const Popover: ({ id, trigger, children, className, noPadding, triggerAction, onOpenChange, placement, role: popoverRole, triggerAriaHaspopup, ariaLabel, ariaLabelledBy, ariaDescribedBy, shouldOpenOnContextMenu }: PopoverProps) => react__default.JSX.Element;
660
+
661
+ interface PopoverMenuProps {
662
+ children: ReactNode;
663
+ label?: string;
664
+ onClose?: () => void;
665
+ }
666
+ declare const PopoverMenu: react__default.ForwardRefExoticComponent<PopoverMenuProps & react__default.RefAttributes<HTMLDivElement>>;
667
+
668
+ type PopoverMenuItemRole = 'menuitem' | 'menuitemcheckbox' | 'menuitemradio';
669
+ interface PopoverMenuItemProps {
670
+ icon?: ReactNode;
671
+ label?: string;
672
+ children?: ReactNode;
673
+ onClick?: () => void;
674
+ variant?: 'default' | 'danger';
675
+ size?: 'sm' | 'md';
676
+ disabled?: boolean;
677
+ isLoading?: boolean;
678
+ rightAdornment?: ReactNode;
679
+ role?: PopoverMenuItemRole;
680
+ ariaHaspopup?: 'menu' | 'dialog';
681
+ ariaExpanded?: boolean;
682
+ ariaControls?: string;
683
+ tabIndex?: number;
684
+ onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;
685
+ onBlur?: React.FocusEventHandler<HTMLButtonElement>;
686
+ onMouseEnter?: React.MouseEventHandler<HTMLButtonElement>;
687
+ onMouseLeave?: React.MouseEventHandler<HTMLButtonElement>;
688
+ }
689
+ declare const PopoverMenuItem: react.ForwardRefExoticComponent<PopoverMenuItemProps & react.RefAttributes<HTMLButtonElement>>;
690
+
691
+ type MenuSize = 'sm' | 'md';
692
+ /**
693
+ * A single actionable entry in a {@link Menu}.
694
+ *
695
+ * Set `divider: true` to render a visual separator instead of an action;
696
+ * separator entries ignore every other field except `id`.
697
+ */
698
+ interface MenuItem {
699
+ /** Stable, unique key for this entry. */
700
+ id: string;
701
+ /** Visible label. Required for actionable items, unused for dividers. */
702
+ label?: ReactNode;
703
+ /** Optional leading icon node (e.g. a lucide-react icon element). */
704
+ icon?: ReactNode;
705
+ /** Invoked when the item is chosen; the menu closes afterwards. */
706
+ onSelect?: () => void;
707
+ /** Semantic tone. Only `danger` is visually distinct (maps to the danger item style). */
708
+ tone?: StatusTone;
709
+ /** Disabled items are not focusable and cannot be selected. */
710
+ disabled?: boolean;
711
+ /** Render this entry as a separator rule instead of an action. */
712
+ divider?: boolean;
713
+ }
714
+ /** Render-prop form of the trigger; receives the menu's open state. */
715
+ type MenuTriggerRenderProp = (state: {
716
+ isOpen: boolean;
717
+ }) => ReactNode;
718
+ interface MenuProps {
719
+ /**
720
+ * The element (or render-prop) that opens the menu. A render-prop receives
721
+ * `{ isOpen }`. The trigger is wrapped in a focusable element so any node works.
722
+ */
723
+ trigger: ReactNode | MenuTriggerRenderProp;
724
+ /** The menu entries. Use `divider: true` entries to group sections. */
725
+ items: MenuItem[];
726
+ /** Floating-ui placement of the menu relative to the trigger. */
727
+ placement?: Placement;
728
+ /** Control density passed through to each item. */
729
+ size?: MenuSize;
730
+ /** Stable id for the popover; auto-generated when omitted. */
731
+ id?: string;
732
+ /** Accessible name announced for the menu region. Falls back to `menuLabel`. */
733
+ ariaLabel?: string;
734
+ /** Human label for the menu list (also used as the accessible name fallback). */
735
+ menuLabel?: string;
736
+ /** Accessible name for the auto-generated trigger wrapper. */
737
+ triggerAriaLabel?: string;
738
+ /** Rendered when `items` is empty (after filtering dividers). */
739
+ emptyContent?: ReactNode;
740
+ /** Notified whenever the menu opens or closes. */
741
+ onOpenChange?: (isOpen: boolean) => void;
742
+ /** Extra classes for the popover panel. */
743
+ className?: string;
744
+ /** Extra classes for the trigger wrapper. */
745
+ triggerClassName?: string;
746
+ }
747
+ declare const Menu: react.ForwardRefExoticComponent<MenuProps & react.RefAttributes<HTMLSpanElement>>;
748
+
749
+ type TooltipPlacement = Placement;
750
+ interface TooltipProps {
751
+ children: ReactNode;
752
+ content: ReactNode;
753
+ placement?: TooltipPlacement;
754
+ delay?: number;
755
+ disabled?: boolean;
756
+ className?: string;
757
+ }
758
+ declare const Tooltip: ({ children, content, placement, delay, disabled, className }: TooltipProps) => react__default.JSX.Element;
759
+
760
+ interface CursorTooltipProps {
761
+ isOpen: boolean;
762
+ x: number;
763
+ y: number;
764
+ content?: ReactNode;
765
+ className?: string;
766
+ autoPosition?: boolean;
767
+ interactive?: boolean;
768
+ offset?: number;
769
+ ariaLabel?: string;
770
+ }
771
+ declare const CursorTooltip: ({ isOpen, x, y, content, className, autoPosition, interactive, offset: cursorOffset, ariaLabel }: CursorTooltipProps) => react.JSX.Element | null;
772
+
773
+ type FloatingToolbarPlacement = 'top' | 'bottom';
774
+ type FloatingToolbarAlign = 'start' | 'center' | 'end';
775
+ interface FloatingToolbarProps extends HTMLAttributes<HTMLDivElement> {
776
+ placement?: FloatingToolbarPlacement;
777
+ align?: FloatingToolbarAlign;
778
+ /** Offset distance (rem) from the edge the toolbar is anchored to. */
779
+ offset?: number;
780
+ children?: ReactNode;
781
+ }
782
+ /**
783
+ * Centered floating pill toolbar (glass-bg) used over canvases/viewports.
784
+ * Positions itself absolute relative to its nearest positioned ancestor.
785
+ */
786
+ declare const FloatingToolbar: react.ForwardRefExoticComponent<FloatingToolbarProps & react.RefAttributes<HTMLDivElement>>;
787
+
788
+ type TagTone = 'neutral' | 'brand' | 'success' | 'warning' | 'danger' | 'info';
789
+ type TagSize = 'xs' | 'sm' | 'md';
790
+ type TagVariant = 'soft' | 'solid' | 'outline';
791
+ type TagShape = 'pill' | 'square';
792
+ interface TagProps extends HTMLAttributes<HTMLSpanElement> {
793
+ tone?: TagTone;
794
+ size?: TagSize;
795
+ variant?: TagVariant;
796
+ shape?: TagShape;
797
+ leftIcon?: ReactNode;
798
+ rightIcon?: ReactNode;
799
+ children?: ReactNode;
800
+ }
801
+ declare const Tag: react.ForwardRefExoticComponent<TagProps & react.RefAttributes<HTMLSpanElement>>;
802
+
803
+ type StatusBadgeVariant = 'active' | 'inactive' | 'danger' | 'neutral' | 'success' | 'warning' | 'brand' | 'primary';
804
+ interface StatusBadgeProps {
805
+ /**
806
+ * Status string - will be mapped to variant automatically
807
+ */
808
+ status?: string;
809
+ /**
810
+ * Visual variant override
811
+ */
812
+ variant?: StatusBadgeVariant;
813
+ /**
814
+ * Size variant
815
+ * @default 'default'
816
+ */
817
+ size?: 'default' | 'compact';
818
+ /**
819
+ * Badge content (alternative to status)
820
+ */
821
+ children?: ReactNode;
822
+ /**
823
+ * Additional CSS classes
824
+ */
825
+ className?: string;
826
+ }
827
+ declare const StatusBadge: react.ForwardRefExoticComponent<StatusBadgeProps & react.RefAttributes<HTMLSpanElement>>;
828
+
829
+ type StatusDotTone = 'success' | 'warning' | 'danger' | 'info' | 'neutral' | 'brand';
830
+ interface StatusDotProps {
831
+ tone?: StatusDotTone;
832
+ size?: 'sm' | 'md' | 'lg';
833
+ className?: string;
834
+ label?: string;
835
+ /** Animates the dot with a gentle pulse. */
836
+ pulse?: boolean;
837
+ /** Adds a soft glow halo (same color as the dot). */
838
+ glow?: boolean;
839
+ }
840
+ declare const StatusDot: react.ForwardRefExoticComponent<StatusDotProps & react.RefAttributes<HTMLSpanElement>>;
841
+
842
+ type InlineStatusTone = 'neutral' | 'muted' | 'success' | 'warning' | 'danger';
843
+ interface InlineStatusProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
844
+ tone?: InlineStatusTone;
845
+ icon?: ReactNode;
846
+ live?: 'polite' | 'assertive' | 'off';
847
+ severity?: 'status' | 'alert';
848
+ children?: ReactNode;
849
+ }
850
+ /**
851
+ * Inline live-region status/alert row (icon + message). Use for form-save
852
+ * feedback, toast-lite inline messages, etc.
853
+ */
854
+ declare const InlineStatus: react.ForwardRefExoticComponent<InlineStatusProps & react.RefAttributes<HTMLDivElement>>;
855
+
856
+ type SaveStatus = 'idle' | 'saving' | 'saved' | 'error';
857
+ interface SaveStatusIndicatorProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
858
+ status: SaveStatus;
859
+ savingLabel?: string;
860
+ savedLabel?: string;
861
+ errorLabel?: string;
862
+ /** Hide when `idle`. Default: true. */
863
+ hideIdle?: boolean;
864
+ }
865
+ /**
866
+ * Inline save-state indicator (saving / saved / error) with live-region
867
+ * announcement. Consolidates plugin/latex/whiteboard "Saved" pills.
868
+ */
869
+ declare const SaveStatusIndicator: react.ForwardRefExoticComponent<SaveStatusIndicatorProps & react.RefAttributes<HTMLDivElement>>;
870
+
871
+ type AvatarSize = 'xs' | 'sm' | 'md' | 'lg';
872
+ /** Minimal user-like shape the Avatar renders from. Local to the primitive so
873
+ * the design system carries no domain (auth) coupling; a domain `User` is
874
+ * structurally assignable. */
875
+ interface AvatarUser {
876
+ firstName?: string | null;
877
+ lastName?: string | null;
878
+ email?: string | null;
879
+ avatar?: string | null;
880
+ }
881
+ interface AvatarProps {
882
+ src?: string | null;
883
+ alt?: string;
884
+ fallback?: string;
885
+ user?: AvatarUser | null;
886
+ size?: AvatarSize;
887
+ className?: string;
888
+ isOnline?: boolean;
889
+ showStatus?: boolean;
890
+ icon?: ReactNode;
891
+ }
892
+ declare const Avatar: react.ForwardRefExoticComponent<AvatarProps & react.RefAttributes<HTMLDivElement>>;
893
+
894
+ type StackSize = 'xs' | 'sm' | 'md';
895
+ type AvatarStackUser = AvatarUser & {
896
+ isOnline?: boolean | null;
897
+ _id?: string;
898
+ id?: string;
899
+ };
900
+ interface AvatarStackProps {
901
+ users: AvatarStackUser[];
902
+ maxDisplay?: number;
903
+ size?: StackSize;
904
+ className?: string;
905
+ }
906
+ declare const AvatarStack: react.ForwardRefExoticComponent<AvatarStackProps & react.RefAttributes<HTMLElement>>;
907
+
908
+ type IconFrameSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
909
+ type IconFrameTone = 'neutral' | 'brand' | 'success' | 'warning' | 'danger' | 'info';
910
+ type IconFrameShape = 'square' | 'circle';
911
+ interface IconFrameProps extends HTMLAttributes<HTMLDivElement> {
912
+ size?: IconFrameSize;
913
+ tone?: IconFrameTone;
914
+ shape?: IconFrameShape;
915
+ children?: ReactNode;
916
+ }
917
+ /**
918
+ * Tinted rounded container for a decorative icon. Unifies the
919
+ * ~5 hand-rolled "icon bubbles" scattered across dashboards, tiles and menus.
920
+ */
921
+ declare const IconFrame: react.ForwardRefExoticComponent<IconFrameProps & react.RefAttributes<HTMLDivElement>>;
922
+
923
+ type CardVariant = 'elevated' | 'glass' | 'plain';
924
+ type CardPadding = 'none' | 'sm' | 'md' | 'lg';
925
+ interface CardProps extends HTMLAttributes<HTMLDivElement> {
926
+ /** Background/elevation treatment. Defaults to `elevated`. */
927
+ variant?: CardVariant;
928
+ /**
929
+ * Makes the whole card clickable/focusable. Renders a `<button>` (unless
930
+ * `as`/`to` overrides the element) with keyboard activation. Requires an
931
+ * accessible name.
932
+ */
933
+ interactive?: boolean;
934
+ /** Applies the brand selected ring + `aria-selected` when interactive. */
935
+ selected?: boolean;
936
+ /**
937
+ * Convenience body padding applied directly to the root. Prefer
938
+ * `Card.Header`/`Card.Body`/`Card.Footer` slots for structured content;
939
+ * use this for simple single-region cards. Defaults to `none`.
940
+ */
941
+ padding?: CardPadding;
942
+ /** Element/component to render as. Defaults to `button` when interactive, else `div`. */
943
+ as?: ElementType;
944
+ children?: ReactNode;
945
+ className?: string;
946
+ }
947
+ declare const Card: react.ForwardRefExoticComponent<CardProps & react.RefAttributes<HTMLDivElement>>;
948
+ interface CardSlotProps extends HTMLAttributes<HTMLDivElement> {
949
+ as?: ElementType;
950
+ children?: ReactNode;
951
+ className?: string;
952
+ }
953
+ interface CardBodyProps extends CardSlotProps {
954
+ /** Body padding. Defaults to `md`. Use `none` to pad children manually. */
955
+ padding?: CardPadding;
956
+ }
957
+ declare const CardHeader: react.ForwardRefExoticComponent<CardSlotProps & react.RefAttributes<HTMLDivElement>>;
958
+ declare const CardBody: react.ForwardRefExoticComponent<CardBodyProps & react.RefAttributes<HTMLDivElement>>;
959
+ declare const CardFooter: react.ForwardRefExoticComponent<CardSlotProps & react.RefAttributes<HTMLDivElement>>;
960
+ type CardComponent = typeof Card & {
961
+ Header: typeof CardHeader;
962
+ Body: typeof CardBody;
963
+ Footer: typeof CardFooter;
964
+ };
965
+ declare const CardWithSlots: CardComponent;
966
+
967
+ type StatCardTone = 'neutral' | 'brand' | 'success' | 'warning' | 'danger';
968
+ type StatCardState = 'ready' | 'loading';
969
+ interface StatCardProps extends HTMLAttributes<HTMLDivElement> {
970
+ label: ReactNode;
971
+ value?: ReactNode;
972
+ unit?: ReactNode;
973
+ icon?: ReactNode;
974
+ trend?: ReactNode;
975
+ footer?: ReactNode;
976
+ tone?: StatCardTone;
977
+ state?: StatCardState;
978
+ tabular?: boolean;
979
+ surface?: 'elevated' | 'soft';
980
+ }
981
+ /**
982
+ * Metric/stat display card. Consolidates the hand-rolled stat-card JSX
983
+ * used across dashboard, cluster metrics, container metrics and secret-key
984
+ * usage panels.
985
+ */
986
+ declare const StatCard: react.ForwardRefExoticComponent<StatCardProps & react.RefAttributes<HTMLDivElement>>;
987
+
988
+ interface SelectableCardProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'title' | 'onSelect'> {
989
+ title: ReactNode;
990
+ description?: ReactNode;
991
+ icon?: ReactNode;
992
+ iconTone?: IconFrameTone;
993
+ selected?: boolean;
994
+ badge?: ReactNode;
995
+ /**
996
+ * `radio` for mutually-exclusive groups (single selection),
997
+ * `checkbox` for multi-select.
998
+ */
999
+ selectionRole?: 'radio' | 'checkbox';
1000
+ onSelect?: () => void;
1001
+ }
1002
+ /**
1003
+ * Toggleable card with selected ring. Consolidates ~3 onboarding/creation
1004
+ * card shapes (template cards, cluster-onboarding choices, create-container
1005
+ * template selectors).
1006
+ */
1007
+ declare const SelectableCard: react.ForwardRefExoticComponent<SelectableCardProps & react.RefAttributes<HTMLButtonElement>>;
1008
+
1009
+ type DashedActionTone = 'muted' | 'brand';
1010
+ type DashedActionSize = 'sm' | 'md' | 'lg';
1011
+ interface DashedActionBoxProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
1012
+ icon?: ReactNode;
1013
+ label: ReactNode;
1014
+ tone?: DashedActionTone;
1015
+ size?: DashedActionSize;
1016
+ block?: boolean;
1017
+ children?: ReactNode;
1018
+ }
1019
+ /**
1020
+ * Dashed-border "add X" call-to-action button. Consolidates the
1021
+ * add-argument, add-option, add-field, file-dropzone patterns.
1022
+ */
1023
+ declare const DashedActionBox: react.ForwardRefExoticComponent<DashedActionBoxProps & react.RefAttributes<HTMLButtonElement>>;
1024
+
1025
+ interface KeyValueRowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
1026
+ label: ReactNode;
1027
+ value: ReactNode;
1028
+ copyValue?: string;
1029
+ action?: ReactNode;
1030
+ tabular?: boolean;
1031
+ }
1032
+ /**
1033
+ * Single label/value pair row with optional copy action or custom trailing
1034
+ * action slot. Intended for use inside `KeyValueList`.
1035
+ */
1036
+ declare const KeyValueRow: react.ForwardRefExoticComponent<KeyValueRowProps & react.RefAttributes<HTMLDivElement>>;
1037
+ interface KeyValueListProps extends HTMLAttributes<HTMLDivElement> {
1038
+ dividers?: boolean;
1039
+ children?: ReactNode;
1040
+ }
1041
+ /**
1042
+ * Definition-style list. Renders each child `KeyValueRow` with consistent
1043
+ * spacing and optional inter-row dividers.
1044
+ */
1045
+ declare const KeyValueList: react.ForwardRefExoticComponent<KeyValueListProps & react.RefAttributes<HTMLDivElement>>;
1046
+
1047
+ interface ListRowProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
1048
+ leading?: ReactNode;
1049
+ title?: ReactNode;
1050
+ subtitle?: ReactNode;
1051
+ meta?: ReactNode;
1052
+ trailing?: ReactNode;
1053
+ selected?: boolean;
1054
+ active?: boolean;
1055
+ onClick?: () => void;
1056
+ to?: string;
1057
+ /** When `onClick`/`to` are absent, renders as a passive `div`. */
1058
+ as?: 'button' | 'div' | 'li';
1059
+ disabled?: boolean;
1060
+ }
1061
+ /**
1062
+ * Hoverable list row with leading / primary / subtitle / trailing slots.
1063
+ * Consolidates team member rows, chat list items, user cells, and similar list entries.
1064
+ */
1065
+ declare const ListRow: react.ForwardRefExoticComponent<ListRowProps & react.RefAttributes<HTMLElement>>;
1066
+
1067
+ declare enum TableSortDirection {
1068
+ Ascending = "ascending",
1069
+ Descending = "descending",
1070
+ None = "none"
1071
+ }
1072
+ interface Column<T> {
1073
+ key: string;
1074
+ header: string;
1075
+ render?: (row: T) => React.ReactNode;
1076
+ headerClassName?: string;
1077
+ cellClassName?: string;
1078
+ sortable?: boolean;
1079
+ }
1080
+ interface TableProps<T> {
1081
+ columns: Column<T>[];
1082
+ data: T[];
1083
+ getRowKey: (row: T, index: number) => string | number;
1084
+ isLoading?: boolean;
1085
+ skeletonRows?: number;
1086
+ onRowClick?: (row: T) => void;
1087
+ rowClassName?: string | ((row: T) => string);
1088
+ className?: string;
1089
+ getAriaSort?: (column: Column<T>) => TableSortDirection;
1090
+ onSort?: (column: Column<T>) => void;
1091
+ caption?: string;
1092
+ }
1093
+ declare const TableImpl: <T>({ columns, data, getRowKey, isLoading, skeletonRows, onRowClick, rowClassName, className, getAriaSort, onSort, caption }: TableProps<T>, ref: Ref<HTMLDivElement>) => react.JSX.Element;
1094
+ declare const Table: (<T>(props: TableProps<T> & {
1095
+ ref?: Ref<HTMLDivElement>;
1096
+ }) => ReturnType<typeof TableImpl>) & {
1097
+ displayName?: string;
1098
+ };
1099
+
1100
+ type TimelineTone = 'neutral' | 'brand' | 'success' | 'warning' | 'danger';
1101
+ interface TimelineItemProps extends HTMLAttributes<HTMLLIElement> {
1102
+ icon?: ReactNode;
1103
+ tone?: TimelineTone;
1104
+ connector?: boolean;
1105
+ children?: ReactNode;
1106
+ }
1107
+ /** A single timeline entry — dot/icon column + content column. */
1108
+ declare const TimelineItem: react.ForwardRefExoticComponent<TimelineItemProps & react.RefAttributes<HTMLLIElement>>;
1109
+ interface TimelineProps extends HTMLAttributes<HTMLOListElement> {
1110
+ children?: ReactNode;
1111
+ }
1112
+ /** Vertical timeline container. Children should be `TimelineItem` instances. */
1113
+ declare const Timeline: react.ForwardRefExoticComponent<TimelineProps & react.RefAttributes<HTMLOListElement>>;
1114
+
1115
+ interface SparklineProps {
1116
+ color: string;
1117
+ values: number[];
1118
+ labels?: string[];
1119
+ yDomain?: {
1120
+ min: number;
1121
+ max: number;
1122
+ };
1123
+ width?: number | `${number}%`;
1124
+ height?: number;
1125
+ strokeWidth?: number;
1126
+ fillOpacityStart?: number;
1127
+ fillOpacityEnd?: number;
1128
+ interpolation?: 'linear' | 'monotone';
1129
+ animate?: boolean;
1130
+ minDataMax?: number;
1131
+ }
1132
+ declare const Sparkline: ({ color, values, labels, yDomain, width, height, strokeWidth, fillOpacityStart, fillOpacityEnd, interpolation, animate, minDataMax }: SparklineProps) => react.JSX.Element;
1133
+
1134
+ type CalloutTone = 'danger' | 'warning' | 'info' | 'success';
1135
+ interface CalloutAction {
1136
+ label: string;
1137
+ onClick: () => void;
1138
+ icon?: ReactNode;
1139
+ isLoading?: boolean;
1140
+ disabled?: boolean;
1141
+ }
1142
+ interface CalloutProps {
1143
+ tone: CalloutTone;
1144
+ title?: string;
1145
+ description?: string;
1146
+ message?: ReactNode;
1147
+ icon?: ReactNode;
1148
+ action?: CalloutAction;
1149
+ children?: ReactNode;
1150
+ className?: string;
1151
+ ariaLabel?: string;
1152
+ role?: string;
1153
+ ariaLive?: 'off' | 'polite' | 'assertive';
1154
+ }
1155
+ declare const Callout: react.ForwardRefExoticComponent<CalloutProps & react.RefAttributes<HTMLDivElement>>;
1156
+
1157
+ interface EmptyStateProps {
1158
+ title: string;
1159
+ description: string;
1160
+ icon?: ReactNode;
1161
+ buttonText?: string;
1162
+ buttonOnClick?: () => void;
1163
+ buttonIsLoading?: boolean;
1164
+ className?: string;
1165
+ headingLevel?: 'h1' | 'h2' | 'h3';
1166
+ announce?: boolean;
1167
+ }
1168
+ declare const EmptyState: react.ForwardRefExoticComponent<EmptyStateProps & react.RefAttributes<HTMLElement>>;
1169
+
1170
+ type ToastTone = StatusTone;
1171
+ interface ToastProps {
1172
+ /** Semantic tone — drives the default icon, tint and aria-live politeness. */
1173
+ tone?: ToastTone;
1174
+ /** Optional bold heading shown above the message. */
1175
+ title?: ReactNode;
1176
+ /** Primary body content. Required. */
1177
+ message: ReactNode;
1178
+ /** Override the default tone icon. Pass `null` to hide it entirely. */
1179
+ icon?: ReactNode;
1180
+ /** When provided, renders a dismiss (close) button wired to this handler. */
1181
+ onDismiss?: () => void;
1182
+ /** Optional trailing action node (e.g. a Button or link). */
1183
+ action?: ReactNode;
1184
+ /** Accessible label for the dismiss button. */
1185
+ dismissLabel?: string;
1186
+ /**
1187
+ * Override the live-region politeness. Defaults to `assertive` for
1188
+ * `danger`, `polite` otherwise.
1189
+ */
1190
+ ariaLive?: 'polite' | 'assertive' | 'off';
1191
+ className?: string;
1192
+ }
1193
+ /**
1194
+ * Presentational toast / notification unit. This is the visual surface the
1195
+ * app's `AppToaster` system renders — it owns no timers, no portal and no
1196
+ * stacking; it is a pure, accessible building block.
1197
+ *
1198
+ * Composes {@link Surface} (elevated card), {@link IconFrame} (tinted tone
1199
+ * glyph), {@link Text} and {@link CloseButton}.
1200
+ */
1201
+ declare const Toast: react.ForwardRefExoticComponent<ToastProps & react.RefAttributes<HTMLDivElement>>;
1202
+
1203
+ interface LoaderProps {
1204
+ scale: number;
1205
+ isFixed?: boolean;
1206
+ fillParent?: boolean;
1207
+ className?: string;
1208
+ label?: string;
1209
+ announce?: boolean;
1210
+ reducedMotionLabel?: string;
1211
+ }
1212
+ declare const Loader: react.ForwardRefExoticComponent<LoaderProps & react.RefAttributes<HTMLDivElement>>;
1213
+
1214
+ type SkeletonVariant = 'text' | 'rectangular' | 'rounded' | 'circular';
1215
+ type SkeletonAnimation = 'wave' | 'pulse' | 'none';
1216
+ interface SkeletonProps {
1217
+ variant?: SkeletonVariant;
1218
+ animation?: SkeletonAnimation;
1219
+ width?: string | number;
1220
+ height?: string | number;
1221
+ className?: string;
1222
+ style?: CSSProperties;
1223
+ }
1224
+ declare const Skeleton: react.ForwardRefExoticComponent<SkeletonProps & react.RefAttributes<HTMLSpanElement>>;
1225
+
1226
+ interface ThinkingDotsProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children' | 'role'> {
1227
+ label?: string;
1228
+ size?: 'sm' | 'md';
1229
+ }
1230
+ /**
1231
+ * Three-dot typing indicator (chat/AI "thinking" state).
1232
+ * Renders a visually-hidden label for assistive tech.
1233
+ */
1234
+ declare const ThinkingDots: react.ForwardRefExoticComponent<ThinkingDotsProps & react.RefAttributes<HTMLSpanElement>>;
1235
+
1236
+ type ProgressBarSize = 'sm' | 'md';
1237
+ interface ProgressBarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
1238
+ /** Completion in the range 0–100. Clamped. Ignored when `indeterminate`. */
1239
+ value?: number;
1240
+ /** Semantic color of the fill. @default 'brand' */
1241
+ tone?: StatusTone;
1242
+ /** Track / fill thickness. @default 'md' */
1243
+ size?: ProgressBarSize;
1244
+ /** Visible label rendered above the track and used as the accessible name. */
1245
+ label?: ReactNode;
1246
+ /** Render the numeric percentage next to the label. @default false */
1247
+ showValue?: boolean;
1248
+ /** Animate an undetermined-duration bar; drops `aria-valuenow`. @default false */
1249
+ indeterminate?: boolean;
1250
+ }
1251
+ /**
1252
+ * Linear determinate (or indeterminate) progress indicator.
1253
+ *
1254
+ * Track uses `--color-surface-2/3`; the fill resolves from the {@link StatusTone}
1255
+ * via {@link STATUS_TONE_VARS}, defaulting to `--color-brand-primary`. Replaces the
1256
+ * hand-rolled bars in `ProcessingLoader` and `TrajectoryUploadProgressPanel`.
1257
+ */
1258
+ declare const ProgressBar: react.ForwardRefExoticComponent<ProgressBarProps & react.RefAttributes<HTMLDivElement>>;
1259
+
1260
+ interface MeterProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
1261
+ /** Measured value, between `min` and `max`. Clamped. */
1262
+ value: number;
1263
+ /** Lower bound of the range. @default 0 */
1264
+ min?: number;
1265
+ /** Upper bound of the range. @default 100 */
1266
+ max?: number;
1267
+ /** Semantic color of the fill. @default 'brand' */
1268
+ tone?: StatusTone;
1269
+ /** Inline leading label, also used as the accessible name. */
1270
+ label?: ReactNode;
1271
+ /** Render the value (formatted by `formatValue`) at the trailing edge. @default false */
1272
+ showValue?: boolean;
1273
+ /** Formats the trailing value text; defaults to the raw number. */
1274
+ formatValue?: (value: number, min: number, max: number) => ReactNode;
1275
+ }
1276
+ /**
1277
+ * Compact inline gauge for a known-range scalar (e.g. quota, utilization,
1278
+ * confidence). A `role="meter"` sibling of {@link default ProgressBar}: shares the
1279
+ * track/fill visual but expresses a measurement rather than task completion.
1280
+ */
1281
+ declare const Meter: react.ForwardRefExoticComponent<MeterProps & react.RefAttributes<HTMLDivElement>>;
1282
+
1283
+ interface AsyncBoundaryState {
1284
+ loading?: boolean;
1285
+ error?: unknown;
1286
+ accessDenied?: boolean;
1287
+ /** When empty is true, the `empty` slot renders instead of children. */
1288
+ empty?: boolean;
1289
+ }
1290
+ interface AsyncBoundaryProps {
1291
+ state: AsyncBoundaryState;
1292
+ loading: ReactNode;
1293
+ error: (err: unknown) => ReactNode;
1294
+ accessDenied?: ReactNode;
1295
+ empty?: ReactNode;
1296
+ children: ReactNode;
1297
+ }
1298
+ /**
1299
+ * Renders the appropriate fallback based on async state. Consolidates the
1300
+ * loading → error → access-denied → empty → content switch hand-rolled in
1301
+ * every data-backed panel.
1302
+ *
1303
+ * The `error` slot is a function so callers can decide how to derive
1304
+ * retry/description from the error value.
1305
+ */
1306
+ declare const AsyncBoundary: ({ state, loading, error, accessDenied, empty, children }: AsyncBoundaryProps) => react.JSX.Element;
1307
+
1308
+ interface VisuallyHiddenProps extends HTMLAttributes<HTMLElement> {
1309
+ as?: ElementType;
1310
+ children?: ReactNode;
1311
+ }
1312
+ /**
1313
+ * Screen-reader-only wrapper. Hides its children visually but keeps them
1314
+ * reachable by assistive technology. Maps to the `.sr-only` utility.
1315
+ */
1316
+ declare const VisuallyHidden: react.ForwardRefExoticComponent<VisuallyHiddenProps & react.RefAttributes<HTMLElement>>;
1317
+
1318
+ export { type AlignItems, AsyncBoundary, type AsyncBoundaryProps, type AsyncBoundaryState, Avatar, AvatarStack, type AvatarUser, BOX_STYLE_KEYS, type BorderToken, Box, type BoxProps, type BoxStyleProps, type BreadcrumbItem, Breadcrumbs, type BreadcrumbsVariant, Button, type ButtonProps, Callout, type CalloutTone, CardWithSlots as Card, CardBody, type CardBodyProps, CardFooter, CardHeader, type CardPadding, type CardProps, type CardSlotProps, type CardVariant, Checkbox, type CheckboxProps, type CheckboxSize, CloseButton, _default as CollapsibleSection, type Column, type ControlSize, CursorTooltip, DashedActionBox, type DashedActionBoxProps, type DashedActionSize, type DashedActionTone, type Display, Divider, type DividerProps, EmptyState, type FlexDirection, type FlexToken, FloatingToolbar, type FloatingToolbarAlign, type FloatingToolbarPlacement, type FloatingToolbarProps, FormField, type FormFieldLayout, type FormFieldProps, type GapToken, Grid, type GridProps, Heading, type HeadingLevel, type HeadingProps, type HeightToken, IconButton, IconFrame, type IconFrameProps, type IconFrameShape, type IconFrameSize, type IconFrameTone, InlineStatus, type InlineStatusProps, type InlineStatusTone, type JustifyContent, KeyValueList, type KeyValueListProps, KeyValueRow, type KeyValueRowProps, LiquidToggle, ListRow, type ListRowProps, Loader, type MarginBottomToken, type MarginTopToken, type MarginXToken, Menu, type MenuItem, type MenuProps, type MenuTriggerRenderProp, Meter, type MeterProps, Modal, NumberInput, type NumberInputProps, type OverflowToken, type PaddingToken, type PaddingXToken, Popover, PopoverMenu, PopoverMenuItem, type PositionToken, ProgressBar, type ProgressBarProps, type ProgressBarSize, Radio, type RadioProps, type RadioSize, type RadiusToken, Row, type RowProps, STATUS_TONE_VARS, type SaveStatus, SaveStatusIndicator, type SaveStatusIndicatorProps, SearchInput, SectionLabel, type SectionLabelProps, type SegmentedTabOption, SegmentedTabs, Select, type SelectOption, type SelectProps, SelectableCard, type SelectableCardProps, type Shape, Skeleton, type SkeletonAnimation, type SkeletonProps, type SkeletonVariant, _default$1 as Slider, type SliderProps, Sparkline, type SparklineProps, Stack, type StackProps, StatCard, type StatCardProps, type StatCardState, type StatCardTone, StatusBadge, type StatusBadgeProps, StatusDot, type StatusDotTone, type StatusTone, type Step, type StepIndicator, type StepTitles, Stepper, Surface, type SurfaceProps, type SurfaceVariant, Tab, type TabProps, Table, TableSortDirection, Tabs, TabsList, type TabsListProps, TabsPanel, type TabsPanelProps, type TabsProps, type TabsSize, Tag, type TagProps, type TagShape, type TagSize, type TagTone, type TagVariant, Text, type TextAlign, TextInput, type TextInputProps, type TextProps, type TextSize, type TextTone, type TextWeight, Textarea, type TextareaProps, ThinkingDots, type ThinkingDotsProps, Timeline, TimelineItem, type TimelineItemProps, type TimelineProps, type TimelineTone, Toast, type ToastProps, type ToastTone, Tooltip, type TooltipPlacement, type TransitionToken, VisuallyHidden, type VisuallyHiddenProps, type WidthToken, buildBoxClasses, buildTypographyClasses, closeModal, openModal, resetModal, splitBoxProps };