@platned/ui 0.6.0 → 0.7.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.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import * as react from 'react';
2
- import { ButtonHTMLAttributes, ReactNode, InputHTMLAttributes, HTMLAttributes, LabelHTMLAttributes, TextareaHTMLAttributes, ReactElement, RefObject, AnchorHTMLAttributes, TdHTMLAttributes, ThHTMLAttributes, Key } from 'react';
2
+ import { ButtonHTMLAttributes, ReactNode, InputHTMLAttributes, HTMLAttributes, LabelHTMLAttributes, TextareaHTMLAttributes, RefObject, ReactElement, Ref, AnchorHTMLAttributes, TdHTMLAttributes, ThHTMLAttributes, Component, ErrorInfo } from 'react';
3
3
  import { ClassValue } from 'clsx';
4
+ import { Column, Table as Table$1, ColumnDef, RowData, SortingState, ColumnFiltersState, PaginationState, VisibilityState, RowSelectionState, TableOptions } from '@tanstack/react-table';
5
+ export { CellContext, ColumnDef, ColumnFiltersState, Column as DataTableColumn, Table as DataTableInstance, HeaderContext, PaginationState, Row, RowSelectionState, SortingState, VisibilityState, createColumnHelper } from '@tanstack/react-table';
4
6
 
5
7
  type ButtonVariant = 'primary' | 'neutral' | 'subtle' | 'danger' | 'danger-subtle';
6
8
  type ButtonSize = 'lg' | 'md' | 'sm';
@@ -15,8 +17,13 @@ interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
15
17
  */
16
18
  asChild?: boolean;
17
19
  /**
18
- * Swaps the leading icon for a spinner and disables the button. `aria-busy` is set so
19
- * assistive tech reports the pending state rather than only the disabled one.
20
+ * Swaps the leading icon for a spinner and stops the button acting on a press.
21
+ * `aria-busy` is set so assistive tech reports the pending state.
22
+ *
23
+ * From 0.7.0 this uses `aria-disabled`, not the native `disabled` attribute. A natively
24
+ * disabled button loses focus, so pressing "Save" dropped keyboard focus to <body> the
25
+ * moment the request started. Now focus stays on the button and moves on normally when it
26
+ * finishes.
20
27
  */
21
28
  loading?: boolean;
22
29
  /** Announced while `loading`. Defaults to the button's own content. */
@@ -227,7 +234,7 @@ interface FieldSetProps extends HTMLAttributes<HTMLFieldSetElement> {
227
234
  * A real `<fieldset>`. Required for radio groups and checkbox groups: the group needs a
228
235
  * name of its own, and only `<legend>` gives it one that is announced before each option.
229
236
  */
230
- declare function FieldSet({ children, className, ...rest }: FieldSetProps): react.JSX.Element;
237
+ declare const FieldSet: react.ForwardRefExoticComponent<FieldSetProps & react.RefAttributes<HTMLFieldSetElement>>;
231
238
  interface FieldLegendProps extends HTMLAttributes<HTMLLegendElement> {
232
239
  children: ReactNode;
233
240
  /** `label` matches a field label's weight; `legend` is the larger section heading. */
@@ -283,9 +290,9 @@ interface SelectControlProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement
283
290
  defaultValue?: string | null;
284
291
  onValueChange?: (value: string) => void;
285
292
  /**
286
- * Submits with a surrounding form, through a hidden input. Note that hidden inputs are
287
- * exempt from constraint validation, so `required` no longer blocks submit — see the
288
- * note on `Select`.
293
+ * Submits with a surrounding form. With `required`, the value posts through a visually
294
+ * hidden real input, so an empty required select blocks submit like a native one (from
295
+ * 0.7.0) — see the note on `Select`.
289
296
  */
290
297
  name?: string;
291
298
  size?: InputSize;
@@ -318,11 +325,15 @@ interface SelectProps extends SelectControlProps {
318
325
  * Two consequences of dropping the native element, neither papered over:
319
326
  *
320
327
  * - **No OS picker on mobile.** The wheel/sheet a native select opens is gone.
321
- * - **`required` no longer blocks submit.** The value posts through a hidden input, and
322
- * hidden inputs are exempt from constraint validation. `required` remains semantic and
323
- * visual — `aria-required` on the control and the `*` on its label — which is already
324
- * true of `Combobox`, `RadioGroup` and `MultiSelectCard`. In react-hook-form, register
325
- * it with `Controller` rather than `register`.
328
+ * - **`required` blocks submit again from 0.7.0**, for a select with a `name`. 0.5 and 0.6
329
+ * posted through a hidden input, which constraint validation ignores. A required select
330
+ * now posts through an invisible real input that the browser validates. In
331
+ * react-hook-form, register it with `Controller` rather than `register`.
332
+ *
333
+ * Kept as our own component rather than Radix Select in 0.7.0, deliberately. Radix Select is
334
+ * modal (it locks page scroll and hides the page while open), which is wrong for a form field,
335
+ * and it needs pointer-capture polyfills to run in jsdom, so adopting it would have broken
336
+ * every consumer's test suite.
326
337
  *
327
338
  * For a list long enough to need filtering, use `Combobox`.
328
339
  */
@@ -340,7 +351,7 @@ interface DatePickerProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 's
340
351
  * A native `<input type="date">`.
341
352
  *
342
353
  * The `::-webkit-calendar-picker-indicator` styling below is Chromium-only — on Firefox
343
- * and Safari the native affordance differs, so the drawn `LuCalendar` sits alongside
354
+ * and Safari the native affordance differs, so the drawn `CalendarIcon` sits alongside
344
355
  * whatever the platform renders rather than replacing it. That is a known limitation of
345
356
  * this component, not a bug to paper over: for a real month grid, range selection, locale
346
357
  * control or min/max navigation, use `Calendar` and `DateField` instead.
@@ -394,6 +405,14 @@ interface SwitchProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onC
394
405
  description?: ReactNode;
395
406
  /** Track size. `sm` is 36×20, `md` is 44×24. */
396
407
  size?: SwitchSize;
408
+ /**
409
+ * Submits with a surrounding form, as `name=value` while on. New in 0.7.0: through 0.6 a
410
+ * Switch posted nothing, so it could not take part in a plain form.
411
+ */
412
+ name?: string;
413
+ /** The value posted while on. Default `"on"`, as for a native checkbox. */
414
+ value?: string;
415
+ required?: boolean;
397
416
  }
398
417
  /**
399
418
  * An on/off switch — a setting that takes effect immediately, with no save step.
@@ -519,8 +538,81 @@ interface FileDropZoneProps {
519
538
  onFileSelected?: (file: File) => void;
520
539
  disabled?: boolean;
521
540
  }
541
+ /** Human-readable byte count: "820 KB", "1.4 MB". New in 0.7.0, from SCIC. */
542
+ declare function formatFileSize(bytes: number): string;
543
+ interface UseFilePickerOptions {
544
+ accept?: string;
545
+ maxSizeBytes?: number;
546
+ onFileSelected?: (file: File) => void;
547
+ }
548
+ interface UseFilePicker {
549
+ /** Spread onto a hidden `<input type="file">`, which must be rendered. */
550
+ inputProps: InputHTMLAttributes<HTMLInputElement> & {
551
+ ref: RefObject<HTMLInputElement>;
552
+ };
553
+ /** Opens the native picker. */
554
+ open: () => void;
555
+ /** Runs the same accept and size checks on dropped files. */
556
+ handleFiles: (files: FileList | null) => void;
557
+ /** Validation message for the last rejected file, if any. */
558
+ error: string | null;
559
+ }
560
+ /**
561
+ * The accept-list and size validation behind every way into a file upload: the drop zone, and
562
+ * any "Replace" button that skips it. One implementation, so the checks cannot drift apart.
563
+ * New in 0.7.0, from SCIC.
564
+ */
565
+ declare function useFilePicker({ accept, maxSizeBytes, onFileSelected, }?: UseFilePickerOptions): UseFilePicker;
522
566
  declare function FileDropZone({ className, description, accept, maxSizeBytes, onFileSelected, disabled, }: FileDropZoneProps): react.JSX.Element;
523
567
 
568
+ type TagInputParseResult = {
569
+ value: string;
570
+ } | {
571
+ error: string;
572
+ };
573
+ interface TagInputProps {
574
+ label?: string;
575
+ hint?: string;
576
+ /** An error from outside (e.g. the server). Takes precedence over a parse error. */
577
+ error?: string;
578
+ placeholder?: string;
579
+ disabled?: boolean;
580
+ required?: boolean;
581
+ /** The committed chips, controlled. */
582
+ value?: string[];
583
+ /** The initial chips, uncontrolled. Default none. */
584
+ defaultValue?: string[];
585
+ /** Receives the whole next array when a chip is added or removed. */
586
+ onValueChange?: (value: string[]) => void;
587
+ /** Posts each chip with a surrounding form, as repeated fields of this name. */
588
+ name?: string;
589
+ /** Validates and normalises each token, e.g. lower-case an email or reject a bad one. */
590
+ parse?: (raw: string) => TagInputParseResult;
591
+ /** What separates tokens when typed or pasted. Default whitespace. A `g` or `y` flag is safe. */
592
+ delimiter?: RegExp;
593
+ maxTags?: number;
594
+ /** Told whenever rejected text is sitting in the field, so a form can block saving. */
595
+ onInvalidChange?: (invalid: boolean) => void;
596
+ id?: string;
597
+ className?: string;
598
+ }
599
+ /**
600
+ * A multi-value text field: type or paste values, and each becomes a removable chip. Emails,
601
+ * domains, tags. New in 0.7.0, from SCIC (whose `onChange` is `onValueChange` here, matching
602
+ * every other DS control).
603
+ *
604
+ * Controlled with `value`, or uncontrolled with `defaultValue`. With `name` it posts each chip
605
+ * with a form, and `required` then blocks submit while there are none.
606
+ *
607
+ * Enter, the delimiter, blur and a delimited paste all commit. Backspace in an empty field removes
608
+ * the last chip. Duplicates are ignored. A token `parse` rejects stays in the field with its error
609
+ * rather than being dropped, so nothing the user typed silently disappears.
610
+ *
611
+ * Wired through `Field` like the other text fields: the label names the input, and the error or
612
+ * hint describes it.
613
+ */
614
+ declare function TagInput({ label, hint, error, required, disabled, id, className, ...rest }: TagInputProps): react.JSX.Element;
615
+
524
616
  declare function FormCard({ children, className, }: {
525
617
  children: ReactNode;
526
618
  className?: string;
@@ -535,10 +627,14 @@ interface FormCardFooterProps {
535
627
  onBack?: () => void;
536
628
  onContinue?: () => void;
537
629
  continueLabel?: string;
630
+ /** The continue button's trailing glyph. Default an arrow; `null` for none (e.g. "Submit"). */
631
+ continueIcon?: ReactNode | null;
538
632
  backDisabled?: boolean;
539
633
  continueDisabled?: boolean;
634
+ /** Disable "Save as draft" while keeping it visible, e.g. while a draft save is in flight. */
635
+ saveDraftDisabled?: boolean;
540
636
  }
541
- declare function FormCardFooter({ onSaveDraft, onBack, onContinue, continueLabel, backDisabled, continueDisabled, }: FormCardFooterProps): react.JSX.Element;
637
+ declare function FormCardFooter({ onSaveDraft, onBack, onContinue, continueLabel, continueIcon, backDisabled, continueDisabled, saveDraftDisabled, }: FormCardFooterProps): react.JSX.Element;
542
638
 
543
639
  type BadgeColor = 'gray' | 'red' | 'yellow' | 'lime' | 'green' | 'teal' | 'blue' | 'pink' | 'slate';
544
640
  type BadgeSize = 'sm' | 'lg';
@@ -680,6 +776,8 @@ declare function countryOptions(codes?: readonly string[], locale?: string): Com
680
776
  *
681
777
  * A thin layer over `Combobox` — same keyboard contract, same panel — that adds the list and
682
778
  * lets the query match the code as well as the name, so typing `GB` finds United Kingdom.
779
+ * A value outside `countries` is still listed, so a saved country never renders as an empty
780
+ * field.
683
781
  */
684
782
  declare function CountrySelect({ countries, locale, placeholder, emptyMessage, ...props }: CountrySelectProps): react.JSX.Element;
685
783
 
@@ -692,12 +790,17 @@ interface TimeZoneSelectProps extends Omit<ComboboxProps<string>, 'options' | 'f
692
790
  */
693
791
  at?: Date;
694
792
  }
793
+ /** The current IANA name for a zone: `Asia/Kolkata` for `Asia/Calcutta`. */
794
+ declare const currentZoneName: (zone: string) => string;
695
795
  /** `"+05:30"` for Asia/Colombo. Minutes east of UTC are returned alongside for sorting. */
696
796
  declare function timeZoneOffset(timeZone: string, at?: Date): {
697
797
  label: string;
698
798
  minutes: number;
699
799
  };
700
- /** One option per zone, labelled `(UTC+05:30) Asia/Colombo`, west to east then by name. */
800
+ /**
801
+ * One option per zone, labelled `(UTC+05:30) Asia/Colombo`, west to east then by name.
802
+ * Renamed zones are listed under their current name, once.
803
+ */
701
804
  declare function timeZoneOptions(zones?: readonly string[], at?: Date): ComboboxOption<string>[];
702
805
  /**
703
806
  * Searchable IANA time-zone picker. The value is the zone name (`"Asia/Colombo"`), never an
@@ -705,6 +808,8 @@ declare function timeZoneOptions(zones?: readonly string[], at?: Date): Combobox
705
808
  *
706
809
  * Labels show the current UTC offset, and the query matches the zone name with or without
707
810
  * underscores and the offset itself, so `colombo`, `new york` and `+05:30` all find a zone.
811
+ * A value missing from the list — stored under another name, or outside `timeZones` — is
812
+ * still listed, so a saved zone never renders as an empty field.
708
813
  */
709
814
  declare function TimeZoneSelect({ timeZones, at, placeholder, emptyMessage, ...props }: TimeZoneSelectProps): react.JSX.Element;
710
815
 
@@ -768,7 +873,7 @@ interface StatusBadgeProps {
768
873
  /** Leading dot. On by default — the Figma status pills all carry one. */
769
874
  dot?: boolean;
770
875
  /**
771
- * Leading glyph, replacing the dot — e.g. `<LuCheck className="size-3" />`.
876
+ * Leading glyph, replacing the dot — e.g. `<CheckIcon className="size-3" />`.
772
877
  * Use for states a colour alone under-states, like verified or rejected.
773
878
  */
774
879
  icon?: ReactNode;
@@ -968,6 +1073,84 @@ interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'
968
1073
  }
969
1074
  declare const Radio: react.ForwardRefExoticComponent<RadioProps & react.RefAttributes<HTMLInputElement>>;
970
1075
 
1076
+ /** Matches `MultiSelectCard`'s sizes, so the single- and multi-select cards line up. */
1077
+ type RadioCardsSize = 'default' | 'sm';
1078
+ interface RadioCardsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {
1079
+ children: ReactNode;
1080
+ value?: string;
1081
+ defaultValue?: string;
1082
+ onValueChange?: (value: string) => void;
1083
+ /** Shared `name` for the underlying radios, which also submit with a form. Generated when omitted. */
1084
+ name?: string;
1085
+ /** Names the group. Prefer a visible `FieldLegend` in a `FieldSet` when there is one. */
1086
+ label?: string;
1087
+ size?: RadioCardsSize;
1088
+ disabled?: boolean;
1089
+ required?: boolean;
1090
+ }
1091
+ /**
1092
+ * Choose one of a few options shown as cards: a plan, a workspace type, an import source. The
1093
+ * single-select sibling of `MultiSelectCard`, new in 0.7.0 (Radix Themes' `Radio Cards`).
1094
+ *
1095
+ * Each card is a `<label>` around a real `<input type="radio">`, for the same reason
1096
+ * `RadioGroup` uses native radios: arrows move *and* select, only the checked card is a tab
1097
+ * stop, and the group announces "2 of 3", with nothing reimplemented. The card's selected look
1098
+ * is styled from the input's own `:checked` state (`peer-checked:`), so the visual and the
1099
+ * semantics cannot disagree.
1100
+ *
1101
+ * The grid is the caller's: pass layout classes, e.g. `className="sm:grid-cols-3"`.
1102
+ */
1103
+ declare const RadioCards: react.ForwardRefExoticComponent<RadioCardsProps & react.RefAttributes<HTMLDivElement>>;
1104
+ interface RadioCardsItemProps {
1105
+ value: string;
1106
+ title: ReactNode;
1107
+ description?: ReactNode;
1108
+ /** Leading glyph in a tinted box, as on `MultiSelectCard`. */
1109
+ icon?: ReactNode;
1110
+ disabled?: boolean;
1111
+ className?: string;
1112
+ }
1113
+ declare const RadioCardsItem: react.ForwardRefExoticComponent<RadioCardsItemProps & react.RefAttributes<HTMLInputElement>>;
1114
+
1115
+ interface CheckboxGroupProps {
1116
+ children: ReactNode;
1117
+ /** The group's visible name, rendered as the fieldset's `<legend>`. */
1118
+ legend: ReactNode;
1119
+ /** Checked values. Controlled; omit and pass `defaultValue` for uncontrolled. */
1120
+ value?: string[];
1121
+ defaultValue?: string[];
1122
+ onValueChange?: (value: string[]) => void;
1123
+ /** Shared `name`, so every checked value posts with a form. Generated when omitted. */
1124
+ name?: string;
1125
+ size?: CheckboxSize;
1126
+ orientation?: 'vertical' | 'horizontal';
1127
+ disabled?: boolean;
1128
+ /**
1129
+ * At least one option must be checked. While none is, every checkbox carries the native
1130
+ * `required`, so the form will not submit and the browser points at the first one. Checking
1131
+ * any of them lifts it from all. The legend gets
1132
+ * the same marker as a required field label.
1133
+ */
1134
+ required?: boolean;
1135
+ className?: string;
1136
+ }
1137
+ /**
1138
+ * A named set of checkboxes sharing one value array, new in 0.7.0 (Radix Themes'
1139
+ * `Checkbox Group`).
1140
+ *
1141
+ * A real `<fieldset>` and `<legend>`, which is the only markup that announces the group's name
1142
+ * before each option. Each item is the library's native `Checkbox`, so keyboard, form and
1143
+ * validation behaviour are the browser's.
1144
+ */
1145
+ declare const CheckboxGroup: react.ForwardRefExoticComponent<CheckboxGroupProps & react.RefAttributes<HTMLFieldSetElement>>;
1146
+ interface CheckboxGroupItemProps {
1147
+ value: string;
1148
+ label: ReactNode;
1149
+ description?: ReactNode;
1150
+ disabled?: boolean;
1151
+ }
1152
+ declare const CheckboxGroupItem: react.ForwardRefExoticComponent<CheckboxGroupItemProps & react.RefAttributes<HTMLInputElement>>;
1153
+
971
1154
  interface SegmentedControlOption {
972
1155
  value: string;
973
1156
  label: string;
@@ -1165,9 +1348,12 @@ type ModalSize = 'sm' | 'md' | 'lg' | 'xl';
1165
1348
  type ModalTone = 'default' | 'info' | 'positive' | 'warning' | 'danger';
1166
1349
  type ModalFooterAlign = 'start' | 'between' | 'end';
1167
1350
  interface ModalProps {
1168
- open: boolean;
1351
+ /** Controlled open state. Omit it, with `ModalTrigger`, for an uncontrolled dialog. */
1352
+ open?: boolean;
1353
+ /** Initial state when uncontrolled. */
1354
+ defaultOpen?: boolean;
1169
1355
  /** Fired with `false` on Escape, an outside press, or the close button. */
1170
- onOpenChange: (open: boolean) => void;
1356
+ onOpenChange?: (open: boolean) => void;
1171
1357
  /**
1172
1358
  * Accessible name. Only needed when the dialog renders no `ModalTitle` — with one, the
1173
1359
  * name comes from the heading itself via `aria-labelledby`, so it cannot drift.
@@ -1191,6 +1377,11 @@ interface ModalProps {
1191
1377
  onInteractOutside?: (event: PointerEvent) => void;
1192
1378
  /** Focus this on open instead of the first tabbable element. */
1193
1379
  initialFocus?: React.RefObject<HTMLElement | null>;
1380
+ /**
1381
+ * Where to portal the dialog. Defaults to `document.body`. Pass the element the design
1382
+ * tokens are declared on when the app renders inside a shadow root or a scoped theme.
1383
+ */
1384
+ container?: HTMLElement | null;
1194
1385
  }
1195
1386
  /**
1196
1387
  * A centred dialog above `sm`, a bottom sheet below it.
@@ -1199,34 +1390,54 @@ interface ModalProps {
1199
1390
  * parts — so a modal can take any layout a card can, including headerless. Tone lives
1200
1391
  * on `ModalHeader` (the part that draws the glyph); `ConfirmDialog` and
1201
1392
  * `NoteConfirmModal` accept `tone` at their top level and forward it.
1393
+ *
1394
+ * Built on Radix Dialog from 0.7.0. Radix supplies the focus trap, focus return, Escape and
1395
+ * outside-press handling scoped to the topmost layer, scroll lock, and hiding the page behind
1396
+ * the dialog from assistive tech. The 0.6 overlay stack got the last of those wrong when
1397
+ * modals were stacked. Toasts stay reachable: their region is `aria-live`, which Radix leaves
1398
+ * exposed, and pressing one is not treated as an outside press.
1202
1399
  */
1203
- declare function Modal(props: ModalProps): react.JSX.Element | null;
1400
+ declare const Modal: react.ForwardRefExoticComponent<ModalProps & react.RefAttributes<HTMLDivElement>>;
1401
+ interface ModalTriggerProps extends HTMLAttributes<HTMLButtonElement> {
1402
+ /** Render onto the single child (e.g. a `Button`) instead of a bare `<button>`. */
1403
+ asChild?: boolean;
1404
+ }
1405
+ /**
1406
+ * Opens an uncontrolled `Modal`. Place it as a direct child of `Modal`; it renders in place,
1407
+ * not in the dialog. New in 0.7.0. Controlled modals (`open` + `onOpenChange`) do not need it.
1408
+ */
1409
+ declare const ModalTrigger: react.ForwardRefExoticComponent<ModalTriggerProps & react.RefAttributes<HTMLButtonElement>>;
1410
+ interface ModalCloseProps extends HTMLAttributes<HTMLButtonElement> {
1411
+ asChild?: boolean;
1412
+ }
1413
+ /** Closes the enclosing `Modal`, e.g. a footer "Cancel" button. New in 0.7.0. */
1414
+ declare const ModalClose: react.ForwardRefExoticComponent<ModalCloseProps & react.RefAttributes<HTMLButtonElement>>;
1204
1415
  interface ModalHeaderProps extends HTMLAttributes<HTMLDivElement> {
1205
1416
  children: ReactNode;
1206
1417
  /** Adds a tinted glyph circle. `default` renders none. */
1207
1418
  tone?: ModalTone;
1208
1419
  divider?: boolean;
1209
1420
  }
1210
- declare function ModalHeader({ children, tone, divider, className, ...rest }: ModalHeaderProps): react.JSX.Element;
1421
+ declare const ModalHeader: react.ForwardRefExoticComponent<ModalHeaderProps & react.RefAttributes<HTMLDivElement>>;
1211
1422
  interface ModalTitleProps extends HTMLAttributes<HTMLHeadingElement> {
1212
1423
  children: ReactNode;
1213
1424
  }
1214
- declare function ModalTitle({ children, className, id, ...rest }: ModalTitleProps): react.JSX.Element;
1425
+ declare const ModalTitle: react.ForwardRefExoticComponent<ModalTitleProps & react.RefAttributes<HTMLHeadingElement>>;
1215
1426
  interface ModalDescriptionProps extends HTMLAttributes<HTMLParagraphElement> {
1216
1427
  children: ReactNode;
1217
1428
  }
1218
- declare function ModalDescription({ children, className, id, ...rest }: ModalDescriptionProps): react.JSX.Element;
1429
+ declare const ModalDescription: react.ForwardRefExoticComponent<ModalDescriptionProps & react.RefAttributes<HTMLParagraphElement>>;
1219
1430
  interface ModalBodyProps extends HTMLAttributes<HTMLDivElement> {
1220
1431
  children: ReactNode;
1221
1432
  }
1222
1433
  /** Must not carry its own `overflow` — the panel is the scroll container. */
1223
- declare function ModalBody({ children, className, ...rest }: ModalBodyProps): react.JSX.Element;
1434
+ declare const ModalBody: react.ForwardRefExoticComponent<ModalBodyProps & react.RefAttributes<HTMLDivElement>>;
1224
1435
  interface ModalFooterProps extends HTMLAttributes<HTMLDivElement> {
1225
1436
  children: ReactNode;
1226
1437
  align?: ModalFooterAlign;
1227
1438
  divider?: boolean;
1228
1439
  }
1229
- declare function ModalFooter({ children, align, divider, className, ...rest }: ModalFooterProps): react.JSX.Element;
1440
+ declare const ModalFooter: react.ForwardRefExoticComponent<ModalFooterProps & react.RefAttributes<HTMLDivElement>>;
1230
1441
 
1231
1442
  type FloatingSide = 'top' | 'right' | 'bottom' | 'left';
1232
1443
  type FloatingAlign = 'start' | 'center' | 'end';
@@ -1244,9 +1455,13 @@ interface TooltipProps {
1244
1455
  body?: ReactNode;
1245
1456
  side?: FloatingSide;
1246
1457
  align?: FloatingAlign;
1247
- /** Delay before opening, in ms. Default `150`. */
1458
+ /** Delay before opening on hover, in ms. Default `150`. Keyboard focus opens at once. */
1248
1459
  openDelay?: number;
1249
- /** Delay before closing, in ms. Default `0`. */
1460
+ /**
1461
+ * @deprecated Ignored from 0.7.0. The tooltip now stays open while the pointer travels
1462
+ * from the trigger onto it and while it is hovered, as WCAG 1.4.13 requires, which is what
1463
+ * a close delay used to approximate. Remove it from call sites; it will be dropped in 0.8.
1464
+ */
1250
1465
  closeDelay?: number;
1251
1466
  open?: boolean;
1252
1467
  defaultOpen?: boolean;
@@ -1267,18 +1482,21 @@ interface TooltipProps {
1267
1482
  * Tooltip. Matches Figma's `Tooltip` set — `Placement: Top | Left | Right | Bottom`, with
1268
1483
  * a title and an optional body.
1269
1484
  *
1270
- * Things this gets right that a naive tooltip does not:
1485
+ * Built on Radix Tooltip from 0.7.0, which gets right what a naive tooltip does not:
1486
+ *
1487
+ * - **Keyboard and touch reachable.** Opens on keyboard focus as well as hover, and closes
1488
+ * on Escape. A hover-only tooltip is inaccessible to half the people using it.
1489
+ * - **Hoverable (WCAG 1.4.13).** It stays open while the pointer moves onto it, so a
1490
+ * magnifier user can read it. 0.6 closed it the moment the pointer left the trigger.
1491
+ * - **Escape closes only the tooltip.** It goes through the same layer stack as `Modal`, so
1492
+ * dismissing a tooltip inside a dialog no longer closes the dialog too.
1493
+ * - **Referenced, not floating text.** The trigger is `aria-describedby` the tooltip (or
1494
+ * `aria-labelledby` it), so it is announced *with* the control.
1495
+ * - **`role="tooltip"` and no interactive content.** Use `Popover` for anything a user acts on.
1271
1496
  *
1272
- * - **Keyboard and touch reachable.** Opens on `focus` as well as hover, and closes on
1273
- * Escape. A hover-only tooltip is inaccessible to half the people using it.
1274
- * - **Referenced, not floating text.** The panel is wired to the trigger with
1275
- * `aria-describedby` (or `aria-labelledby`), so it is announced *with* the control
1276
- * rather than being an orphan region a screen reader may never reach.
1277
- * - **`role="tooltip"` and no interactive content.** A tooltip cannot be hovered into or
1278
- * focused, so anything interactive inside it is unreachable — use `Popover` for that.
1279
- * - Not modal: no focus trap, no scroll lock, no inert background.
1497
+ * Each tooltip carries its own Radix provider, so there is nothing to mount at the app root.
1280
1498
  */
1281
- declare function Tooltip({ children, title, body, side, align, openDelay, closeDelay, open: openProp, defaultOpen, onOpenChange, association, className, }: TooltipProps): react.JSX.Element | null;
1499
+ declare function Tooltip({ children, title, body, side, align, openDelay, open, defaultOpen, onOpenChange, association, className, }: TooltipProps): react.JSX.Element;
1282
1500
 
1283
1501
  interface PopoverProps {
1284
1502
  children: ReactNode;
@@ -1286,7 +1504,8 @@ interface PopoverProps {
1286
1504
  defaultOpen?: boolean;
1287
1505
  onOpenChange?: (open: boolean) => void;
1288
1506
  /**
1289
- * Trap focus, lock scroll and mark the rest of the page inert. Default `false`.
1507
+ * Trap focus, lock scroll and hide the rest of the page from assistive tech. Default
1508
+ * `false`.
1290
1509
  *
1291
1510
  * A popover is normally non-modal: the page behind stays usable, and Tab moves out of the
1292
1511
  * panel and on through the document. Set `modal` when the panel is a small form whose
@@ -1301,14 +1520,24 @@ interface PopoverProps {
1301
1520
  * into or focused, so anything interactive inside one is unreachable. If the panel holds a
1302
1521
  * link, a button or a field, it has to be a popover — which means a real trigger with
1303
1522
  * `aria-expanded`/`aria-controls`, focus moving into the panel on open, and focus returning
1304
- * to the trigger on close. All of that is here; none of it is in `Tooltip`, by design.
1523
+ * to the trigger on close.
1524
+ *
1525
+ * Built on Radix Popover from 0.7.0. Escape and outside press act on the topmost layer only,
1526
+ * so a popover inside a `Modal` closes without taking the modal with it, and focus leaving a
1527
+ * non-modal panel dismisses it rather than stranding it open.
1305
1528
  */
1306
- declare function Popover({ children, open: openProp, defaultOpen, onOpenChange, modal, }: PopoverProps): react.JSX.Element;
1307
- interface PopoverTriggerProps extends HTMLAttributes<HTMLElement> {
1529
+ declare function Popover({ children, open, defaultOpen, onOpenChange, modal }: PopoverProps): react.JSX.Element;
1530
+ interface PopoverTriggerProps extends HTMLAttributes<HTMLButtonElement> {
1308
1531
  children: ReactNode;
1532
+ /** Render onto the single child (e.g. a `Button`) instead of a bare `<button>`. */
1309
1533
  asChild?: boolean;
1310
1534
  }
1311
- declare function PopoverTrigger({ children, asChild, className, ...rest }: PopoverTriggerProps): react.JSX.Element;
1535
+ /**
1536
+ * Toggles the popover. Radix sets `aria-haspopup="dialog"`, `aria-expanded`,
1537
+ * `aria-controls` and `data-state`, and composes your handlers with its own rather than
1538
+ * replacing them (0.6's `onClick` overrode the toggle).
1539
+ */
1540
+ declare const PopoverTrigger: react.ForwardRefExoticComponent<PopoverTriggerProps & react.RefAttributes<HTMLButtonElement>>;
1312
1541
  interface PopoverContentProps extends HTMLAttributes<HTMLDivElement> {
1313
1542
  children: ReactNode;
1314
1543
  side?: FloatingSide;
@@ -1316,8 +1545,18 @@ interface PopoverContentProps extends HTMLAttributes<HTMLDivElement> {
1316
1545
  sideOffset?: number;
1317
1546
  /** Accessible name for the panel. Falls back to being labelled by the trigger. */
1318
1547
  label?: string;
1548
+ /** Where to portal the panel. Defaults to the enclosing dialog, else `document.body`. */
1549
+ container?: HTMLElement | null;
1319
1550
  }
1320
- declare function PopoverContent({ children, side, align, sideOffset, label, className, ...rest }: PopoverContentProps): react.JSX.Element | null;
1551
+ declare const PopoverContent: react.ForwardRefExoticComponent<PopoverContentProps & react.RefAttributes<HTMLDivElement>>;
1552
+ /** Closes the enclosing popover, e.g. an "Apply" or "Cancel" button. New in 0.7.0. */
1553
+ declare const PopoverClose: react.ForwardRefExoticComponent<HTMLAttributes<HTMLButtonElement> & {
1554
+ asChild?: boolean;
1555
+ } & react.RefAttributes<HTMLButtonElement>>;
1556
+ /** Positions the panel against an element other than the trigger. New in 0.7.0. */
1557
+ declare const PopoverAnchor: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
1558
+ asChild?: boolean;
1559
+ } & react.RefAttributes<HTMLDivElement>>;
1321
1560
 
1322
1561
  interface HoverCardProps {
1323
1562
  /** The trigger. Must be a single focusable element — normally a link. */
@@ -1353,17 +1592,20 @@ interface HoverCardProps {
1353
1592
  * reachable here is unreachable on a phone. The panel is `aria-labelledby` the trigger and
1354
1593
  * exposed as a group; the trigger keeps its own name and destination.
1355
1594
  *
1356
- * The close delay is what makes the panel usable: without it, moving the pointer from the
1357
- * trigger to the panel crosses a gap and dismisses the thing you were reaching for.
1595
+ * Built on Radix HoverCard from 0.7.0: the open and close delays, the pointer grace area
1596
+ * between trigger and panel, and Escape through the shared layer stack (so it closes only
1597
+ * the card, not a dialog behind it) come from Radix. The `group` role and the
1598
+ * `aria-describedby` wiring are ours; Radix gives the panel no role at all.
1358
1599
  */
1359
- declare function HoverCard({ children, content, side, align, openDelay, closeDelay, open: openProp, defaultOpen, onOpenChange, className, }: HoverCardProps): react.JSX.Element | null;
1600
+ declare function HoverCard({ children, content, side, align, openDelay, closeDelay, open: openProp, defaultOpen, onOpenChange, className, }: HoverCardProps): react.JSX.Element;
1360
1601
 
1361
1602
  type OverlayItemTone = 'default' | 'danger';
1362
1603
 
1363
1604
  type MenuItemTone = OverlayItemTone;
1364
1605
  interface MenuItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect'> {
1365
1606
  children: ReactNode;
1366
- onSelect?: () => void;
1607
+ /** Called on activation. Call `event.preventDefault()` to keep the menu open. */
1608
+ onSelect?: (event: Event) => void;
1367
1609
  tone?: MenuItemTone;
1368
1610
  disabled?: boolean;
1369
1611
  /** Leading glyph. Marked decorative automatically. Matches Figma's `Icon` / `Has Icon`. */
@@ -1375,42 +1617,46 @@ interface MenuItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect'>
1375
1617
  /** Typeahead match text, when `children` is not a plain string. */
1376
1618
  textValue?: string;
1377
1619
  }
1378
- declare function MenuItem({ children, onSelect, tone, disabled, icon, description, shortcut, textValue, className, ...rest }: MenuItemProps): react.JSX.Element;
1379
1620
  interface MenuCheckboxItemProps extends Omit<MenuItemProps, 'onSelect' | 'icon'> {
1380
1621
  checked: boolean;
1381
1622
  onCheckedChange?: (checked: boolean) => void;
1382
1623
  }
1383
- declare function MenuCheckboxItem({ children, checked, onCheckedChange, disabled, tone, shortcut, textValue, className, ...rest }: MenuCheckboxItemProps): react.JSX.Element;
1384
1624
  interface MenuRadioGroupProps {
1385
1625
  children: ReactNode;
1386
1626
  value?: string;
1387
1627
  onValueChange?: (value: string) => void;
1388
1628
  }
1389
- declare function MenuRadioGroup({ children, value, onValueChange }: MenuRadioGroupProps): react.JSX.Element;
1390
1629
  interface MenuRadioItemProps extends Omit<MenuItemProps, 'onSelect' | 'icon'> {
1391
1630
  value: string;
1392
1631
  }
1393
- declare function MenuRadioItem({ children, value, disabled, tone, textValue, className, ...rest }: MenuRadioItemProps): react.JSX.Element;
1394
1632
  interface MenuGroupProps extends HTMLAttributes<HTMLDivElement> {
1395
1633
  children: ReactNode;
1396
1634
  /** Names the group. Rendered as a heading when set. */
1397
1635
  label?: string;
1398
1636
  }
1399
- declare function MenuGroup({ children, label, className, ...rest }: MenuGroupProps): react.JSX.Element;
1400
1637
  interface MenuLabelProps extends HTMLAttributes<HTMLDivElement> {
1401
1638
  children: ReactNode;
1402
1639
  }
1403
- /** A non-interactive heading inside the menu. Matches Figma's `Menu Heading`. */
1404
- declare function MenuLabel({ children, className, ...rest }: MenuLabelProps): react.JSX.Element;
1405
1640
  interface MenuSeparatorProps extends HTMLAttributes<HTMLDivElement> {
1406
1641
  }
1407
- /** Matches Figma's `Menu Separator`. Was a bare unlabelled `div` before 0.4.0. */
1408
- declare function MenuSeparator({ className, ...rest }: MenuSeparatorProps): react.JSX.Element;
1409
1642
  interface MenuShortcutProps extends HTMLAttributes<HTMLSpanElement> {
1410
1643
  children: ReactNode;
1411
1644
  }
1412
- /** Trailing keyboard hint, for use outside an item's `shortcut` prop. */
1413
- declare function MenuShortcut({ children, className, ...rest }: MenuShortcutProps): react.JSX.Element;
1645
+ interface MenuSubProps {
1646
+ children: ReactNode;
1647
+ open?: boolean;
1648
+ defaultOpen?: boolean;
1649
+ onOpenChange?: (open: boolean) => void;
1650
+ }
1651
+ interface MenuSubTriggerProps extends HTMLAttributes<HTMLDivElement> {
1652
+ children: ReactNode;
1653
+ icon?: ReactNode;
1654
+ disabled?: boolean;
1655
+ textValue?: string;
1656
+ }
1657
+ interface MenuSubContentProps extends HTMLAttributes<HTMLDivElement> {
1658
+ children: ReactNode;
1659
+ }
1414
1660
 
1415
1661
  interface ContextMenuProps {
1416
1662
  children: ReactNode;
@@ -1419,93 +1665,136 @@ interface ContextMenuProps {
1419
1665
  onOpenChange?: (open: boolean) => void;
1420
1666
  }
1421
1667
  /**
1422
- * Right-click menu.
1668
+ * Right-click menu, built on Radix ContextMenu from 0.7.0.
1423
1669
  *
1424
- * Shares every item and the whole keyboard contract with `DropdownMenu` via `menu-core`;
1670
+ * Shares every item and the whole keyboard contract with `DropdownMenu` (see `menu-core`);
1425
1671
  * the only difference is how it opens — at the pointer, with no trigger element to anchor
1426
- * to, so it is positioned from coordinates rather than by Floating UI's reference/floating
1427
- * pair.
1672
+ * to.
1428
1673
  *
1429
1674
  * **A context menu must never be the only way to reach an action.** `contextmenu` fires on
1430
1675
  * right-click and on the Windows Menu / Shift+F10 keys, but not on touch, and plenty of
1431
1676
  * users never right-click at all. `ContextMenuTrigger` therefore also opens on Shift+F10 and
1432
- * the ContextMenu key, and anything in here should have a visible equivalent elsewhere —
1433
- * usually a `DropdownMenu` on the same row.
1677
+ * the ContextMenu key even where the browser would not, and anything in here should have a
1678
+ * visible equivalent elsewhere — usually a `DropdownMenu` on the same row.
1679
+ *
1680
+ * Radix ContextMenu has no `open` prop (it is opened by the pointer only), so a controlled
1681
+ * `open={false}` closes it, but `open={true}` cannot open it without a position.
1434
1682
  */
1435
- declare function ContextMenu({ children, open: openProp, defaultOpen, onOpenChange, }: ContextMenuProps): react.JSX.Element;
1683
+ declare function ContextMenu({ children, open: openProp, defaultOpen, onOpenChange }: ContextMenuProps): react.JSX.Element;
1436
1684
  interface ContextMenuTriggerProps extends HTMLAttributes<HTMLDivElement> {
1437
1685
  children: ReactNode;
1438
1686
  disabled?: boolean;
1439
1687
  }
1440
- declare function ContextMenuTrigger({ children, disabled, className, ...rest }: ContextMenuTriggerProps): react.JSX.Element;
1688
+ /**
1689
+ * The area that responds to right-click. A wrapper with no tab stop of its own: the keyboard
1690
+ * path is Shift+F10 or the ContextMenu key from whatever inside it has focus.
1691
+ */
1692
+ declare const ContextMenuTrigger: react.ForwardRefExoticComponent<ContextMenuTriggerProps & react.RefAttributes<HTMLDivElement>>;
1441
1693
  interface ContextMenuContentProps extends HTMLAttributes<HTMLDivElement> {
1442
1694
  children: ReactNode;
1443
1695
  /** Minimum gap from the viewport edge, in px. Default `8`. */
1444
1696
  collisionPadding?: number;
1697
+ /** Where to portal the menu. Defaults to the enclosing dialog, else `document.body`. */
1698
+ container?: HTMLElement | null;
1445
1699
  }
1446
- declare function ContextMenuContent({ children, collisionPadding, className, ...rest }: ContextMenuContentProps): react.JSX.Element | null;
1700
+ declare const ContextMenuContent: react.ForwardRefExoticComponent<ContextMenuContentProps & react.RefAttributes<HTMLDivElement>>;
1701
+ declare const ContextMenuItem: react.ForwardRefExoticComponent<MenuItemProps & react.RefAttributes<HTMLDivElement>>;
1702
+ declare const ContextMenuCheckboxItem: react.ForwardRefExoticComponent<MenuCheckboxItemProps & react.RefAttributes<HTMLDivElement>>;
1703
+ declare const ContextMenuRadioGroup: ({ children, value, onValueChange }: MenuRadioGroupProps) => react.JSX.Element;
1704
+ declare const ContextMenuRadioItem: react.ForwardRefExoticComponent<MenuRadioItemProps & react.RefAttributes<HTMLDivElement>>;
1705
+ declare const ContextMenuGroup: react.ForwardRefExoticComponent<MenuGroupProps & react.RefAttributes<HTMLDivElement>>;
1706
+ declare const ContextMenuLabel: react.ForwardRefExoticComponent<MenuLabelProps & react.RefAttributes<HTMLDivElement>>;
1707
+ declare const ContextMenuSeparator: react.ForwardRefExoticComponent<MenuSeparatorProps & react.RefAttributes<HTMLDivElement>>;
1708
+ declare const ContextMenuShortcut: react.ForwardRefExoticComponent<MenuShortcutProps & react.RefAttributes<HTMLSpanElement>>;
1709
+ declare const ContextMenuSub: ({ children, open, defaultOpen, onOpenChange }: MenuSubProps) => react.JSX.Element;
1710
+ declare const ContextMenuSubTrigger: react.ForwardRefExoticComponent<MenuSubTriggerProps & react.RefAttributes<HTMLDivElement>>;
1711
+ declare const ContextMenuSubContent: react.ForwardRefExoticComponent<MenuSubContentProps & react.RefAttributes<HTMLDivElement>>;
1447
1712
 
1448
- interface MenubarProps extends HTMLAttributes<HTMLDivElement> {
1713
+ interface MenubarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'dir' | 'defaultValue'> {
1449
1714
  children: ReactNode;
1450
- /** Names the menubar. Required by the APG. */
1715
+ /** Reading direction, which flips Left/Right along the bar. */
1716
+ dir?: 'ltr' | 'rtl';
1717
+ /** Accessible name for the bar, e.g. "Editor". Required: a menubar is a landmark-like group. */
1451
1718
  label: string;
1719
+ /** The open menu's `value`, controlled. New in 0.7.0. */
1720
+ value?: string;
1721
+ defaultValue?: string;
1722
+ onValueChange?: (value: string) => void;
1452
1723
  }
1453
1724
  /**
1454
- * An application menu bar — a horizontal row of menus, as in a desktop app.
1725
+ * A persistent horizontal bar of menus, as in a desktop application's File / Edit / View.
1455
1726
  *
1456
- * Two things distinguish it from a row of `DropdownMenu`s, and both are in the APG:
1457
- *
1458
- * - **The bar is one tab stop.** Left/Right move between the top-level menus; Tab leaves the
1459
- * bar entirely. A row of independent dropdowns is N tab stops.
1460
- * - **Only one menu is open at a time**, and once any is open, moving along the bar switches
1461
- * directly to the next menu rather than closing and reopening.
1462
- *
1463
- * Items and the vertical keyboard contract come from `menu-core`, shared with
1464
- * `DropdownMenu` and `ContextMenu`.
1727
+ * Built on Radix Menubar from 0.7.0, which supplies the contract: one tab stop for the whole
1728
+ * bar, Left/Right along it, Down/Up into a menu, Left/Right from inside an open menu to its
1729
+ * sibling, and moving the pointer across the bar switching menus once one is open. Items are
1730
+ * the same parts as `DropdownMenu` (see `menu-core`).
1465
1731
  */
1466
- declare function Menubar({ children, label, className, ...rest }: MenubarProps): react.JSX.Element;
1732
+ declare const Menubar: react.ForwardRefExoticComponent<MenubarProps & react.RefAttributes<HTMLDivElement>>;
1467
1733
  interface MenubarMenuProps {
1468
1734
  children: ReactNode;
1469
- /** Identifies this menu within the bar. */
1735
+ /** Identifies the menu within the bar. */
1470
1736
  value: string;
1471
1737
  }
1472
- /** One menu in the bar. Wraps a `MenubarTrigger` and a `MenubarContent`. */
1473
1738
  declare function MenubarMenu({ children, value }: MenubarMenuProps): react.JSX.Element;
1474
1739
  interface MenubarTriggerProps extends HTMLAttributes<HTMLButtonElement> {
1475
1740
  children: ReactNode;
1476
1741
  }
1477
- declare function MenubarTrigger({ children, className, ...rest }: MenubarTriggerProps): react.JSX.Element;
1742
+ declare const MenubarTrigger: react.ForwardRefExoticComponent<MenubarTriggerProps & react.RefAttributes<HTMLButtonElement>>;
1478
1743
  interface MenubarContentProps extends HTMLAttributes<HTMLDivElement> {
1479
1744
  children: ReactNode;
1745
+ /** Where to portal the menu. Defaults to the enclosing dialog, else `document.body`. */
1746
+ container?: HTMLElement | null;
1480
1747
  }
1481
- declare function MenubarContent({ children, className, ...rest }: MenubarContentProps): react.JSX.Element | null;
1748
+ declare const MenubarContent: react.ForwardRefExoticComponent<MenubarContentProps & react.RefAttributes<HTMLDivElement>>;
1749
+ declare const MenubarItem: react.ForwardRefExoticComponent<MenuItemProps & react.RefAttributes<HTMLDivElement>>;
1750
+ declare const MenubarCheckboxItem: react.ForwardRefExoticComponent<MenuCheckboxItemProps & react.RefAttributes<HTMLDivElement>>;
1751
+ declare const MenubarRadioGroup: ({ children, value, onValueChange }: MenuRadioGroupProps) => react.JSX.Element;
1752
+ declare const MenubarRadioItem: react.ForwardRefExoticComponent<MenuRadioItemProps & react.RefAttributes<HTMLDivElement>>;
1753
+ declare const MenubarGroup: react.ForwardRefExoticComponent<MenuGroupProps & react.RefAttributes<HTMLDivElement>>;
1754
+ declare const MenubarLabel: react.ForwardRefExoticComponent<MenuLabelProps & react.RefAttributes<HTMLDivElement>>;
1755
+ declare const MenubarSeparator: react.ForwardRefExoticComponent<MenuSeparatorProps & react.RefAttributes<HTMLDivElement>>;
1756
+ declare const MenubarShortcut: react.ForwardRefExoticComponent<MenuShortcutProps & react.RefAttributes<HTMLSpanElement>>;
1757
+ declare const MenubarSub: ({ children, open, defaultOpen, onOpenChange }: MenuSubProps) => react.JSX.Element;
1758
+ declare const MenubarSubTrigger: react.ForwardRefExoticComponent<MenuSubTriggerProps & react.RefAttributes<HTMLDivElement>>;
1759
+ declare const MenubarSubContent: react.ForwardRefExoticComponent<MenuSubContentProps & react.RefAttributes<HTMLDivElement>>;
1482
1760
 
1483
1761
  type DrawerSide = 'right' | 'left';
1762
+ type DrawerFooterAlign = 'end' | 'between';
1484
1763
  interface DrawerProps {
1485
- open: boolean;
1764
+ /** Controlled open state. Omit it, with `DrawerTrigger`, for an uncontrolled drawer. */
1765
+ open?: boolean;
1766
+ defaultOpen?: boolean;
1486
1767
  /** Fired with `false` on Escape, an outside press, or the close button. */
1487
- onOpenChange: (open: boolean) => void;
1488
- /** Header content (left side). The copies this replaces differ only here — a status badge +
1489
- * title in one, an avatar + title + category in another — so it is a slot, not props. */
1490
- header: ReactNode;
1768
+ onOpenChange?: (open: boolean) => void;
1769
+ /**
1770
+ * Header content (left side). The copies this replaces differ only here — a status badge +
1771
+ * title in one, an avatar + title + category in another — so it is a slot, not props.
1772
+ *
1773
+ * Put a `DrawerTitle` in it and the drawer is named by that heading. Leave `header` out
1774
+ * altogether to compose the panel from `DrawerHeader` / `DrawerBody` / `DrawerFooter`.
1775
+ */
1776
+ header?: ReactNode;
1491
1777
  children: ReactNode;
1778
+ /** Footer content, with the `header` layout. Composed drawers use `DrawerFooter`. */
1492
1779
  footer?: ReactNode;
1493
1780
  /** `between` when the footer has a left-aligned secondary action. */
1494
- footerAlign?: 'end' | 'between';
1495
- /** Panel width. Defaults to the `w-[440px] max-w-[90vw]` shared by every existing drawer. */
1781
+ footerAlign?: DrawerFooterAlign;
1782
+ /**
1783
+ * Panel width. Defaults to the `w-[440px] max-w-[90vw]` shared by every existing drawer.
1784
+ * `className` is merged with `cn` from 0.7.0, so a width there works too.
1785
+ */
1496
1786
  width?: string;
1497
1787
  /** Which edge the panel slides in from. Default `right`. */
1498
1788
  side?: DrawerSide;
1499
1789
  /**
1500
- * Accessible name for the dialog. **Required** as of 0.4.0.
1790
+ * Accessible name, for a drawer that renders no `DrawerTitle`.
1501
1791
  *
1502
- * It was optional through 0.3.0 while `Modal.label` was required, which meant the
1503
- * public API allowed a `role="dialog" aria-modal="true"` element with no accessible
1504
- * name at all — a screen reader announced "dialog" and nothing else. Unlike `Modal`
1505
- * there is no `DrawerTitle` part to infer a name from, because `header` is a free
1506
- * slot, so the string is the only place it can come from.
1792
+ * Required from 0.4.0 to 0.6, because a free `header` slot gave the name nowhere else
1793
+ * to come from. From 0.7.0 a `DrawerTitle` anywhere in the drawer names it by reference,
1794
+ * the way `ModalTitle` names a `Modal`, so `label` is only needed without one. With
1795
+ * neither, Radix warns in development.
1507
1796
  */
1508
- label: string;
1797
+ label?: string;
1509
1798
  className?: string;
1510
1799
  /** Call `preventDefault()` to keep the drawer open — e.g. unsaved input. */
1511
1800
  onEscapeKeyDown?: (event: KeyboardEvent) => void;
@@ -1513,12 +1802,66 @@ interface DrawerProps {
1513
1802
  onInteractOutside?: (event: PointerEvent) => void;
1514
1803
  /** Focus this on open instead of the first tabbable element. */
1515
1804
  initialFocus?: RefObject<HTMLElement | null>;
1805
+ /** Where to portal the drawer. Defaults to `document.body`. */
1806
+ container?: HTMLElement | null;
1516
1807
  }
1517
1808
  /**
1518
- * Side panel. Handles Esc, traps Tab focus, locks background scroll, marks the rest of
1519
- * the page inert, and restores focus to the trigger on close.
1809
+ * Side panel, built on Radix Dialog from 0.7.0. Radix handles Escape, the focus trap,
1810
+ * scroll lock, hiding the page from assistive tech, and returning focus on close.
1811
+ *
1812
+ * Two ways to fill it:
1813
+ *
1814
+ * // Slots: the layout every 0.6 drawer used.
1815
+ * <Drawer open={open} onOpenChange={setOpen}
1816
+ * header={<DrawerTitle>Supplier</DrawerTitle>} footer={<Button>Save</Button>}>
1817
+ * …body…
1818
+ * </Drawer>
1819
+ *
1820
+ * // Parts: for a header with a description, or a body that is not one scroll region.
1821
+ * <Drawer open={open} onOpenChange={setOpen}>
1822
+ * <DrawerHeader><DrawerTitle>Supplier</DrawerTitle><DrawerDescription>…</DrawerDescription></DrawerHeader>
1823
+ * <DrawerBody>…</DrawerBody>
1824
+ * <DrawerFooter><Button>Save</Button></DrawerFooter>
1825
+ * </Drawer>
1520
1826
  */
1521
- declare function Drawer(props: DrawerProps): react.JSX.Element | null;
1827
+ declare const Drawer: react.ForwardRefExoticComponent<DrawerProps & react.RefAttributes<HTMLDivElement>>;
1828
+ interface DrawerTriggerProps extends HTMLAttributes<HTMLButtonElement> {
1829
+ asChild?: boolean;
1830
+ }
1831
+ /** Opens an uncontrolled `Drawer`. A direct child of `Drawer`; it renders in place. */
1832
+ declare const DrawerTrigger: react.ForwardRefExoticComponent<DrawerTriggerProps & react.RefAttributes<HTMLButtonElement>>;
1833
+ interface DrawerCloseProps extends HTMLAttributes<HTMLButtonElement> {
1834
+ asChild?: boolean;
1835
+ }
1836
+ /** Closes the enclosing `Drawer`, e.g. a footer "Cancel" button. */
1837
+ declare const DrawerClose: react.ForwardRefExoticComponent<DrawerCloseProps & react.RefAttributes<HTMLButtonElement>>;
1838
+ interface DrawerHeaderProps extends HTMLAttributes<HTMLDivElement> {
1839
+ /** Renders the close button at the end of the header row. Default `true`. */
1840
+ showClose?: boolean;
1841
+ }
1842
+ /** The header row, with the close button. The `header` slot renders inside one of these. */
1843
+ declare const DrawerHeader: react.ForwardRefExoticComponent<DrawerHeaderProps & react.RefAttributes<HTMLDivElement>>;
1844
+ interface DrawerTitleProps extends HTMLAttributes<HTMLHeadingElement> {
1845
+ }
1846
+ /** Names the drawer (`aria-labelledby`). Use it inside the `header` slot or `DrawerHeader`. */
1847
+ declare const DrawerTitle: react.ForwardRefExoticComponent<DrawerTitleProps & react.RefAttributes<HTMLHeadingElement>>;
1848
+ interface DrawerDescriptionProps extends HTMLAttributes<HTMLParagraphElement> {
1849
+ }
1850
+ /** Describes the drawer (`aria-describedby`). */
1851
+ declare const DrawerDescription: react.ForwardRefExoticComponent<DrawerDescriptionProps & react.RefAttributes<HTMLParagraphElement>>;
1852
+ interface DrawerBodyProps extends HTMLAttributes<HTMLDivElement> {
1853
+ /**
1854
+ * Accessible name for the scroll region, which becomes focusable when it overflows.
1855
+ * Defaults to "Content". It is not the drawer's own name, which would be announced twice.
1856
+ */
1857
+ label?: string;
1858
+ }
1859
+ /** The scrolling body. It fills the space between header and footer. */
1860
+ declare const DrawerBody: react.ForwardRefExoticComponent<DrawerBodyProps & react.RefAttributes<HTMLDivElement>>;
1861
+ interface DrawerFooterProps extends HTMLAttributes<HTMLDivElement> {
1862
+ align?: DrawerFooterAlign;
1863
+ }
1864
+ declare const DrawerFooter: react.ForwardRefExoticComponent<DrawerFooterProps & react.RefAttributes<HTMLDivElement>>;
1522
1865
 
1523
1866
  interface ConfirmDialogProps {
1524
1867
  open: boolean;
@@ -1534,7 +1877,12 @@ interface ConfirmDialogProps {
1534
1877
  confirmLabel?: string;
1535
1878
  cancelLabel?: string;
1536
1879
  confirmVariant?: 'primary' | 'danger';
1537
- /** Disables the confirm button and swaps its label — the double-submit guard. */
1880
+ /**
1881
+ * The double-submit guard. While true, the confirm button shows a spinner and its
1882
+ * `confirmingLabel`, and ignores presses while keeping focus. The dialog also cannot be
1883
+ * dismissed (Escape, outside press, Cancel, the close button), so a request in flight
1884
+ * cannot lose the dialog that is waiting on it.
1885
+ */
1538
1886
  isConfirming?: boolean;
1539
1887
  /** Label shown on the confirm button while `isConfirming`. */
1540
1888
  confirmingLabel?: string;
@@ -1553,6 +1901,10 @@ interface ConfirmDialogProps {
1553
1901
  * just layout — the `isConfirming` guard that disables the button and swaps its label
1554
1902
  * is the thing call sites get wrong when they hand-roll a confirm. For any other
1555
1903
  * shape, compose `Modal` and its parts directly.
1904
+ *
1905
+ * Focus opens on **Cancel**, the least destructive action, as the WAI-ARIA alert dialog
1906
+ * pattern recommends. Through 0.6 it opened on the close button, one Tab away from
1907
+ * "Delete".
1556
1908
  */
1557
1909
  declare function ConfirmDialog({ open, title, subtitle, tone, size, confirmLabel, cancelLabel, confirmVariant, isConfirming, confirmingLabel, children, className, onConfirm, onOpenChange, }: ConfirmDialogProps): react.JSX.Element;
1558
1910
 
@@ -1568,7 +1920,10 @@ interface NoteConfirmModalProps {
1568
1920
  /** Block confirmation until the note has content. */
1569
1921
  requireNote?: boolean;
1570
1922
  notePlaceholder?: string;
1923
+ /** Accessible name of the note field. The placeholder is not a label. Defaults to "Note". */
1924
+ noteLabel?: string;
1571
1925
  submittingLabel?: string;
1926
+ /** Shows a spinner on confirm and keeps the dialog from being dismissed mid-request. */
1572
1927
  isSubmitting?: boolean;
1573
1928
  className?: string;
1574
1929
  /** Fired with `false` on cancel, Escape, or an outside press. */
@@ -1589,24 +1944,19 @@ interface NoteConfirmModalProps {
1589
1944
  declare function NoteConfirmModal({ open, ...rest }: NoteConfirmModalProps): react.JSX.Element | null;
1590
1945
 
1591
1946
  /**
1592
- * Overflow / row-actions menu, rebuilt in 0.4.0.
1593
- *
1594
- * The previous version declared `role="menu"` and `role="menuitem"` and implemented none of
1595
- * the WAI-ARIA menu contract. Announcing a pattern you do not implement is worse than
1596
- * announcing nothing, because a screen reader tells the user which keys should work. Fixed:
1597
- * arrow keys, Home/End and typeahead; a roving tabindex (every item used to be a natively
1598
- * tabbable `<button>`, so Tab walked all of them); focus moving into the menu on open and
1599
- * back to the trigger on close; a portal, so the panel is no longer clipped by `Card`'s
1600
- * `overflow-hidden` or `DataTable`'s `overflow-x-auto` — both named in its own doc comment
1601
- * as the reason it exists; collision handling instead of a static `left`/`right`; correct
1602
- * ARIA ownership; and `open`/`onOpenChange`, where open state used to be unreachable.
1603
- *
1604
- * The items and keyboard model now live in `menu-core`, shared with `ContextMenu` and
1605
- * `Menubar`.
1606
- *
1607
- * Not implemented: submenus. Doing them properly needs hover intent and a safe-travel
1608
- * polygon between trigger and panel, and a half-built version is worse than none — nest a
1609
- * second `DropdownMenu` in the meantime.
1947
+ * Overflow / row-actions menu.
1948
+ *
1949
+ * 0.4.0 rebuilt it to the WAI-ARIA menu contract after a version that declared the roles
1950
+ * and implemented none of the keys. 0.7.0 moves that contract onto Radix DropdownMenu, which
1951
+ * also brings submenus (`DropdownMenuSub`), the one thing 0.4.0 deliberately left out because
1952
+ * a half-built safe-travel path is worse than none.
1953
+ *
1954
+ * Kept from ours, on top of Radix:
1955
+ * - **ArrowUp on the trigger opens on the last item**, as the APG describes.
1956
+ * - **Tab closes the menu** so focus moves on through the page; Radix keeps Tab inside.
1957
+ * - **It works inside a clickable table row.** Presses on the trigger and in the panel stop
1958
+ * short of the row, the behaviour 0.2.0's `RowMenu` existed for.
1959
+ * - **Non-modal by default.** The page behind stays readable and interactive.
1610
1960
  */
1611
1961
  interface DropdownMenuProps {
1612
1962
  children: ReactNode;
@@ -1614,28 +1964,104 @@ interface DropdownMenuProps {
1614
1964
  open?: boolean;
1615
1965
  defaultOpen?: boolean;
1616
1966
  onOpenChange?: (open: boolean) => void;
1967
+ /**
1968
+ * Block the page while open (Radix's default). Default `false`, matching 0.6: a menu is
1969
+ * not a dialog, and the page behind it stays usable.
1970
+ */
1971
+ modal?: boolean;
1617
1972
  }
1618
- declare function DropdownMenu({ children, open: openProp, defaultOpen, onOpenChange, }: DropdownMenuProps): react.JSX.Element;
1619
- interface DropdownMenuTriggerProps extends HTMLAttributes<HTMLElement> {
1973
+ declare function DropdownMenu({ children, open: openProp, defaultOpen, onOpenChange, modal, }: DropdownMenuProps): react.JSX.Element;
1974
+ interface DropdownMenuTriggerProps extends HTMLAttributes<HTMLButtonElement> {
1620
1975
  children?: ReactNode;
1621
1976
  /** Render the child element instead of the default overflow button. */
1622
1977
  asChild?: boolean;
1623
1978
  /** Accessible name for the default `⋯` button. Ignored when `asChild` is set. */
1624
1979
  label?: string;
1625
1980
  }
1626
- declare function DropdownMenuTrigger({ children, asChild, label, ...rest }: DropdownMenuTriggerProps): react.JSX.Element;
1981
+ declare const DropdownMenuTrigger: react.ForwardRefExoticComponent<DropdownMenuTriggerProps & react.RefAttributes<HTMLButtonElement>>;
1627
1982
  interface DropdownMenuContentProps extends HTMLAttributes<HTMLDivElement> {
1628
1983
  children: ReactNode;
1629
1984
  side?: FloatingSide;
1630
1985
  align?: FloatingAlign;
1631
1986
  sideOffset?: number;
1987
+ /** Where to portal the menu. Defaults to the enclosing dialog, else `document.body`. */
1988
+ container?: HTMLElement | null;
1989
+ /** Called when focus returns on close. Call `preventDefault()` to stop it moving to the trigger. */
1990
+ onCloseAutoFocus?: (event: Event) => void;
1991
+ }
1992
+ declare const DropdownMenuContent: react.ForwardRefExoticComponent<DropdownMenuContentProps & react.RefAttributes<HTMLDivElement>>;
1993
+ declare const DropdownMenuItem: react.ForwardRefExoticComponent<MenuItemProps & react.RefAttributes<HTMLDivElement>>;
1994
+ declare const DropdownMenuCheckboxItem: react.ForwardRefExoticComponent<MenuCheckboxItemProps & react.RefAttributes<HTMLDivElement>>;
1995
+ declare const DropdownMenuRadioGroup: ({ children, value, onValueChange }: MenuRadioGroupProps) => react.JSX.Element;
1996
+ declare const DropdownMenuRadioItem: react.ForwardRefExoticComponent<MenuRadioItemProps & react.RefAttributes<HTMLDivElement>>;
1997
+ declare const DropdownMenuGroup: react.ForwardRefExoticComponent<MenuGroupProps & react.RefAttributes<HTMLDivElement>>;
1998
+ declare const DropdownMenuLabel: react.ForwardRefExoticComponent<MenuLabelProps & react.RefAttributes<HTMLDivElement>>;
1999
+ declare const DropdownMenuSeparator: react.ForwardRefExoticComponent<MenuSeparatorProps & react.RefAttributes<HTMLDivElement>>;
2000
+ declare const DropdownMenuShortcut: react.ForwardRefExoticComponent<MenuShortcutProps & react.RefAttributes<HTMLSpanElement>>;
2001
+ declare const DropdownMenuSub: ({ children, open, defaultOpen, onOpenChange }: MenuSubProps) => react.JSX.Element;
2002
+ declare const DropdownMenuSubTrigger: react.ForwardRefExoticComponent<MenuSubTriggerProps & react.RefAttributes<HTMLDivElement>>;
2003
+ declare const DropdownMenuSubContent: react.ForwardRefExoticComponent<MenuSubContentProps & react.RefAttributes<HTMLDivElement>>;
2004
+
2005
+ interface ScrimProps {
2006
+ /** Dismiss the overlay this scrim sits behind. */
2007
+ onClose?: () => void;
2008
+ /**
2009
+ * Accessible name. With one, the scrim is a real `<button>`, which it must be when clicking it
2010
+ * is the *only* pointer route out. Without one it is `aria-hidden` decoration, and the overlay
2011
+ * must offer another exit (a close button, Escape).
2012
+ */
2013
+ label?: string;
2014
+ /** `absolute` when the scrim sits inside a wrapper that is already positioned. */
2015
+ position?: 'fixed' | 'absolute';
2016
+ /**
2017
+ * Fade instead of mounting and unmounting, for a panel that slides in and out. While closed
2018
+ * the scrim stops taking pointer events; an always-mounted scrim that kept them would silently
2019
+ * eat every click on the page. Set as `data-state`.
2020
+ */
2021
+ open?: boolean;
2022
+ /** Stacking and breakpoint gating, e.g. `z-overlay lg:hidden`. */
2023
+ className?: string;
1632
2024
  }
1633
- declare function DropdownMenuContent({ children, side, align, sideOffset, className, ...rest }: DropdownMenuContentProps): react.JSX.Element | null;
2025
+ /**
2026
+ * The dimming layer behind an overlay, for overlays `Modal` and `Drawer` do not cover (a
2027
+ * non-modal side panel, a mobile nav). New in 0.7.0, from SCIC. It exists so "I need a scrim"
2028
+ * never again means hand-writing `fixed inset-0 bg-black/40`, which is how SCIC ended up with
2029
+ * three scrim colours. The colour comes from `OVERLAY_SCRIM`.
2030
+ */
2031
+ declare function Scrim({ onClose, label, position, open, className }: ScrimProps): react.JSX.Element;
2032
+
2033
+ /**
2034
+ * `base` (the default) sits on the overlay layer, so a dialog opened from inside it appears above
2035
+ * it. `elevated` sits above another surface, e.g. a widget preview opened from a full-screen
2036
+ * dashboard. SCIC defaulted to `elevated`.
2037
+ */
2038
+ type FullscreenStacking = 'base' | 'elevated';
2039
+ interface FullscreenSurfaceProps {
2040
+ /** Called on Escape and on the close button. The surface renders while mounted. */
2041
+ onClose: () => void;
2042
+ /** Accessible name of the surface, e.g. "Supply risk dashboard". */
2043
+ label: string;
2044
+ /** Text on the close button. Default "Close". */
2045
+ closeLabel?: string;
2046
+ stacking?: FullscreenStacking;
2047
+ children: ReactNode;
2048
+ className?: string;
2049
+ }
2050
+ /**
2051
+ * An opaque, scrollable surface that fills the viewport, with a close button: "full screen" and
2052
+ * "expand this widget". New in 0.7.0, from SCIC.
2053
+ *
2054
+ * No scrim, because nothing behind it is visible. But it *is* modal: SCIC's version left the page
2055
+ * underneath in the tab order, so Tab walked into content covered by the surface. Built on Radix
2056
+ * Dialog, it traps focus, hides the page from assistive tech, returns focus on close, and takes
2057
+ * Escape through the shared layer stack, so a dialog opened on top closes first.
2058
+ */
2059
+ declare function FullscreenSurface({ onClose, label, closeLabel, stacking, children, className, }: FullscreenSurfaceProps): react.JSX.Element;
1634
2060
 
1635
2061
  interface PortalProps {
1636
2062
  children: ReactNode;
1637
2063
  /**
1638
- * Where to mount. Defaults to `document.body`.
2064
+ * Where to mount. Defaults to the nearest `PortalContainerProvider`, else `document.body`.
1639
2065
  *
1640
2066
  * Pass a container when the app renders inside a shadow root or a scoped theme
1641
2067
  * wrapper — the portal must stay inside whatever element the design tokens are
@@ -1643,6 +2069,12 @@ interface PortalProps {
1643
2069
  */
1644
2070
  container?: HTMLElement | null;
1645
2071
  }
2072
+ declare function PortalContainerProvider({ container, children, }: {
2073
+ container: HTMLElement | null;
2074
+ children: ReactNode;
2075
+ }): react.JSX.Element;
2076
+ /** The container a `Portal` here would mount into, for Radix parts that take `container`. */
2077
+ declare function usePortalContainer(): HTMLElement | null;
1646
2078
  /**
1647
2079
  * Renders `children` outside the parent DOM hierarchy.
1648
2080
  *
@@ -1761,6 +2193,99 @@ declare function useOverlayDismiss({ onDismiss, panelRef, active, closeOnEscape,
1761
2193
  */
1762
2194
  declare function cn(...inputs: ClassValue[]): string;
1763
2195
 
2196
+ /**
2197
+ * `Slot` renders its own props onto its single child element instead of emitting a
2198
+ * wrapper of its own. It is what makes `asChild` work.
2199
+ *
2200
+ * Why the library needs it: before 0.4.0 there was no way to render a `Button` as a
2201
+ * router `<Link>`, or to use any component as a tooltip/popover anchor, because every
2202
+ * component hardcoded its host element. The usual workaround — a `component`/`as` prop —
2203
+ * multiplies generics across the whole surface and still cannot forward a ref through
2204
+ * two levels. Delegating to the child instead keeps the type surface flat.
2205
+ *
2206
+ * <Button asChild><Link to="/x">Go</Link></Button>
2207
+ *
2208
+ * Merge rules, in order of who wins:
2209
+ * - `className` — concatenated, slot first, so the child's classes come last
2210
+ * - `style` — shallow-merged, child wins on conflicting keys
2211
+ * - `on*` — both run, slot's handler first; the child's runs even if the slot's
2212
+ * called `preventDefault`, matching normal DOM listener behaviour
2213
+ * - everything else — child wins, so a child's explicit `type` or `role` is never
2214
+ * clobbered by a default the slot happens to carry
2215
+ */
2216
+ interface SlotProps extends HTMLAttributes<HTMLElement> {
2217
+ /** The single element to merge into. */
2218
+ children?: ReactNode;
2219
+ /**
2220
+ * Rebuilds the child's children, so a component that decorates its content can keep
2221
+ * doing so through `asChild`.
2222
+ *
2223
+ * `Button` renders `leadingIcon`, a padded label span and `trailingIcon` around whatever
2224
+ * it is given. Without this, `<Button asChild><Link>Go</Link></Button>` would either drop
2225
+ * the icons (cloning the Link untouched) or drop "Go" (replacing the Link's children
2226
+ * outright). It receives the child's own children — "Go" — and returns the decorated
2227
+ * tree to place inside the child.
2228
+ */
2229
+ wrapChildren?: (childChildren: ReactNode) => ReactNode;
2230
+ }
2231
+ declare const Slot: react.ForwardRefExoticComponent<SlotProps & react.RefAttributes<HTMLElement>>;
2232
+ /** Fan one node out to several refs, callback or object. */
2233
+ declare function composeRefs<T>(...refs: (Ref<T> | undefined)[]): (node: T | null) => void;
2234
+
2235
+ /**
2236
+ * The keyboard focus ring, as one string, so every control draws the same one.
2237
+ *
2238
+ * Before 0.7.0 this exact class list was written out by hand in 18 places, with six
2239
+ * near-misses beside it (a missing offset colour, `ring-offset-2`). Use it in new and migrated
2240
+ * components rather than re-typing it.
2241
+ *
2242
+ * `FOCUS_RING` sits outside the element and needs room around it. Inside a scrolling or
2243
+ * `overflow-hidden` panel, such as a menu, a listbox or a table cell, the offset ring is clipped,
2244
+ * so items there use `FOCUS_RING_INSET`, which draws inside the element's own box.
2245
+ *
2246
+ * Highlight is not focus: menu and option items also tint their background when highlighted
2247
+ * (by pointer or by keyboard), but the tint alone does not meet WCAG 2.4.7 next to a hovered
2248
+ * sibling with the same tint. The ring is what marks the keyboard position.
2249
+ */
2250
+ declare const FOCUS_RING = "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-1 focus-visible:ring-offset-default";
2251
+ declare const FOCUS_RING_INSET = "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-brand";
2252
+
2253
+ interface VisuallyHiddenProps extends HTMLAttributes<HTMLSpanElement> {
2254
+ /** Render the hiding styles onto the single child element instead of a `<span>`. */
2255
+ asChild?: boolean;
2256
+ }
2257
+ /**
2258
+ * Content that screen readers announce and nobody sees: a dialog title the design does
2259
+ * not show, a "(opens in new tab)" suffix, the label of an icon-only control.
2260
+ *
2261
+ * Tailwind's `sr-only` does the same job in markup the library owns, and nine components still
2262
+ * use it. This is for the call site, where a component is clearer than a utility class and
2263
+ * survives a `className` override that would otherwise drop `sr-only` along with the rest.
2264
+ */
2265
+ declare const VisuallyHidden: react.ForwardRefExoticComponent<VisuallyHiddenProps & react.RefAttributes<HTMLSpanElement>>;
2266
+
2267
+ interface AccessibleIconProps {
2268
+ /** The icon. A single element; it is hidden from assistive technology. */
2269
+ children: ReactElement;
2270
+ /** What the icon means. It is announced in place of the icon. */
2271
+ label: string;
2272
+ }
2273
+ /**
2274
+ * An icon that carries meaning on its own, with no visible text beside it: a "verified" tick
2275
+ * in a table cell, a warning glyph standing in for a status word.
2276
+ *
2277
+ * Icons are decorative by default (`lucide-react` hides them, and so does the library wherever
2278
+ * it renders one for you). That is right beside a label and wrong here, where the icon *is*
2279
+ * the information. This hides the SVG and adds the label as visually hidden text, which reads
2280
+ * reliably in every screen reader, unlike `aria-label` on an `<svg>`.
2281
+ *
2282
+ * Inside a button, use `IconButton` with `aria-label` instead: the name belongs to the control,
2283
+ * not to the glyph.
2284
+ *
2285
+ * <AccessibleIcon label="Verified"><CircleCheckBigIcon className="size-4" /></AccessibleIcon>
2286
+ */
2287
+ declare function AccessibleIcon({ children, label }: AccessibleIconProps): react.JSX.Element;
2288
+
1764
2289
  type CardSize = 'sm' | 'md' | 'lg';
1765
2290
  type CardRadius = 'lg' | 'xl' | '2xl';
1766
2291
  type CardTone = 'default' | 'brand' | 'positive' | 'warning' | 'danger';
@@ -1841,7 +2366,7 @@ interface CardFooterProps extends HTMLAttributes<HTMLDivElement> {
1841
2366
  declare function CardFooter({ children, size, divider, align, className, ...rest }: CardFooterProps): react.JSX.Element;
1842
2367
 
1843
2368
  type AccordionType = 'single' | 'multiple';
1844
- interface AccordionProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
2369
+ interface AccordionProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue' | 'dir'> {
1845
2370
  children: ReactNode;
1846
2371
  /** `single` closes the open item when another opens. Default `single`. */
1847
2372
  type?: AccordionType;
@@ -1859,6 +2384,7 @@ interface AccordionProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'
1859
2384
  * right level depends on what surrounds it, which only the caller knows.
1860
2385
  */
1861
2386
  headingLevel?: 2 | 3 | 4;
2387
+ disabled?: boolean;
1862
2388
  }
1863
2389
  /**
1864
2390
  * Accordion. Matches Figma's `Accordion` / `Accordion Item` (`State: Closed | Open`).
@@ -1866,24 +2392,34 @@ interface AccordionProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'
1866
2392
  * Width is deliberately not set — Figma's own note on `Accordion Item` says the 640px in
1867
2393
  * the component set is a container artefact and the parent should own width, so this is
1868
2394
  * `w-full` and nothing more.
2395
+ *
2396
+ * Built on Radix Accordion from 0.7.0. The contract is unchanged: real headings, triggers with
2397
+ * `aria-expanded` / `aria-controls`, labelled `region` panels, Up/Down/Home/End between
2398
+ * triggers, and closed panels unmounted so they are not tabbable. New: your handlers on the
2399
+ * trigger compose with the toggle, every part forwards its ref, each part carries
2400
+ * `data-state`, and open content exposes `--radix-accordion-content-height` for animation.
1869
2401
  */
1870
- declare function Accordion({ children, type, value: valueProp, defaultValue, onValueChange, collapsible, headingLevel, className, ...rest }: AccordionProps): react.JSX.Element;
2402
+ declare const Accordion: react.ForwardRefExoticComponent<AccordionProps & react.RefAttributes<HTMLDivElement>>;
1871
2403
  interface AccordionItemProps extends HTMLAttributes<HTMLDivElement> {
1872
2404
  children: ReactNode;
1873
2405
  value: string;
1874
2406
  disabled?: boolean;
1875
2407
  }
1876
- declare function AccordionItem({ children, value, disabled, className, ...rest }: AccordionItemProps): react.JSX.Element;
2408
+ declare const AccordionItem: react.ForwardRefExoticComponent<AccordionItemProps & react.RefAttributes<HTMLDivElement>>;
1877
2409
  interface AccordionTriggerProps extends HTMLAttributes<HTMLButtonElement> {
1878
2410
  children: ReactNode;
1879
2411
  /** Hide the chevron — for a trigger that supplies its own affordance. */
1880
2412
  hideIndicator?: boolean;
1881
2413
  }
1882
- declare function AccordionTrigger({ children, hideIndicator, className, ...rest }: AccordionTriggerProps): react.JSX.Element;
2414
+ declare const AccordionTrigger: react.ForwardRefExoticComponent<AccordionTriggerProps & react.RefAttributes<HTMLButtonElement>>;
1883
2415
  interface AccordionContentProps extends HTMLAttributes<HTMLDivElement> {
1884
2416
  children: ReactNode;
1885
2417
  }
1886
- declare function AccordionContent({ children, className, ...rest }: AccordionContentProps): react.JSX.Element | null;
2418
+ /**
2419
+ * Unmounted while closed rather than height-collapsed: a `height: 0` panel keeps its content
2420
+ * focusable and announceable, so keyboard users would tab into a closed section.
2421
+ */
2422
+ declare const AccordionContent: react.ForwardRefExoticComponent<AccordionContentProps & react.RefAttributes<HTMLDivElement>>;
1887
2423
 
1888
2424
  interface CollapsibleProps extends HTMLAttributes<HTMLDivElement> {
1889
2425
  children: ReactNode;
@@ -1900,13 +2436,18 @@ interface CollapsibleProps extends HTMLAttributes<HTMLDivElement> {
1900
2436
  * `aria-labelledby`, and the panel must be genuinely removed from the accessibility tree
1901
2437
  * when closed — `height: 0` with `overflow: hidden` leaves its content focusable and
1902
2438
  * announceable, so a keyboard user tabs into a collapsed section.
2439
+ *
2440
+ * Built on Radix Collapsible from 0.7.0: your `onClick` on the trigger now runs alongside the
2441
+ * toggle instead of replacing it, every part forwards its ref, and the open content exposes
2442
+ * `--radix-collapsible-content-height` for a height animation. Each part carries
2443
+ * `data-state="open" | "closed"`.
1903
2444
  */
1904
- declare function Collapsible({ children, open: openProp, defaultOpen, onOpenChange, disabled, className, ...rest }: CollapsibleProps): react.JSX.Element;
2445
+ declare const Collapsible: react.ForwardRefExoticComponent<CollapsibleProps & react.RefAttributes<HTMLDivElement>>;
1905
2446
  interface CollapsibleTriggerProps extends HTMLAttributes<HTMLButtonElement> {
1906
2447
  children?: ReactNode;
1907
2448
  asChild?: boolean;
1908
2449
  }
1909
- declare function CollapsibleTrigger({ children, asChild, className, ...rest }: CollapsibleTriggerProps): react.JSX.Element;
2450
+ declare const CollapsibleTrigger: react.ForwardRefExoticComponent<CollapsibleTriggerProps & react.RefAttributes<HTMLButtonElement>>;
1910
2451
  interface CollapsibleContentProps extends HTMLAttributes<HTMLDivElement> {
1911
2452
  children: ReactNode;
1912
2453
  /**
@@ -1918,7 +2459,92 @@ interface CollapsibleContentProps extends HTMLAttributes<HTMLDivElement> {
1918
2459
  */
1919
2460
  keepMounted?: boolean;
1920
2461
  }
1921
- declare function CollapsibleContent({ children, keepMounted, className, ...rest }: CollapsibleContentProps): react.JSX.Element | null;
2462
+ declare const CollapsibleContent: react.ForwardRefExoticComponent<CollapsibleContentProps & react.RefAttributes<HTMLDivElement>>;
2463
+
2464
+ /**
2465
+ * Layout primitives, new in 0.7.0: `Box`, `Flex`, `Grid`, `Container` and `Section`, the Radix
2466
+ * Themes layout set.
2467
+ *
2468
+ * Each is a thin, typed wrapper over the Tailwind utilities a page would otherwise hand-write.
2469
+ * Spacing props take the Figma spacing tokens by name (`gap="400"` is 16px), so layout uses the
2470
+ * same scale as the components inside it and an arbitrary `gap-[13px]` has nowhere to go. All of
2471
+ * them take `asChild` to lay out an element of your own (a `<ul>`, a `<form>`, a `<main>`) and
2472
+ * merge `className` with `cn`, so a class you pass wins.
2473
+ *
2474
+ * The class maps below are written out literally on purpose: Tailwind only generates classes
2475
+ * that appear verbatim in source, so building them with template strings would emit no CSS.
2476
+ */
2477
+ /** A Figma spacing step, by name: `100` is 4px, `400` is 16px, `1600` is 64px. */
2478
+ type SpaceToken = '0' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '1000' | '1200' | '1600';
2479
+ interface LayoutBaseProps extends HTMLAttributes<HTMLElement> {
2480
+ children?: ReactNode;
2481
+ /** Lay out your own single child element instead of a `<div>`. */
2482
+ asChild?: boolean;
2483
+ /** Padding on every side, as a spacing token. */
2484
+ p?: SpaceToken;
2485
+ /** Horizontal padding, as a spacing token. */
2486
+ px?: SpaceToken;
2487
+ /** Vertical padding, as a spacing token. */
2488
+ py?: SpaceToken;
2489
+ }
2490
+ type BoxProps = LayoutBaseProps;
2491
+ /** A plain block with token padding. The base the others build on. */
2492
+ declare const Box: react.ForwardRefExoticComponent<LayoutBaseProps & react.RefAttributes<HTMLDivElement>>;
2493
+ type FlexDirection = 'row' | 'column' | 'row-reverse' | 'column-reverse';
2494
+ type FlexAlign = 'start' | 'center' | 'end' | 'baseline' | 'stretch';
2495
+ type FlexJustify = 'start' | 'center' | 'end' | 'between' | 'around';
2496
+ interface FlexProps extends LayoutBaseProps {
2497
+ /** Default `row`. */
2498
+ direction?: FlexDirection;
2499
+ align?: FlexAlign;
2500
+ justify?: FlexJustify;
2501
+ gap?: SpaceToken;
2502
+ /** Let items wrap onto new lines. */
2503
+ wrap?: boolean;
2504
+ /** `inline-flex` instead of `flex`. */
2505
+ inline?: boolean;
2506
+ }
2507
+ /** A flex row or column with token gaps. */
2508
+ declare const Flex: react.ForwardRefExoticComponent<FlexProps & react.RefAttributes<HTMLDivElement>>;
2509
+ type GridColumnCount = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
2510
+ type GridBreakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl';
2511
+ interface GridProps extends LayoutBaseProps {
2512
+ /**
2513
+ * Column count, fixed or per breakpoint: `columns={3}` or
2514
+ * `columns={{ base: 1, md: 2, lg: 4 }}`.
2515
+ */
2516
+ columns?: GridColumnCount | Partial<Record<GridBreakpoint, GridColumnCount>>;
2517
+ /**
2518
+ * As many columns as fit, each at least this wide, e.g. `"16rem"`. Responds to the grid's own
2519
+ * width, not the viewport's, so it suits form fields and card lists inside panels of any size
2520
+ * (what SCIC's `FormGrid` did). Ignored when `columns` is set.
2521
+ */
2522
+ minColumnWidth?: string;
2523
+ gap?: SpaceToken;
2524
+ gapX?: SpaceToken;
2525
+ gapY?: SpaceToken;
2526
+ align?: FlexAlign;
2527
+ }
2528
+ /** A CSS grid with token gaps: fixed, responsive or auto-fitting columns. */
2529
+ declare const Grid: react.ForwardRefExoticComponent<GridProps & react.RefAttributes<HTMLDivElement>>;
2530
+ type ContainerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
2531
+ interface ContainerProps extends LayoutBaseProps {
2532
+ /** Maximum content width. Default `lg` (1136px). */
2533
+ size?: ContainerSize;
2534
+ }
2535
+ /** Centres content at a maximum width, with a 16px side gutter by default. */
2536
+ declare const Container: react.ForwardRefExoticComponent<ContainerProps & react.RefAttributes<HTMLDivElement>>;
2537
+ type SectionSize = 'sm' | 'md' | 'lg';
2538
+ interface SectionProps extends LayoutBaseProps {
2539
+ /** Vertical rhythm: 24, 40 or 64px above and below. Default `md`. */
2540
+ size?: SectionSize;
2541
+ }
2542
+ /**
2543
+ * A page band with vertical rhythm, rendered as a `<section>`. Give it a heading (or an
2544
+ * `aria-label`) when it should be a landmark; an unnamed `<section>` is announced as nothing at
2545
+ * all, which is the right default for a purely visual band.
2546
+ */
2547
+ declare const Section: react.ForwardRefExoticComponent<SectionProps & react.RefAttributes<HTMLElement>>;
1922
2548
 
1923
2549
  interface AspectRatioProps extends HTMLAttributes<HTMLDivElement> {
1924
2550
  children: ReactNode;
@@ -2114,6 +2740,13 @@ declare function PageHeading({ title, subtitle, size, as, actions, truncateTitle
2114
2740
  type PageToolbarSize = 'sm' | 'md';
2115
2741
  interface PageToolbarProps {
2116
2742
  children: ReactNode;
2743
+ /**
2744
+ * Renders an icon-only back control at the far left, ahead of the heading: the Page Header's
2745
+ * `backButton` in Figma (node 3473:16837). New in 0.7.0, from SCIC. Omit for no back control.
2746
+ */
2747
+ onBack?: () => void;
2748
+ /** Accessible name for the back control. Default "Go back". */
2749
+ backLabel?: string;
2117
2750
  /** Allow the row to wrap when the action cluster is wide (entity-detail has seven buttons). */
2118
2751
  wrap?: boolean;
2119
2752
  /**
@@ -2135,7 +2768,7 @@ interface PageToolbarProps {
2135
2768
  * variant is adopted here, which is a deliberate improvement below `md` where the
2136
2769
  * fixed 28px padding was cramped.
2137
2770
  */
2138
- declare function PageToolbar({ children, wrap, size, className }: PageToolbarProps): react.JSX.Element;
2771
+ declare function PageToolbar({ children, onBack, backLabel, wrap, size, className, }: PageToolbarProps): react.JSX.Element;
2139
2772
 
2140
2773
  type FilterBarSize = 'sm' | 'md';
2141
2774
  interface FilterBarProps {
@@ -2180,6 +2813,7 @@ interface TabItem<K extends string = string> {
2180
2813
  count?: number;
2181
2814
  disabled?: boolean;
2182
2815
  }
2816
+ /** The `items` form: a tab strip only, with `TabsPanel`s placed wherever the page needs them. */
2183
2817
  interface TabsProps<K extends string = string> {
2184
2818
  items: TabItem<K>[];
2185
2819
  /** Controlled selection. Omit and pass `defaultValue` for uncontrolled. */
@@ -2196,30 +2830,53 @@ interface TabsProps<K extends string = string> {
2196
2830
  orientation?: TabsOrientation;
2197
2831
  activation?: TabsActivation;
2198
2832
  /**
2199
- * Shared prefix for the generated tab and panel ids. Pass the same value to `TabsPanel`
2200
- * to wire `aria-controls` / `aria-labelledby`. Generated when omitted.
2833
+ * Shared prefix for the tab and panel ids. Pass the same value to each `TabsPanel` and the
2834
+ * tabs point `aria-controls` at their panels. Without it, `aria-controls` is left off: a
2835
+ * generated prefix would point it at ids no panel has. The composable form needs neither.
2201
2836
  */
2202
2837
  idPrefix?: string;
2203
2838
  /** Names the tab strip. Required by the APG when there is more than one on a page. */
2204
2839
  label?: string;
2205
2840
  className?: string;
2206
2841
  }
2842
+ /**
2843
+ * The composable form, new in 0.7.0 and built on Radix Tabs: `Tabs` wraps a `TabsList` of
2844
+ * `TabsTrigger`s and the `TabsContent` panels, and wires every id itself.
2845
+ */
2846
+ interface TabsRootProps {
2847
+ children: ReactNode;
2848
+ value?: string;
2849
+ defaultValue?: string;
2850
+ onValueChange?: (value: string) => void;
2851
+ variant?: TabsVariant;
2852
+ size?: TabsSize;
2853
+ orientation?: TabsOrientation;
2854
+ activation?: TabsActivation;
2855
+ /** Reading direction, which flips Left/Right in a horizontal strip. */
2856
+ dir?: 'ltr' | 'rtl';
2857
+ className?: string;
2858
+ }
2207
2859
  declare const tabId: (prefix: string, key: string) => string;
2208
2860
  declare const tabPanelId: (prefix: string, key: string) => string;
2209
2861
  /**
2210
- * Tab strip.
2862
+ * Tabs, in two forms.
2863
+ *
2864
+ * // items: a strip; panels live anywhere, linked by idPrefix.
2865
+ * <Tabs items={items} value={tab} onValueChange={setTab} idPrefix="entity" />
2866
+ * <TabsPanel tabKey="overview" idPrefix="entity" active={tab === 'overview'}>…</TabsPanel>
2211
2867
  *
2212
- * Reworked in 0.4.0. It previously carried `role="tablist"`, `role="tab"` and
2213
- * `aria-selected` with **no `onKeyDown` at all** — no Arrow keys, no Home/End, no roving
2214
- * tabindex, no `aria-controls`, and no `role="tabpanel"` counterpart anywhere in the
2215
- * library. That combination is worse than shipping no ARIA: a screen reader announces
2216
- * "tab 3 of 5", the user presses the arrow keys it implies, and nothing happens. Every
2217
- * tab was also individually tabbable, so Tab walked the strip instead of leaving it.
2868
+ * // composable (0.7.0, Radix): strip and panels in one tree, ids wired for you.
2869
+ * <Tabs defaultValue="overview">
2870
+ * <TabsList label="Sections"><TabsTrigger value="overview">Overview</TabsTrigger></TabsList>
2871
+ * <TabsContent value="overview">…</TabsContent>
2872
+ * </Tabs>
2218
2873
  *
2219
- * The `underline` active colour is `background-brand` (#0C2D58), which is what Figma
2220
- * specifies.
2874
+ * Both implement the WAI-ARIA tabs pattern: one tab stop on the selected tab, arrows along the
2875
+ * strip (wrapping), Home/End, disabled tabs skipped, automatic or manual activation, and
2876
+ * `role="tabpanel"` regions labelled by their tabs. 0.3.0 had the roles and none of the keys.
2221
2877
  */
2222
- declare function Tabs<K extends string = string>({ items, value: valueProp, defaultValue, onValueChange, variant, size, orientation, activation, idPrefix, label, className, }: TabsProps<K>): react.JSX.Element;
2878
+ declare function Tabs<K extends string = string>(props: TabsProps<K>): ReactElement;
2879
+ declare function Tabs(props: TabsRootProps): ReactElement;
2223
2880
  interface TabsPanelProps extends HTMLAttributes<HTMLDivElement> {
2224
2881
  /** The `key` of the tab this panel belongs to. */
2225
2882
  tabKey: string;
@@ -2235,15 +2892,31 @@ interface TabsPanelProps extends HTMLAttributes<HTMLDivElement> {
2235
2892
  keepMounted?: boolean;
2236
2893
  }
2237
2894
  /**
2238
- * The `role="tabpanel"` half of the pattern, which the library had no equivalent of —
2239
- * so `aria-controls` on a tab pointed at nothing and there was no labelled region for a
2240
- * screen reader to move into.
2895
+ * The `role="tabpanel"` half of the `items` form.
2241
2896
  *
2242
2897
  * `tabIndex={0}` is deliberate and required: when a panel contains no focusable element,
2243
2898
  * it must be reachable itself, otherwise Tab from the selected tab skips the content
2244
- * entirely.
2899
+ * entirely. So it also needs a visible focus ring, which 0.6 suppressed (WCAG 2.4.7).
2245
2900
  */
2246
2901
  declare function TabsPanel({ tabKey, idPrefix, active, children, keepMounted, className, ...rest }: TabsPanelProps): react.JSX.Element | null;
2902
+ interface TabsListProps extends HTMLAttributes<HTMLDivElement> {
2903
+ /** Names the tab strip. Required by the APG when there is more than one on a page. */
2904
+ label?: string;
2905
+ }
2906
+ declare const TabsList: react.ForwardRefExoticComponent<TabsListProps & react.RefAttributes<HTMLDivElement>>;
2907
+ interface TabsTriggerProps extends HTMLAttributes<HTMLButtonElement> {
2908
+ value: string;
2909
+ disabled?: boolean;
2910
+ /** Renders a count chip after the label. */
2911
+ count?: number;
2912
+ }
2913
+ declare const TabsTrigger: react.ForwardRefExoticComponent<TabsTriggerProps & react.RefAttributes<HTMLButtonElement>>;
2914
+ interface TabsContentProps extends HTMLAttributes<HTMLDivElement> {
2915
+ value: string;
2916
+ /** Keep the panel mounted while hidden, preserving its state. Default `false`. */
2917
+ keepMounted?: boolean;
2918
+ }
2919
+ declare const TabsContent: react.ForwardRefExoticComponent<TabsContentProps & react.RefAttributes<HTMLDivElement>>;
2247
2920
 
2248
2921
  type NavItemSize = 'sm' | 'md';
2249
2922
  type NavItemVariant = 'card' | 'plain';
@@ -2254,6 +2927,12 @@ interface NavItemProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {
2254
2927
  */
2255
2928
  icon?: ReactNode;
2256
2929
  label: string;
2930
+ /**
2931
+ * A destination that exists but cannot be opened right now (no permission, coming soon).
2932
+ * Dimmed, out of the tab order and inert under `asChild`, with `aria-disabled` so it is
2933
+ * still announced. New in 0.7.0; replaces `pointer-events-none opacity-40` at the call site.
2934
+ */
2935
+ disabled?: boolean;
2257
2936
  /**
2258
2937
  * The row you are on — the current route. Paints the brand fill and, under `asChild`, sets
2259
2938
  * `aria-current="page"`; it also reflects to `data-state="active"`.
@@ -2291,7 +2970,7 @@ interface NavItemProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {
2291
2970
  * nav row that looks interactive and cannot be focused or activated. `asChild` is the
2292
2971
  * fix for anyone using it outside that wrapper:
2293
2972
  *
2294
- * <NavItem asChild icon={<LuHouse />} label="Home">
2973
+ * <NavItem asChild icon={<HouseIcon />} label="Home">
2295
2974
  * <NavLink to="/" />
2296
2975
  * </NavItem>
2297
2976
  */
@@ -2299,7 +2978,7 @@ interface NavItemProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {
2299
2978
  children?: ReactNode;
2300
2979
  className?: string;
2301
2980
  }
2302
- declare function NavItem({ icon, label, isActive, indicator, collapsed, size, variant, asChild, children, className, ...rest }: NavItemProps): react.JSX.Element;
2981
+ declare function NavItem({ icon, label, isActive, indicator, collapsed, size, variant, asChild, disabled, children, className, onClick, ...rest }: NavItemProps): react.JSX.Element;
2303
2982
 
2304
2983
  type EyebrowLabelVariant = 'uppercase' | 'plain';
2305
2984
  interface EyebrowLabelProps {
@@ -2445,6 +3124,33 @@ declare function paginationRange(page: number, pageCount: number, siblingCount?:
2445
3124
  * announced as an unavailable control.
2446
3125
  */
2447
3126
  declare const Pagination: react.ForwardRefExoticComponent<PaginationProps & react.RefAttributes<HTMLElement>>;
3127
+ interface PaginationBarProps {
3128
+ /** 1-based. */
3129
+ page: number;
3130
+ /** Rows per page. */
3131
+ pageSize: number;
3132
+ /** Total rows across every page. */
3133
+ total: number;
3134
+ onPageChange: (page: number) => void;
3135
+ /** Offer a page-size selector. Omit it, or pass `[]` as `pageSizeOptions`, to hide one. */
3136
+ onPageSizeChange?: (pageSize: number) => void;
3137
+ /** Page sizes on offer. Default `[10, 20, 50]`. */
3138
+ pageSizeOptions?: number[];
3139
+ /** Replaces the "Showing 1–10 of 57" summary. */
3140
+ summary?: ReactNode;
3141
+ /** Names the page-button landmark. Default "Pages". */
3142
+ label?: string;
3143
+ className?: string;
3144
+ }
3145
+ /**
3146
+ * A full pager row: a range summary, an optional page-size selector, and the page buttons.
3147
+ * New in 0.7.0, from SCIC's `Pagination` (whose `limit` is `pageSize` here). `DataTable` renders
3148
+ * one; use it directly for a list that pages without a table.
3149
+ *
3150
+ * Only the page buttons are the `<nav>` landmark. The summary and the size selector sit beside
3151
+ * it, because a landmark should hold navigation and nothing else.
3152
+ */
3153
+ declare function PaginationBar({ page, pageSize, total, onPageChange, onPageSizeChange, pageSizeOptions, summary, label, className, }: PaginationBarProps): react.JSX.Element;
2448
3154
 
2449
3155
  type NavigationMenuOrientation = 'horizontal' | 'vertical';
2450
3156
  type NavigationMenuVariant = 'pill' | 'link';
@@ -2498,66 +3204,115 @@ declare const NavigationMenuItem: react.ForwardRefExoticComponent<NavigationMenu
2498
3204
  * All of them take `asChild`, because the right element is contextual — a `Heading` is an
2499
3205
  * `<h2>` on a page and an `<h3>` inside a card, and only the caller knows the outline.
2500
3206
  */
3207
+ /**
3208
+ * The text colour as a meaning, new in 0.7.0. `muted` and `subtle` are the secondary and
3209
+ * tertiary steps; the rest are the status tones. It replaces the
3210
+ * `className={denied ? 'text-danger' : 'text-positive'}` that consumers were writing, so state
3211
+ * is a prop and the colour stays a token. Omit it to keep each component's own colour.
3212
+ */
3213
+ type TextTone = 'default' | 'muted' | 'subtle' | 'brand' | 'positive' | 'warning' | 'danger';
2501
3214
  type BaseProps = HTMLAttributes<HTMLElement> & {
2502
3215
  children?: ReactNode;
2503
3216
  asChild?: boolean;
3217
+ /** Text colour as a meaning. See `TextTone`. */
3218
+ tone?: TextTone;
2504
3219
  };
2505
3220
  type TextProps = BaseProps;
2506
3221
  /** `Text` — the default body paragraph. */
2507
3222
  declare const Text: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
2508
3223
  children?: ReactNode;
2509
3224
  asChild?: boolean;
3225
+ /** Text colour as a meaning. See `TextTone`. */
3226
+ tone?: TextTone;
2510
3227
  } & react.RefAttributes<HTMLElement>>;
2511
3228
  /** `Text Small` — secondary body copy. */
2512
3229
  declare const TextSmall: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
2513
3230
  children?: ReactNode;
2514
3231
  asChild?: boolean;
3232
+ /** Text colour as a meaning. See `TextTone`. */
3233
+ tone?: TextTone;
2515
3234
  } & react.RefAttributes<HTMLElement>>;
2516
3235
  /** `Text Tiny` — the smallest readable step; captions and table meta. */
2517
3236
  declare const TextTiny: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
2518
3237
  children?: ReactNode;
2519
3238
  asChild?: boolean;
3239
+ /** Text colour as a meaning. See `TextTone`. */
3240
+ tone?: TextTone;
2520
3241
  } & react.RefAttributes<HTMLElement>>;
2521
3242
  /** `Text Strong` — emphasis by weight, in a real `<strong>`. */
2522
3243
  declare const TextStrong: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
2523
3244
  children?: ReactNode;
2524
3245
  asChild?: boolean;
3246
+ /** Text colour as a meaning. See `TextTone`. */
3247
+ tone?: TextTone;
2525
3248
  } & react.RefAttributes<HTMLElement>>;
2526
3249
  /** `Text Emphasis` — emphasis by slant, in a real `<em>`. */
2527
3250
  declare const TextEmphasis: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
2528
3251
  children?: ReactNode;
2529
3252
  asChild?: boolean;
3253
+ /** Text colour as a meaning. See `TextTone`. */
3254
+ tone?: TextTone;
3255
+ } & react.RefAttributes<HTMLElement>>;
3256
+ /** An inline quotation, in a real `<q>` so the browser adds locale-correct quote marks. New in 0.7.0. */
3257
+ declare const Quote: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
3258
+ children?: ReactNode;
3259
+ asChild?: boolean;
3260
+ /** Text colour as a meaning. See `TextTone`. */
3261
+ tone?: TextTone;
2530
3262
  } & react.RefAttributes<HTMLElement>>;
2531
3263
  /** `Text Code` — inline monospace. */
2532
3264
  declare const TextCode: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
2533
3265
  children?: ReactNode;
2534
3266
  asChild?: boolean;
3267
+ /** Text colour as a meaning. See `TextTone`. */
3268
+ tone?: TextTone;
2535
3269
  } & react.RefAttributes<HTMLElement>>;
2536
3270
  /** `Text Title Hero` — the largest step, one per page at most. */
2537
3271
  declare const TitleHero: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
2538
3272
  children?: ReactNode;
2539
3273
  asChild?: boolean;
3274
+ /** Text colour as a meaning. See `TextTone`. */
3275
+ tone?: TextTone;
2540
3276
  } & react.RefAttributes<HTMLElement>>;
2541
3277
  /** `Text Title Page` — page title. */
2542
3278
  declare const TitlePage: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
2543
3279
  children?: ReactNode;
2544
3280
  asChild?: boolean;
3281
+ /** Text colour as a meaning. See `TextTone`. */
3282
+ tone?: TextTone;
2545
3283
  } & react.RefAttributes<HTMLElement>>;
2546
3284
  /** `Text Subtitle` — a lead paragraph under a title; regular weight by design. */
2547
3285
  declare const Subtitle: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
2548
3286
  children?: ReactNode;
2549
3287
  asChild?: boolean;
3288
+ /** Text colour as a meaning. See `TextTone`. */
3289
+ tone?: TextTone;
2550
3290
  } & react.RefAttributes<HTMLElement>>;
2551
3291
  /** `Text Heading` — section heading. */
2552
3292
  declare const Heading: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
2553
3293
  children?: ReactNode;
2554
3294
  asChild?: boolean;
3295
+ /** Text colour as a meaning. See `TextTone`. */
3296
+ tone?: TextTone;
2555
3297
  } & react.RefAttributes<HTMLElement>>;
2556
3298
  /** `Text Subheading` — subsection heading; regular weight, matching Figma. */
2557
3299
  declare const Subheading: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & {
2558
3300
  children?: ReactNode;
2559
3301
  asChild?: boolean;
3302
+ /** Text colour as a meaning. See `TextTone`. */
3303
+ tone?: TextTone;
2560
3304
  } & react.RefAttributes<HTMLElement>>;
3305
+ interface BlockquoteProps extends HTMLAttributes<HTMLQuoteElement> {
3306
+ children?: ReactNode;
3307
+ /** URL of the source, set as the `cite` attribute. Not shown; pair with a visible credit. */
3308
+ cite?: string;
3309
+ tone?: TextTone;
3310
+ }
3311
+ /**
3312
+ * A block quotation, new in 0.7.0, matching Radix Themes' `Blockquote`. A real
3313
+ * `<blockquote>`, so assistive tech announces where the quotation starts and ends.
3314
+ */
3315
+ declare const Blockquote: react.ForwardRefExoticComponent<BlockquoteProps & react.RefAttributes<HTMLQuoteElement>>;
2561
3316
  interface TextLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
2562
3317
  children?: ReactNode;
2563
3318
  asChild?: boolean;
@@ -2614,6 +3369,91 @@ interface WidgetFooterProps {
2614
3369
  }
2615
3370
  declare function WidgetFooter({ caption, subcaption, action, className }: WidgetFooterProps): react.JSX.Element;
2616
3371
 
3372
+ /**
3373
+ * The dashboard grid vocabulary, ported from SCIC in 0.7.0: a 12-column row, five widget widths
3374
+ * and three canonical card heights. The heights are modular (364 = 170·2 + 24, 752 = 170·4 +
3375
+ * 24·3), so two stacked `medium` cards bottom-align with one `large`.
3376
+ *
3377
+ * Not included: SCIC's drag-and-drop masonry dashboard, which needs `@dnd-kit` and stays in the
3378
+ * app until it earns a subpath of its own.
3379
+ */
3380
+ /** Column span within the 12-column grid. */
3381
+ type ColSize = 'tiny' | 'small' | 'medium' | 'large' | 'full';
3382
+ /** Canonical widget card heights. */
3383
+ type WidgetHeight = 'small' | 'medium' | 'large';
3384
+ /**
3385
+ * Viewport-driven spans: everything stacks (tiny tiles pair up 2×2) below `lg`, then the
3386
+ * 12-column spans apply. Right when the grid gets the whole viewport. For a grid that shares
3387
+ * its row with a rail or drawer, size by its own width: see `useWidthTier` and
3388
+ * `COL_SPAN_BY_TIER`.
3389
+ */
3390
+ declare const COL_SPAN: Record<ColSize, string>;
3391
+ declare const HEIGHT_CLASS: Record<WidgetHeight, string>;
3392
+ /** The same heights in px, for layout maths. Keep in step with `HEIGHT_CLASS`. */
3393
+ declare const HEIGHT_PX: Record<WidgetHeight, number>;
3394
+ interface WidgetGridProps {
3395
+ children: ReactNode;
3396
+ className?: string;
3397
+ }
3398
+ /** A vertical stack of `WidgetGridRow`s with the dashboard gutters. */
3399
+ declare function WidgetGrid({ children, className }: WidgetGridProps): react.JSX.Element;
3400
+ interface WidgetGridRowProps {
3401
+ children: ReactNode;
3402
+ className?: string;
3403
+ }
3404
+ /** A 12-column row. Place `WidgetGridItem`s in it. */
3405
+ declare function WidgetGridRow({ children, className }: WidgetGridRowProps): react.JSX.Element;
3406
+ interface WidgetGridItemProps extends HTMLAttributes<HTMLDivElement> {
3407
+ /** How many columns the widget claims. */
3408
+ size: ColSize;
3409
+ /** Fixes the card height to the canonical scale. Omit for content height. */
3410
+ height?: WidgetHeight;
3411
+ }
3412
+ /**
3413
+ * One widget's cell. Takes `size` and `height` as props, so a dashboard never composes span
3414
+ * classes itself. They are also set as `data-size` / `data-height`.
3415
+ */
3416
+ declare function WidgetGridItem({ size, height, className, ...rest }: WidgetGridItemProps): react.JSX.Element;
3417
+
3418
+ /**
3419
+ * Container-width tiers for grids that cannot use viewport breakpoints, because they share their
3420
+ * row with a nav rail or a docked drawer. Pure functions, ported from SCIC in 0.7.0. The hook that
3421
+ * measures and debounces is `useWidthTier`.
3422
+ */
3423
+ type GridTier = 'stacked' | 'narrow' | 'standard' | 'wide';
3424
+ declare const GRID_TIERS: readonly GridTier[];
3425
+ /** The narrowest width, in px, at which each tier applies. */
3426
+ declare const TIER_MIN_PX: Record<GridTier, number>;
3427
+ declare function quantizeWidth(px: number): number;
3428
+ /** The tier for a width, with no hysteresis. */
3429
+ declare function tierForWidth(px: number): GridTier;
3430
+ /** The next tier from `current`, holding still inside the hysteresis band. */
3431
+ declare function nextTier(current: GridTier, px: number): GridTier;
3432
+ /** Columns (of 12) each widget width claims, per tier. */
3433
+ declare const TIER_COLS: Record<GridTier, Record<ColSize, number>>;
3434
+ /** `TIER_COLS` as literal classes (Tailwind only emits classes it finds verbatim). */
3435
+ declare const COL_SPAN_BY_TIER: Record<GridTier, Record<ColSize, string>>;
3436
+ declare function colsFor(tier: GridTier, size: ColSize): number;
3437
+ /** The pixel width of a cell spanning `cols` of 12, given the grid width and column gap. */
3438
+ declare function slotWidthPx(gridWidthPx: number, columnGapPx: number, cols: number): number;
3439
+
3440
+ interface UseWidthTierOptions {
3441
+ /** Stop committing new widths, e.g. while a drawer animates. Unfreezing flushes the latest. */
3442
+ frozen?: boolean;
3443
+ }
3444
+ interface UseWidthTierResult {
3445
+ ref: (node: HTMLElement | null) => void;
3446
+ /** The quantised width, or `null` before the first measurement. */
3447
+ widthPx: number | null;
3448
+ tier: GridTier;
3449
+ }
3450
+ /**
3451
+ * Measures an element and reports its `GridTier`, debounced and with hysteresis. Ported from
3452
+ * SCIC in 0.7.0. Without `ResizeObserver` (jsdom, very old browsers) it measures once on mount
3453
+ * rather than throwing.
3454
+ */
3455
+ declare function useWidthTier({ frozen }?: UseWidthTierOptions): UseWidthTierResult;
3456
+
2617
3457
  interface StatTileProps {
2618
3458
  label: string;
2619
3459
  value: string | number;
@@ -2624,9 +3464,34 @@ interface StatTileProps {
2624
3464
  * which is how competing status palettes drift apart.
2625
3465
  */
2626
3466
  dotColor?: string;
3467
+ /** A muted line under the value: a comparison, a unit, "of 240". New in 0.7.0, from SCIC. */
3468
+ hint?: ReactNode;
3469
+ /**
3470
+ * Makes the tile a toggle button, for a row of tiles that filter a list below. New in 0.7.0.
3471
+ * Pair with `selected`.
3472
+ */
3473
+ onClick?: () => void;
3474
+ /**
3475
+ * The tile's filter is the active one. Sets `aria-pressed` (with `onClick`) or `aria-current`
3476
+ * (with `asChild`), and `data-state="selected"`, which the tile styles: no conditional border
3477
+ * classes needed.
3478
+ */
3479
+ selected?: boolean;
3480
+ /** Render onto the single child instead, e.g. a router `<Link>` to a filtered page. */
3481
+ asChild?: boolean;
3482
+ /** The element to render onto, with `asChild`. Its own children are replaced by the tile. */
3483
+ children?: ReactElement;
2627
3484
  className?: string;
2628
3485
  }
2629
- declare function StatTile({ label, value, tone, dotColor, className }: StatTileProps): react.JSX.Element;
3486
+ /**
3487
+ * A labelled figure: "Open cases 42".
3488
+ *
3489
+ * From 0.7.0 a tile can also be the filter for the list beneath it, which is what Cleo's
3490
+ * Companies, Employees and Users screens hand-built with
3491
+ * `className={filter === t.f ? 'border-brand …' : ''}`. Give it `onClick` and `selected` and it
3492
+ * is a real toggle button (`aria-pressed`), styled from its own state.
3493
+ */
3494
+ declare function StatTile({ label, value, tone, dotColor, hint, onClick, selected, asChild, children, className, }: StatTileProps): react.JSX.Element;
2630
3495
 
2631
3496
  type StatNumberSize = 'sm' | 'md' | 'lg';
2632
3497
  type StatNumberWeight = 'medium' | 'bold';
@@ -3029,6 +3894,28 @@ interface ListRowProps {
3029
3894
  /** Render an `<li>` instead of a `<div>` — use inside a `<ul>`/`<ol>`. */
3030
3895
  as?: 'div' | 'li';
3031
3896
  onClick?: () => void;
3897
+ /**
3898
+ * Render onto the single child instead, e.g. a router `<Link>` for a row that navigates.
3899
+ * The child is the interactive element and the slots render inside it. New in 0.7.0.
3900
+ *
3901
+ * <ListRow asChild title="Acme" description="Supplier"><Link to="/acme" /></ListRow>
3902
+ */
3903
+ asChild?: boolean;
3904
+ /** The element to render onto, with `asChild`. Its own children are replaced by the slots. */
3905
+ children?: ReactElement;
3906
+ /**
3907
+ * The row is chosen, in a set where rows toggle on and off (a picker, a multi-select list).
3908
+ * Sets `aria-pressed` on a clickable row and `data-state="selected"`, which the row styles.
3909
+ * New in 0.7.0; it replaces conditional `bg-brand-tertiary` classes at the call site.
3910
+ */
3911
+ selected?: boolean;
3912
+ /**
3913
+ * The row is the current one in a navigation-like list (the open section, this page). Sets
3914
+ * `aria-current` and is styled like `selected`. New in 0.7.0.
3915
+ */
3916
+ current?: boolean | 'page' | 'step' | 'location';
3917
+ /** A clickable row that cannot be activated right now. Sets `aria-disabled`. New in 0.7.0. */
3918
+ disabled?: boolean;
3032
3919
  /**
3033
3920
  * Accessible name for a clickable row. Strongly recommended whenever `onClick` is set:
3034
3921
  * without it the name is the concatenation of every slot's text.
@@ -3043,8 +3930,12 @@ interface ListRowProps {
3043
3930
  * document-upload flow — its status vocabulary, its five raw-hex pills and its
3044
3931
  * unicode-glyph labels — into the library. Every feature of those rows is reachable by
3045
3932
  * composing this with `FileRow`, `FileDropZone` and `StatusBadge`; see the docs.
3933
+ *
3934
+ * State is a prop, not a class: `selected`, `current` and `disabled` set the attributes that
3935
+ * announce them (`aria-pressed`, `aria-current`, `aria-disabled`, `data-state`) and the row
3936
+ * styles itself from those.
3046
3937
  */
3047
- declare function ListRow({ leading, title, titleMeta, description, meta, trailing, footer, density, divider, as: Tag, onClick, 'aria-label': ariaLabel, className, }: ListRowProps): react.JSX.Element;
3938
+ declare function ListRow({ leading, title, titleMeta, description, meta, trailing, footer, density, divider, as: Tag, onClick, asChild, children, selected, current, disabled, 'aria-label': ariaLabel, className, }: ListRowProps): react.JSX.Element;
3048
3939
 
3049
3940
  interface FileRowProps {
3050
3941
  name: string;
@@ -3121,6 +4012,16 @@ interface ProgressBarProps {
3121
4012
  radius?: string;
3122
4013
  /** Accessible name when there is no visible `label`. */
3123
4014
  'aria-label'?: string;
4015
+ /**
4016
+ * Draw the bar as this many equal steps, filled in whole steps, e.g. a password-strength
4017
+ * meter. New in 0.7.0; replaces hand-built rows of tinted bars.
4018
+ */
4019
+ segments?: number;
4020
+ /**
4021
+ * What the value means, announced instead of the number (`aria-valuetext`), e.g. "Strong".
4022
+ * A strength meter at 75 means nothing as "75 percent".
4023
+ */
4024
+ valueText?: string;
3124
4025
  /**
3125
4026
  * Applied to the track. This is how you set a fixed width — `className="w-16"`.
3126
4027
  * It genuinely overrides the base `w-full` because this file uses `cn`.
@@ -3134,7 +4035,7 @@ interface ProgressBarProps {
3134
4035
  * `widgets/` despite being a general-purpose primitive — so `TableCellProgress`
3135
4036
  * hand-rolled a second copy rather than reuse it. It also had no ARIA at all.
3136
4037
  */
3137
- declare function ProgressBar({ value, tone, size, label, showValue, radius, 'aria-label': ariaLabel, className, }: ProgressBarProps): react.JSX.Element;
4038
+ declare function ProgressBar({ value, tone, size, label, showValue, radius, 'aria-label': ariaLabel, segments, valueText, className, }: ProgressBarProps): react.JSX.Element;
3138
4039
 
3139
4040
  interface NumberedListItem {
3140
4041
  title: string;
@@ -3274,6 +4175,58 @@ interface DetailGridProps {
3274
4175
  */
3275
4176
  declare function DetailGrid({ children, columns, className }: DetailGridProps): react.JSX.Element;
3276
4177
 
4178
+ /**
4179
+ * Label/value rows for a detail page, as a real `<dl>`. New in 0.7.0, from SCIC.
4180
+ *
4181
+ * Use it for a profile or account summary read top to bottom. `DetailGrid` / `DetailItem`
4182
+ * are for a multi-column summary card. The rows here are width-aware without a breakpoint: the
4183
+ * label has a fixed basis and the value a minimum one, and the row wraps, so in a narrow panel
4184
+ * (a one-third column, a 320px phone, 200% zoom) the value drops below its label instead of
4185
+ * being squeezed into a sliver beside it.
4186
+ */
4187
+ interface DescriptionListProps {
4188
+ children: ReactNode;
4189
+ className?: string;
4190
+ }
4191
+ declare function DescriptionList({ children, className }: DescriptionListProps): react.JSX.Element;
4192
+ interface DescriptionItemProps {
4193
+ label: string;
4194
+ /** An empty value renders an em dash. */
4195
+ value: ReactNode;
4196
+ /**
4197
+ * Adds a copy-to-clipboard button. Pass the plain string to copy: emails and ids are long,
4198
+ * unbroken and commonly pasted elsewhere.
4199
+ */
4200
+ copyValue?: string;
4201
+ className?: string;
4202
+ }
4203
+ declare function DescriptionItem({ label, value, copyValue, className }: DescriptionItemProps): react.JSX.Element;
4204
+ interface CopyButtonProps {
4205
+ /** The text to copy. */
4206
+ value: string;
4207
+ /** The button's accessible name, e.g. "Copy email". */
4208
+ label: string;
4209
+ /** Announced after a copy. Default "Copied". */
4210
+ copiedLabel?: string;
4211
+ className?: string;
4212
+ }
4213
+ /**
4214
+ * An icon button that copies `value` to the clipboard, shows a tick for two seconds, and
4215
+ * announces the copy in a polite live region. Exported for ids and codes outside a
4216
+ * `DescriptionList`.
4217
+ */
4218
+ declare function CopyButton({ value, label, copiedLabel, className }: CopyButtonProps): react.JSX.Element;
4219
+ /**
4220
+ * A one-line email that truncates the local part and keeps the domain:
4221
+ * `alexandra.konstan…@example.com`. The full address stays in the DOM (screen readers and copy
4222
+ * get all of it) and in `title`. Pair it with `copyValue`, so touch users, who cannot hover, can
4223
+ * still get the address.
4224
+ */
4225
+ declare function EmailText({ email, className }: {
4226
+ email: string;
4227
+ className?: string;
4228
+ }): react.JSX.Element;
4229
+
3277
4230
  type CheckedGroupListColumns = 1 | 2 | 3;
3278
4231
  /** One labelled group of ticked items. */
3279
4232
  interface CheckedGroup {
@@ -3384,8 +4337,18 @@ declare const TableCaption: react.ForwardRefExoticComponent<TableCaptionProps &
3384
4337
  declare const TableHeader: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
3385
4338
  declare const TableBody: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
3386
4339
  declare const TableFooter: react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & react.RefAttributes<HTMLTableSectionElement>>;
4340
+ /**
4341
+ * A row's state tint. Each is a meaning, not a colour: `muted` for an inactive or ended
4342
+ * record, `danger` for a denied or failed one, and so on. New in 0.7.0, to replace the
4343
+ * `className={active ? '' : 'bg-default-secondary'}` consumers were writing on every row.
4344
+ */
4345
+ type TableRowTone = 'default' | 'muted' | 'brand' | 'positive' | 'warning' | 'danger';
3387
4346
  interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {
3388
4347
  selected?: boolean;
4348
+ /** State tint; see `TableRowTone`. Selection wins over tone. */
4349
+ tone?: TableRowTone;
4350
+ /** De-emphasises the row (an expired or archived record) without hiding it. */
4351
+ dimmed?: boolean;
3389
4352
  }
3390
4353
  declare const TableRow: react.ForwardRefExoticComponent<TableRowProps & react.RefAttributes<HTMLTableRowElement>>;
3391
4354
  interface TableHeadProps extends ThHTMLAttributes<HTMLTableCellElement> {
@@ -3411,50 +4374,67 @@ interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {
3411
4374
  }
3412
4375
  declare const TableCell: react.ForwardRefExoticComponent<TableCellProps & react.RefAttributes<HTMLTableCellElement>>;
3413
4376
 
3414
- interface ColumnDef<T> {
3415
- key: string;
3416
- header: string;
3417
- /**
3418
- * CSS width value — e.g. `"320px"`, `"10rem"`. When `grow` is true this becomes the
3419
- * column's floor: it counts toward the table's min-width, below which the wrapper
3420
- * scrolls sideways rather than crushing the columns.
3421
- */
3422
- width: string;
3423
- /**
3424
- * When true the column absorbs the remaining table width.
3425
- *
3426
- * With no `grow` column, `table-fixed` distributes surplus width proportionally
3427
- * across every column — the old flex layout left it blank on the right instead. Mark
3428
- * whichever column should soak it up.
3429
- */
3430
- grow?: boolean;
3431
- render: (row: T) => ReactNode;
3432
- }
3433
- type DataTableDensity = 'default' | 'compact';
3434
- type DataTableAlign = 'center' | 'top';
3435
- interface DataTableProps<T> {
3436
- columns: ColumnDef<T>[];
3437
- rows: T[];
3438
- getRowKey: (row: T, index: number) => Key;
3439
- /** Row and header padding. `compact` also steps the header and cell type down. */
3440
- density?: DataTableDensity;
3441
- /** Vertical alignment of every body cell. Use `top` for multi-line or ragged cells. */
3442
- align?: DataTableAlign;
3443
- onRowClick?: (row: T) => void;
3444
- /** Rendered as one full-width row when `rows` is empty. Omit to render nothing. */
3445
- emptyLabel?: string;
4377
+ /** How a column appears in card mode. */
4378
+ type ColumnMobileRole = 'title' | 'status' | 'actions' | 'field' | 'hidden';
4379
+
4380
+ /**
4381
+ * The composable parts of `DataTable`. `DataTable` renders all of them for you; they are
4382
+ * exported for a table that needs its own layout around them (a toolbar elsewhere on the
4383
+ * page, a pager in a sticky footer) or a custom header renderer.
4384
+ */
4385
+ /** The id `createSelectColumn` gives its column, so `DataTable` can find and place it. */
4386
+ declare const SELECT_COLUMN_ID = "select";
4387
+ interface DataTableColumnHeaderProps<TData, TValue> {
4388
+ column: Column<TData, TValue>;
4389
+ /** Header text. Defaults to the column's label. */
4390
+ title?: string;
3446
4391
  className?: string;
3447
4392
  }
3448
4393
  /**
3449
- * A real `<table>` with `table-fixed` and a `<colgroup>`.
4394
+ * A header that sorts its column when the column can sort, and plain text when it cannot.
4395
+ * `DataTable` uses it for every string `header`. Use it yourself inside a `header` render
4396
+ * function to keep the sort control while adding something next to it.
3450
4397
  *
3451
- * 0.2.0 laid each row out as its own flex container sized `w-max`, so a `grow` column
3452
- * sized itself per row and one long cell shunted that row's remaining columns out of
3453
- * line with its neighbours. `table-fixed` resolves column widths once for the whole
3454
- * table, which is the property the consuming app hand-rolled a separate audit table
3455
- * to get.
4398
+ * A click cycles the sort (ascending → descending → off). Shift-click adds the column to a
4399
+ * multi-column sort. The direction is announced through `aria-sort` on the `<th>`, which
4400
+ * `DataTable` sets, so this button carries only the visible chevron.
4401
+ */
4402
+ declare function DataTableColumnHeader<TData, TValue>({ column, title, className, }: DataTableColumnHeaderProps<TData, TValue>): react.JSX.Element;
4403
+ interface CreateSelectColumnOptions<TData> {
4404
+ /** Names each row's checkbox, e.g. `(row) => \`Select ${row.name}\``. Default "Select row". */
4405
+ getRowLabel?: (row: TData) => string;
4406
+ /** Names the header checkbox. Default "Select all rows on this page". */
4407
+ selectAllLabel?: string;
4408
+ }
4409
+ /**
4410
+ * A leading checkbox column. `DataTable` adds one automatically when `enableRowSelection` is
4411
+ * set and the columns have none, so call this only to place it yourself or to name the rows.
4412
+ *
4413
+ * The header checkbox selects the current *page*, which is what a user can see, and shows
4414
+ * indeterminate while some of the page is selected.
4415
+ */
4416
+ declare function createSelectColumn<TData>(options?: CreateSelectColumnOptions<TData>): ColumnDef<TData, unknown>;
4417
+ interface DataTableViewOptionsProps<TData> {
4418
+ table: Table$1<TData>;
4419
+ /** Trigger text. Default "Columns". */
4420
+ label?: string;
4421
+ }
4422
+ /** A "Columns" menu that shows and hides every column whose `enableHiding` is not false. */
4423
+ declare function DataTableViewOptions<TData>({ table, label }: DataTableViewOptionsProps<TData>): react.JSX.Element | null;
4424
+ interface DataTablePaginationProps<TData> {
4425
+ table: Table$1<TData>;
4426
+ /** Page sizes on offer. An empty array hides the selector. Default `[10, 20, 50]`. */
4427
+ pageSizeOptions?: number[];
4428
+ /** Replaces the "Showing 1–10 of 57" summary. */
4429
+ summary?: ReactNode;
4430
+ }
4431
+ /** The pager row: a range summary, a page-size selector, and page buttons. */
4432
+ declare function DataTablePagination<TData>({ table, pageSizeOptions, summary, }: DataTablePaginationProps<TData>): react.JSX.Element;
4433
+
4434
+ /**
4435
+ * Cell renderers for `DataTable` (and the `Table` parts). Unchanged in 0.7.0; moved out of
4436
+ * `data-table.tsx` when the table itself was rebuilt on TanStack Table.
3456
4437
  */
3457
- declare function DataTable<T>({ columns, rows, getRowKey, density, align, onRowClick, emptyLabel, className, }: DataTableProps<T>): react.JSX.Element;
3458
4438
  /**
3459
4439
  * Cell type scale.
3460
4440
  *
@@ -3502,6 +4482,206 @@ interface TableCellProgressProps {
3502
4482
  /** Mini progress bar with a percentage label below. */
3503
4483
  declare function TableCellProgress({ percent, tone, size, className, }: TableCellProgressProps): react.JSX.Element;
3504
4484
 
4485
+ type DataTableColumnAlign = 'start' | 'center' | 'end';
4486
+ /**
4487
+ * Per-column layout options, carried on TanStack's `meta`. Declared by augmenting TanStack's
4488
+ * own `ColumnMeta`, so `meta` on your `ColumnDef` is typed with no extra import:
4489
+ *
4490
+ * const columns: ColumnDef<Supplier>[] = [
4491
+ * { accessorKey: 'name', header: 'Supplier', meta: { width: '280px', grow: true, mobile: 'title' } },
4492
+ * ];
4493
+ */
4494
+ declare module '@tanstack/react-table' {
4495
+ interface ColumnMeta<TData extends RowData, TValue> {
4496
+ /**
4497
+ * CSS width for the column's `<col>`, e.g. `"320px"` or `"10rem"`. A column is never
4498
+ * narrower than its header text. With `grow`, this is the floor instead.
4499
+ */
4500
+ width?: string;
4501
+ /** Absorbs the table's remaining width, with `width` as its floor. Usually one column. */
4502
+ grow?: boolean;
4503
+ /** Horizontal alignment of the header and cells. Default `start`. */
4504
+ align?: DataTableColumnAlign;
4505
+ /**
4506
+ * The cell renders its own controls (a button, a toggle, a menu). Presses inside it stop
4507
+ * before reaching the row's `onRowClick`, and the cell stops clipping its overflow, so
4508
+ * focus rings are not cut off.
4509
+ */
4510
+ interactive?: boolean;
4511
+ /** Keep the header for screen readers but hide it visually, e.g. an actions column. */
4512
+ hideHeader?: boolean;
4513
+ /** The column's part in card mode. See `ColumnMobileRole`. Default `field`. */
4514
+ mobile?: ColumnMobileRole;
4515
+ /** Pin the first (`start`) or last (`end`) visible column while the table scrolls sideways. */
4516
+ sticky?: 'start' | 'end';
4517
+ /** The column's name where its header cannot be shown as text: menus, card labels. */
4518
+ label?: string;
4519
+ /** Extra classes on the header cell. An escape hatch; prefer `align`. */
4520
+ headerClassName?: string;
4521
+ /** Extra classes on each body cell. An escape hatch; prefer `align`. */
4522
+ cellClassName?: string;
4523
+ }
4524
+ }
4525
+ type DataTableDensity = 'default' | 'compact';
4526
+ type DataTableAlign = 'center' | 'top';
4527
+ /** The table state you can control. Every key is optional and independently controlled. */
4528
+ interface DataTableState {
4529
+ sorting: SortingState;
4530
+ globalFilter: string;
4531
+ columnFilters: ColumnFiltersState;
4532
+ pagination: PaginationState;
4533
+ columnVisibility: VisibilityState;
4534
+ rowSelection: RowSelectionState;
4535
+ }
4536
+ /** Hand an operation to the server. The table then shows `data` as given for that operation. */
4537
+ interface DataTableManual {
4538
+ sorting?: boolean;
4539
+ filtering?: boolean;
4540
+ pagination?: boolean;
4541
+ /** Total rows on the server. Needed with `pagination`, so the pager knows the page count. */
4542
+ rowCount?: number;
4543
+ }
4544
+ interface DataTableSearchOptions {
4545
+ /** Filter one column instead of every column. */
4546
+ columnId?: string;
4547
+ placeholder?: string;
4548
+ /** Accessible name. Default "Search". */
4549
+ label?: string;
4550
+ }
4551
+ interface DataTableRowLinkProps {
4552
+ href: string;
4553
+ className: string;
4554
+ children: ReactNode;
4555
+ 'data-row-link': '';
4556
+ }
4557
+ interface DataTableProps<TData, TValue = unknown> {
4558
+ /** TanStack column definitions. Layout options go in each column's `meta`. */
4559
+ columns: ColumnDef<TData, TValue>[];
4560
+ data: TData[];
4561
+ /** A stable id per row. Defaults to the row index, which breaks selection across re-sorts. */
4562
+ getRowId?: (row: TData, index: number) => string;
4563
+ /**
4564
+ * Accessible name, rendered as a visually hidden `<caption>`. Give the table either this or
4565
+ * `caption`: an unnamed table is announced as just "table".
4566
+ */
4567
+ label?: string;
4568
+ /** A visible caption above the table, which also names it. */
4569
+ caption?: ReactNode;
4570
+ /** A search box. `true` filters across every column; pass options to filter one column. */
4571
+ searchable?: boolean | DataTableSearchOptions;
4572
+ /** A "Columns" menu to show and hide columns. */
4573
+ columnVisibility?: boolean;
4574
+ /** Page the rows. Default `true`. */
4575
+ pagination?: boolean;
4576
+ /** Rows per page to start with. Default `10`. */
4577
+ pageSize?: number;
4578
+ /** Page sizes to offer. Default `[10, 20, 50]`; `[]` hides the selector. */
4579
+ pageSizeOptions?: number[];
4580
+ /**
4581
+ * Adds a leading checkbox column (unless the columns already include `createSelectColumn()`).
4582
+ * Pass a function to make only some rows selectable.
4583
+ */
4584
+ enableRowSelection?: boolean | ((row: TData) => boolean);
4585
+ /** The selected rows, every time the selection changes. */
4586
+ onSelectionChange?: (rows: TData[]) => void;
4587
+ /** Names a row for its selection checkbox and its card, e.g. `(s) => s.name`. */
4588
+ getRowLabel?: (row: TData) => string;
4589
+ /**
4590
+ * Whole-row activation for rows that open something in place (a drawer, a modal). Keyboard
4591
+ * users focus the row and press Enter or Space. Rows that navigate should use `getRowHref`.
4592
+ */
4593
+ onRowClick?: (row: TData) => void;
4594
+ /**
4595
+ * The row's destination. The title cell renders as a real link (so middle-click, open in a
4596
+ * new tab and screen-reader link lists all work) and a click anywhere else on the row follows
4597
+ * it. Takes precedence over `onRowClick`.
4598
+ */
4599
+ getRowHref?: (row: TData) => string;
4600
+ /** Renders the row link, e.g. through your router's `Link`. Default: a plain `<a>`. */
4601
+ renderRowLink?: (props: DataTableRowLinkProps) => ReactElement;
4602
+ /** A state tint per row, e.g. `(u) => (u.active ? undefined : 'muted')`. */
4603
+ getRowTone?: (row: TData) => TableRowTone | undefined;
4604
+ /** De-emphasise some rows, e.g. expired ones. */
4605
+ getRowDimmed?: (row: TData) => boolean;
4606
+ /** Shows skeleton rows in place of `data`. */
4607
+ loading?: boolean;
4608
+ /** How many skeleton rows. Default `5`. */
4609
+ loadingRows?: number;
4610
+ /** A load failure, shown in place of the rows. Takes precedence over loading and empty. */
4611
+ error?: ReactNode;
4612
+ /** Adds a Retry button to the error state. */
4613
+ onRetry?: () => void;
4614
+ /** Shown when there are no rows. A string, or your own node. Default "No results found." */
4615
+ empty?: ReactNode;
4616
+ /** Extra toolbar content beside the search box: filters, a primary action. */
4617
+ toolbar?: ReactNode;
4618
+ /** Extra content below the pager, e.g. a "refreshed 2 min ago" note. */
4619
+ footer?: ReactNode;
4620
+ density?: DataTableDensity;
4621
+ /** Vertical alignment of body cells. Use `top` for multi-line or ragged cells. */
4622
+ align?: DataTableAlign;
4623
+ /**
4624
+ * Render rows as cards when the table's own width is below the breakpoint. Default `true`
4625
+ * at 560px. `false` always renders a table.
4626
+ */
4627
+ responsive?: boolean | {
4628
+ breakpoint?: number;
4629
+ };
4630
+ manual?: DataTableManual;
4631
+ /** Controlled state. Any key you pass is controlled; the rest stay internal. */
4632
+ state?: Partial<DataTableState>;
4633
+ onSortingChange?: (sorting: SortingState) => void;
4634
+ onGlobalFilterChange?: (value: string) => void;
4635
+ onColumnFiltersChange?: (filters: ColumnFiltersState) => void;
4636
+ onPaginationChange?: (pagination: PaginationState) => void;
4637
+ onColumnVisibilityChange?: (visibility: VisibilityState) => void;
4638
+ onRowSelectionChange?: (selection: RowSelectionState) => void;
4639
+ /** Passed to `useReactTable` last, for anything this API does not cover. */
4640
+ tableOptions?: Partial<TableOptions<TData>>;
4641
+ /** Classes on the bordered wrapper. Layout only, e.g. margins. */
4642
+ className?: string;
4643
+ }
4644
+ /**
4645
+ * A data table on TanStack Table: sorting, search, pagination, column visibility and row
4646
+ * selection built in, client-side by default and server-driven through `manual`.
4647
+ *
4648
+ * <DataTable label="Suppliers" columns={columns} data={suppliers} searchable columnVisibility />
4649
+ *
4650
+ * `TData` and `TValue` are inferred from `columns`, so `cell: ({ row }) => row.original.name`
4651
+ * is typed. Layout options (width, alignment, card-mode role, sticky) go in each column's `meta`.
4652
+ *
4653
+ * Layout, from SCIC's table:
4654
+ * - `table-fixed` plus one `<colgroup>`, so one set of widths governs every row and cells can
4655
+ * ellipsise. A column is never narrower than its header.
4656
+ * - Whatever does not fit scrolls inside a focusable, named region with edge shadows and
4657
+ * optional sticky first or last columns.
4658
+ * - Below 560px of its own width (not the viewport's) each row becomes a card: the title column
4659
+ * leads, `status` and `actions` sit at the top, the rest become labelled values.
4660
+ *
4661
+ * Accessibility: a real `<table>` with a caption, `aria-sort` on sortable headers, `aria-busy`
4662
+ * while loading, a polite announcement of the result count after a search, keyboard row
4663
+ * activation, and named selection checkboxes.
4664
+ */
4665
+ declare function DataTable<TData, TValue = unknown>({ columns, data, getRowId, label, caption, searchable, columnVisibility: showColumnMenu, pagination: paginated, pageSize, pageSizeOptions, enableRowSelection, onSelectionChange, getRowLabel, onRowClick, getRowHref, renderRowLink, getRowTone, getRowDimmed, loading, loadingRows, error, onRetry, empty, toolbar, footer, density, align, responsive, manual, state, onSortingChange, onGlobalFilterChange, onColumnFiltersChange, onPaginationChange, onColumnVisibilityChange, onRowSelectionChange, tableOptions, className, }: DataTableProps<TData, TValue>): react.JSX.Element;
4666
+
4667
+ /**
4668
+ * Tracks an element's rendered content-box width. New in 0.7.0, from SCIC.
4669
+ *
4670
+ * Use this when a component must switch *structure*, not just styling, based on the space it
4671
+ * actually has, e.g. `DataTable` swapping table rows for cards. Viewport breakpoints lie there:
4672
+ * a docked drawer or a one-third-width detail panel shrinks a component without the viewport
4673
+ * changing.
4674
+ *
4675
+ * Returns `[ref, width]`. `width` is `undefined` until the first measurement, which happens in
4676
+ * a layout effect so the first paint already uses it. Attach `ref` to a node whose width does
4677
+ * NOT depend on the structure you switch (typically the component's outer wrapper), or the
4678
+ * switch becomes a feedback loop.
4679
+ */
4680
+ declare function useElementWidth<T extends HTMLElement = HTMLElement>(): [
4681
+ (node: T | null) => void,
4682
+ number | undefined
4683
+ ];
4684
+
3505
4685
  type InlineAlertTone = 'info' | 'warning' | 'danger' | 'positive';
3506
4686
  interface InlineAlertProps {
3507
4687
  tone: InlineAlertTone;
@@ -3562,6 +4742,35 @@ interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {
3562
4742
  */
3563
4743
  declare const Spinner: react.ForwardRefExoticComponent<SpinnerProps & react.RefAttributes<HTMLSpanElement>>;
3564
4744
 
4745
+ interface ErrorBoundaryProps {
4746
+ children: ReactNode;
4747
+ /** Shown in place of the children when they throw. Default a quiet "Something went wrong". */
4748
+ fallback?: ReactNode;
4749
+ /** Changing this resets the boundary. Use the identity of whatever is being rendered. */
4750
+ resetKey?: string;
4751
+ onError?: (error: Error, info: ErrorInfo) => void;
4752
+ }
4753
+ interface ErrorBoundaryState {
4754
+ error: Error | null;
4755
+ }
4756
+ /**
4757
+ * Stops one broken subtree from taking down the whole app. New in 0.7.0, from SCIC.
4758
+ *
4759
+ * React unmounts the entire root when a render throws with no boundary above it, so one widget
4760
+ * that trips over an unexpected API shape blanks the screen instead of one card. This is the
4761
+ * floor under that: everything outside the boundary keeps working.
4762
+ *
4763
+ * A class, because error boundaries can only be classes. The error is still logged: the
4764
+ * fallback deliberately says nothing technical, so the console is how the cause is found.
4765
+ */
4766
+ declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
4767
+ state: ErrorBoundaryState;
4768
+ static getDerivedStateFromError(error: Error): ErrorBoundaryState;
4769
+ componentDidUpdate(previous: ErrorBoundaryProps): void;
4770
+ componentDidCatch(error: Error, info: ErrorInfo): void;
4771
+ render(): string | number | boolean | Iterable<ReactNode> | react.JSX.Element | null | undefined;
4772
+ }
4773
+
3565
4774
  type SkeletonShape = 'line' | 'block' | 'circle';
3566
4775
  interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {
3567
4776
  shape?: SkeletonShape;
@@ -3693,6 +4902,44 @@ interface QuickActionsBarProps {
3693
4902
  }
3694
4903
  declare function QuickActionsBar({ actions, active, onSelect, className }: QuickActionsBarProps): react.JSX.Element;
3695
4904
 
4905
+ /**
4906
+ * Presentational pieces of an AI chat transcript, ported from SCIC in 0.7.0. Markup only: the
4907
+ * conversation state and streaming stay in the app. SCIC's hard-coded hex colours are replaced
4908
+ * by tokens, so the bubbles follow dark mode.
4909
+ */
4910
+ interface AiAvatarProps {
4911
+ className?: string;
4912
+ /** The glyph. Default a chip, SCIC's assistant mark. */
4913
+ icon?: ReactNode;
4914
+ }
4915
+ /** The assistant's round mark, decorative. */
4916
+ declare function AiAvatar({ className, icon }: AiAvatarProps): react.JSX.Element;
4917
+ interface TypingIndicatorProps {
4918
+ /** What the assistant is doing, read aloud. Default "Assistant is typing". */
4919
+ label?: string;
4920
+ className?: string;
4921
+ }
4922
+ /**
4923
+ * "The assistant is working": an avatar, the label and three pulsing dots. A polite live region,
4924
+ * so a screen reader hears the label once rather than nothing. The dots stop under
4925
+ * `prefers-reduced-motion`.
4926
+ */
4927
+ declare function TypingIndicator({ label, className }: TypingIndicatorProps): react.JSX.Element;
4928
+ type ChatBubbleSender = 'user' | 'assistant';
4929
+ interface ChatBubbleProps {
4930
+ /**
4931
+ * Who wrote the message. Called `role` in SCIC; renamed so it cannot be mistaken for (or
4932
+ * linted as) an ARIA role.
4933
+ */
4934
+ sender: ChatBubbleSender;
4935
+ children: ReactNode;
4936
+ /** `assistant` only: the failed-turn palette, set as `data-state="failed"`. */
4937
+ failed?: boolean;
4938
+ className?: string;
4939
+ }
4940
+ /** One message. The user's sits right in a dark bubble; the assistant's spans the column. */
4941
+ declare function ChatBubble({ sender, children, failed, className }: ChatBubbleProps): react.JSX.Element;
4942
+
3696
4943
  /** Soft aurora atmosphere used by the public-facing screens (auth, event
3697
4944
  * onboarding) — mirrors AuroraBackground in pages/intelligence. Blobs are
3698
4945
  * corner-anchored so the effect scales from phones to kiosk displays.
@@ -3700,4 +4947,4 @@ declare function QuickActionsBar({ actions, active, onSelect, className }: Quick
3700
4947
  * with `relative`. */
3701
4948
  declare function AuroraBackdrop(): react.JSX.Element;
3702
4949
 
3703
- export { AIChatBar, type AIChatBarProps, AISuggestionChip, type AISuggestionChipProps, Accordion, AccordionContent, type AccordionContentProps, AccordionItem, type AccordionItemProps, type AccordionProps, AccordionTrigger, type AccordionTriggerProps, type AccordionType, AspectRatio, type AspectRatioProps, AuroraBackdrop, Avatar, AvatarBlock, type AvatarBlockProps, AvatarGroup, type AvatarGroupProps, type AvatarGroupSpacing, type AvatarImageProps, type AvatarInitialProps, type AvatarProps, type AvatarShape, type AvatarSize, Badge, type BadgeColor, type BadgeProps, type BadgeSize, type BadgeVariant, Banner, type BannerProps, type BannerVariant, BarChart, type BarChartOrientation, type BarChartProps, type BarChartSeries, type BarChartSize, Breadcrumb, BreadcrumbEllipsis, type BreadcrumbEllipsisProps, BreadcrumbItem, type BreadcrumbItemProps, type BreadcrumbProps, Button, ButtonGroup, type ButtonGroupAlign, type ButtonGroupItem, type ButtonGroupProps, type ButtonGroupVariant, type ButtonProps, type ButtonSize, type ButtonVariant, CHART_SEQUENCE, CHART_TONE, CHART_TRACK, COUNTRY_CODES, Calendar, type CalendarMode, type CalendarProps, Card, CardAction, type CardActionProps, CardBody, type CardBodyProps, CardDescription, type CardDescriptionProps, CardFooter, type CardFooterAlign, type CardFooterProps, CardHeader, type CardHeaderProps, type CardProps, type CardRadius, type CardSize, CardTitle, type CardTitleProps, type CardTone, Carousel, CarouselControls, type CarouselControlsProps, type CarouselProps, CarouselSlide, type CarouselSlideProps, CarouselViewport, type CarouselViewportProps, ChartLegend, type ChartLegendItem, type ChartLegendOrientation, type ChartLegendProps, type ChartTone, CheckIndicator, type CheckIndicatorProps, type CheckIndicatorStatus, Checkbox, type CheckboxProps, type CheckboxSize, type CheckedGroup, CheckedGroupList, type CheckedGroupListColumns, type CheckedGroupListProps, ChecklistRow, type ChecklistRowProps, type ChecklistRowState, Collapsible, CollapsibleContent, type CollapsibleContentProps, type CollapsibleProps, CollapsibleTrigger, type CollapsibleTriggerProps, type ColumnDef, Combobox, type ComboboxOption, type ComboboxProps, Command, type CommandItem, type CommandProps, ConfirmDialog, type ConfirmDialogProps, ContextMenu, MenuCheckboxItem as ContextMenuCheckboxItem, ContextMenuContent, type ContextMenuContentProps, MenuGroup as ContextMenuGroup, MenuItem as ContextMenuItem, MenuLabel as ContextMenuLabel, type ContextMenuProps, MenuRadioGroup as ContextMenuRadioGroup, MenuRadioItem as ContextMenuRadioItem, MenuSeparator as ContextMenuSeparator, MenuShortcut as ContextMenuShortcut, ContextMenuTrigger, type ContextMenuTriggerProps, ControlSizeProvider, type ControlSizeProviderProps, CountBadge, type CountBadgeProps, CountrySelect, type CountrySelectProps, DEFAULT_SCORE_THRESHOLDS, DataTable, type DataTableAlign, type DataTableDensity, type DataTableProps, DatePicker, type DatePickerProps, type DateRange, DetailGrid, type DetailGridColumns, type DetailGridProps, DetailItem, type DetailItemLayout, type DetailItemProps, type DetailItemSpan, DonutChart, type DonutChartProps, type DonutChartSize, type DonutSegment, Drawer, type DrawerProps, DropdownMenu, MenuCheckboxItem as DropdownMenuCheckboxItem, type MenuCheckboxItemProps as DropdownMenuCheckboxItemProps, DropdownMenuContent, type DropdownMenuContentProps, MenuGroup as DropdownMenuGroup, type MenuGroupProps as DropdownMenuGroupProps, MenuItem as DropdownMenuItem, type MenuItemProps as DropdownMenuItemProps, type MenuItemTone as DropdownMenuItemTone, MenuLabel as DropdownMenuLabel, type MenuLabelProps as DropdownMenuLabelProps, type DropdownMenuProps, MenuRadioGroup as DropdownMenuRadioGroup, type MenuRadioGroupProps as DropdownMenuRadioGroupProps, MenuRadioItem as DropdownMenuRadioItem, type MenuRadioItemProps as DropdownMenuRadioItemProps, MenuSeparator as DropdownMenuSeparator, type MenuSeparatorProps as DropdownMenuSeparatorProps, MenuShortcut as DropdownMenuShortcut, type MenuShortcutProps as DropdownMenuShortcutProps, DropdownMenuTrigger, type DropdownMenuTriggerProps, EmptyState, type EmptyStateProps, type EmptyStateSize, type EmptyStateVariant, EntityIconBadge, type EntityIconBadgeProps, type EntityIconBadgeSize, type EntityIconBadgeTone, EyebrowLabel, type EyebrowLabelProps, type EyebrowLabelVariant, Field, type FieldContextValue, FieldDescription, FieldError, FieldGroup, type FieldGroupProps, FieldHint, FieldLabel, type FieldLabelProps, FieldLegend, type FieldLegendProps, type FieldOrientation, type FieldProps, FieldSeparator, type FieldSeparatorProps, FieldSet, type FieldSetProps, type FieldTextProps, FileDropZone, type FileDropZoneProps, FileRow, type FileRowProps, FilterBar, type FilterBarProps, type FilterBarSize, FormCard, FormCardFooter, type FormCardFooterProps, FormCardHeader, type FormCardHeaderProps, Heading, HoverCard, type HoverCardProps, IconButton, type IconButtonProps, type IconButtonVariant, IconTextRow, type IconTextRowProps, InlineAlert, type InlineAlertProps, type InlineAlertTone, Input, InputControl, type InputControlProps, InputGroup, InputGroupAddon, type InputGroupAddonProps, type InputGroupAlign, InputGroupInput, type InputGroupInputProps, type InputGroupProps, InputGroupText, type InputGroupTextProps, InputOTP, type InputOTPMode, type InputOTPProps, type InputProps, type InputSize, Kbd, type KbdProps, type KbdSize, Label, type LabelProps, LegendDot, type LegendDotProps, type LegendDotShape, type LegendDotSize, ListRow, type ListRowDensity, type ListRowDivider, type ListRowProps, Menubar, MenuCheckboxItem as MenubarCheckboxItem, MenubarContent, type MenubarContentProps, MenuGroup as MenubarGroup, MenuItem as MenubarItem, MenuLabel as MenubarLabel, MenubarMenu, type MenubarMenuProps, type MenubarProps, MenuRadioGroup as MenubarRadioGroup, MenuRadioItem as MenubarRadioItem, MenuSeparator as MenubarSeparator, MenuShortcut as MenubarShortcut, MenubarTrigger, type MenubarTriggerProps, MiniBarChart, type MiniBarChartOrientation, type MiniBarChartProps, type MiniBarChartSize, Modal, ModalBody, type ModalBodyProps, ModalDescription, type ModalDescriptionProps, ModalFooter, type ModalFooterAlign, type ModalFooterProps, ModalHeader, type ModalHeaderProps, type ModalProps, type ModalSize, ModalTitle, type ModalTitleProps, type ModalTone, MultiSelectCard, type MultiSelectCardProps, type MultiSelectCardSize, NavItem, type NavItemProps, type NavItemSize, type NavItemVariant, NavigationMenu, NavigationMenuItem, type NavigationMenuItemProps, type NavigationMenuOrientation, type NavigationMenuProps, type NavigationMenuVariant, NoteConfirmModal, type NoteConfirmModalProps, NumberedList, type NumberedListGap, type NumberedListItem, type NumberedListProps, OVERLAY_SCRIM, PageHeading, type PageHeadingProps, type PageHeadingSize, PageToolbar, type PageToolbarProps, type PageToolbarSize, Pagination, type PaginationProps, type PaginationType, PasswordInput, type PasswordInputProps, Popover, PopoverContent, type PopoverContentProps, type PopoverProps, PopoverTrigger, type PopoverTriggerProps, Portal, type PortalProps, ProgressBar, type ProgressBarProps, type ProgressBarSize, type ProgressBarTone, type QuickAction, QuickActionsBar, type QuickActionsBarProps, ROLE_COMBO_OPTIONS, RadialGauge, type RadialGaugeProps, type RadialGaugeSize, Radio, RadioGroup, type RadioGroupOrientation, type RadioGroupProps, type RadioProps, Resizable, type ResizableDirection, ResizableHandle, type ResizableHandleProps, ResizablePanel, type ResizablePanelProps, type ResizableProps, RoleBadge, type RoleBadgeProps, type RoleBadgeTone, RoleComboBox, type RoleComboBoxProps, type RoleOption, SCROLLBAR_CLASSES, type ScoreDirection, type ScoreRampTone, type ScoreThresholds, type ScoreTone, ScoreValue, type ScoreValueProps, type ScoreValueSize, type ScoreValueTone, type ScoreValueWeight, ScoredRow, type ScoredRowAlign, type ScoredRowGap, type ScoredRowProps, ScrollArea, type ScrollAreaAxis, type ScrollAreaProps, SearchInput, type SearchInputProps, SegmentedControl, type SegmentedControlOption, type SegmentedControlProps, Select, SelectControl, type SelectControlProps, type SelectOption, type SelectOptionGroup, type SelectProps, Separator, type SeparatorOrientation, type SeparatorProps, Skeleton, type SkeletonProps, type SkeletonShape, Slider, type SliderProps, Sparkline, type SparklineProps, type SparklineSize, type SparklineVariant, Spinner, type SpinnerProps, type SpinnerSize, StatNumber, type StatNumberProps, type StatNumberSize, type StatNumberWeight, StatTile, type StatTileProps, StatusBadge, type StatusBadgeProps, type StatusBadgeSize, StatusChip, type StatusChipProps, StatusDot, type StatusDotProps, type StatusDotTone, type StatusTone, type StepItem, type StepStatus, Stepper, type StepperProps, type StepperSize, StepsList, type StepsListProps, Subheading, Subtitle, Switch, type SwitchProps, type SwitchSize, type TabItem, Table, TableBody, TableCaption, type TableCaptionProps, TableCell, TableCellBadge, type TableCellBadgeProps, TableCellLeadText, type TableCellLeadTextProps, TableCellProgress, type TableCellProgressProps, type TableCellProps, type TableCellSize, TableCellText, type TableCellTextProps, type TableDensity, TableFooter, TableHead, type TableHeadProps, TableHeader, type TableProps, TableRow, type TableRowProps, type TableSortDirection, Tabs, type TabsActivation, type TabsOrientation, TabsPanel, type TabsPanelProps, type TabsProps, type TabsSize, type TabsVariant, TagPill, type TagPillProps, type TagPillTone, Text, TextCode, TextEmphasis, TextLink, type TextLinkProps, TextList, type TextListDensity, TextListItem, type TextListItemProps, type TextListProps, type TextListVariant, type TextProps, TextSmall, TextStrong, TextTiny, Textarea, TextareaControl, type TextareaControlProps, type TextareaProps, TileGrid, type TileGridBreakpoint, type TileGridColumns, type TileGridProps, TimeZoneSelect, type TimeZoneSelectProps, TitleHero, TitlePage, type ToastOptions, type ToastRecord, type ToastTone, Toaster, type ToasterPosition, type ToasterProps, Toggle, ToggleGroup, ToggleGroupItem, type ToggleGroupItemProps, type ToggleGroupProps, type ToggleGroupType, type ToggleProps, type ToggleSize, type ToggleVariant, Tooltip, type TooltipProps, TrailChip, type TrailChipProps, type TreeItemState, TreeView, type TreeViewProps, type TreeViewSize, type TrendDirection, TrendLabel, type TrendLabelProps, type TrendLabelSize, type TrendLabelWeight, type UserAccountStatus, UserStatusPill, type UserStatusPillProps, WidgetFooter, type WidgetFooterProps, WidgetHeader, type WidgetHeaderEyebrowVariant, type WidgetHeaderProps, WidgetTitle, type WidgetTitleProps, type WidgetTitleSize, cn, countryOptions, getScoreTone, paginationRange, resolveChartColor, tabId, tabPanelId, timeZoneOffset, timeZoneOptions, useControlSize, useFieldContext, useFieldControl, useOverlayDismiss, useToast };
4950
+ export { AIChatBar, type AIChatBarProps, AISuggestionChip, type AISuggestionChipProps, AccessibleIcon, type AccessibleIconProps, Accordion, AccordionContent, type AccordionContentProps, AccordionItem, type AccordionItemProps, type AccordionProps, AccordionTrigger, type AccordionTriggerProps, type AccordionType, AiAvatar, type AiAvatarProps, AspectRatio, type AspectRatioProps, AuroraBackdrop, Avatar, AvatarBlock, type AvatarBlockProps, AvatarGroup, type AvatarGroupProps, type AvatarGroupSpacing, type AvatarImageProps, type AvatarInitialProps, type AvatarProps, type AvatarShape, type AvatarSize, Badge, type BadgeColor, type BadgeProps, type BadgeSize, type BadgeVariant, Banner, type BannerProps, type BannerVariant, BarChart, type BarChartOrientation, type BarChartProps, type BarChartSeries, type BarChartSize, Blockquote, type BlockquoteProps, Box, type BoxProps, Breadcrumb, BreadcrumbEllipsis, type BreadcrumbEllipsisProps, BreadcrumbItem, type BreadcrumbItemProps, type BreadcrumbProps, Button, ButtonGroup, type ButtonGroupAlign, type ButtonGroupItem, type ButtonGroupProps, type ButtonGroupVariant, type ButtonProps, type ButtonSize, type ButtonVariant, CHART_SEQUENCE, CHART_TONE, CHART_TRACK, COL_SPAN, COL_SPAN_BY_TIER, COUNTRY_CODES, Calendar, type CalendarMode, type CalendarProps, Card, CardAction, type CardActionProps, CardBody, type CardBodyProps, CardDescription, type CardDescriptionProps, CardFooter, type CardFooterAlign, type CardFooterProps, CardHeader, type CardHeaderProps, type CardProps, type CardRadius, type CardSize, CardTitle, type CardTitleProps, type CardTone, Carousel, CarouselControls, type CarouselControlsProps, type CarouselProps, CarouselSlide, type CarouselSlideProps, CarouselViewport, type CarouselViewportProps, ChartLegend, type ChartLegendItem, type ChartLegendOrientation, type ChartLegendProps, type ChartTone, ChatBubble, type ChatBubbleProps, type ChatBubbleSender, CheckIndicator, type CheckIndicatorProps, type CheckIndicatorStatus, Checkbox, CheckboxGroup, CheckboxGroupItem, type CheckboxGroupItemProps, type CheckboxGroupProps, type CheckboxProps, type CheckboxSize, type CheckedGroup, CheckedGroupList, type CheckedGroupListColumns, type CheckedGroupListProps, ChecklistRow, type ChecklistRowProps, type ChecklistRowState, type ColSize, Collapsible, CollapsibleContent, type CollapsibleContentProps, type CollapsibleProps, CollapsibleTrigger, type CollapsibleTriggerProps, type ColumnMobileRole, Combobox, type ComboboxOption, type ComboboxProps, Command, type CommandItem, type CommandProps, ConfirmDialog, type ConfirmDialogProps, Container, type ContainerProps, type ContainerSize, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, type ContextMenuContentProps, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, type ContextMenuProps, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, type ContextMenuTriggerProps, ControlSizeProvider, type ControlSizeProviderProps, CopyButton, type CopyButtonProps, CountBadge, type CountBadgeProps, CountrySelect, type CountrySelectProps, type CreateSelectColumnOptions, DEFAULT_SCORE_THRESHOLDS, DataTable, type DataTableAlign, type DataTableColumnAlign, DataTableColumnHeader, type DataTableColumnHeaderProps, type DataTableDensity, type DataTableManual, DataTablePagination, type DataTablePaginationProps, type DataTableProps, type DataTableRowLinkProps, type DataTableSearchOptions, type DataTableState, DataTableViewOptions, type DataTableViewOptionsProps, DatePicker, type DatePickerProps, type DateRange, DescriptionItem, type DescriptionItemProps, DescriptionList, type DescriptionListProps, DetailGrid, type DetailGridColumns, type DetailGridProps, DetailItem, type DetailItemLayout, type DetailItemProps, type DetailItemSpan, DonutChart, type DonutChartProps, type DonutChartSize, type DonutSegment, Drawer, DrawerBody, type DrawerBodyProps, DrawerClose, type DrawerCloseProps, DrawerDescription, type DrawerDescriptionProps, DrawerFooter, type DrawerFooterAlign, type DrawerFooterProps, DrawerHeader, type DrawerHeaderProps, type DrawerProps, type DrawerSide, DrawerTitle, type DrawerTitleProps, DrawerTrigger, type DrawerTriggerProps, DropdownMenu, DropdownMenuCheckboxItem, type MenuCheckboxItemProps as DropdownMenuCheckboxItemProps, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, type MenuGroupProps as DropdownMenuGroupProps, DropdownMenuItem, type MenuItemProps as DropdownMenuItemProps, type MenuItemTone as DropdownMenuItemTone, DropdownMenuLabel, type MenuLabelProps as DropdownMenuLabelProps, type DropdownMenuProps, DropdownMenuRadioGroup, type MenuRadioGroupProps as DropdownMenuRadioGroupProps, DropdownMenuRadioItem, type MenuRadioItemProps as DropdownMenuRadioItemProps, DropdownMenuSeparator, type MenuSeparatorProps as DropdownMenuSeparatorProps, DropdownMenuShortcut, type MenuShortcutProps as DropdownMenuShortcutProps, DropdownMenuSub, DropdownMenuSubContent, type MenuSubContentProps as DropdownMenuSubContentProps, type MenuSubProps as DropdownMenuSubProps, DropdownMenuSubTrigger, type MenuSubTriggerProps as DropdownMenuSubTriggerProps, DropdownMenuTrigger, type DropdownMenuTriggerProps, EmailText, EmptyState, type EmptyStateProps, type EmptyStateSize, type EmptyStateVariant, EntityIconBadge, type EntityIconBadgeProps, type EntityIconBadgeSize, type EntityIconBadgeTone, ErrorBoundary, type ErrorBoundaryProps, EyebrowLabel, type EyebrowLabelProps, type EyebrowLabelVariant, FOCUS_RING, FOCUS_RING_INSET, Field, type FieldContextValue, FieldDescription, FieldError, FieldGroup, type FieldGroupProps, FieldHint, FieldLabel, type FieldLabelProps, FieldLegend, type FieldLegendProps, type FieldOrientation, type FieldProps, FieldSeparator, type FieldSeparatorProps, FieldSet, type FieldSetProps, type FieldTextProps, FileDropZone, type FileDropZoneProps, FileRow, type FileRowProps, FilterBar, type FilterBarProps, type FilterBarSize, Flex, type FlexAlign, type FlexDirection, type FlexJustify, type FlexProps, FormCard, FormCardFooter, type FormCardFooterProps, FormCardHeader, type FormCardHeaderProps, type FullscreenStacking, FullscreenSurface, type FullscreenSurfaceProps, GRID_TIERS, Grid, type GridBreakpoint, type GridColumnCount, type GridProps, type GridTier, HEIGHT_CLASS, HEIGHT_PX, Heading, HoverCard, type HoverCardProps, IconButton, type IconButtonProps, type IconButtonVariant, IconTextRow, type IconTextRowProps, InlineAlert, type InlineAlertProps, type InlineAlertTone, Input, InputControl, type InputControlProps, InputGroup, InputGroupAddon, type InputGroupAddonProps, type InputGroupAlign, InputGroupInput, type InputGroupInputProps, type InputGroupProps, InputGroupText, type InputGroupTextProps, InputOTP, type InputOTPMode, type InputOTPProps, type InputProps, type InputSize, Kbd, type KbdProps, type KbdSize, Label, type LabelProps, LegendDot, type LegendDotProps, type LegendDotShape, type LegendDotSize, ListRow, type ListRowDensity, type ListRowDivider, type ListRowProps, Menubar, MenubarCheckboxItem, MenubarContent, type MenubarContentProps, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, type MenubarMenuProps, type MenubarProps, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, type MenubarTriggerProps, MiniBarChart, type MiniBarChartOrientation, type MiniBarChartProps, type MiniBarChartSize, Modal, ModalBody, type ModalBodyProps, ModalClose, type ModalCloseProps, ModalDescription, type ModalDescriptionProps, ModalFooter, type ModalFooterAlign, type ModalFooterProps, ModalHeader, type ModalHeaderProps, type ModalProps, type ModalSize, ModalTitle, type ModalTitleProps, type ModalTone, ModalTrigger, type ModalTriggerProps, MultiSelectCard, type MultiSelectCardProps, type MultiSelectCardSize, NavItem, type NavItemProps, type NavItemSize, type NavItemVariant, NavigationMenu, NavigationMenuItem, type NavigationMenuItemProps, type NavigationMenuOrientation, type NavigationMenuProps, type NavigationMenuVariant, NoteConfirmModal, type NoteConfirmModalProps, NumberedList, type NumberedListGap, type NumberedListItem, type NumberedListProps, OVERLAY_SCRIM, PageHeading, type PageHeadingProps, type PageHeadingSize, PageToolbar, type PageToolbarProps, type PageToolbarSize, Pagination, PaginationBar, type PaginationBarProps, type PaginationProps, type PaginationType, PasswordInput, type PasswordInputProps, Popover, PopoverAnchor, PopoverClose, PopoverContent, type PopoverContentProps, type PopoverProps, PopoverTrigger, type PopoverTriggerProps, Portal, PortalContainerProvider, type PortalProps, ProgressBar, type ProgressBarProps, type ProgressBarSize, type ProgressBarTone, type QuickAction, QuickActionsBar, type QuickActionsBarProps, Quote, ROLE_COMBO_OPTIONS, RadialGauge, type RadialGaugeProps, type RadialGaugeSize, Radio, RadioCards, RadioCardsItem, type RadioCardsItemProps, type RadioCardsProps, type RadioCardsSize, RadioGroup, type RadioGroupOrientation, type RadioGroupProps, type RadioProps, Resizable, type ResizableDirection, ResizableHandle, type ResizableHandleProps, ResizablePanel, type ResizablePanelProps, type ResizableProps, RoleBadge, type RoleBadgeProps, type RoleBadgeTone, RoleComboBox, type RoleComboBoxProps, type RoleOption, SCROLLBAR_CLASSES, SELECT_COLUMN_ID, type ScoreDirection, type ScoreRampTone, type ScoreThresholds, type ScoreTone, ScoreValue, type ScoreValueProps, type ScoreValueSize, type ScoreValueTone, type ScoreValueWeight, ScoredRow, type ScoredRowAlign, type ScoredRowGap, type ScoredRowProps, Scrim, type ScrimProps, ScrollArea, type ScrollAreaAxis, type ScrollAreaProps, SearchInput, type SearchInputProps, Section, type SectionProps, type SectionSize, SegmentedControl, type SegmentedControlOption, type SegmentedControlProps, Select, SelectControl, type SelectControlProps, type SelectOption, type SelectOptionGroup, type SelectProps, Separator, type SeparatorOrientation, type SeparatorProps, Skeleton, type SkeletonProps, type SkeletonShape, Slider, type SliderProps, Slot, type SlotProps, type SpaceToken, Sparkline, type SparklineProps, type SparklineSize, type SparklineVariant, Spinner, type SpinnerProps, type SpinnerSize, StatNumber, type StatNumberProps, type StatNumberSize, type StatNumberWeight, StatTile, type StatTileProps, StatusBadge, type StatusBadgeProps, type StatusBadgeSize, StatusChip, type StatusChipProps, StatusDot, type StatusDotProps, type StatusDotTone, type StatusTone, type StepItem, type StepStatus, Stepper, type StepperProps, type StepperSize, StepsList, type StepsListProps, Subheading, Subtitle, Switch, type SwitchProps, type SwitchSize, TIER_COLS, TIER_MIN_PX, type TabItem, Table, TableBody, TableCaption, type TableCaptionProps, TableCell, TableCellBadge, type TableCellBadgeProps, TableCellLeadText, type TableCellLeadTextProps, TableCellProgress, type TableCellProgressProps, type TableCellProps, type TableCellSize, TableCellText, type TableCellTextProps, type TableDensity, TableFooter, TableHead, type TableHeadProps, TableHeader, type TableProps, TableRow, type TableRowProps, type TableRowTone, type TableSortDirection, Tabs, type TabsActivation, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsOrientation, TabsPanel, type TabsPanelProps, type TabsProps, type TabsRootProps, type TabsSize, TabsTrigger, type TabsTriggerProps, type TabsVariant, TagInput, type TagInputParseResult, type TagInputProps, TagPill, type TagPillProps, type TagPillTone, Text, TextCode, TextEmphasis, TextLink, type TextLinkProps, TextList, type TextListDensity, TextListItem, type TextListItemProps, type TextListProps, type TextListVariant, type TextProps, TextSmall, TextStrong, TextTiny, type TextTone, Textarea, TextareaControl, type TextareaControlProps, type TextareaProps, TileGrid, type TileGridBreakpoint, type TileGridColumns, type TileGridProps, TimeZoneSelect, type TimeZoneSelectProps, TitleHero, TitlePage, type ToastOptions, type ToastRecord, type ToastTone, Toaster, type ToasterPosition, type ToasterProps, Toggle, ToggleGroup, ToggleGroupItem, type ToggleGroupItemProps, type ToggleGroupProps, type ToggleGroupType, type ToggleProps, type ToggleSize, type ToggleVariant, Tooltip, type TooltipProps, TrailChip, type TrailChipProps, type TreeItemState, TreeView, type TreeViewProps, type TreeViewSize, type TrendDirection, TrendLabel, type TrendLabelProps, type TrendLabelSize, type TrendLabelWeight, TypingIndicator, type TypingIndicatorProps, type UseFilePicker, type UseFilePickerOptions, type UseWidthTierOptions, type UseWidthTierResult, type UserAccountStatus, UserStatusPill, type UserStatusPillProps, VisuallyHidden, type VisuallyHiddenProps, WidgetFooter, type WidgetFooterProps, WidgetGrid, WidgetGridItem, type WidgetGridItemProps, type WidgetGridProps, WidgetGridRow, type WidgetGridRowProps, WidgetHeader, type WidgetHeaderEyebrowVariant, type WidgetHeaderProps, type WidgetHeight, WidgetTitle, type WidgetTitleProps, type WidgetTitleSize, cn, colsFor, composeRefs, countryOptions, createSelectColumn, currentZoneName, formatFileSize, getScoreTone, nextTier, paginationRange, quantizeWidth, resolveChartColor, slotWidthPx, tabId, tabPanelId, tierForWidth, timeZoneOffset, timeZoneOptions, useControlSize, useElementWidth, useFieldContext, useFieldControl, useFilePicker, useOverlayDismiss, usePortalContainer, useToast, useWidthTier };