@astryxdesign/core 0.1.2-canary.bd8c3d3 → 0.1.2-canary.bfcbf64

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 (223) hide show
  1. package/dist/Avatar/Avatar.d.ts.map +1 -1
  2. package/dist/Avatar/Avatar.js +11 -5
  3. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  4. package/dist/Breadcrumbs/BreadcrumbItem.js +20 -4
  5. package/dist/Calendar/Calendar.d.ts.map +1 -1
  6. package/dist/Calendar/Calendar.js +11 -11
  7. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  8. package/dist/CheckboxInput/CheckboxInput.js +4 -2
  9. package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
  10. package/dist/CheckboxList/CheckboxList.js +12 -4
  11. package/dist/ContextMenu/ContextMenu.d.ts +6 -1
  12. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  13. package/dist/ContextMenu/ContextMenu.js +58 -7
  14. package/dist/DateInput/DateInput.d.ts.map +1 -1
  15. package/dist/DateInput/DateInput.js +17 -2
  16. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  17. package/dist/DateRangeInput/DateRangeInput.js +9 -4
  18. package/dist/DateTimeInput/DateTimeInput.d.ts +7 -1
  19. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  20. package/dist/DateTimeInput/DateTimeInput.js +15 -3
  21. package/dist/Dialog/Dialog.d.ts.map +1 -1
  22. package/dist/Dialog/Dialog.js +12 -0
  23. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  24. package/dist/DropdownMenu/DropdownMenu.js +25 -4
  25. package/dist/Field/Field.d.ts +19 -2
  26. package/dist/Field/Field.d.ts.map +1 -1
  27. package/dist/Field/Field.js +4 -0
  28. package/dist/Field/FieldLabel.d.ts +21 -2
  29. package/dist/Field/FieldLabel.d.ts.map +1 -1
  30. package/dist/Field/FieldLabel.js +37 -22
  31. package/dist/FileInput/FileInput.d.ts.map +1 -1
  32. package/dist/FileInput/FileInput.js +27 -6
  33. package/dist/InputGroup/InputGroup.d.ts.map +1 -1
  34. package/dist/InputGroup/InputGroup.js +4 -1
  35. package/dist/Kbd/Kbd.d.ts.map +1 -1
  36. package/dist/Kbd/Kbd.js +33 -1
  37. package/dist/Layer/useLayer.d.ts.map +1 -1
  38. package/dist/Layer/useLayer.js +36 -5
  39. package/dist/Layout/padding.stylex.d.ts +51 -0
  40. package/dist/Layout/padding.stylex.d.ts.map +1 -1
  41. package/dist/Layout/padding.stylex.js +63 -0
  42. package/dist/Link/Link.d.ts +7 -1
  43. package/dist/Link/Link.d.ts.map +1 -1
  44. package/dist/Link/Link.js +12 -4
  45. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  46. package/dist/MultiSelector/MultiSelector.js +35 -6
  47. package/dist/MultiSelector/hooks.d.ts +12 -1
  48. package/dist/MultiSelector/hooks.d.ts.map +1 -1
  49. package/dist/MultiSelector/hooks.js +14 -1
  50. package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
  51. package/dist/NavMenu/NavHeadingMenu.js +17 -2
  52. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  53. package/dist/NumberInput/NumberInput.js +7 -1
  54. package/dist/Pagination/Pagination.d.ts.map +1 -1
  55. package/dist/Pagination/Pagination.js +8 -0
  56. package/dist/ProgressBar/ProgressBar.js +1 -1
  57. package/dist/RadioList/RadioList.d.ts +1 -1
  58. package/dist/RadioList/RadioList.d.ts.map +1 -1
  59. package/dist/RadioList/RadioList.js +76 -3
  60. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  61. package/dist/SegmentedControl/SegmentedControlItem.js +6 -2
  62. package/dist/Selector/Selector.d.ts.map +1 -1
  63. package/dist/Selector/Selector.js +15 -8
  64. package/dist/Selector/hooks.d.ts +8 -1
  65. package/dist/Selector/hooks.d.ts.map +1 -1
  66. package/dist/Selector/hooks.js +14 -1
  67. package/dist/Skeleton/Skeleton.d.ts.map +1 -1
  68. package/dist/Skeleton/Skeleton.js +8 -2
  69. package/dist/Stack/Stack.d.ts +28 -1
  70. package/dist/Stack/Stack.d.ts.map +1 -1
  71. package/dist/Stack/Stack.js +17 -1
  72. package/dist/Stack/StackItem.d.ts +12 -1
  73. package/dist/Stack/StackItem.d.ts.map +1 -1
  74. package/dist/Stack/StackItem.js +8 -1
  75. package/dist/TabList/Tab.d.ts.map +1 -1
  76. package/dist/TabList/Tab.js +6 -0
  77. package/dist/TabList/TabList.d.ts +15 -4
  78. package/dist/TabList/TabList.d.ts.map +1 -1
  79. package/dist/TabList/TabList.js +58 -4
  80. package/dist/TabList/TabListContext.d.ts +5 -0
  81. package/dist/TabList/TabListContext.d.ts.map +1 -1
  82. package/dist/TabList/TabListContext.js +5 -0
  83. package/dist/TabList/TabMenu.js +2 -0
  84. package/dist/Toast/Toast.d.ts.map +1 -1
  85. package/dist/Toast/Toast.js +14 -0
  86. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  87. package/dist/Toast/ToastViewport.js +132 -3
  88. package/dist/Toolbar/Toolbar.d.ts.map +1 -1
  89. package/dist/Toolbar/Toolbar.js +7 -3
  90. package/dist/TreeList/TreeList.d.ts +1 -1
  91. package/dist/TreeList/TreeList.d.ts.map +1 -1
  92. package/dist/TreeList/TreeList.js +78 -2
  93. package/dist/TreeList/TreeListItem.d.ts +10 -1
  94. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  95. package/dist/TreeList/TreeListItem.js +44 -10
  96. package/dist/TreeList/treeListItem.markers.stylex.d.ts +16 -0
  97. package/dist/TreeList/treeListItem.markers.stylex.d.ts.map +1 -0
  98. package/dist/TreeList/treeListItem.markers.stylex.js +22 -0
  99. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  100. package/dist/Typeahead/BaseTypeahead.js +41 -3
  101. package/dist/astryx.css +3 -0
  102. package/dist/astryx.umd.js +47 -47
  103. package/dist/astryx.umd.js.map +4 -4
  104. package/dist/hooks/index.d.ts +10 -2
  105. package/dist/hooks/index.d.ts.map +1 -1
  106. package/dist/hooks/index.js +6 -2
  107. package/dist/hooks/useAnnounce.d.ts +40 -0
  108. package/dist/hooks/useAnnounce.d.ts.map +1 -0
  109. package/dist/hooks/useAnnounce.js +142 -0
  110. package/dist/hooks/useClickableContainer.d.ts +16 -1
  111. package/dist/hooks/useClickableContainer.d.ts.map +1 -1
  112. package/dist/hooks/useClickableContainer.js +16 -4
  113. package/dist/hooks/useFocusTrap.d.ts +18 -0
  114. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  115. package/dist/hooks/useFocusTrap.js +65 -0
  116. package/dist/hooks/useListFocus.d.ts +79 -8
  117. package/dist/hooks/useListFocus.d.ts.map +1 -1
  118. package/dist/hooks/useListFocus.js +262 -48
  119. package/dist/hooks/useLongPress.d.ts +21 -0
  120. package/dist/hooks/useLongPress.d.ts.map +1 -0
  121. package/dist/hooks/useLongPress.js +89 -0
  122. package/dist/hooks/useTreeFocus.d.ts +133 -0
  123. package/dist/hooks/useTreeFocus.d.ts.map +1 -0
  124. package/dist/hooks/useTreeFocus.js +274 -0
  125. package/dist/hooks/useTypeahead.d.ts +63 -0
  126. package/dist/hooks/useTypeahead.d.ts.map +1 -0
  127. package/dist/hooks/useTypeahead.js +117 -0
  128. package/package.json +1 -1
  129. package/src/Avatar/Avatar.test.tsx +37 -0
  130. package/src/Avatar/Avatar.tsx +10 -5
  131. package/src/Breadcrumbs/BreadcrumbItem.tsx +20 -5
  132. package/src/Breadcrumbs/Breadcrumbs.test.tsx +31 -10
  133. package/src/Calendar/Calendar.test.tsx +25 -0
  134. package/src/Calendar/Calendar.tsx +10 -12
  135. package/src/CheckboxInput/CheckboxInput.test.tsx +14 -25
  136. package/src/CheckboxInput/CheckboxInput.tsx +4 -2
  137. package/src/CheckboxList/CheckboxList.test.tsx +30 -14
  138. package/src/CheckboxList/CheckboxList.tsx +18 -3
  139. package/src/ContextMenu/ContextMenu.doc.mjs +6 -0
  140. package/src/ContextMenu/ContextMenu.test.tsx +115 -1
  141. package/src/ContextMenu/ContextMenu.tsx +75 -4
  142. package/src/DateInput/DateInput.test.tsx +59 -0
  143. package/src/DateInput/DateInput.tsx +24 -7
  144. package/src/DateRangeInput/DateRangeInput.test.tsx +69 -18
  145. package/src/DateRangeInput/DateRangeInput.tsx +7 -3
  146. package/src/DateTimeInput/DateTimeInput.doc.mjs +7 -0
  147. package/src/DateTimeInput/DateTimeInput.test.tsx +99 -6
  148. package/src/DateTimeInput/DateTimeInput.tsx +32 -3
  149. package/src/Dialog/Dialog.tsx +12 -0
  150. package/src/DropdownMenu/DropdownMenu.test.tsx +26 -4
  151. package/src/DropdownMenu/DropdownMenu.tsx +36 -2
  152. package/src/Field/Field.test.tsx +32 -0
  153. package/src/Field/Field.tsx +23 -5
  154. package/src/Field/FieldLabel.tsx +53 -17
  155. package/src/FileInput/FileInput.test.tsx +104 -49
  156. package/src/FileInput/FileInput.tsx +27 -3
  157. package/src/InputGroup/InputGroup.test.tsx +21 -63
  158. package/src/InputGroup/InputGroup.tsx +4 -1
  159. package/src/Kbd/Kbd.test.tsx +22 -4
  160. package/src/Kbd/Kbd.tsx +35 -3
  161. package/src/Layer/useLayer.tsx +52 -5
  162. package/src/Layout/padding.stylex.ts +52 -0
  163. package/src/Link/Link.doc.mjs +14 -0
  164. package/src/Link/Link.test.tsx +32 -0
  165. package/src/Link/Link.tsx +23 -1
  166. package/src/MultiSelector/MultiSelector.test.tsx +124 -2
  167. package/src/MultiSelector/MultiSelector.tsx +50 -9
  168. package/src/MultiSelector/hooks.ts +27 -0
  169. package/src/NavMenu/NavHeadingMenu.test.tsx +32 -1
  170. package/src/NavMenu/NavHeadingMenu.tsx +30 -2
  171. package/src/NumberInput/NumberInput.test.tsx +72 -38
  172. package/src/NumberInput/NumberInput.tsx +12 -1
  173. package/src/Pagination/Pagination.test.tsx +58 -5
  174. package/src/Pagination/Pagination.tsx +12 -0
  175. package/src/ProgressBar/ProgressBar.test.tsx +34 -26
  176. package/src/ProgressBar/ProgressBar.tsx +1 -1
  177. package/src/RadioList/RadioList.test.tsx +129 -14
  178. package/src/RadioList/RadioList.tsx +103 -8
  179. package/src/SegmentedControl/SegmentedControl.test.tsx +35 -0
  180. package/src/SegmentedControl/SegmentedControlItem.tsx +4 -1
  181. package/src/Selector/Selector.test.tsx +53 -0
  182. package/src/Selector/Selector.tsx +15 -8
  183. package/src/Selector/hooks.ts +23 -0
  184. package/src/Skeleton/Skeleton.test.tsx +25 -0
  185. package/src/Skeleton/Skeleton.tsx +11 -1
  186. package/src/Stack/Stack.doc.mjs +57 -0
  187. package/src/Stack/Stack.test.tsx +55 -5
  188. package/src/Stack/Stack.tsx +53 -1
  189. package/src/Stack/StackItem.test.tsx +23 -0
  190. package/src/Stack/StackItem.tsx +20 -0
  191. package/src/TabList/Tab.tsx +6 -0
  192. package/src/TabList/TabList.doc.mjs +6 -0
  193. package/src/TabList/TabList.test.tsx +167 -0
  194. package/src/TabList/TabList.tsx +72 -9
  195. package/src/TabList/TabListContext.ts +7 -3
  196. package/src/TabList/TabMenu.tsx +3 -3
  197. package/src/Toast/Toast.tsx +14 -0
  198. package/src/Toast/ToastViewport.test.tsx +204 -0
  199. package/src/Toast/ToastViewport.tsx +167 -21
  200. package/src/Toolbar/Toolbar.test.tsx +45 -0
  201. package/src/Toolbar/Toolbar.tsx +5 -2
  202. package/src/TreeList/TreeList.test.tsx +273 -0
  203. package/src/TreeList/TreeList.tsx +84 -1
  204. package/src/TreeList/TreeListItem.tsx +42 -2
  205. package/src/TreeList/treeListItem.markers.stylex.ts +20 -0
  206. package/src/Typeahead/BaseTypeahead.tsx +48 -2
  207. package/src/Typeahead/Typeahead.test.tsx +125 -0
  208. package/src/hooks/index.ts +21 -2
  209. package/src/hooks/useAnnounce.test.tsx +101 -0
  210. package/src/hooks/useAnnounce.ts +168 -0
  211. package/src/hooks/useClickableContainer.ts +16 -4
  212. package/src/hooks/useFocusTrap.test.tsx +67 -3
  213. package/src/hooks/useFocusTrap.ts +75 -0
  214. package/src/hooks/useListFocus.doc.mjs +49 -10
  215. package/src/hooks/useListFocus.test.tsx +269 -0
  216. package/src/hooks/useListFocus.ts +339 -54
  217. package/src/hooks/useLongPress.test.tsx +134 -0
  218. package/src/hooks/useLongPress.ts +119 -0
  219. package/src/hooks/useTreeFocus.doc.mjs +126 -0
  220. package/src/hooks/useTreeFocus.test.tsx +214 -0
  221. package/src/hooks/useTreeFocus.ts +464 -0
  222. package/src/hooks/useTypeahead.test.tsx +109 -0
  223. package/src/hooks/useTypeahead.ts +183 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Selector.d.ts","sourceRoot":"","sources":["../../src/Selector/Selector.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Selector.d.ts","sourceRoot":"","sources":["../../src/Selector/Selector.tsx"],"names":[],"mappings":"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"}
@@ -290,6 +290,18 @@ export function Selector(props) {
290
290
  marginBlockStart: `-${selectedItemOffset}px`
291
291
  } : undefined;
292
292
 
293
+ // Clear the current value. Shared by the clear button and the keyboard
294
+ // Delete/Backspace path so clearing is reachable without a mouse.
295
+ const clearValue = useCallback(() => {
296
+ onChange?.(null);
297
+ if (changeAction) {
298
+ startTransition(async () => {
299
+ setOptimisticValue(undefined);
300
+ await changeAction(null);
301
+ });
302
+ }
303
+ }, [onChange, changeAction, startTransition, setOptimisticValue]);
304
+
293
305
  // Selector behavior (keyboard nav, typeahead, selection)
294
306
  const {
295
307
  highlightedIndex,
@@ -323,6 +335,7 @@ export function Selector(props) {
323
335
  });
324
336
  }
325
337
  }, [onChange, changeAction, startTransition, setOptimisticValue]),
338
+ onClear: hasClear ? clearValue : undefined,
326
339
  listboxId
327
340
  });
328
341
 
@@ -342,14 +355,8 @@ export function Selector(props) {
342
355
  // Handle clear button click
343
356
  const handleClear = useCallback(e => {
344
357
  e.stopPropagation(); // Don't open dropdown
345
- onChange?.(null);
346
- if (changeAction) {
347
- startTransition(async () => {
348
- setOptimisticValue(undefined);
349
- await changeAction(null);
350
- });
351
- }
352
- }, [onChange, changeAction, startTransition, setOptimisticValue]);
358
+ clearValue();
359
+ }, [clearValue]);
353
360
 
354
361
  // Render search input
355
362
  const renderSearch = useCallback(() => {
@@ -31,6 +31,13 @@ interface UseComboboxOptions {
31
31
  onOpen: () => void;
32
32
  onClose: () => void;
33
33
  onSelect?: (value: string) => void;
34
+ /**
35
+ * Clear the current value. When provided, pressing Delete or Backspace on the
36
+ * closed trigger clears the selection — a keyboard equivalent of the clear
37
+ * button, so clearing is not mouse-only. No-op when the popup is open (arrow
38
+ * navigation owns those keys there) or when there is no value.
39
+ */
40
+ onClear?: () => void;
34
41
  listboxId: string;
35
42
  }
36
43
  interface UseComboboxResult {
@@ -45,6 +52,6 @@ interface UseComboboxResult {
45
52
  /**
46
53
  * Handles keyboard navigation, typeahead search, and selection for combobox/listbox patterns.
47
54
  */
48
- export declare function useCombobox({ selectableItems, value, isDisabled, isOpen, hasSearch, onOpen, onClose, onSelect, listboxId, }: UseComboboxOptions): UseComboboxResult;
55
+ export declare function useCombobox({ selectableItems, value, isDisabled, isOpen, hasSearch, onOpen, onClose, onSelect, onClear, listboxId, }: UseComboboxOptions): UseComboboxResult;
49
56
  export {};
50
57
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/Selector/hooks.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAMhD,UAAU,4BAA4B;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC7C,UAAU,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;CACjD;AAED,UAAU,2BAA2B;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,UAAU,GACX,EAAE,4BAA4B,GAAG,2BAA2B,CA6E5D;AAMD,UAAU,kBAAkB;IAC1B,eAAe,EAAE,kBAAkB,EAAE,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,iBAAiB;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjD,gBAAgB,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACrE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAC1B,eAAe,EACf,KAAK,EACL,UAAkB,EAClB,MAAM,EACN,SAAiB,EACjB,MAAM,EACN,OAAO,EACP,QAAQ,EACR,SAAS,GACV,EAAE,kBAAkB,GAAG,iBAAiB,CAqMxC"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/Selector/hooks.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAMhD,UAAU,4BAA4B;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC7C,UAAU,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;CACjD;AAED,UAAU,2BAA2B;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,UAAU,GACX,EAAE,4BAA4B,GAAG,2BAA2B,CA6E5D;AAMD,UAAU,kBAAkB;IAC1B,eAAe,EAAE,kBAAkB,EAAE,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,iBAAiB;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjD,gBAAgB,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACrE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAC1B,eAAe,EACf,KAAK,EACL,UAAkB,EAClB,MAAM,EACN,SAAiB,EACjB,MAAM,EACN,OAAO,EACP,QAAQ,EACR,OAAO,EACP,SAAS,GACV,EAAE,kBAAkB,GAAG,iBAAiB,CAoNxC"}
@@ -110,6 +110,7 @@ export function useCombobox({
110
110
  onOpen,
111
111
  onClose,
112
112
  onSelect,
113
+ onClear,
113
114
  listboxId
114
115
  }) {
115
116
  const [highlightedIndex, setHighlightedIndex] = useState(-1);
@@ -223,6 +224,18 @@ export function useCombobox({
223
224
  setHighlightedIndex(enabledIndices[enabledIndices.length - 1]);
224
225
  }
225
226
  break;
227
+ case 'Delete':
228
+ case 'Backspace':
229
+ // Keyboard equivalent of the clear button (comboboxes-2): clear the
230
+ // value from the closed trigger so clearing is not mouse-only. When
231
+ // hasSearch is active these keys must edit the search text instead,
232
+ // and when the popup is open arrow navigation owns interaction, so
233
+ // only handle the closed non-search case with a clearable value.
234
+ if (!hasSearch && !isOpen && onClear != null && value != null) {
235
+ e.preventDefault();
236
+ onClear();
237
+ }
238
+ break;
226
239
  default:
227
240
  if (!hasSearch && e.key.length === 1 && !e.ctrlKey && !e.metaKey) {
228
241
  const newTypeahead = typeahead + e.key.toLowerCase();
@@ -243,7 +256,7 @@ export function useCombobox({
243
256
  }
244
257
  break;
245
258
  }
246
- }, [isDisabled, isOpen, onOpen, closeAndReset, selectableItems, highlightedIndex, selectItem, findSelectedIndex, getEnabledIndices, typeahead, hasSearch]);
259
+ }, [isDisabled, isOpen, onOpen, closeAndReset, selectableItems, highlightedIndex, selectItem, findSelectedIndex, getEnabledIndices, typeahead, hasSearch, onClear, value]);
247
260
  return {
248
261
  highlightedIndex,
249
262
  setHighlightedIndex,
@@ -1 +1 @@
1
- {"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../../src/Skeleton/Skeleton.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAmD3C,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;EAuBhB,CAAC;AAgBH,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,YAAY,CAAC;AAMvD,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAc,EACd,MAAe,EACf,MAAM,EAAE,UAAc,EACtB,KAAS,EACT,aAAa,EAAE,MAAM,EACrB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,aAAa,+BAqBf;yBAhCe,QAAQ"}
1
+ {"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../../src/Skeleton/Skeleton.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAwD3C,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;EAuBhB,CAAC;AAgBH,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,YAAY,CAAC;AAMvD,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAc,EACd,MAAe,EACf,MAAM,EAAE,UAAc,EACtB,KAAS,EACT,aAAa,EAAE,MAAM,EACrB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,aAAa,+BA0Bf;yBArCe,QAAQ"}
@@ -57,7 +57,7 @@ const styles = {
57
57
  kILWW9: "xpz12be",
58
58
  k44tkh: "xqgcaz",
59
59
  ko0y90: "xa4qsjk",
60
- kKVMdj: "xeuoslp",
60
+ kKVMdj: "xeuoslp x1aquc0h",
61
61
  kyAemX: "x193epu2",
62
62
  $$css: true
63
63
  }
@@ -144,7 +144,13 @@ export function Skeleton({
144
144
  ...props
145
145
  }) {
146
146
  return /*#__PURE__*/_jsx("div", {
147
- ref: ref,
147
+ ref: ref
148
+ // Purely decorative loading placeholder — hide from assistive tech so it
149
+ // isn't announced as empty content. The surrounding region should convey
150
+ // the loading/busy state (e.g. aria-busy) (complex-20). Consumers can
151
+ // override via props if a specific skeleton must be exposed.
152
+ ,
153
+ "aria-hidden": "true",
148
154
  "data-testid": testId,
149
155
  ...mergeProps(themeProps('skeleton'), stylex.props(styles.root, styles.animate, radiusStyles[radiusProp], dynamicStyles.dimensions(width, height), dynamicStyles.animationDelay(index), xstyle), className, style),
150
156
  ...props
@@ -82,6 +82,33 @@ export interface StackProps extends BaseProps<HTMLElement> {
82
82
  * Accepts numeric spacing steps: 0, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 8, 10.
83
83
  */
84
84
  gap?: SpacingStep;
85
+ /**
86
+ * Inner padding on all sides, using the spacing scale.
87
+ * Accepts numeric spacing steps: 0, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 8, 10.
88
+ *
89
+ * Matches the `padding` prop on `Card`, `LayoutContent`, and `LayoutPanel`.
90
+ */
91
+ padding?: SpacingStep;
92
+ /**
93
+ * Inline (horizontal) padding, using the spacing scale.
94
+ * Overrides `padding` on the inline axis when both are set.
95
+ */
96
+ paddingInline?: SpacingStep;
97
+ /**
98
+ * Block (vertical) padding, using the spacing scale.
99
+ * Overrides `padding` on the block axis when both are set.
100
+ */
101
+ paddingBlock?: SpacingStep;
102
+ /**
103
+ * Enables scrollable overflow (`overflow: auto`) for the stack.
104
+ *
105
+ * Matches the `isScrollable` prop on `LayoutContent` and `LayoutPanel`.
106
+ * When the stack is itself a flex child that should scroll, pair it with
107
+ * a parent `StackItem size="fill" isScrollable` (StackItem applies the
108
+ * `min-height: 0` reset that flex scroll regions require).
109
+ * @default false
110
+ */
111
+ isScrollable?: boolean;
85
112
  /**
86
113
  * Whether items should wrap.
87
114
  * - `nowrap`: Items stay on one line (default)
@@ -145,7 +172,7 @@ export interface StackProps extends BaseProps<HTMLElement> {
145
172
  * </Stack>
146
173
  * ```
147
174
  */
148
- export declare function Stack({ direction, hAlign, vAlign, justify, align, gap, width, height, wrap, as: element, xstyle, className, style, children, ref, ...props }: StackProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
175
+ export declare function Stack({ direction, hAlign, vAlign, justify, align, gap, padding, paddingInline, paddingBlock, isScrollable, width, height, wrap, as: element, xstyle, className, style, children, ref, ...props }: StackProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
149
176
  export declare namespace Stack {
150
177
  var displayName: string;
151
178
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../src/Stack/Stack.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH,OAAO,EAAgB,KAAK,WAAW,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAChF,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAI9C;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAGtE,MAAM,WAAW,UAAW,SAAQ,SAAS,CAAC,WAAW,CAAC;IACxD,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAE7B;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAE5B;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;OAGG;IACH,GAAG,CAAC,EAAE,WAAW,CAAC;IAElB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;;OAGG;IACH,EAAE,CAAC,EAAE,WAAW,CAAC;IAEjB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,KAAK,CAAC,EACpB,SAAsB,EACtB,MAAM,EACN,MAAM,EACN,OAAO,EACP,KAAK,EACL,GAAG,EACH,KAAK,EACL,MAAM,EACN,IAAI,EACJ,EAAE,EAAE,OAAe,EACnB,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,UAAU,0FAoDZ;yBArEe,KAAK"}
1
+ {"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../src/Stack/Stack.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH,OAAO,EAAgB,KAAK,WAAW,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAChF,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAc9C;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAEtE,MAAM,WAAW,UAAW,SAAQ,SAAS,CAAC,WAAW,CAAC;IACxD,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAE7B;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAE5B;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;OAGG;IACH,GAAG,CAAC,EAAE,WAAW,CAAC;IAElB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,aAAa,CAAC,EAAE,WAAW,CAAC;IAE5B;;;OAGG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC;IAE3B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;;OAGG;IACH,EAAE,CAAC,EAAE,WAAW,CAAC;IAEjB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,KAAK,CAAC,EACpB,SAAsB,EACtB,MAAM,EACN,MAAM,EACN,OAAO,EACP,KAAK,EACL,GAAG,EACH,OAAO,EACP,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,MAAM,EACN,IAAI,EACJ,EAAE,EAAE,OAAe,EACnB,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,UAAU,0FA4DZ;yBAjFe,KAAK"}
@@ -15,8 +15,15 @@
15
15
  import { createElement } from 'react';
16
16
  import * as stylex from '@stylexjs/stylex';
17
17
  import { stack } from "./stack.stylex.js";
18
+ import { paddingInlineStyles, paddingBlockStyles } from "../Layout/padding.stylex.js";
18
19
  import { mergeProps } from "../utils/index.js";
19
20
  import { themeProps } from "../utils/themeProps.js";
21
+ const overflowStyles = {
22
+ scrollable: {
23
+ kVQacm: "xysyzu8",
24
+ $$css: true
25
+ }
26
+ };
20
27
 
21
28
  /**
22
29
  * Alignment values accepted by Stack.
@@ -60,6 +67,10 @@ export function Stack({
60
67
  justify,
61
68
  align,
62
69
  gap,
70
+ padding,
71
+ paddingInline,
72
+ paddingBlock,
73
+ isScrollable,
63
74
  width,
64
75
  height,
65
76
  wrap,
@@ -78,13 +89,18 @@ export function Stack({
78
89
  // Map hAlign/vAlign to mainAlign/crossAlign based on direction
79
90
  const mainAlign = direction === 'horizontal' ? resolvedHAlign : resolvedVAlign;
80
91
  const crossAlign = direction === 'horizontal' ? resolvedVAlign : resolvedHAlign;
92
+
93
+ // Resolve padding to per-axis values: `padding` sets both axes; `paddingInline`
94
+ // / `paddingBlock` take precedence on their own axis when provided.
95
+ const resolvedPaddingInline = paddingInline ?? padding;
96
+ const resolvedPaddingBlock = paddingBlock ?? padding;
81
97
  const stylexProps = stylex.props(...stack({
82
98
  direction,
83
99
  crossAlign,
84
100
  mainAlign,
85
101
  gap,
86
102
  wrap
87
- }), xstyle);
103
+ }), resolvedPaddingInline != null && paddingInlineStyles[resolvedPaddingInline], resolvedPaddingBlock != null && paddingBlockStyles[resolvedPaddingBlock], isScrollable && overflowStyles.scrollable, xstyle);
88
104
 
89
105
  // Build inline style for dynamic sizing values
90
106
  const sizingStyle = {
@@ -28,6 +28,17 @@ export interface StackItemProps extends BaseProps<HTMLElement> {
28
28
  * @default "static"
29
29
  */
30
30
  size?: StackItemSize;
31
+ /**
32
+ * Enables scrollable overflow (`overflow: auto`) for the item.
33
+ *
34
+ * StackItem already applies the flex `min-height: 0` / `min-width: 0`
35
+ * reset, so `<StackItem size="fill" isScrollable>` is a complete scroll
36
+ * region — it grows to fill the stack and scrolls its own overflow with
37
+ * no extra style plumbing. Matches `isScrollable` on `LayoutContent`
38
+ * and `LayoutPanel`.
39
+ * @default false
40
+ */
41
+ isScrollable?: boolean;
31
42
  /**
32
43
  * The element type to render.
33
44
  * @default 'div'
@@ -73,7 +84,7 @@ export interface StackItemProps extends BaseProps<HTMLElement> {
73
84
  * </HStack>
74
85
  * ```
75
86
  */
76
- export declare function StackItem({ crossAlignSelf, size, as: element, xstyle, className, style, children, ref, ...props }: StackItemProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
87
+ export declare function StackItem({ crossAlignSelf, size, isScrollable, as: element, xstyle, className, style, children, ref, ...props }: StackItemProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
77
88
  export declare namespace StackItem {
78
89
  var displayName: string;
79
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"StackItem.d.ts","sourceRoot":"","sources":["../../src/Stack/StackItem.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAgB,KAAK,WAAW,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAChF,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAI5B,MAAM,WAAW,cAAe,SAAQ,SAAS,CAAC,WAAW,CAAC;IAC5D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;;OAGG;IACH,cAAc,CAAC,EAAE,uBAAuB,CAAC;IAEzC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IAErB;;;OAGG;IACH,EAAE,CAAC,EAAE,WAAW,CAAC;IAEjB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,EACxB,cAAc,EACd,IAAI,EACJ,EAAE,EAAE,OAAe,EACnB,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,cAAc,0FAoBhB;yBA9Be,SAAS"}
1
+ {"version":3,"file":"StackItem.d.ts","sourceRoot":"","sources":["../../src/Stack/StackItem.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAgB,KAAK,WAAW,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAChF,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAU5B,MAAM,WAAW,cAAe,SAAQ,SAAS,CAAC,WAAW,CAAC;IAC5D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;;OAGG;IACH,cAAc,CAAC,EAAE,uBAAuB,CAAC;IAEzC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IAErB;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,EAAE,CAAC,EAAE,WAAW,CAAC;IAEjB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,EACxB,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,EAAE,EAAE,OAAe,EACnB,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,cAAc,0FAqBhB;yBAhCe,SAAS"}
@@ -16,6 +16,12 @@ import * as stylex from '@stylexjs/stylex';
16
16
  import { stackItem } from "./stackItem.stylex.js";
17
17
  import { mergeProps } from "../utils/index.js";
18
18
  import { themeProps } from "../utils/themeProps.js";
19
+ const overflowStyles = {
20
+ scrollable: {
21
+ kVQacm: "xysyzu8",
22
+ $$css: true
23
+ }
24
+ };
19
25
  /**
20
26
  * Stack item component for controlling individual item behavior within a stack.
21
27
  *
@@ -33,6 +39,7 @@ import { themeProps } from "../utils/themeProps.js";
33
39
  export function StackItem({
34
40
  crossAlignSelf,
35
41
  size,
42
+ isScrollable,
36
43
  as: element = 'div',
37
44
  xstyle,
38
45
  className,
@@ -44,7 +51,7 @@ export function StackItem({
44
51
  const stylexProps = stylex.props(...stackItem({
45
52
  crossAlignSelf,
46
53
  size
47
- }), xstyle);
54
+ }), isScrollable && overflowStyles.scrollable, xstyle);
48
55
  return /*#__PURE__*/createElement(element, {
49
56
  ref: ref,
50
57
  ...mergeProps(themeProps('stack-item', {
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../src/TabList/Tab.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,EAAc,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAYzD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAK5C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAKrD,MAAM,WAAW,QAAS,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC5D;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;OAEG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAoID;;;;;;;;;;;GAWG;AACH,wBAAgB,GAAG,CAAC,EAClB,EAAE,EACF,GAAG,EACH,KAAK,EACL,KAAK,EACL,aAAqB,EACrB,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,SAAS,EACb,EAAE,QAAQ,qBAqGV;yBAnHe,GAAG"}
1
+ {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../src/TabList/Tab.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,EAAc,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAYzD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAK5C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAKrD,MAAM,WAAW,QAAS,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC5D;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;OAEG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAoID;;;;;;;;;;;GAWG;AACH,wBAAgB,GAAG,CAAC,EAClB,EAAE,EACF,GAAG,EACH,KAAK,EACL,KAAK,EACL,aAAqB,EACrB,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,SAAS,EACb,EAAE,QAAQ,qBA2GV;yBAzHe,GAAG"}
@@ -186,7 +186,13 @@ export function Tab({
186
186
  'aria-label': label
187
187
  } : {}),
188
188
  [EDGE_COMP_ATTR]: '',
189
+ 'data-tab-value': value,
189
190
  'aria-current': isSelected ? 'page' : undefined,
191
+ // Roving tabindex: the tab strip is a single Tab stop. The selected tab is
192
+ // the tabbable one; the rest are reachable via arrow keys (handled by
193
+ // TabList's onKeyDown). When no tab is selected, TabList's repair effect
194
+ // makes the first stop tabbable.
195
+ tabIndex: isSelected ? 0 : -1,
190
196
  ...mergeProps(themeProps('tab', {
191
197
  selected: isSelected ? 'selected' : null
192
198
  }), stylex.props(styles.base, sizeStyles[size], isSelected && styles.selected, isFill && layoutStyles.fill, tabScope, xstyle), className, style)
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * @file TabList.tsx
3
- * @input Uses React, StyleX, TabListContext
3
+ * @input Uses React, StyleX, TabListContext, useListFocus
4
4
  * @output Exports TabList component and TabListProps type
5
- * @position Nav wrapper; provides TabListContext to Tab and TabMenu children
5
+ * @position Nav wrapper; provides TabListContext to Tab and TabMenu children.
6
+ * Owns roving-tabindex keyboard navigation (Arrow/Home/End) across the tab
7
+ * strip via the shared useListFocus hook so it is a single Tab stop.
6
8
  *
7
9
  * SYNC: When modified, update:
8
10
  * - /packages/core/src/TabList/TabList.doc.mjs
@@ -12,7 +14,7 @@
12
14
  */
13
15
  import React, { type ReactNode } from 'react';
14
16
  import type { BaseProps } from '../BaseProps';
15
- import type { TabListSize } from './TabListContext';
17
+ import type { TabListOrientation, TabListSize } from './TabListContext';
16
18
  export interface TabListProps extends Omit<BaseProps<HTMLElement>, 'onChange'> {
17
19
  ref?: React.Ref<HTMLElement>;
18
20
  /**
@@ -41,6 +43,15 @@ export interface TabListProps extends Omit<BaseProps<HTMLElement>, 'onChange'> {
41
43
  * @default false
42
44
  */
43
45
  hasDivider?: boolean;
46
+ /**
47
+ * Orientation of the tab strip, controlling which arrow keys move
48
+ * focus between tabs.
49
+ * - `'horizontal'` (default): ArrowLeft / ArrowRight (ArrowUp / ArrowDown
50
+ * also work per the WAI-ARIA APG).
51
+ * - `'vertical'`: ArrowUp / ArrowDown (ArrowLeft / ArrowRight also work).
52
+ * @default 'horizontal'
53
+ */
54
+ orientation?: TabListOrientation;
44
55
  /**
45
56
  * Tab and TabMenu children.
46
57
  */
@@ -62,7 +73,7 @@ export interface TabListProps extends Omit<BaseProps<HTMLElement>, 'onChange'> {
62
73
  * </TabList>
63
74
  * ```
64
75
  */
65
- export declare function TabList({ ref, value, onChange, size: sizeProp, layout, hasDivider, xstyle, className, style, children, ...restProps }: TabListProps): React.JSX.Element;
76
+ export declare function TabList({ ref, value, onChange, size: sizeProp, layout, hasDivider, orientation, xstyle, className, style, children, ...restProps }: TabListProps): React.JSX.Element;
66
77
  export declare namespace TabList {
67
78
  var displayName: string;
68
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TabList.d.ts","sourceRoot":"","sources":["../../src/TabList/TabList.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAAU,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAGrD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAMlD,MAAM,WAAW,YAAa,SAAQ,IAAI,CACxC,SAAS,CAAC,WAAW,CAAC,EACtB,UAAU,CACX;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAoBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,OAAO,CAAC,EACtB,GAAG,EACH,KAAK,EACL,QAAQ,EACR,IAAI,EAAE,QAAQ,EACd,MAAc,EACd,UAAkB,EAClB,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,SAAS,EACb,EAAE,YAAY,qBA8Bd;yBA1Ce,OAAO"}
1
+ {"version":3,"file":"TabList.d.ts","sourceRoot":"","sources":["../../src/TabList/TabList.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,EAAU,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAGrD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAC,kBAAkB,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAsBtE,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IAC5E,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAoBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,OAAO,CAAC,EACtB,GAAG,EACH,KAAK,EACL,QAAQ,EACR,IAAI,EAAE,QAAQ,EACd,MAAc,EACd,UAAkB,EAClB,WAA0B,EAC1B,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,SAAS,EACb,EAAE,YAAY,qBAoEd;yBAjFe,OAAO"}
@@ -4,9 +4,11 @@
4
4
 
5
5
  /**
6
6
  * @file TabList.tsx
7
- * @input Uses React, StyleX, TabListContext
7
+ * @input Uses React, StyleX, TabListContext, useListFocus
8
8
  * @output Exports TabList component and TabListProps type
9
- * @position Nav wrapper; provides TabListContext to Tab and TabMenu children
9
+ * @position Nav wrapper; provides TabListContext to Tab and TabMenu children.
10
+ * Owns roving-tabindex keyboard navigation (Arrow/Home/End) across the tab
11
+ * strip via the shared useListFocus hook so it is a single Tab stop.
10
12
  *
11
13
  * SYNC: When modified, update:
12
14
  * - /packages/core/src/TabList/TabList.doc.mjs
@@ -20,10 +22,22 @@ import "../theme/tokens.stylex.js";
20
22
  import { borderVars, colorVars, spacingVars } from "../theme/tokens.stylex.js";
21
23
  import { TabListContext } from "./TabListContext.js";
22
24
  import { useSize } from "../SizeContext/SizeContext.js";
23
- import { mergeProps } from "../utils/index.js";
25
+ import { mergeProps, mergeRefs } from "../utils/index.js";
26
+ import { useListFocus } from "../hooks/useListFocus.js";
27
+ import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
24
28
  import { EDGE_COMP_ATTR } from "../Layout/edgeCompensation.stylex.js";
25
29
  import { themeProps } from "../utils/themeProps.js";
30
+
31
+ /**
32
+ * Selector matching the focusable stops in the tab strip: every Tab
33
+ * (`[data-tab-value]`) and every TabMenu trigger (`[data-tab-menu]`),
34
+ * in DOM order. Disabled stops are filtered out by the handler.
35
+ */
26
36
  import { jsx as _jsx } from "react/jsx-runtime";
37
+ const TAB_STOP_SELECTOR = '[data-tab-value],[data-tab-menu]';
38
+ function isDisabledStop(el) {
39
+ return el.getAttribute('aria-disabled') === 'true' || el instanceof HTMLButtonElement && el.disabled;
40
+ }
27
41
  const styles = {
28
42
  nav: {
29
43
  k1xSpc: "x78zum5",
@@ -68,6 +82,7 @@ export function TabList({
68
82
  size: sizeProp,
69
83
  layout = 'hug',
70
84
  hasDivider = false,
85
+ orientation = 'horizontal',
71
86
  xstyle,
72
87
  className,
73
88
  style,
@@ -75,17 +90,56 @@ export function TabList({
75
90
  ...restProps
76
91
  }) {
77
92
  const size = useSize(sizeProp, 'md');
93
+
94
+ // Roving-tabindex keyboard navigation across the tab strip via the shared
95
+ // hook. `orientation: 'both'` accepts both arrow axes per the WAI-ARIA APG
96
+ // allowance for tab strips (ArrowRight/ArrowDown advance, ArrowLeft/ArrowUp
97
+ // retreat) regardless of the component's `orientation` prop, which only
98
+ // drives the reported `aria-orientation`.
99
+ const {
100
+ listRef,
101
+ handleKeyDown
102
+ } = useListFocus({
103
+ itemSelector: TAB_STOP_SELECTOR,
104
+ orientation: 'both'
105
+ });
78
106
  const contextValue = useMemo(() => ({
79
107
  value,
80
108
  onChange,
81
109
  size,
82
110
  layout
83
111
  }), [value, onChange, size, layout]);
112
+
113
+ // Roving tabindex: the tab strip is a single Tab stop. Individual Tabs set
114
+ // tabIndex={0} on the selected tab and -1 on the rest (see Tab.tsx). If the
115
+ // selected value doesn't correspond to any focusable stop (e.g. selection
116
+ // lives in a collapsed TabMenu that renders no matching stop, or there is no
117
+ // selection at all), no stop would be tabbable — this effect repairs that by
118
+ // making the first stop tabbable. useListFocus handles arrow navigation but
119
+ // not the initial tabbable stop, so this stays. Same pattern as the
120
+ // SegmentedControl fix.
121
+ useIsomorphicLayoutEffect(() => {
122
+ const nav = listRef.current;
123
+ if (nav == null) {
124
+ return;
125
+ }
126
+ const stops = Array.from(nav.querySelectorAll(TAB_STOP_SELECTOR));
127
+ if (stops.length === 0) {
128
+ return;
129
+ }
130
+ const hasTabbable = stops.some(el => el.tabIndex === 0);
131
+ if (!hasTabbable) {
132
+ const firstEnabled = stops.find(el => !isDisabledStop(el)) ?? stops[0];
133
+ firstEnabled.tabIndex = 0;
134
+ }
135
+ });
84
136
  return /*#__PURE__*/_jsx(TabListContext, {
85
137
  value: contextValue,
86
138
  children: /*#__PURE__*/_jsx("nav", {
87
- ref: ref,
139
+ ref: mergeRefs(ref, listRef),
88
140
  "aria-label": "Tabs",
141
+ "aria-orientation": orientation,
142
+ onKeyDown: handleKeyDown,
89
143
  [EDGE_COMP_ATTR]: '',
90
144
  ...restProps,
91
145
  ...mergeProps(themeProps('tab-list', {
@@ -9,6 +9,11 @@ export type TabListSize = 'sm' | 'md' | 'lg';
9
9
  * - `'fill'`: tabs stretch equally to fill the container width.
10
10
  */
11
11
  export type TabListLayout = 'hug' | 'fill';
12
+ /**
13
+ * Orientation of the tab strip. Controls which arrow keys move focus
14
+ * between tabs and the reported `aria-orientation`.
15
+ */
16
+ export type TabListOrientation = 'horizontal' | 'vertical';
12
17
  /**
13
18
  * Context for communicating value/onChange/size/layout from TabList to children.
14
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"TabListContext.d.ts","sourceRoot":"","sources":["../../src/TabList/TabListContext.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,eAAO,MAAM,cAAc,qDAE1B,CAAC;AAGF;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,mBAAmB,CASvD"}
1
+ {"version":3,"file":"TabListContext.d.ts","sourceRoot":"","sources":["../../src/TabList/TabListContext.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,UAAU,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,eAAO,MAAM,cAAc,qDAAkD,CAAC;AAG9E;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,mBAAmB,CASvD"}
@@ -23,6 +23,11 @@ import { createContext, use } from 'react';
23
23
  * - `'fill'`: tabs stretch equally to fill the container width.
24
24
  */
25
25
 
26
+ /**
27
+ * Orientation of the tab strip. Controls which arrow keys move focus
28
+ * between tabs and the reported `aria-orientation`.
29
+ */
30
+
26
31
  /**
27
32
  * Context for communicating value/onChange/size/layout from TabList to children.
28
33
  */
@@ -172,6 +172,8 @@ export function TabMenu({
172
172
  "aria-haspopup": "menu",
173
173
  "aria-expanded": popover.isOpen,
174
174
  "aria-controls": menuId,
175
+ "data-tab-menu": "",
176
+ tabIndex: hasSelectedOption ? 0 : -1,
175
177
  onClick: handleToggle,
176
178
  ...mergeProps(themeProps('tab-menu'), stylex.props(styles.trigger, sizeStyles[size], hasSelectedOption && styles.triggerSelected, tabScope, xstyle), className, style),
177
179
  children: [/*#__PURE__*/_jsx("span", {
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../src/Toast/Toast.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAiBrC,OAAO,KAAK,EAAC,SAAS,EAAE,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAyD3D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,KAAK,CAAC,EACpB,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,SAAiB,EACjB,SAAS,GACV,EAAE,UAAU,+BAmGZ;yBA3Ge,KAAK"}
1
+ {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../src/Toast/Toast.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAiBrC,OAAO,KAAK,EAAC,SAAS,EAAE,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAyD3D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,KAAK,CAAC,EACpB,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,SAAiB,EACjB,SAAS,GACV,EAAE,UAAU,+BAiHZ;yBAzHe,KAAK"}
@@ -88,6 +88,20 @@ export function Toast({
88
88
  }
89
89
  };
90
90
  }, [autoHideDuration, startTimer]);
91
+
92
+ // Pause the auto-hide timer while the window is not focused, so a toast
93
+ // doesn't silently expire while the user is in another window or tab.
94
+ useEffect(() => {
95
+ if (!isAutoHide) {
96
+ return;
97
+ }
98
+ window.addEventListener('blur', pauseTimer);
99
+ window.addEventListener('focus', resumeTimer);
100
+ return () => {
101
+ window.removeEventListener('blur', pauseTimer);
102
+ window.removeEventListener('focus', resumeTimer);
103
+ };
104
+ }, [isAutoHide, pauseTimer, resumeTimer]);
91
105
  const handleDismiss = useCallback(() => {
92
106
  onDismiss('manual');
93
107
  }, [onDismiss]);
@@ -1 +1 @@
1
- {"version":3,"file":"ToastViewport.d.ts","sourceRoot":"","sources":["../../src/Toast/ToastViewport.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAEV,aAAa,EAEd,MAAM,SAAS,CAAC;AA2DjB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;IACtE;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAsB,EACtB,UAAc,EACd,KAAK,EACL,UAAiB,EACjB,QAAQ,GACT,EAAE,kBAAkB,+BAuJpB;yBA7Je,aAAa"}
1
+ {"version":3,"file":"ToastViewport.d.ts","sourceRoot":"","sources":["../../src/Toast/ToastViewport.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAa,aAAa,EAAqB,MAAM,SAAS,CAAC;AA2D3E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;IACtE;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAsB,EACtB,UAAc,EACd,KAAK,EACL,UAAiB,EACjB,QAAQ,GACT,EAAE,kBAAkB,+BAqSpB;yBA3Se,aAAa"}