@tensor_1/react 2.16.0 → 2.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/chart-preset.cjs +15 -3
  2. package/dist/chart.cjs +15 -3
  3. package/dist/components/Alert.js +15 -7
  4. package/dist/components/AppShell.d.ts +3 -1
  5. package/dist/components/AppShell.js +3 -1
  6. package/dist/components/Avatar.js +2 -1
  7. package/dist/components/Button.js +32 -16
  8. package/dist/components/Card.d.ts +3 -1
  9. package/dist/components/Card.js +2 -2
  10. package/dist/components/ChartCore.js +15 -3
  11. package/dist/components/CommandPalette.d.ts +4 -2
  12. package/dist/components/CommandPalette.js +66 -13
  13. package/dist/components/Comments.d.ts +5 -1
  14. package/dist/components/Comments.js +1 -1
  15. package/dist/components/Composer.d.ts +8 -1
  16. package/dist/components/Composer.js +7 -2
  17. package/dist/components/DetailLayout.js +1 -1
  18. package/dist/components/Drawer.d.ts +3 -4
  19. package/dist/components/Drawer.js +6 -4
  20. package/dist/components/Field.js +6 -3
  21. package/dist/components/Inbox.d.ts +13 -3
  22. package/dist/components/Inbox.js +62 -3
  23. package/dist/components/Input.d.ts +13 -2
  24. package/dist/components/Input.js +20 -5
  25. package/dist/components/Kanban.d.ts +15 -3
  26. package/dist/components/Kanban.js +42 -10
  27. package/dist/components/Meter.d.ts +3 -1
  28. package/dist/components/Meter.js +9 -1
  29. package/dist/components/Modal.d.ts +4 -5
  30. package/dist/components/Modal.js +4 -4
  31. package/dist/components/NavFavourites.js +11 -0
  32. package/dist/components/PageHeader.d.ts +3 -1
  33. package/dist/components/PageHeader.js +2 -2
  34. package/dist/components/Peek.d.ts +3 -4
  35. package/dist/components/Peek.js +9 -6
  36. package/dist/components/Progress.d.ts +3 -1
  37. package/dist/components/Progress.js +5 -3
  38. package/dist/components/Radio.d.ts +3 -1
  39. package/dist/components/Radio.js +6 -2
  40. package/dist/components/Spinner.d.ts +3 -1
  41. package/dist/components/Spinner.js +3 -3
  42. package/dist/components/Stat.js +5 -1
  43. package/dist/components/States.d.ts +1 -0
  44. package/dist/components/States.js +7 -1
  45. package/dist/components/Table.d.ts +8 -1
  46. package/dist/components/Table.js +10 -6
  47. package/dist/components/Tabs.d.ts +13 -1
  48. package/dist/components/Tabs.js +79 -4
  49. package/dist/components/Timeline.d.ts +3 -3
  50. package/dist/components/Timeline.js +3 -3
  51. package/dist/components/Toast.js +42 -5
  52. package/dist/components/Tooltip.d.ts +3 -1
  53. package/dist/components/Tooltip.js +44 -5
  54. package/dist/components/Tree.d.ts +2 -0
  55. package/dist/components/Tree.js +26 -4
  56. package/dist/hooks/useDialog.d.ts +1 -1
  57. package/dist/hooks/useDialog.js +17 -2
  58. package/dist/hooks/useTable.d.ts +5 -0
  59. package/dist/hooks/useTable.js +20 -1
  60. package/dist/index.cjs +693 -243
  61. package/dist/index.d.cts +125 -35
  62. package/dist/index.d.ts +2 -2
  63. package/dist/index.js +2 -1
  64. package/dist/tree-model.d.ts +4 -0
  65. package/dist/tree-model.js +8 -0
  66. package/package.json +1 -1
package/dist/index.d.cts CHANGED
@@ -1,9 +1,9 @@
1
1
  import * as react from 'react';
2
- import { RefObject, ButtonHTMLAttributes, ReactNode, InputHTMLAttributes, HTMLAttributes, TextareaHTMLAttributes, SelectHTMLAttributes, CSSProperties, AnchorHTMLAttributes, DetailsHTMLAttributes, TdHTMLAttributes, TableHTMLAttributes, ThHTMLAttributes } from 'react';
2
+ import { RefObject, ButtonHTMLAttributes, ReactNode, InputHTMLAttributes, AriaAttributes, HTMLAttributes, TextareaHTMLAttributes, SelectHTMLAttributes, AnchorHTMLAttributes, DetailsHTMLAttributes, TdHTMLAttributes, TableHTMLAttributes, ThHTMLAttributes } from 'react';
3
3
 
4
4
  declare function cx(...args: (string | false | null | undefined | 0)[]): string;
5
5
 
6
- declare function useDialog(open: boolean): React.RefObject<HTMLDialogElement>;
6
+ declare function useDialog(open: boolean, onClose?: () => void): React.RefObject<HTMLDialogElement>;
7
7
 
8
8
  /**
9
9
  * uix table engine — framework-agnostic, dependency-free logic for data grids.
@@ -114,6 +114,11 @@ interface UseTableResult<T> {
114
114
  pinned: ReadonlySet<string>;
115
115
  /** header select-all tri-state over the current derived rows. */
116
116
  selectAll: SelectAllState;
117
+ /**
118
+ * Screen-reader status text reflecting the latest change — "Sorted by {field}, {dir}",
119
+ * "{n} results" (filter/search), "{n} selected". Pass to `<TableWrap announcement>` (UIX-A11Y-2).
120
+ */
121
+ announcement: string;
117
122
  /** cycle a column's sort; pass additive (⇧-click) to keep it as a secondary key. */
118
123
  toggleSort: (field: string, additive?: boolean) => void;
119
124
  setSort: (keys: SortKey[]) => void;
@@ -265,8 +270,19 @@ interface InputGroupProps {
265
270
  leadingIcon?: ReactNode;
266
271
  trailingIcon?: ReactNode;
267
272
  className?: string;
273
+ /** Injected by `<Field>` when it wraps the group; forwarded onto the child control. */
274
+ id?: string;
275
+ 'aria-describedby'?: string;
276
+ 'aria-invalid'?: AriaAttributes['aria-invalid'];
277
+ 'aria-required'?: AriaAttributes['aria-required'];
268
278
  }
269
- declare function InputGroup({ children, leadingIcon, trailingIcon, className }: InputGroupProps): react.JSX.Element;
279
+ /**
280
+ * Icon-adorned wrapper for a child `<Input>`. The control is passed as `children`, so
281
+ * `<Field>`'s injected `id`/`aria-*` land on this wrapper — they're forwarded onto the
282
+ * single child element (the child's own props win) so label/message association survives
283
+ * the extra div (UIX-A11Y-3).
284
+ */
285
+ declare function InputGroup({ children, leadingIcon, trailingIcon, className, id, 'aria-describedby': describedBy, 'aria-invalid': invalid, 'aria-required': required, }: InputGroupProps): react.JSX.Element;
270
286
 
271
287
  interface ComboboxOption {
272
288
  value: string;
@@ -313,8 +329,10 @@ declare const Radio: react.ForwardRefExoticComponent<RadioProps & react.RefAttri
313
329
  interface RadioGroupProps {
314
330
  children: ReactNode;
315
331
  className?: string;
332
+ /** Group name; when set the group renders as fieldset/legend so it's announced with each radio. */
333
+ label?: ReactNode;
316
334
  }
317
- declare function RadioGroup({ children, className }: RadioGroupProps): react.JSX.Element;
335
+ declare function RadioGroup({ children, className, label }: RadioGroupProps): react.JSX.Element;
318
336
 
319
337
  interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {
320
338
  label?: ReactNode;
@@ -333,18 +351,17 @@ interface FieldProps {
333
351
  }
334
352
  declare function Field({ label, hint, error, success, required, children, className, htmlFor }: FieldProps): react.JSX.Element;
335
353
 
336
- interface ModalProps {
354
+ interface ModalProps extends Omit<HTMLAttributes<HTMLDialogElement>, 'title'> {
337
355
  open: boolean;
338
356
  onClose?: () => void;
339
357
  title?: ReactNode;
340
358
  children?: ReactNode;
341
359
  footer?: ReactNode;
342
- className?: string;
343
- style?: CSSProperties;
360
+ /** Accessible name for the close button (default "Close dialog"). */
344
361
  closeLabel?: string;
345
362
  role?: 'dialog' | 'alertdialog';
346
363
  }
347
- declare function Modal({ open, onClose, title, children, footer, className, style, closeLabel, role }: ModalProps): react.JSX.Element;
364
+ declare function Modal({ open, onClose, title, children, footer, className, closeLabel, role, ...rest }: ModalProps): react.JSX.Element;
348
365
 
349
366
  interface ConfirmDialogProps {
350
367
  open: boolean;
@@ -377,17 +394,16 @@ interface PromptDialogProps {
377
394
  }
378
395
  declare function PromptDialog({ open, title, description, inputLabel, defaultValue, placeholder, submitLabel, cancelLabel, closeLabel, onSubmit, onCancel, validate, pending }: PromptDialogProps): react.JSX.Element;
379
396
 
380
- interface DrawerProps {
397
+ interface DrawerProps extends Omit<HTMLAttributes<HTMLDialogElement>, 'title'> {
381
398
  open: boolean;
382
399
  onClose?: () => void;
383
400
  title?: ReactNode;
384
401
  children?: ReactNode;
385
402
  footer?: ReactNode;
386
- className?: string;
387
403
  }
388
- declare function Drawer({ open, onClose, title, children, footer, className }: DrawerProps): react.JSX.Element;
404
+ declare function Drawer({ open, onClose, title, children, footer, className, ...rest }: DrawerProps): react.JSX.Element;
389
405
 
390
- interface PeekProps {
406
+ interface PeekProps extends Omit<HTMLAttributes<HTMLDialogElement>, 'title'> {
391
407
  open: boolean;
392
408
  onClose?: () => void;
393
409
  title?: ReactNode;
@@ -396,18 +412,19 @@ interface PeekProps {
396
412
  onNavPrev?: () => void;
397
413
  onNavNext?: () => void;
398
414
  hint?: string;
399
- className?: string;
400
415
  }
401
- declare function Peek({ open, onClose, title, children, footer, onNavPrev, onNavNext, hint, className }: PeekProps): react.JSX.Element;
416
+ declare function Peek({ open, onClose, title, children, footer, onNavPrev, onNavNext, hint, className, onClick, ...rest }: PeekProps): react.JSX.Element;
402
417
 
403
418
  interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
404
419
  title?: ReactNode;
420
+ /** Element for the title — pick a real heading to slot the card into the page outline (UIX-A11Y-4). Default `div` keeps legacy rendering. */
421
+ titleAs?: 'h2' | 'h3' | 'h4' | 'div';
405
422
  subtitle?: ReactNode;
406
423
  headerAction?: ReactNode;
407
424
  footer?: ReactNode;
408
425
  children?: ReactNode;
409
426
  }
410
- declare function Card({ title, subtitle, headerAction, footer, children, className, ...props }: CardProps): react.JSX.Element;
427
+ declare function Card({ title, titleAs: TitleTag, subtitle, headerAction, footer, children, className, ...props }: CardProps): react.JSX.Element;
411
428
  interface CardLinkProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'title'> {
412
429
  title?: ReactNode;
413
430
  subtitle?: ReactNode;
@@ -435,6 +452,8 @@ declare function Breadcrumbs({ items, label, separator, className, ...props }: B
435
452
  interface PageHeaderProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
436
453
  eyebrow?: ReactNode;
437
454
  title: ReactNode;
455
+ /** Heading level for the title — drop to `h2` when the page already owns an `h1` (UIX-A11Y-4). */
456
+ as?: 'h1' | 'h2';
438
457
  /** Supporting copy under the title. */
439
458
  subtitle?: ReactNode;
440
459
  /** Right-aligned action area (buttons, menus). */
@@ -444,7 +463,7 @@ interface PageHeaderProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
444
463
  * Page header — eyebrow / title / subtitle + actions row, over `.uix-page-header`.
445
464
  * The hairline + breathing room below come from the component CSS.
446
465
  */
447
- declare function PageHeader({ eyebrow, title, subtitle, actions, className, ...props }: PageHeaderProps): react.JSX.Element;
466
+ declare function PageHeader({ eyebrow, title, subtitle, actions, as: TitleTag, className, ...props }: PageHeaderProps): react.JSX.Element;
448
467
 
449
468
  interface DetailLayoutProps extends HTMLAttributes<HTMLDivElement> {
450
469
  /** The narrow trailing column (record meta, side panels). */
@@ -589,6 +608,18 @@ interface TabProps extends Omit<HTMLAttributes<HTMLButtonElement>, 'onChange'> {
589
608
  disabled?: boolean;
590
609
  }
591
610
  declare function Tab({ value, children, disabled, className, onClick, ...props }: TabProps): react.JSX.Element;
611
+ interface TabPanelProps extends HTMLAttributes<HTMLDivElement> {
612
+ /** The owning `<Tab>`'s value — the panel renders only while that tab is selected. */
613
+ value: string;
614
+ children?: ReactNode;
615
+ }
616
+ /**
617
+ * The tabpanel paired with a `<Tab>` by `value` (UIX-A11Y-2): labelled by its tab,
618
+ * `tabIndex 0` so Tab from the tablist lands in the content, rendered only while
619
+ * selected. Place it as a direct child of `<Tabs>` — it is hoisted out of the tablist —
620
+ * or anywhere the Tabs context reaches.
621
+ */
622
+ declare function TabPanel({ value, children, ...props }: TabPanelProps): react.JSX.Element | null;
592
623
 
593
624
  type ShellNav = 'full' | 'rail' | 'hidden';
594
625
  interface AppShellProps extends HTMLAttributes<HTMLDivElement> {
@@ -606,11 +637,13 @@ interface AppShellProps extends HTMLAttributes<HTMLDivElement> {
606
637
  onExitFocus?: () => void;
607
638
  /** Drop the content gutter so a genuinely wide table runs edge-to-edge. */
608
639
  mainBleed?: boolean;
640
+ /** id given to `<main>` and targeted by the skip link. Override on collision (UIX-A11Y-2). */
641
+ mainId?: string;
609
642
  sidebar?: ReactNode;
610
643
  topbar?: ReactNode;
611
644
  children?: ReactNode;
612
645
  }
613
- declare function AppShell({ nav, collapsed, focus, onExitFocus, mainBleed, sidebar, topbar, children, className, ...props }: AppShellProps): react.JSX.Element;
646
+ declare function AppShell({ nav, collapsed, focus, onExitFocus, mainBleed, mainId, sidebar, topbar, children, className, ...props }: AppShellProps): react.JSX.Element;
614
647
 
615
648
  interface SidebarProps extends HTMLAttributes<HTMLElement> {
616
649
  collapsed?: boolean;
@@ -749,8 +782,10 @@ declare function Alert({ tone, title, icon, children, className, ...props }: Ale
749
782
  interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {
750
783
  size?: 'md' | 'lg';
751
784
  accent?: boolean;
785
+ /** Announced loading text (default "Loading…"). */
786
+ label?: string;
752
787
  }
753
- declare function Spinner({ size, accent, className, ...props }: SpinnerProps): react.JSX.Element;
788
+ declare function Spinner({ size, accent, label, className, ...props }: SpinnerProps): react.JSX.Element;
754
789
 
755
790
  type ToastTone = 'success' | 'danger' | 'info';
756
791
  interface ToastProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
@@ -768,6 +803,11 @@ interface ToasterProps extends HTMLAttributes<HTMLDivElement> {
768
803
  declare function Toaster({ children, className, ...props }: ToasterProps): react.JSX.Element;
769
804
 
770
805
  interface TableWrapProps extends HTMLAttributes<HTMLDivElement> {
806
+ /**
807
+ * Polite live-region text for table state changes — "Sorted by …", "N results",
808
+ * "N selected". Pass `useTable().announcement` straight through (UIX-A11Y-2).
809
+ */
810
+ announcement?: string;
771
811
  children?: ReactNode;
772
812
  }
773
813
  declare const TableWrap: react.ForwardRefExoticComponent<TableWrapProps & react.RefAttributes<HTMLDivElement>>;
@@ -819,9 +859,11 @@ interface RowActionProps extends ButtonHTMLAttributes<HTMLButtonElement> {
819
859
  declare function RowAction({ children, className, type, ...props }: RowActionProps): react.JSX.Element;
820
860
  interface ExpandToggleProps extends ButtonHTMLAttributes<HTMLButtonElement> {
821
861
  expanded?: boolean;
862
+ /** id of the detail row this toggle controls → `aria-controls` (UIX-A11Y-2). */
863
+ controls?: string;
822
864
  }
823
865
  /** Chevron button that expands/collapses an inline detail row. */
824
- declare function ExpandToggle({ expanded, className, type, ...props }: ExpandToggleProps): react.JSX.Element;
866
+ declare function ExpandToggle({ expanded, controls, className, type, ...props }: ExpandToggleProps): react.JSX.Element;
825
867
  /** Emphasised primary cell text. */
826
868
  declare function CellStrong({ children, className, ...props }: HTMLAttributes<HTMLSpanElement>): react.JSX.Element;
827
869
  /** Secondary line under a primary cell value (muted, meta size). */
@@ -863,8 +905,10 @@ interface ProgressProps extends HTMLAttributes<HTMLDivElement> {
863
905
  max?: number;
864
906
  /** Continuous slide animation when the amount of work is unknown. */
865
907
  indeterminate?: boolean;
908
+ /** Accessible name — rendered as `aria-label` (an explicit `aria-label` prop wins). */
909
+ label?: string;
866
910
  }
867
- declare function Progress({ value, max, indeterminate, className, ...props }: ProgressProps): react.JSX.Element;
911
+ declare function Progress({ value, max, indeterminate, label, className, ...props }: ProgressProps): react.JSX.Element;
868
912
 
869
913
  /** Fill color tone for the meter bar. Defaults to `success` (green). */
870
914
  type MeterTone = 'success' | 'warning' | 'danger' | 'attention' | 'overdue';
@@ -873,9 +917,11 @@ interface MeterProps extends HTMLAttributes<HTMLDivElement> {
873
917
  value?: number;
874
918
  /** Threshold tone applied via `data-tone` on the fill element. `success` is the implicit default (no attribute). */
875
919
  tone?: MeterTone;
920
+ /** Accessible name — rendered as `aria-label` (an explicit `aria-label` prop wins). */
921
+ label?: string;
876
922
  }
877
923
  /** Horizontal utilization / threshold bar backed by `.uix-meter`. */
878
- declare function Meter({ value, tone, className, ...props }: MeterProps): react.JSX.Element;
924
+ declare function Meter({ value, tone, label, className, ...props }: MeterProps): react.JSX.Element;
879
925
 
880
926
  interface StatTrend {
881
927
  direction: 'up' | 'down';
@@ -905,7 +951,9 @@ interface TooltipProps extends HTMLAttributes<HTMLSpanElement> {
905
951
  * Tooltip whose bubble renders in the top layer via the native Popover API, so it
906
952
  * escapes any `overflow: hidden/scroll` ancestor that would clip the old CSS-only
907
953
  * `[data-uix-tip]` tooltip (UIX-FIX-02). Positioned by the shared overlay engine
908
- * (flip/shift), shown on hover and keyboard focus, dismissed on blur or Escape.
954
+ * (flip/shift), shown on hover and keyboard focus, dismissed on blur or Escape
955
+ * (document-level, per WCAG 1.4.13), and hoverable: the bubble stays open while
956
+ * the pointer is over it (UIX-A11Y-1).
909
957
  */
910
958
  declare function Tooltip({ label, placement, className, children, ...props }: TooltipProps): react.JSX.Element;
911
959
 
@@ -957,6 +1005,7 @@ interface LoadingStateProps extends HTMLAttributes<HTMLDivElement> {
957
1005
  /** Number of skeleton rows to render. */
958
1006
  rows?: number;
959
1007
  density?: 'compact' | 'comfortable';
1008
+ /** Announced loading text (default "Loading"). */
960
1009
  label?: string;
961
1010
  }
962
1011
  /** A stack of skeleton rows for list/section loading. `role="status"`. */
@@ -1039,7 +1088,11 @@ declare function UserChip({ avatar, name, sub, className, children, ...props }:
1039
1088
  interface CommentsProps extends HTMLAttributes<HTMLDivElement> {
1040
1089
  children?: ReactNode;
1041
1090
  }
1042
- /** Comment thread container over `.uix-comments`. */
1091
+ /**
1092
+ * Comment thread container over `.uix-comments`. role="log" is an implicit polite
1093
+ * live region: comments appended after initial render are announced, the initial
1094
+ * list is not (UIX-A11Y-3). Pass `role` to override.
1095
+ */
1043
1096
  declare function Comments({ children, className, ...props }: CommentsProps): react.JSX.Element;
1044
1097
  interface CommentProps extends HTMLAttributes<HTMLDivElement> {
1045
1098
  /** Usually an `<Avatar />` (the grid reserves the leading column). */
@@ -1053,6 +1106,8 @@ declare function Comment({ avatar, author, meta, children, className, ...props }
1053
1106
 
1054
1107
  interface ComposerProps extends HTMLAttributes<HTMLDivElement> {
1055
1108
  children?: ReactNode;
1109
+ /** Accessible name for the child `<textarea>`; applied as its `aria-label`. */
1110
+ label?: string;
1056
1111
  }
1057
1112
  /**
1058
1113
  * Composer surface over `.uix-composer` — a single box that owns the
@@ -1060,8 +1115,13 @@ interface ComposerProps extends HTMLAttributes<HTMLDivElement> {
1060
1115
  * `<ComposerBar>` inside; the descendant `textarea` picks up the composer's
1061
1116
  * padding/typography automatically, so the input never reads as a second
1062
1117
  * nested box.
1118
+ *
1119
+ * A placeholder is not an accessible name, so the composer labels a bare child
1120
+ * `<textarea>` with `label` (default "Add a comment"); a textarea that brings its
1121
+ * own `aria-label`/`aria-labelledby` — or an `id` (likely tied to an external
1122
+ * `<label htmlFor>`) — is left untouched (UIX-A11Y-3).
1063
1123
  */
1064
- declare function Composer({ children, className, ...props }: ComposerProps): react.JSX.Element;
1124
+ declare function Composer({ children, className, label, ...props }: ComposerProps): react.JSX.Element;
1065
1125
  interface ComposerBarProps extends HTMLAttributes<HTMLDivElement> {
1066
1126
  children?: ReactNode;
1067
1127
  }
@@ -1166,12 +1226,12 @@ type SavedViewMenuProps = SavedViewMenuBaseProps & ({
1166
1226
  /** Generic saved-view selector. Persistence, ownership and authorization remain application concerns. */
1167
1227
  declare function SavedViewMenu({ items, onSelect, onPinChange, pinLabel, unpinLabel, emptyLabel, actions, footer }: SavedViewMenuProps): react.JSX.Element;
1168
1228
 
1169
- interface TimelineProps extends HTMLAttributes<HTMLDivElement> {
1229
+ interface TimelineProps extends HTMLAttributes<HTMLOListElement> {
1170
1230
  children?: ReactNode;
1171
1231
  }
1172
- /** Activity timeline container over `.uix-timeline`. */
1232
+ /** Activity timeline container over `.uix-timeline`. Ordered list so AT reads entry count + sequence (UIX-A11Y-4). */
1173
1233
  declare function Timeline({ children, className, ...props }: TimelineProps): react.JSX.Element;
1174
- interface TimelineItemProps extends HTMLAttributes<HTMLDivElement> {
1234
+ interface TimelineItemProps extends HTMLAttributes<HTMLLIElement> {
1175
1235
  /**
1176
1236
  * Custom rail node — an icon puck, an avatar, a tinted dot. Defaults to the
1177
1237
  * accent `.uix-timeline__node` dot. Supply this to make a heterogeneous feed
@@ -1278,7 +1338,9 @@ interface CommandPaletteProps extends HTMLAttributes<HTMLDivElement> {
1278
1338
  }
1279
1339
  /**
1280
1340
  * ⌘K command palette surface over `.uix-cmdk`. Presentational: mount it inside a
1281
- * Modal/Popover and wire search + keyboard selection in the consumer.
1341
+ * Modal/Popover and wire search + keyboard selection in the consumer. The input is
1342
+ * a combobox over the listbox of `CommandItem`s; spreads override every default, so
1343
+ * consumers already passing their own roles/labels keep working.
1282
1344
  */
1283
1345
  declare function CommandPalette({ inputProps, children, className, ...props }: CommandPaletteProps): react.JSX.Element;
1284
1346
  interface CommandGroupProps {
@@ -1295,17 +1357,27 @@ interface CommandItemProps extends HTMLAttributes<HTMLDivElement> {
1295
1357
  children?: ReactNode;
1296
1358
  }
1297
1359
  /** A single command row over `.uix-cmdk__item`. */
1298
- declare function CommandItem({ icon, shortcut, active, children, className, ...props }: CommandItemProps): react.JSX.Element;
1360
+ declare function CommandItem({ icon, shortcut, active, children, className, id, ...props }: CommandItemProps): react.JSX.Element;
1299
1361
 
1300
1362
  interface InboxProps extends HTMLAttributes<HTMLDivElement> {
1363
+ /**
1364
+ * Which pane a narrow viewport (<700px) shows: 'list' (default, matches the old
1365
+ * behaviour) or 'detail'. Consumers should render a Back control in the detail pane
1366
+ * on narrow viewports to return to the list (UIX-A11Y-2).
1367
+ */
1368
+ view?: 'list' | 'detail';
1301
1369
  children?: ReactNode;
1302
1370
  }
1303
1371
  /** Two-pane inbox master-detail container backed by `.uix-inbox`. Place `<InboxList>` and `<InboxDetail>` as children. */
1304
- declare function Inbox({ children, className, ...props }: InboxProps): react.JSX.Element;
1372
+ declare function Inbox({ view, children, className, ...props }: InboxProps): react.JSX.Element;
1305
1373
  interface InboxListProps extends HTMLAttributes<HTMLDivElement> {
1306
1374
  children?: ReactNode;
1307
1375
  }
1308
- /** Left-pane item list. Place `<InboxItem>` children here. */
1376
+ /**
1377
+ * Left-pane item list. Place `<InboxItem>` children here. A keyboard listbox
1378
+ * (UIX-A11Y-2): the list is the single tab stop; ArrowUp/ArrowDown/Home/End move the
1379
+ * active option via `aria-activedescendant`, Enter/Space click it.
1380
+ */
1309
1381
  declare function InboxList({ children, className, ...props }: InboxListProps): react.JSX.Element;
1310
1382
  interface InboxItemProps extends HTMLAttributes<HTMLDivElement> {
1311
1383
  /** Primary subject / title line. */
@@ -1321,7 +1393,7 @@ interface InboxItemProps extends HTMLAttributes<HTMLDivElement> {
1321
1393
  children?: ReactNode;
1322
1394
  }
1323
1395
  /** A single inbox row with subject, preview excerpt, optional leading slot, and unread/selected states. */
1324
- declare function InboxItem({ subject, preview, leading, unread, selected, children, className, ...props }: InboxItemProps): react.JSX.Element;
1396
+ declare function InboxItem({ subject, preview, leading, unread, selected, children, className, id, ...props }: InboxItemProps): react.JSX.Element;
1325
1397
  interface InboxDetailProps extends HTMLAttributes<HTMLDivElement> {
1326
1398
  children?: ReactNode;
1327
1399
  }
@@ -1329,25 +1401,39 @@ interface InboxDetailProps extends HTMLAttributes<HTMLDivElement> {
1329
1401
  declare function InboxDetail({ children, className, ...props }: InboxDetailProps): react.JSX.Element;
1330
1402
 
1331
1403
  interface KanbanProps extends HTMLAttributes<HTMLDivElement> {
1404
+ /**
1405
+ * Polite live-region text for keyboard moves (UIX-A11Y-2). `onMove` implementations
1406
+ * should set it, e.g. "Card X moved to Doing, position 2 of 4".
1407
+ */
1408
+ announcement?: string;
1332
1409
  children?: ReactNode;
1333
1410
  }
1334
- declare function Kanban({ children, className, ...props }: KanbanProps): react.JSX.Element;
1411
+ declare function Kanban({ announcement, children, className, ...props }: KanbanProps): react.JSX.Element;
1335
1412
  interface KanbanColumnProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
1336
1413
  title?: ReactNode;
1337
1414
  count?: number;
1338
1415
  children?: ReactNode;
1339
1416
  }
1340
1417
  declare function KanbanColumn({ title, count, children, className, ...props }: KanbanColumnProps): react.JSX.Element;
1418
+ type KanbanMoveDirection = 'up' | 'down' | 'left' | 'right';
1341
1419
  interface KanbanCardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
1342
1420
  title?: ReactNode;
1343
1421
  meta?: ReactNode;
1422
+ /**
1423
+ * Keyboard move contract (UIX-A11Y-2): when provided, Alt+Arrow on the focused card
1424
+ * calls it — the same accelerator convention as NavFavourites row moves. Pair with
1425
+ * the board-level `announcement` so SR users hear the result.
1426
+ */
1427
+ onMove?: (dir: KanbanMoveDirection) => void;
1344
1428
  children?: ReactNode;
1345
1429
  }
1346
- declare function KanbanCard({ title, meta, children, className, ...props }: KanbanCardProps): react.JSX.Element;
1430
+ declare function KanbanCard({ title, meta, children, className, onMove, onKeyDown, ...props }: KanbanCardProps): react.JSX.Element;
1347
1431
 
1348
1432
  interface TreeNodeData {
1349
1433
  id: string;
1350
1434
  label: ReactNode;
1435
+ /** Plain-text label for keyboard typeahead when `label` is not a string (UIX-A11Y-2). */
1436
+ typeaheadLabel?: string;
1351
1437
  icon?: ReactNode;
1352
1438
  children?: TreeNodeData[];
1353
1439
  }
@@ -1396,6 +1482,10 @@ declare function Tree({ nodes, expanded: controlledExpanded, defaultExpanded, se
1396
1482
  interface TreeLike<T> {
1397
1483
  id: string;
1398
1484
  children?: T[];
1485
+ /** The display label — typeahead matches it only when it is a plain string (UIX-A11Y-2). */
1486
+ label?: unknown;
1487
+ /** Explicit typeahead text for nodes whose `label` is not a string (rich ReactNode labels). */
1488
+ typeaheadLabel?: string;
1399
1489
  }
1400
1490
  interface FlatNode<T> {
1401
1491
  node: T;
@@ -2047,4 +2137,4 @@ declare function hsvToHex(value: HsvColor): string;
2047
2137
  declare function contrastRatio(background: string, foreground: string): number | undefined;
2048
2138
  declare function meetsContrast(background: string, foreground: string, minimum?: number): boolean;
2049
2139
 
2050
- export { type AccessStateProps, Alert, type AlertProps, type AlertTone, type Align, AppShell, type AppShellProps, type AppliedBrandProfileSnapshot, type AsyncOperationState, AsyncOperationStatus, type AsyncOperationStatusProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, type BoundedRelationshipGraph, type BrandProfile, BrandProfileEditor, type BrandProfileEditorProps, type BrandProfileLogo, type BrandProfileTypography, BrandProfiles, type BreadcrumbItem, Breadcrumbs, type BreadcrumbsProps, BuilderCanvas, type BuilderCanvasItem, type BuilderCanvasProps, type BuilderPaletteItem, BulkBar, type BulkBarProps, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, type CalendarDay, Card, CardLink, type CardLinkProps, type CardProps, CellStrong, CellSub, Checkbox, type CheckboxProps, CollapsibleSection, type CollapsibleSectionProps, ColorPicker, type ColorPickerProps, type ColumnFilter, Combobox, type ComboboxOption, type ComboboxProps, CommandGroup, type CommandGroupProps, CommandItem, type CommandItemProps, CommandPalette, type CommandPaletteProps, Comment, type CommentProps, Comments, type CommentsProps, Composer, ComposerBar, type ComposerBarProps, type ComposerProps, ConfirmDialog, type ConfirmDialogProps, ContentList, ContentListItem, type ContentListItemProps, type ContentListProps, DateRangePicker, type DateRangePickerProps, type DateRangeValue, DescriptionItem, type DescriptionItemProps, DescriptionList, type DescriptionListItem, type DescriptionListProps, DetailLayout, type DetailLayoutProps, DetailPage, type DetailPageMetric, type DetailPageProps, type DetailPageTab, type DiffEntry, type DiffKind, type DiffResolution, type DiffSummary, DiffViewer, type DiffViewerProps, Drawer, type DrawerProps, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, EventRow, type EventRowProps, ExpandToggle, type ExpandToggleProps, FeaturedRundown, FeaturedRundownItem, type FeaturedRundownItemProps, type FeaturedRundownProps, FeaturedStage, type FeaturedStageProps, Field, type FieldProps, type FilterKind, type FilterOp, type FilterOption, FilterPopover, type FilterPopoverProps, FilteredEmptyState, type FlatNode, Flow, FlowNode, type FlowNodeProps, type FlowNodeState, type FlowProps, type FlowVariant, ForbiddenState, Highlighted, type HighlightedProps, type HsvColor, Inbox, InboxDetail, type InboxDetailProps, InboxItem, type InboxItemProps, InboxList, type InboxListProps, type InboxProps, Input, InputGroup, type InputGroupProps, type InputProps, type JsonPrimitive, type JsonValue, Kanban, KanbanCard, type KanbanCardProps, KanbanColumn, type KanbanColumnProps, type KanbanProps, Label, type LabelProps, LicensePositionBar, type LicensePositionBarProps, List, ListItem, type ListItemProps, type ListProps, LoadingState, type LoadingStateProps, Mark, type MarkProps, type MatchBulkResult, MatchReview, type MatchReviewAction, type MatchReviewCandidate, type MatchReviewField, type MatchReviewProps, Meter, type MeterProps, type MeterTone, MetricInput, type MetricInputProps, Modal, type ModalProps, type NavFavouriteItem, NavFavourites, type NavFavouritesLabels, type NavFavouritesProps, NavGroup, type NavGroupProps, NavItem, type NavItemProps, NewsLead, type NewsLeadProps, NotFoundState, Note, type NoteProps, type NoteTone, NoticeQueue, type NoticeQueueProps, PageHeader, type PageHeaderProps, PageIntro, type PageIntroProps, Pagination, type PaginationProps, Peek, type PeekProps, type PillTone, type PillTreatment, Pipeline, type PipelineProps, PipelineStage, type PipelineStageProps, type PipelineStageState, type Placement, Popover, type PopoverProps, type PositionOptions, type PositionResult, type PositionedRelationshipNode, type Primitive, Progress, type ProgressProps, PromptDialog, type PromptDialogProps, Prose, type ProseProps, Radio, RadioGroup, type RadioGroupProps, type RadioProps, type Rect, type RelatedLinkItem, RelatedLinks, type RelatedLinksProps, RelationshipGraph, type RelationshipGraphEdge, type RelationshipGraphLegendItem, type RelationshipGraphNode, type RelationshipGraphProps, RelativeTime, type RelativeTimeFormatContext, type RelativeTimeProps, type RelativeTimeUnit, type RelativeTimeValue, ResourceGrid, type ResourceGridProps, type RgbColor, type Row, RowAction, type RowActionProps, RowActions, type RowActionsProps, type RuleAction, type RuleActionDefinition, RuleBuilder, type RuleBuilderProps, type RuleCondition, type RuleDefinition, type RuleFieldDefinition, type RuleGroup, type RuleOperatorDefinition, type RuleValidationIssue, type RuleValueEditorProps, type SavedViewItem, SavedViewMenu, type SavedViewMenuProps, SchedulingCalendar, type SchedulingCalendarEntry, type SchedulingCalendarOverlay, type SchedulingCalendarProps, type SchedulingCalendarView, type SchedulingEntryState, type SchedulingOverlayKind, SectionHead, type SectionHeadProps, type Segment, Segmented, SegmentedOption, type SegmentedOptionProps, type SegmentedProps, Select, type SelectAllState, type SelectProps, type ShellNav, type Side, Sidebar, type SidebarProps, SidebarSection, type SidebarSectionProps, type Size, Skeleton, type SkeletonProps, type SortDir, type SortDirection, type SortKey, Spinner, type SpinnerProps, StarButton, type StarButtonProps, Stat, StatLine, type StatLineItem, type StatLineProps, type StatProps, type StatTrend, type StateVariant, StatusPill, type StatusPillProps, StatusRow, type StatusRowProps, SubNavItem, type SubNavItemProps, Switch, type SwitchProps, Tab, type TabProps, Table, type TableDensity, type TableProps, TableWrap, type TableWrapProps, Tabs, type TabsProps, Td, type TdProps, Textarea, type TextareaProps, Th, type ThProps, Timeline, TimelineItem, type TimelineItemProps, type TimelineProps, Toast, type ToastProps, type ToastTone, Toaster, type ToasterProps, ToggleRow, type ToggleRowProps, Tooltip, type TooltipProps, Tr, type TrProps, Tree, type TreeLike, type TreeNavAction, type TreeNodeData, type TreeNodeProps, type TreeProps, type UseAnchoredPositionOptions, type UseTableOptions, type UseTableResult, type UseVirtualRowsOptions, type UseVirtualRowsResult, UserChip, type UserChipProps, ViewMenu, type ViewMenuColumn, type ViewMenuProps, type ViewState, type VirtualWindow, type ZonedDateSpan, addCalendarDays, addCalendarMonths, appendRuleNode, applyBrandProfile, applyFilters, boundRelationshipGraph, buildMonthGrid, buildThreeWayDiff, clampMetricValue, clampWidth, computePosition, contrastRatio, cx, enumerateDateSpan, filterComboboxOptions, findRuleNodeDepth, flattenTree, hexToRgb, highlightSegments, hsvToHex, hsvToRgb, isDateInRange, isDateUnavailable, isRuleGroup, layoutRelationshipGraph, mapRuleGroup, matchFilter, meetsContrast, mergePinned, moveRuleNode, multiSort, nextSortDir, normalizeHex, parseDateValue, parseMetricValue, parseView, relationshipNeighbors, relativeTimeValue, removeRuleNode, reorder, restoreBrandProfile, rgbToHex, rgbToHsv, ruleDepth, searchRows, selectAllState, selectRangeDate, serializeView, shouldVirtualize, startOfMonth, stepMetricValue, summarizeDiff, summarizeRule, toDateKey, toggleId, togglePage, toggleSort, traverseRelationshipNode, treeNav, useAnchoredPosition, useDialog, useTable, useVirtualRows, validateRuleDefinition, virtualWindow, zonedDateKey, zonedDateSpan };
2140
+ export { type AccessStateProps, Alert, type AlertProps, type AlertTone, type Align, AppShell, type AppShellProps, type AppliedBrandProfileSnapshot, type AsyncOperationState, AsyncOperationStatus, type AsyncOperationStatusProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, type BoundedRelationshipGraph, type BrandProfile, BrandProfileEditor, type BrandProfileEditorProps, type BrandProfileLogo, type BrandProfileTypography, BrandProfiles, type BreadcrumbItem, Breadcrumbs, type BreadcrumbsProps, BuilderCanvas, type BuilderCanvasItem, type BuilderCanvasProps, type BuilderPaletteItem, BulkBar, type BulkBarProps, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, type CalendarDay, Card, CardLink, type CardLinkProps, type CardProps, CellStrong, CellSub, Checkbox, type CheckboxProps, CollapsibleSection, type CollapsibleSectionProps, ColorPicker, type ColorPickerProps, type ColumnFilter, Combobox, type ComboboxOption, type ComboboxProps, CommandGroup, type CommandGroupProps, CommandItem, type CommandItemProps, CommandPalette, type CommandPaletteProps, Comment, type CommentProps, Comments, type CommentsProps, Composer, ComposerBar, type ComposerBarProps, type ComposerProps, ConfirmDialog, type ConfirmDialogProps, ContentList, ContentListItem, type ContentListItemProps, type ContentListProps, DateRangePicker, type DateRangePickerProps, type DateRangeValue, DescriptionItem, type DescriptionItemProps, DescriptionList, type DescriptionListItem, type DescriptionListProps, DetailLayout, type DetailLayoutProps, DetailPage, type DetailPageMetric, type DetailPageProps, type DetailPageTab, type DiffEntry, type DiffKind, type DiffResolution, type DiffSummary, DiffViewer, type DiffViewerProps, Drawer, type DrawerProps, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, EventRow, type EventRowProps, ExpandToggle, type ExpandToggleProps, FeaturedRundown, FeaturedRundownItem, type FeaturedRundownItemProps, type FeaturedRundownProps, FeaturedStage, type FeaturedStageProps, Field, type FieldProps, type FilterKind, type FilterOp, type FilterOption, FilterPopover, type FilterPopoverProps, FilteredEmptyState, type FlatNode, Flow, FlowNode, type FlowNodeProps, type FlowNodeState, type FlowProps, type FlowVariant, ForbiddenState, Highlighted, type HighlightedProps, type HsvColor, Inbox, InboxDetail, type InboxDetailProps, InboxItem, type InboxItemProps, InboxList, type InboxListProps, type InboxProps, Input, InputGroup, type InputGroupProps, type InputProps, type JsonPrimitive, type JsonValue, Kanban, KanbanCard, type KanbanCardProps, KanbanColumn, type KanbanColumnProps, type KanbanMoveDirection, type KanbanProps, Label, type LabelProps, LicensePositionBar, type LicensePositionBarProps, List, ListItem, type ListItemProps, type ListProps, LoadingState, type LoadingStateProps, Mark, type MarkProps, type MatchBulkResult, MatchReview, type MatchReviewAction, type MatchReviewCandidate, type MatchReviewField, type MatchReviewProps, Meter, type MeterProps, type MeterTone, MetricInput, type MetricInputProps, Modal, type ModalProps, type NavFavouriteItem, NavFavourites, type NavFavouritesLabels, type NavFavouritesProps, NavGroup, type NavGroupProps, NavItem, type NavItemProps, NewsLead, type NewsLeadProps, NotFoundState, Note, type NoteProps, type NoteTone, NoticeQueue, type NoticeQueueProps, PageHeader, type PageHeaderProps, PageIntro, type PageIntroProps, Pagination, type PaginationProps, Peek, type PeekProps, type PillTone, type PillTreatment, Pipeline, type PipelineProps, PipelineStage, type PipelineStageProps, type PipelineStageState, type Placement, Popover, type PopoverProps, type PositionOptions, type PositionResult, type PositionedRelationshipNode, type Primitive, Progress, type ProgressProps, PromptDialog, type PromptDialogProps, Prose, type ProseProps, Radio, RadioGroup, type RadioGroupProps, type RadioProps, type Rect, type RelatedLinkItem, RelatedLinks, type RelatedLinksProps, RelationshipGraph, type RelationshipGraphEdge, type RelationshipGraphLegendItem, type RelationshipGraphNode, type RelationshipGraphProps, RelativeTime, type RelativeTimeFormatContext, type RelativeTimeProps, type RelativeTimeUnit, type RelativeTimeValue, ResourceGrid, type ResourceGridProps, type RgbColor, type Row, RowAction, type RowActionProps, RowActions, type RowActionsProps, type RuleAction, type RuleActionDefinition, RuleBuilder, type RuleBuilderProps, type RuleCondition, type RuleDefinition, type RuleFieldDefinition, type RuleGroup, type RuleOperatorDefinition, type RuleValidationIssue, type RuleValueEditorProps, type SavedViewItem, SavedViewMenu, type SavedViewMenuProps, SchedulingCalendar, type SchedulingCalendarEntry, type SchedulingCalendarOverlay, type SchedulingCalendarProps, type SchedulingCalendarView, type SchedulingEntryState, type SchedulingOverlayKind, SectionHead, type SectionHeadProps, type Segment, Segmented, SegmentedOption, type SegmentedOptionProps, type SegmentedProps, Select, type SelectAllState, type SelectProps, type ShellNav, type Side, Sidebar, type SidebarProps, SidebarSection, type SidebarSectionProps, type Size, Skeleton, type SkeletonProps, type SortDir, type SortDirection, type SortKey, Spinner, type SpinnerProps, StarButton, type StarButtonProps, Stat, StatLine, type StatLineItem, type StatLineProps, type StatProps, type StatTrend, type StateVariant, StatusPill, type StatusPillProps, StatusRow, type StatusRowProps, SubNavItem, type SubNavItemProps, Switch, type SwitchProps, Tab, TabPanel, type TabPanelProps, type TabProps, Table, type TableDensity, type TableProps, TableWrap, type TableWrapProps, Tabs, type TabsProps, Td, type TdProps, Textarea, type TextareaProps, Th, type ThProps, Timeline, TimelineItem, type TimelineItemProps, type TimelineProps, Toast, type ToastProps, type ToastTone, Toaster, type ToasterProps, ToggleRow, type ToggleRowProps, Tooltip, type TooltipProps, Tr, type TrProps, Tree, type TreeLike, type TreeNavAction, type TreeNodeData, type TreeNodeProps, type TreeProps, type UseAnchoredPositionOptions, type UseTableOptions, type UseTableResult, type UseVirtualRowsOptions, type UseVirtualRowsResult, UserChip, type UserChipProps, ViewMenu, type ViewMenuColumn, type ViewMenuProps, type ViewState, type VirtualWindow, type ZonedDateSpan, addCalendarDays, addCalendarMonths, appendRuleNode, applyBrandProfile, applyFilters, boundRelationshipGraph, buildMonthGrid, buildThreeWayDiff, clampMetricValue, clampWidth, computePosition, contrastRatio, cx, enumerateDateSpan, filterComboboxOptions, findRuleNodeDepth, flattenTree, hexToRgb, highlightSegments, hsvToHex, hsvToRgb, isDateInRange, isDateUnavailable, isRuleGroup, layoutRelationshipGraph, mapRuleGroup, matchFilter, meetsContrast, mergePinned, moveRuleNode, multiSort, nextSortDir, normalizeHex, parseDateValue, parseMetricValue, parseView, relationshipNeighbors, relativeTimeValue, removeRuleNode, reorder, restoreBrandProfile, rgbToHex, rgbToHsv, ruleDepth, searchRows, selectAllState, selectRangeDate, serializeView, shouldVirtualize, startOfMonth, stepMetricValue, summarizeDiff, summarizeRule, toDateKey, toggleId, togglePage, toggleSort, traverseRelationshipNode, treeNav, useAnchoredPosition, useDialog, useTable, useVirtualRows, validateRuleDefinition, virtualWindow, zonedDateKey, zonedDateSpan };
package/dist/index.d.ts CHANGED
@@ -28,7 +28,7 @@ export { ToggleRow, ToggleRowProps } from './components/ToggleRow.js';
28
28
  export { CollapsibleSection, CollapsibleSectionProps } from './components/CollapsibleSection.js';
29
29
  export { List, ListItem, ListItemProps, ListProps } from './components/List.js';
30
30
  export { DescriptionItem, DescriptionItemProps, DescriptionList, DescriptionListItem, DescriptionListProps } from './components/DescriptionList.js';
31
- export { Tab, TabProps, Tabs, TabsProps } from './components/Tabs.js';
31
+ export { Tab, TabPanel, TabPanelProps, TabProps, Tabs, TabsProps } from './components/Tabs.js';
32
32
  export { AppShell, AppShellProps, ShellNav } from './components/AppShell.js';
33
33
  export { NavGroup, NavGroupProps, NavItem, NavItemProps, Sidebar, SidebarProps, SidebarSection, SidebarSectionProps, SubNavItem, SubNavItemProps } from './components/Sidebar.js';
34
34
  export { StarButton, StarButtonProps } from './components/StarButton.js';
@@ -61,7 +61,7 @@ export { Note, NoteProps, NoteTone, Prose, ProseProps } from './components/Prose
61
61
  export { Popover, PopoverProps } from './components/Popover.js';
62
62
  export { CommandGroup, CommandGroupProps, CommandItem, CommandItemProps, CommandPalette, CommandPaletteProps } from './components/CommandPalette.js';
63
63
  export { Inbox, InboxDetail, InboxDetailProps, InboxItem, InboxItemProps, InboxList, InboxListProps, InboxProps } from './components/Inbox.js';
64
- export { Kanban, KanbanCard, KanbanCardProps, KanbanColumn, KanbanColumnProps, KanbanProps } from './components/Kanban.js';
64
+ export { Kanban, KanbanCard, KanbanCardProps, KanbanColumn, KanbanColumnProps, KanbanMoveDirection, KanbanProps } from './components/Kanban.js';
65
65
  export { Tree, TreeNodeData, TreeNodeProps, TreeProps } from './components/Tree.js';
66
66
  export { FlatNode, TreeLike, TreeNavAction, flattenTree, treeNav } from './tree-model.js';
67
67
  export { ContentList, ContentListItem, ContentListItemProps, ContentListProps, EventRow, EventRowProps, FeaturedRundown, FeaturedRundownItem, FeaturedRundownItemProps, FeaturedRundownProps, FeaturedStage, FeaturedStageProps, NewsLead, NewsLeadProps, NoticeQueue, NoticeQueueProps, PageIntro, PageIntroProps, ResourceGrid, ResourceGridProps, SectionHead, SectionHeadProps, StatLine, StatLineItem, StatLineProps, StatusRow, StatusRowProps } from './components/EditorialHome.js';
package/dist/index.js CHANGED
@@ -28,7 +28,7 @@ import { ToggleRow } from "./components/ToggleRow.js";
28
28
  import { CollapsibleSection } from "./components/CollapsibleSection.js";
29
29
  import { List, ListItem } from "./components/List.js";
30
30
  import { DescriptionList, DescriptionItem } from "./components/DescriptionList.js";
31
- import { Tabs, Tab } from "./components/Tabs.js";
31
+ import { Tabs, Tab, TabPanel } from "./components/Tabs.js";
32
32
  import { AppShell } from "./components/AppShell.js";
33
33
  import { Sidebar, SidebarSection, NavItem, NavGroup, SubNavItem } from "./components/Sidebar.js";
34
34
  import { StarButton } from "./components/StarButton.js";
@@ -247,6 +247,7 @@ export {
247
247
  SubNavItem,
248
248
  Switch,
249
249
  Tab,
250
+ TabPanel,
250
251
  Table,
251
252
  TableWrap,
252
253
  Tabs,
@@ -11,6 +11,10 @@
11
11
  interface TreeLike<T> {
12
12
  id: string;
13
13
  children?: T[];
14
+ /** The display label — typeahead matches it only when it is a plain string (UIX-A11Y-2). */
15
+ label?: unknown;
16
+ /** Explicit typeahead text for nodes whose `label` is not a string (rich ReactNode labels). */
17
+ typeaheadLabel?: string;
14
18
  }
15
19
  interface FlatNode<T> {
16
20
  node: T;
@@ -40,6 +40,14 @@ function treeNav(flat, currentId, key) {
40
40
  case " ":
41
41
  return cur.hasChildren ? { toggleId: cur.node.id, selectId: cur.node.id } : { selectId: cur.node.id };
42
42
  default:
43
+ if (key.length === 1) {
44
+ const q = key.toLowerCase();
45
+ for (let step = 1; step <= flat.length; step++) {
46
+ const f = flat[(idx + step) % flat.length];
47
+ const label = f.node.typeaheadLabel ?? (typeof f.node.label === "string" ? f.node.label : void 0);
48
+ if (label != null && label.toLowerCase().startsWith(q)) return { focusId: f.node.id };
49
+ }
50
+ }
43
51
  return {};
44
52
  }
45
53
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tensor_1/react",
3
- "version": "2.16.0",
3
+ "version": "2.17.0",
4
4
  "description": "Thin React wrappers over the UIx v2 CSS component library.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",