@astryxdesign/core 0.1.8-canary.0c4d8d7 → 0.1.8-canary.0db5dfd

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 (103) hide show
  1. package/dist/Avatar/AvatarStatusDot.d.ts +33 -5
  2. package/dist/Avatar/AvatarStatusDot.d.ts.map +1 -1
  3. package/dist/Avatar/AvatarStatusDot.js +144 -19
  4. package/dist/Calendar/Calendar.d.ts.map +1 -1
  5. package/dist/Calendar/Calendar.js +30 -2
  6. package/dist/Chat/useChatStreamScroll.d.ts +2 -1
  7. package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
  8. package/dist/Chat/useChatStreamScroll.js +22 -8
  9. package/dist/Chat/useSpeechRecognition.d.ts +0 -1
  10. package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
  11. package/dist/Chat/useSpeechRecognition.js +1 -1
  12. package/dist/CheckboxList/CheckboxListItem.d.ts +20 -1
  13. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  14. package/dist/CheckboxList/CheckboxListItem.js +18 -2
  15. package/dist/Dialog/Dialog.d.ts +3 -0
  16. package/dist/Dialog/Dialog.d.ts.map +1 -1
  17. package/dist/Dialog/Dialog.js +54 -5
  18. package/dist/Dialog/DialogContext.d.ts +7 -0
  19. package/dist/Dialog/DialogContext.d.ts.map +1 -1
  20. package/dist/Dialog/DialogContext.js +2 -2
  21. package/dist/Dialog/DialogHeader.d.ts +5 -2
  22. package/dist/Dialog/DialogHeader.d.ts.map +1 -1
  23. package/dist/Dialog/DialogHeader.js +6 -1
  24. package/dist/Icon/Icon.d.ts +7 -2
  25. package/dist/Icon/Icon.d.ts.map +1 -1
  26. package/dist/Item/Item.d.ts +6 -1
  27. package/dist/Item/Item.d.ts.map +1 -1
  28. package/dist/Item/Item.js +22 -1
  29. package/dist/Stack/stack.stylex.d.ts +9 -9
  30. package/dist/Table/plugins/selection/useTableSelection.d.ts +2 -1
  31. package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
  32. package/dist/Thumbnail/Thumbnail.d.ts +8 -1
  33. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  34. package/dist/Thumbnail/Thumbnail.js +27 -1
  35. package/dist/ToggleButton/ToggleButtonGroup.d.ts +0 -1
  36. package/dist/ToggleButton/ToggleButtonGroup.d.ts.map +1 -1
  37. package/dist/ToggleButton/ToggleButtonGroup.js +1 -1
  38. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +9 -1
  39. package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts.map +1 -1
  40. package/dist/TopNav/TopNavMegaMenuFeaturedCard.js +8 -1
  41. package/dist/TreeList/TreeListBranches.d.ts +5 -0
  42. package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
  43. package/dist/TreeList/TreeListBranches.js +10 -4
  44. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  45. package/dist/TreeList/TreeListItem.js +25 -6
  46. package/dist/astryx.css +0 -1
  47. package/dist/astryx.umd.js +43 -43
  48. package/dist/astryx.umd.js.map +3 -3
  49. package/dist/docs-types.d.ts +8 -0
  50. package/dist/docs-types.d.ts.map +1 -1
  51. package/dist/theme/hct.d.ts +0 -1
  52. package/dist/theme/hct.d.ts.map +1 -1
  53. package/dist/theme/hct.js +1 -1
  54. package/locales/en.json +4 -0
  55. package/locales/fr-FR.json +4 -0
  56. package/locales/pseudo.json +3 -0
  57. package/package.json +1 -1
  58. package/src/Avatar/Avatar.doc.mjs +5 -3
  59. package/src/Avatar/AvatarStatusDot.doc.mjs +23 -12
  60. package/src/Avatar/AvatarStatusDot.test.tsx +284 -0
  61. package/src/Avatar/AvatarStatusDot.tsx +178 -21
  62. package/src/Calendar/Calendar.doc.mjs +12 -1
  63. package/src/Calendar/Calendar.test.tsx +193 -0
  64. package/src/Calendar/Calendar.tsx +38 -16
  65. package/src/Carousel/Carousel.doc.mjs +1 -0
  66. package/src/Chat/useChatStreamScroll.test.tsx +49 -0
  67. package/src/Chat/useChatStreamScroll.ts +27 -10
  68. package/src/Chat/useSpeechRecognition.ts +1 -1
  69. package/src/CheckboxList/CheckboxList.test.tsx +72 -2
  70. package/src/CheckboxList/CheckboxListItem.doc.mjs +33 -5
  71. package/src/CheckboxList/CheckboxListItem.tsx +50 -6
  72. package/src/ContextMenu/ContextMenu.test.tsx +193 -0
  73. package/src/Dialog/Dialog.doc.mjs +2 -2
  74. package/src/Dialog/Dialog.test.tsx +77 -4
  75. package/src/Dialog/Dialog.tsx +75 -3
  76. package/src/Dialog/DialogContext.ts +9 -2
  77. package/src/Dialog/DialogHeader.doc.mjs +2 -2
  78. package/src/Dialog/DialogHeader.tsx +9 -2
  79. package/src/DropdownMenu/DropdownMenu.test.tsx +169 -0
  80. package/src/Icon/Icon.doc.mjs +3 -2
  81. package/src/Icon/Icon.tsx +7 -2
  82. package/src/Item/Item.test.tsx +40 -18
  83. package/src/Item/Item.tsx +38 -2
  84. package/src/List/List.test.tsx +9 -8
  85. package/src/PowerSearch/PowerSearch.doc.mjs +14 -0
  86. package/src/PowerSearch/PowerSearch.test.tsx +20 -0
  87. package/src/Table/plugins/selection/useTableSelection.tsx +2 -1
  88. package/src/Thumbnail/Thumbnail.doc.mjs +3 -3
  89. package/src/Thumbnail/Thumbnail.test.tsx +35 -0
  90. package/src/Thumbnail/Thumbnail.tsx +52 -3
  91. package/src/ToggleButton/ToggleButtonGroup.tsx +1 -1
  92. package/src/Tokenizer/Tokenizer.doc.mjs +14 -0
  93. package/src/Tokenizer/Tokenizer.test.tsx +46 -0
  94. package/src/TopNav/TopNav.test.tsx +45 -0
  95. package/src/TopNav/TopNavMegaMenuFeaturedCard.doc.mjs +3 -3
  96. package/src/TopNav/TopNavMegaMenuFeaturedCard.tsx +19 -2
  97. package/src/TreeList/TreeList.doc.mjs +6 -0
  98. package/src/TreeList/TreeList.test.tsx +169 -0
  99. package/src/TreeList/TreeListBranches.tsx +16 -2
  100. package/src/TreeList/TreeListItem.tsx +34 -3
  101. package/src/docs-types.ts +5 -0
  102. package/src/i18n/InternationalizationProvider.doc.mjs +77 -2
  103. package/src/theme/hct.ts +1 -1
@@ -15,7 +15,7 @@
15
15
  * - /apps/storybook/stories/Dialog.stories.tsx (storybook stories)
16
16
  * - /packages/cli/templates/blocks/components/Dialog/ (showcase blocks)
17
17
  */
18
- import { useEffect, useMemo, useRef } from 'react';
18
+ import { useCallback, useEffect, useId, useMemo, useRef } from 'react';
19
19
  import * as stylex from '@stylexjs/stylex';
20
20
  import { useScrollLock } from "../hooks/useScrollLock.js";
21
21
  import { hasActiveFocusTrapEscape, isImeKeyEvent } from "../hooks/useFocusTrap.js";
@@ -194,6 +194,9 @@ function formatPosition(value) {
194
194
  *
195
195
  * Designed to be used with Layout as its child for structured content.
196
196
  * Uses the browser's built-in modal behavior for optimal accessibility.
197
+ * When a DialogHeader is rendered inside, its title automatically names the
198
+ * dialog via aria-labelledby; pass `aria-label` or `aria-labelledby` to
199
+ * override.
197
200
  *
198
201
  * @example
199
202
  * ```
@@ -229,11 +232,41 @@ export function Dialog({
229
232
  const effectivePadding = padding ?? 4;
230
233
  const paddingToken = spacingStepToToken[effectivePadding];
231
234
  const isFullscreen = variant === 'fullscreen';
235
+
236
+ // Default accessible name: publish a title id through DialogContext so a
237
+ // DialogHeader applies it to its heading (mirrors AlertDialog's explicit
238
+ // useId wiring). Whether to emit the default aria-labelledby is decided
239
+ // imperatively in the callback ref below by checking whether the title
240
+ // element actually rendered — so a dialog with no header never points at a
241
+ // missing id, and we avoid the extra render a registration-via-state effect
242
+ // would cost at the dialog level.
243
+ const titleId = useId();
232
244
  const dialogContextValue = useMemo(() => ({
233
- isInline
234
- }), [isInline]);
245
+ isInline,
246
+ titleId
247
+ }), [isInline, titleId]);
248
+
249
+ // Consumer-provided labels always win over the DialogHeader default.
250
+ const hasConsumerName = props['aria-label'] != null || props['aria-labelledby'] != null;
235
251
  const dialogRef = useRef(null);
236
252
 
253
+ // Callback ref on the <dialog>: sync the default aria-labelledby from the
254
+ // DialogHeader title (if one rendered) in the same commit, with no second
255
+ // render. Consumer aria-label/aria-labelledby win — when present we leave
256
+ // the attribute to the {...safeProps} spread and never touch it here.
257
+ const attachDialog = useCallback(node => {
258
+ dialogRef.current = node;
259
+ if (!node || hasConsumerName) {
260
+ return;
261
+ }
262
+ const hasTitle = node.querySelector(`#${CSS.escape(titleId)}`) != null;
263
+ if (hasTitle) {
264
+ node.setAttribute('aria-labelledby', titleId);
265
+ } else {
266
+ node.removeAttribute('aria-labelledby');
267
+ }
268
+ }, [titleId, hasConsumerName]);
269
+
237
270
  // Capture the element that was focused when the dialog opened,
238
271
  // for directional animation origin and focus restoration on close.
239
272
  const triggerElementRef = useRef(null);
@@ -317,6 +350,18 @@ export function Dialog({
317
350
  return () => dialog.removeEventListener('keydown', handleKeyDown);
318
351
  }, [isOpen, isInline, allowEscape, onOpenChange]);
319
352
 
353
+ // Dev-time guardrail: an open modal should always have an accessible name.
354
+ // Warn once per component instance (in an effect) rather than on every
355
+ // render — mirrors the unnamed-dialog warning in usePopover.
356
+ const warnedUnnamedDialogRef = useRef(false);
357
+ useEffect(() => {
358
+ const hasHeaderTitle = dialogRef.current?.querySelector(`#${CSS.escape(titleId)}`) != null;
359
+ if (isOpen && !isInline && !hasConsumerName && !hasHeaderTitle && !warnedUnnamedDialogRef.current) {
360
+ warnedUnnamedDialogRef.current = true;
361
+ console.warn('Dialog: open dialog has no accessible name. Add a DialogHeader ' + 'with a `title`, or pass `aria-label`/`aria-labelledby`.');
362
+ }
363
+ }, [isOpen, isInline, hasConsumerName, titleId]);
364
+
320
365
  // Handle backdrop click — when the user clicks the ::backdrop pseudo-element,
321
366
  // the event target is the <dialog> element itself; clicks on child content
322
367
  // always target the child. This avoids false positives from native browser
@@ -384,14 +429,18 @@ export function Dialog({
384
429
  // --- Standard modal rendering path ---
385
430
 
386
431
  return /*#__PURE__*/_jsx("dialog", {
387
- ref: mergeRefs(ref, dialogRef),
432
+ ref: mergeRefs(ref, attachDialog),
388
433
  ...safeProps,
389
434
  ...mergeProps(themeProps('dialog', {
390
435
  variant
391
436
  }), stylex.props(styles.dialog, isOpen && styles.open, styles.backdrop, !isFullscreen && dynamicStyles.sizing(width, maxHeight), hasPosition && dynamicStyles.position(position?.top, position?.right, position?.bottom, position?.left), isFullscreen && styles.fullscreen, xstyle), className, style),
392
437
  onClick: handleClick,
393
438
  onCancel: handleCancel,
394
- "aria-modal": "true",
439
+ "aria-modal": "true"
440
+ // The default aria-labelledby (from a DialogHeader title) is set
441
+ // imperatively in `attachDialog`; a consumer-provided aria-labelledby
442
+ // flows through {...safeProps} above and wins.
443
+ ,
395
444
  ...(purpose === 'required' ? {
396
445
  role: 'alertdialog'
397
446
  } : undefined),
@@ -1,6 +1,13 @@
1
1
  export interface DialogContextValue {
2
2
  /** Whether the dialog is rendered inline for docs/showcases. */
3
3
  isInline: boolean;
4
+ /**
5
+ * Id the DialogHeader title should render with so the dialog can name
6
+ * itself via aria-labelledby. The dialog detects the title element's
7
+ * presence directly (via a callback ref), so it only emits aria-labelledby
8
+ * when the title actually rendered — never pointing at a nonexistent id.
9
+ */
10
+ titleId?: string;
4
11
  }
5
12
  export declare const DialogContext: import("react").Context<DialogContextValue | null>;
6
13
  export declare function useDialogContext(): DialogContextValue | null;
@@ -1 +1 @@
1
- {"version":3,"file":"DialogContext.d.ts","sourceRoot":"","sources":["../../src/Dialog/DialogContext.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,kBAAkB;IACjC,gEAAgE;IAChE,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,aAAa,oDAAiD,CAAC;AAG5E,wBAAgB,gBAAgB,IAAI,kBAAkB,GAAG,IAAI,CAE5D"}
1
+ {"version":3,"file":"DialogContext.d.ts","sourceRoot":"","sources":["../../src/Dialog/DialogContext.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,kBAAkB;IACjC,gEAAgE;IAChE,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,aAAa,oDAAiD,CAAC;AAG5E,wBAAgB,gBAAgB,IAAI,kBAAkB,GAAG,IAAI,CAE5D"}
@@ -5,8 +5,8 @@
5
5
  /**
6
6
  * @file DialogContext.ts
7
7
  * @input React context
8
- * @output Internal dialog context for child focus behavior
9
- * @position Dialog internals; consumed by focus-managing children
8
+ * @output Internal dialog context for child focus behavior and default labelling
9
+ * @position Dialog internals; consumed by focus-managing children and DialogHeader
10
10
  */
11
11
  import { createContext, use } from 'react';
12
12
  export const DialogContext = /*#__PURE__*/createContext(null);
@@ -18,7 +18,9 @@ export interface DialogHeaderProps extends BaseProps<HTMLDivElement> {
18
18
  ref?: React.Ref<HTMLDivElement>;
19
19
  /**
20
20
  * The title of the dialog.
21
- * This title receives focus when the dialog opens for screen reader accessibility.
21
+ * This title receives focus when the dialog opens for screen reader
22
+ * accessibility, and names the parent Dialog via aria-labelledby unless the
23
+ * consumer passes an explicit aria-label/aria-labelledby to the Dialog.
22
24
  */
23
25
  title: string;
24
26
  /**
@@ -52,7 +54,8 @@ export interface DialogHeaderProps extends BaseProps<HTMLDivElement> {
52
54
  * Renders a title that receives focus when a modal dialog opens (for screen reader accessibility)
53
55
  * and an optional close button. Inline documentation previews suppress this autofocus.
54
56
  * The title is an h2 element with tabIndex={-1} so it can be programmatically focused but
55
- * doesn't appear in the tab order.
57
+ * doesn't appear in the tab order. The title also names the parent Dialog via
58
+ * aria-labelledby (unless the Dialog receives an explicit aria-label/aria-labelledby).
56
59
  *
57
60
  * Uses LayoutHeader internally for consistent styling with other layout headers.
58
61
  *
@@ -1 +1 @@
1
- {"version":3,"file":"DialogHeader.d.ts","sourceRoot":"","sources":["../../src/Dialog/DialogHeader.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAoB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAQxD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAoC5C,MAAM,WAAW,iBAAkB,SAAQ,SAAS,CAAC,cAAc,CAAC;IAClE,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAE5C;;OAEG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,UAAU,EACV,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,iBAAiB,+BAiEnB;yBA7Ee,YAAY"}
1
+ {"version":3,"file":"DialogHeader.d.ts","sourceRoot":"","sources":["../../src/Dialog/DialogHeader.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAoB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAQxD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAoC5C,MAAM,WAAW,iBAAkB,SAAQ,SAAS,CAAC,cAAc,CAAC;IAClE,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAE5C;;OAEG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,UAAU,EACV,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,iBAAiB,+BAqEnB;yBAjFe,YAAY"}
@@ -39,7 +39,8 @@ const styles = {
39
39
  * Renders a title that receives focus when a modal dialog opens (for screen reader accessibility)
40
40
  * and an optional close button. Inline documentation previews suppress this autofocus.
41
41
  * The title is an h2 element with tabIndex={-1} so it can be programmatically focused but
42
- * doesn't appear in the tab order.
42
+ * doesn't appear in the tab order. The title also names the parent Dialog via
43
+ * aria-labelledby (unless the Dialog receives an explicit aria-label/aria-labelledby).
43
44
  *
44
45
  * Uses LayoutHeader internally for consistent styling with other layout headers.
45
46
  *
@@ -71,10 +72,13 @@ export function DialogHeader({
71
72
  const titleRef = useRef(null);
72
73
  const dialogContext = useDialogContext();
73
74
  const shouldAutoFocus = dialogContext?.isInline !== true;
75
+ const titleId = dialogContext?.titleId;
74
76
 
75
77
  // Auto-focus the title when mounted for screen reader accessibility.
76
78
  // Inline dialogs are documentation/showcase previews, so suppress focus to
77
79
  // avoid stealing scroll position from the surrounding page.
80
+ // The parent Dialog detects this title (by `titleId`) via a callback ref to
81
+ // set its default aria-labelledby — no registration handshake needed here.
78
82
  useEffect(() => {
79
83
  if (shouldAutoFocus && titleRef.current) {
80
84
  titleRef.current.focus();
@@ -102,6 +106,7 @@ export function DialogHeader({
102
106
  },
103
107
  children: [/*#__PURE__*/_jsx(Heading, {
104
108
  ref: titleRef,
109
+ id: titleId,
105
110
  level: 2,
106
111
  tabIndex: -1,
107
112
  xstyle: styles.titleFocusable,
@@ -155,12 +155,17 @@ export interface IconProps extends Omit<SVGProps<SVGSVGElement>, 'ref' | 'color'
155
155
  * Don't set `label` when an interactive parent (Button, IconButton, link)
156
156
  * already names the control — that produces a duplicate announcement.
157
157
  *
158
+ * Meaningful, standalone icon: give it a label.
159
+ *
158
160
  * @example
159
161
  * ```
160
- * // Meaningful, standalone icon
161
162
  * <Icon icon="success" label="Completed" />
163
+ * ```
164
+ *
165
+ * Decorative icon (the default): omit label.
162
166
  *
163
- * // Decorative icon (default) — omit label
167
+ * @example
168
+ * ```
164
169
  * <Icon icon="search" />
165
170
  * ```
166
171
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../src/Icon/Icon.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC/D,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAG3C,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAqBnD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2Df,CAAC;AAEH;;;;;;;;GAQG;AACH,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;EAiBd,CAAC;AAyCH,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,WAAW,CAAC;AACjD,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,UAAU,CAAC;AAE/C;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,SAAU,SAAQ,IAAI,CACrC,QAAQ,CAAC,aAAa,CAAC,EACvB,KAAK,GAAG,OAAO,CAChB;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B;;;;OAIG;IACH,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAyBD;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,KAAiB,EACjB,IAAW,EACX,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,SAAS,qBAkCX;yBAzCe,IAAI;;;AA4FpB;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,KAAK,CAAC,SAAS,GAAG,QAAQ,EAChC,KAAK,CAAC,EAAE;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAAC,GAC3C,KAAK,CAAC,SAAS,CAYjB"}
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../src/Icon/Icon.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC/D,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAG3C,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAqBnD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2Df,CAAC;AAEH;;;;;;;;GAQG;AACH,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;EAiBd,CAAC;AAyCH,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,WAAW,CAAC;AACjD,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,UAAU,CAAC;AAE/C;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,SAAU,SAAQ,IAAI,CACrC,QAAQ,CAAC,aAAa,CAAC,EACvB,KAAK,GAAG,OAAO,CAChB;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B;;;;OAIG;IACH,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAyBD;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,KAAiB,EACjB,IAAW,EACX,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,SAAS,qBAkCX;yBAzCe,IAAI;;;AA4FpB;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,KAAK,CAAC,SAAS,GAAG,QAAQ,EAChC,KAAK,CAAC,EAAE;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAAC,GAC3C,KAAK,CAAC,SAAS,CAYjB"}
@@ -91,7 +91,12 @@ export interface ItemProps extends BaseProps<HTMLElement> {
91
91
  */
92
92
  isHighlighted?: boolean;
93
93
  /**
94
- * Selected state.
94
+ * Selected state. Always applies the selected visual styling. When `role`
95
+ * permits it (option, tab, row, gridcell, columnheader, rowheader, treeitem)
96
+ * the state is exposed as `aria-selected`; otherwise (e.g. a listitem or a
97
+ * bare div, where `aria-selected` is invalid ARIA) it falls back to
98
+ * `aria-current="true"` so assistive tech is still told which item is
99
+ * selected. A consumer-provided `aria-current` always wins.
95
100
  * @default false
96
101
  */
97
102
  isSelected?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Item.d.ts","sourceRoot":"","sources":["../../src/Item/Item.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAUrC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAU5C,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC3C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,SAAU,SAAQ,SAAS,CAAC,WAAW,CAAC;IACvD,yCAAyC;IACzC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAE7B;;;OAGG;IACH,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC;IAE3B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB;;;OAGG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;;OAGG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAE5C;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAE5B;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAwJD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,IAAI,CAAC,EACnB,EAAE,EAAE,SAAiB,EACrB,MAAM,EACN,YAAY,EACZ,KAAK,EACL,WAAW,EACX,UAAU,EACV,KAAgB,EAChB,OAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,IAAI,EACJ,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,YAAY,EACjB,aAAqB,EACrB,UAAkB,EAClB,UAAkB,EAClB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,IAAI,EACJ,GAAG,SAAS,EACb,EAAE,SAAS,+BAkKX;yBA1Le,IAAI"}
1
+ {"version":3,"file":"Item.d.ts","sourceRoot":"","sources":["../../src/Item/Item.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAUrC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAU5C,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC3C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,SAAU,SAAQ,SAAS,CAAC,WAAW,CAAC;IACvD,yCAAyC;IACzC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAE7B;;;OAGG;IACH,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC;IAE3B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB;;;OAGG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;;OAGG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAE5C;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAE5B;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA0KD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,IAAI,CAAC,EACnB,EAAE,EAAE,SAAiB,EACrB,MAAM,EACN,YAAY,EACZ,KAAK,EACL,WAAW,EACX,UAAU,EACV,KAAgB,EAChB,OAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,IAAI,EACJ,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,YAAY,EACjB,aAAqB,EACrB,UAAkB,EAClB,UAAkB,EAClB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,IAAI,EACJ,GAAG,SAAS,EACb,EAAE,SAAS,+BA+KX;yBAvMe,IAAI"}
package/dist/Item/Item.js CHANGED
@@ -27,6 +27,16 @@ import { themeProps } from "../utils/themeProps.js";
27
27
  // Types
28
28
  // =============================================================================
29
29
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
30
+ // =============================================================================
31
+ // Constants
32
+ // =============================================================================
33
+
34
+ /**
35
+ * Roles on which WAI-ARIA permits the aria-selected attribute.
36
+ * https://www.w3.org/TR/wai-aria-1.2/#aria-selected
37
+ */
38
+ const ARIA_SELECTED_ROLES = new Set(['option', 'tab', 'row', 'gridcell', 'columnheader', 'rowheader', 'treeitem']);
39
+
30
40
  // =============================================================================
31
41
  // Styles
32
42
  // =============================================================================
@@ -189,6 +199,11 @@ export function Item({
189
199
  // handles keyboard access. Skip the invisible button/anchor and put
190
200
  // onClick directly on the root element instead.
191
201
  const hasParentRole = role != null;
202
+ // aria-selected is only valid on selectable roles (option, tab, treeitem,
203
+ // grid cells). On the default div/li root the attribute is invalid ARIA
204
+ // (axe: aria-allowed-attr), so selection stays visual-only there — callers
205
+ // that need selection semantics pass a permitted role.
206
+ const allowsAriaSelected = role != null && ARIA_SELECTED_ROLES.has(role);
192
207
  const isStringLabel = typeof label === 'string';
193
208
  const isStringDescription = typeof description === 'string';
194
209
  const labelTruncateStyle = labelLines != null ? labelLines === 1 ? styles.labelSingleTruncate : styles.labelMultiTruncate : isStringLabel ? styles.labelSingleTruncate : null;
@@ -281,7 +296,13 @@ export function Item({
281
296
  return /*#__PURE__*/_jsx(Component, {
282
297
  ref: ref,
283
298
  ...restProps,
284
- "aria-selected": isSelected || undefined,
299
+ "aria-selected": allowsAriaSelected && isSelected || undefined
300
+ // aria-selected is invalid on roles that don't permit it (listitem, a
301
+ // bare div, etc.). For those, convey selection via aria-current — valid
302
+ // on any element — so the state still reaches AT. Written after
303
+ // {...restProps} so it must defer to a consumer-provided aria-current.
304
+ ,
305
+ "aria-current": restProps['aria-current'] ?? (isSelected && !allowsAriaSelected ? true : undefined),
285
306
  "aria-disabled": isDisabled || undefined,
286
307
  ...mergeProps(themeProps('item', {
287
308
  density,
@@ -158,15 +158,6 @@ export declare function stack({ crossAlign, direction, gap, mainAlign, wrap, }:
158
158
  }> | Readonly<{
159
159
  readonly columnGap: stylex.StyleXClassNameFor<"columnGap", "8px">;
160
160
  readonly rowGap: stylex.StyleXClassNameFor<"rowGap", "8px">;
161
- }> | Readonly<{
162
- readonly columnGap: stylex.StyleXClassNameFor<"columnGap", "2px">;
163
- readonly rowGap: stylex.StyleXClassNameFor<"rowGap", "2px">;
164
- }> | Readonly<{
165
- readonly columnGap: stylex.StyleXClassNameFor<"columnGap", "4px">;
166
- readonly rowGap: stylex.StyleXClassNameFor<"rowGap", "4px">;
167
- }> | Readonly<{
168
- readonly columnGap: stylex.StyleXClassNameFor<"columnGap", "6px">;
169
- readonly rowGap: stylex.StyleXClassNameFor<"rowGap", "6px">;
170
161
  }> | Readonly<{
171
162
  readonly columnGap: stylex.StyleXClassNameFor<"columnGap", "12px">;
172
163
  readonly rowGap: stylex.StyleXClassNameFor<"rowGap", "12px">;
@@ -179,6 +170,15 @@ export declare function stack({ crossAlign, direction, gap, mainAlign, wrap, }:
179
170
  }> | Readonly<{
180
171
  readonly columnGap: stylex.StyleXClassNameFor<"columnGap", "24px">;
181
172
  readonly rowGap: stylex.StyleXClassNameFor<"rowGap", "24px">;
173
+ }> | Readonly<{
174
+ readonly columnGap: stylex.StyleXClassNameFor<"columnGap", "2px">;
175
+ readonly rowGap: stylex.StyleXClassNameFor<"rowGap", "2px">;
176
+ }> | Readonly<{
177
+ readonly columnGap: stylex.StyleXClassNameFor<"columnGap", "4px">;
178
+ readonly rowGap: stylex.StyleXClassNameFor<"rowGap", "4px">;
179
+ }> | Readonly<{
180
+ readonly columnGap: stylex.StyleXClassNameFor<"columnGap", "6px">;
181
+ readonly rowGap: stylex.StyleXClassNameFor<"rowGap", "6px">;
182
182
  }> | Readonly<{
183
183
  readonly columnGap: stylex.StyleXClassNameFor<"columnGap", "32px">;
184
184
  readonly rowGap: stylex.StyleXClassNameFor<"rowGap", "32px">;
@@ -23,11 +23,12 @@ export interface UseTableSelectionConfig<T extends Record<string, unknown>> {
23
23
  * Derive a human-readable identity for a row, used in the row checkbox's
24
24
  * hidden label as `Select ${getRowLabel(item)}`. Without it, every row
25
25
  * checkbox announces an undifferentiated "Select row" to screen readers.
26
+ * With `getRowLabel: item => item.name`, checkbox accessible names become
27
+ * "Select Alice", "Select Bob", and so on.
26
28
  *
27
29
  * @example
28
30
  * ```
29
31
  * getRowLabel: item => item.name
30
- * // Checkbox accessible names: "Select Alice", "Select Bob", ...
31
32
  * ```
32
33
  */
33
34
  getRowLabel?: (item: T) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"useTableSelection.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/selection/useTableSelection.tsx"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAC,WAAW,EAAkC,MAAM,aAAa,CAAC;AAQ9E,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxE,uCAAuC;IACvC,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IACxC,6EAA6E;IAC7E,YAAY,EAAE,CAAC,KAAK,EAAE;QAAC,IAAI,EAAE,CAAC,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAC,KAAK,IAAI,CAAC;IAC9D,kDAAkD;IAClD,WAAW,EAAE,CAAC,KAAK,EAAE;QAAC,aAAa,EAAE,OAAO,CAAA;KAAC,KAAK,IAAI,CAAC;IACvD,mDAAmD;IACnD,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC;IACnC,+FAA+F;IAC/F,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IAC3C,oGAAoG;IACpG,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IACxC;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;CACnC;AAuND,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC,GACjC,WAAW,CAAC,CAAC,CAAC,CAmFhB"}
1
+ {"version":3,"file":"useTableSelection.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/selection/useTableSelection.tsx"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAC,WAAW,EAAkC,MAAM,aAAa,CAAC;AAQ9E,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxE,uCAAuC;IACvC,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IACxC,6EAA6E;IAC7E,YAAY,EAAE,CAAC,KAAK,EAAE;QAAC,IAAI,EAAE,CAAC,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAC,KAAK,IAAI,CAAC;IAC9D,kDAAkD;IAClD,WAAW,EAAE,CAAC,KAAK,EAAE;QAAC,aAAa,EAAE,OAAO,CAAA;KAAC,KAAK,IAAI,CAAC;IACvD,mDAAmD;IACnD,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC;IACnC,+FAA+F;IAC/F,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IAC3C,oGAAoG;IACpG,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IACxC;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;CACnC;AAuND,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC,GACjC,WAAW,CAAC,CAAC,CAAC,CAmFhB"}
@@ -9,7 +9,14 @@ export interface ThumbnailProps extends BaseProps<HTMLDivElement> {
9
9
  */
10
10
  src?: string;
11
11
  /**
12
- * Alt text for the image. Required for accessibility when `src` is provided.
12
+ * Alt text for the image.
13
+ *
14
+ * When omitted, the image is explicitly decorative (`alt=""` +
15
+ * `role="presentation"` + `aria-hidden`, matching Avatar) and hidden from
16
+ * assistive technology. Provide `alt` whenever the image conveys content;
17
+ * without it, screen reader users only hear the `label` (file name), or a
18
+ * generic "thumbnail" if `label` is also missing — which triggers a
19
+ * dev-time warning.
13
20
  */
14
21
  alt?: string;
15
22
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Thumbnail.d.ts","sourceRoot":"","sources":["../../src/Thumbnail/Thumbnail.tsx"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAQ9C,MAAM,WAAW,cAAe,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC/D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACzC;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAkJD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,EACxB,GAAG,EACH,GAAG,EACH,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAiB,EACjB,UAAkB,EAClB,SAAkB,EAClB,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,EACH,GAAG,KAAK,EACT,EAAE,cAAc,+BA6FhB;yBA5Ge,SAAS"}
1
+ {"version":3,"file":"Thumbnail.d.ts","sourceRoot":"","sources":["../../src/Thumbnail/Thumbnail.tsx"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAQ9C,MAAM,WAAW,cAAe,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC/D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;;;OASG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACzC;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAkJD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,EACxB,GAAG,EACH,GAAG,EACH,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAiB,EACjB,UAAkB,EAClB,SAAkB,EAClB,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,EACH,GAAG,KAAK,EACT,EAAE,cAAc,+BAkIhB;yBAjJe,SAAS"}
@@ -13,6 +13,10 @@
13
13
  * Uses useImageMode (APCA) to detect image luminance so the overlaid
14
14
  * remove button always has sufficient contrast.
15
15
  *
16
+ * Images without `alt` are explicitly decorative (alt="" +
17
+ * role="presentation" + aria-hidden, matching Avatar). A dev-time warning
18
+ * fires once when `src` is set with no `alt` and no other name source.
19
+ *
16
20
  * SYNC: When modified, update these files to stay in sync:
17
21
  * - /packages/core/src/Thumbnail/Thumbnail.doc.mjs
18
22
  * - /packages/core/src/Thumbnail/Thumbnail.test.tsx
@@ -20,6 +24,7 @@
20
24
  * - /apps/storybook/stories/Thumbnail.stories.tsx
21
25
  * - /packages/cli/templates/blocks/components/Thumbnail/ (showcase blocks)
22
26
  */
27
+ import { useEffect, useRef } from 'react';
23
28
  import * as stylex from '@stylexjs/stylex';
24
29
  import "../theme/tokens.stylex.js";
25
30
  import { colorVars, radiusVars, spacingVars, shadowVars, durationVars, easeVars } from "../theme/tokens.stylex.js";
@@ -181,11 +186,32 @@ export function Thumbnail({
181
186
  const showUploadOverlay = isLoading && hasSrc;
182
187
  const showPlaceholder = !isLoading && !hasSrc;
183
188
  const isInteractive = onClick != null && !isDisabled && !isLoading;
184
- const accessibleName = label && alt ? `${label} — ${alt}` : label ?? alt ?? 'thumbnail';
189
+ const accessibleName = label && alt ? `${label} — ${alt}` : label ?? alt ?? t('@astryx.thumbnail.fallbackName');
190
+
191
+ // Without `alt`, the image is explicitly decorative rather than silently
192
+ // empty-alt, matching Avatar's handling of unnamed images.
193
+ const isImageDecorative = !alt;
194
+
195
+ // Dev-time guardrail: `src` with no `alt` hides the image from assistive
196
+ // technology. That is fine when the thumbnail is otherwise named — `label`
197
+ // (or a consumer-provided aria name) becomes the group's accessible name —
198
+ // but with no name source at all the group falls back to a generic
199
+ // "thumbnail". Warn once per component instance (in an effect) rather than
200
+ // on every render.
201
+ const hasNameSource = alt != null || label != null || props['aria-label'] != null || props['aria-labelledby'] != null;
202
+ const warnedUnnamedImageRef = useRef(false);
203
+ useEffect(() => {
204
+ if (hasSrc && !hasNameSource && !warnedUnnamedImageRef.current) {
205
+ warnedUnnamedImageRef.current = true;
206
+ console.warn('Thumbnail: `src` is set without `alt` or `label`. The image is ' + 'treated as decorative and hidden from assistive technology, and ' + 'the thumbnail falls back to a generic "thumbnail" name. Pass ' + '`alt` to describe the image content, or `label` (file name) to ' + 'name the thumbnail.');
207
+ }
208
+ }, [hasSrc, hasNameSource]);
185
209
  const imageContent = /*#__PURE__*/_jsxs(_Fragment, {
186
210
  children: [showImage && /*#__PURE__*/_jsx("img", {
187
211
  src: src,
188
212
  alt: alt ?? '',
213
+ role: isImageDecorative ? 'presentation' : undefined,
214
+ "aria-hidden": isImageDecorative || undefined,
189
215
  ...{
190
216
  className: "xh8yej3 x5yr21d xl1xv1r x1lliihq"
191
217
  }
@@ -26,7 +26,6 @@ interface ToggleButtonGroupContextValue {
26
26
  /** Group disabled state. */
27
27
  isDisabled?: boolean;
28
28
  }
29
- export declare const ToggleButtonGroupContext: import("react").Context<ToggleButtonGroupContextValue | null>;
30
29
  /**
31
30
  * Hook for ToggleButton to read group context.
32
31
  * Returns null when used outside a group.
@@ -1 +1 @@
1
- {"version":3,"file":"ToggleButtonGroup.d.ts","sourceRoot":"","sources":["../../src/ToggleButton/ToggleButtonGroup.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAA2C,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAG/E,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAOnD,UAAU,6BAA6B;IACrC,mCAAmC;IACnC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,6BAA6B;IAC7B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,4DAA4D;IAC5D,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,wBAAwB,+DACsB,CAAC;AAG5D;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,6BAA6B,GAAG,IAAI,CAE3E;AAsBD,UAAU,0BAA0B;IAClC,8BAA8B;IAC9B,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IAExC;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,4BAA6B,SAAQ,0BAA0B;IAC9E;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,qCAAqC;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,8BAA+B,SAAQ,0BAA0B;IAChF,+BAA+B;IAC/B,IAAI,EAAE,UAAU,CAAC;IAEjB,iCAAiC;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,qCAAqC;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACrC;AAED,8DAA8D;AAC9D,MAAM,MAAM,sBAAsB,GAC9B,4BAA4B,GAC5B,8BAA8B,CAAC;AAMnC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,sBAAsB,GAC5B,SAAS,CAgEX;yBAlEe,iBAAiB"}
1
+ {"version":3,"file":"ToggleButtonGroup.d.ts","sourceRoot":"","sources":["../../src/ToggleButton/ToggleButtonGroup.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAA2C,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAG/E,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAOnD,UAAU,6BAA6B;IACrC,mCAAmC;IACnC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,6BAA6B;IAC7B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,4DAA4D;IAC5D,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,6BAA6B,GAAG,IAAI,CAE3E;AAsBD,UAAU,0BAA0B;IAClC,8BAA8B;IAC9B,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IAExC;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,4BAA6B,SAAQ,0BAA0B;IAC9E;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,qCAAqC;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,8BAA+B,SAAQ,0BAA0B;IAChF,+BAA+B;IAC/B,IAAI,EAAE,UAAU,CAAC;IAEjB,iCAAiC;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,qCAAqC;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACrC;AAED,8DAA8D;AAC9D,MAAM,MAAM,sBAAsB,GAC9B,4BAA4B,GAC5B,8BAA8B,CAAC;AAMnC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,sBAAsB,GAC5B,SAAS,CAgEX;yBAlEe,iBAAiB"}
@@ -28,7 +28,7 @@ import { themeProps } from "../utils/themeProps.js";
28
28
  // Context
29
29
  // =============================================================================
30
30
  import { jsx as _jsx } from "react/jsx-runtime";
31
- export const ToggleButtonGroupContext = /*#__PURE__*/createContext(null);
31
+ const ToggleButtonGroupContext = /*#__PURE__*/createContext(null);
32
32
  ToggleButtonGroupContext.displayName = 'ToggleButtonGroupContext';
33
33
 
34
34
  /**
@@ -23,7 +23,15 @@ export interface TopNavMegaMenuFeaturedCardProps extends BaseProps<HTMLDivElemen
23
23
  description?: string;
24
24
  /** Optional image URL displayed above the body. */
25
25
  image?: string;
26
- /** Alt text for the image. */
26
+ /**
27
+ * Alt text for the image.
28
+ *
29
+ * When omitted, the image is explicitly decorative (`alt=""` +
30
+ * `role="presentation"` + `aria-hidden`, matching Avatar) and hidden from
31
+ * assistive technology. Since the card already has a visible `title`, a
32
+ * decorative image is usually correct; pass `imageAlt` only when the image
33
+ * conveys information beyond the title and description.
34
+ */
27
35
  imageAlt?: string;
28
36
  /** CTA link text. */
29
37
  linkLabel?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"TopNavMegaMenuFeaturedCard.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavMegaMenuFeaturedCard.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAS5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAiD5C,MAAM,WAAW,+BAAgC,SAAQ,SAAS,CAAC,cAAc,CAAC;IAChF,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,GAAG,EACH,KAAK,EACL,WAAW,EACX,KAAK,EACL,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,+BAA+B,qBA6BjC;yBA1Ce,0BAA0B"}
1
+ {"version":3,"file":"TopNavMegaMenuFeaturedCard.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavMegaMenuFeaturedCard.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAS5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAiD5C,MAAM,WAAW,+BAAgC,SAAQ,SAAS,CAAC,cAAc,CAAC;IAChF,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,GAAG,EACH,KAAK,EACL,WAAW,EACX,KAAK,EACL,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,+BAA+B,qBAsCjC;yBAnDe,0BAA0B"}
@@ -89,9 +89,16 @@ export function TopNavMegaMenuFeaturedCard({
89
89
  ref: ref,
90
90
  ...mergeProps(themeProps('top-nav-mega-menu-featured-card'), stylex.props(styles.root, xstyle), className, style),
91
91
  ...rest,
92
- children: [image && /*#__PURE__*/_jsx("img", {
92
+ children: [image &&
93
+ /*#__PURE__*/
94
+ // Without `imageAlt`, the image is explicitly decorative rather than
95
+ // silently empty-alt, matching Avatar's handling of unnamed images.
96
+ // Usually correct here: the card already has a visible title.
97
+ _jsx("img", {
93
98
  src: image,
94
99
  alt: imageAlt ?? '',
100
+ role: imageAlt ? undefined : 'presentation',
101
+ "aria-hidden": imageAlt ? undefined : true,
95
102
  ...{
96
103
  className: "xh8yej3 xhjk10j xl1xv1r x1lliihq"
97
104
  }
@@ -6,6 +6,11 @@ interface TreeListBranchesProps {
6
6
  /**
7
7
  * Renders vertical lines showing parent-child relationships in the tree.
8
8
  * Positioned in a full-height container to span the entire item including children.
9
+ *
10
+ * The line element carries the stable `astryx-tree-list-guide` theme target so a
11
+ * theme can recolor or hide the connectors via `defineTheme` (e.g.
12
+ * `backgroundColor` or `display: 'none'`) instead of hiding the built-in guides
13
+ * and reimplementing them.
9
14
  */
10
15
  export declare function TreeListBranches({ ancestorsIsLast, isLast: _isLast, nestedLevel, }: TreeListBranchesProps): import("react").JSX.Element;
11
16
  export declare namespace TreeListBranches {
@@ -1 +1 @@
1
- {"version":3,"file":"TreeListBranches.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeListBranches.tsx"],"names":[],"mappings":"AAsDA,UAAU,qBAAqB;IAC7B,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,eAAe,EACf,MAAM,EAAE,OAAO,EACf,WAAW,GACZ,EAAE,qBAAqB,+BAsCvB;yBA1Ce,gBAAgB"}
1
+ {"version":3,"file":"TreeListBranches.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeListBranches.tsx"],"names":[],"mappings":"AAuDA,UAAU,qBAAqB;IAC7B,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,eAAe,EACf,MAAM,EAAE,OAAO,EACf,WAAW,GACZ,EAAE,qBAAqB,+BA8CvB;yBAlDe,gBAAgB"}
@@ -16,6 +16,7 @@ import * as stylex from '@stylexjs/stylex';
16
16
  import "../theme/tokens.stylex.js";
17
17
  import { colorVars, spacingVars } from "../theme/tokens.stylex.js";
18
18
  import { mergeProps } from "../utils/index.js";
19
+ import { themeProps } from "../utils/themeProps.js";
19
20
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
20
21
  const LINE_WIDTH = 1;
21
22
 
@@ -38,6 +39,11 @@ const LEVEL_INDENT = spacingVars['--spacing-4'];
38
39
  /**
39
40
  * Renders vertical lines showing parent-child relationships in the tree.
40
41
  * Positioned in a full-height container to span the entire item including children.
42
+ *
43
+ * The line element carries the stable `astryx-tree-list-guide` theme target so a
44
+ * theme can recolor or hide the connectors via `defineTheme` (e.g.
45
+ * `backgroundColor` or `display: 'none'`) instead of hiding the built-in guides
46
+ * and reimplementing them.
41
47
  */
42
48
  export function TreeListBranches({
43
49
  ancestorsIsLast,
@@ -60,9 +66,9 @@ export function TreeListBranches({
60
66
  }
61
67
  }),
62
68
  children: /*#__PURE__*/_jsx("div", {
63
- ...{
69
+ ...mergeProps(themeProps('tree-list-guide'), {
64
70
  className: "x1nj7uno xu96u03 x1bpp3o7 x10l6tqk x3m8u43 x1i1rx1s x7njt3n xs02d24"
65
- }
71
+ })
66
72
  })
67
73
  }, level)
68
74
  );
@@ -75,9 +81,9 @@ export function TreeListBranches({
75
81
  }
76
82
  }),
77
83
  children: /*#__PURE__*/_jsx("div", {
78
- ...{
84
+ ...mergeProps(themeProps('tree-list-guide'), {
79
85
  className: "x1nj7uno xu96u03 x1bpp3o7 x10l6tqk x3m8u43 x1i1rx1s x7njt3n xs02d24"
80
- }
86
+ })
81
87
  })
82
88
  })]
83
89
  });
@@ -1 +1 @@
1
- {"version":3,"file":"TreeListItem.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeListItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,EAAiB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAcrD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,iBAAiB,CAAC;AA8NrD,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAMD,wBAAgB,YAAY,CAAC,EAC3B,EAAE,EACF,KAAK,EACL,WAAW,EACX,YAAY,EACZ,UAAU,EACV,OAAO,EACP,IAAI,EACJ,MAAM,EACN,UAAkB,EAClB,UAAkB,EAClB,WAAW,EACX,WAAW,EACX,MAAM,EACN,eAAe,EACf,UAAU,EACV,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,OAAO,EACP,UAAU,GACX,EAAE,yBAAyB,+BA+L3B;yBArNe,YAAY"}
1
+ {"version":3,"file":"TreeListItem.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeListItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,EAAiB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAcrD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,iBAAiB,CAAC;AA8NrD,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAMD,wBAAgB,YAAY,CAAC,EAC3B,EAAE,EACF,KAAK,EACL,WAAW,EACX,YAAY,EACZ,UAAU,EACV,OAAO,EACP,IAAI,EACJ,MAAM,EACN,UAAkB,EAClB,UAAkB,EAClB,WAAW,EACX,WAAW,EACX,MAAM,EACN,eAAe,EACf,UAAU,EACV,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,OAAO,EACP,UAAU,GACX,EAAE,yBAAyB,+BA8N3B;yBApPe,YAAY"}