@astryxdesign/core 0.7.7 → 0.7.8-canary.07ee4b5

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 (682) hide show
  1. package/dist/AlertDialog/AlertDialog.d.ts +4 -1
  2. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  3. package/dist/AlertDialog/AlertDialog.js +46 -6
  4. package/dist/AppShell/AppShell.d.ts.map +1 -1
  5. package/dist/AppShell/AppShell.js +11 -3
  6. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  7. package/dist/BottomSheet/BottomSheet.js +1 -0
  8. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  9. package/dist/BottomSheet/BottomSheetPanel.js +25 -4
  10. package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
  11. package/dist/BottomSheet/BottomSheetSwitcher.js +5 -0
  12. package/dist/BottomSheet/useMobileKeyboard.d.ts.map +1 -1
  13. package/dist/BottomSheet/useMobileKeyboard.js +6 -0
  14. package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
  15. package/dist/BottomSheet/useSheetGestures.js +12 -1
  16. package/dist/Button/Button.d.ts.map +1 -1
  17. package/dist/Button/Button.js +17 -1
  18. package/dist/Calendar/Calendar.d.ts.map +1 -1
  19. package/dist/Calendar/Calendar.js +18 -22
  20. package/dist/Calendar/getWeekdayHeaderNames.d.ts +16 -0
  21. package/dist/Calendar/getWeekdayHeaderNames.d.ts.map +1 -0
  22. package/dist/Calendar/getWeekdayHeaderNames.js +70 -0
  23. package/dist/Calendar/hooks/useCalendarDays.d.ts.map +1 -1
  24. package/dist/Calendar/hooks/useCalendarDays.js +2 -10
  25. package/dist/Calendar/{standaloneShortWeekdayNames.generated.d.ts → weekdayHeaderNames.generated.d.ts} +14 -14
  26. package/dist/Calendar/weekdayHeaderNames.generated.d.ts.map +1 -0
  27. package/dist/Calendar/{standaloneShortWeekdayNames.generated.js → weekdayHeaderNames.generated.js} +12 -12
  28. package/dist/Carousel/Carousel.d.ts.map +1 -1
  29. package/dist/Carousel/Carousel.js +2 -0
  30. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  31. package/dist/Chat/ChatComposerInput.js +6 -1
  32. package/dist/Chat/ChatMessageList.d.ts.map +1 -1
  33. package/dist/Chat/ChatMessageList.js +2 -1
  34. package/dist/Chat/useChatDictation.d.ts.map +1 -1
  35. package/dist/Chat/useChatDictation.js +2 -0
  36. package/dist/Chat/useChatNewMessages.js +1 -1
  37. package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
  38. package/dist/Chat/useChatStreamScroll.js +2 -0
  39. package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
  40. package/dist/Chat/useSpeechRecognition.js +3 -0
  41. package/dist/Chat/useTriggerMenu.js +1 -1
  42. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  43. package/dist/CheckboxInput/CheckboxInput.js +17 -12
  44. package/dist/CheckboxList/CheckboxList.d.ts +8 -1
  45. package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
  46. package/dist/CheckboxList/CheckboxList.js +2 -0
  47. package/dist/CodeBlock/CodeBlock.d.ts +10 -1
  48. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  49. package/dist/CodeBlock/CodeBlock.js +28 -11
  50. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  51. package/dist/CommandPalette/CommandPalette.js +2 -0
  52. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  53. package/dist/CommandPalette/CommandPaletteItem.js +2 -0
  54. package/dist/ComplexSelector/ComplexSelector.d.ts +4 -1
  55. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  56. package/dist/ComplexSelector/ComplexSelector.js +14 -4
  57. package/dist/ContextMenu/ContextMenu.js +2 -2
  58. package/dist/DateInput/MonthScroller.d.ts.map +1 -1
  59. package/dist/DateInput/MonthScroller.js +5 -2
  60. package/dist/DateInput/PickerWheel.d.ts +19 -0
  61. package/dist/DateInput/PickerWheel.d.ts.map +1 -0
  62. package/dist/DateInput/PickerWheel.js +625 -0
  63. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  64. package/dist/DateInput/TouchDateField.js +9 -30
  65. package/dist/DateInput/Wheel.d.ts +18 -37
  66. package/dist/DateInput/Wheel.d.ts.map +1 -1
  67. package/dist/DateInput/Wheel.js +84 -113
  68. package/dist/DateInput/useOwnScrollGesture.d.ts +10 -0
  69. package/dist/DateInput/useOwnScrollGesture.d.ts.map +1 -1
  70. package/dist/DateInput/useOwnScrollGesture.js +16 -3
  71. package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -1
  72. package/dist/DateInput/usePointerDragScroll.js +2 -0
  73. package/dist/DateInput/useScrollSettle.d.ts.map +1 -1
  74. package/dist/DateInput/useScrollSettle.js +3 -0
  75. package/dist/DateInput/useWheelListbox.d.ts +59 -0
  76. package/dist/DateInput/useWheelListbox.d.ts.map +1 -0
  77. package/dist/DateInput/useWheelListbox.js +88 -0
  78. package/dist/DateInput/wheelOptions.d.ts +74 -0
  79. package/dist/DateInput/wheelOptions.d.ts.map +1 -0
  80. package/dist/DateInput/wheelOptions.js +98 -0
  81. package/dist/DateInput/wheelPhysics.d.ts +127 -0
  82. package/dist/DateInput/wheelPhysics.d.ts.map +1 -0
  83. package/dist/DateInput/wheelPhysics.js +341 -0
  84. package/dist/DateInput/wheelStrip.d.ts +92 -0
  85. package/dist/DateInput/wheelStrip.d.ts.map +1 -0
  86. package/dist/DateInput/wheelStrip.js +258 -0
  87. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  88. package/dist/DateTimeInput/TouchDateTimeField.js +10 -10
  89. package/dist/Dialog/Dialog.d.ts.map +1 -1
  90. package/dist/Dialog/Dialog.js +9 -32
  91. package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
  92. package/dist/Drawer/useDrawerDialogPresence.js +3 -0
  93. package/dist/DropdownMenu/useMenuOverflow.d.ts.map +1 -1
  94. package/dist/DropdownMenu/useMenuOverflow.js +5 -0
  95. package/dist/Field/Field.js +2 -2
  96. package/dist/FieldStatus/useFieldStatusAnnouncement.d.ts.map +1 -1
  97. package/dist/FieldStatus/useFieldStatusAnnouncement.js +1 -0
  98. package/dist/FormLayout/FormLayout.d.ts +5 -1
  99. package/dist/FormLayout/FormLayout.d.ts.map +1 -1
  100. package/dist/HoverCard/HoverCard.d.ts +6 -4
  101. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  102. package/dist/HoverCard/HoverCard.js +48 -3
  103. package/dist/HoverCard/useHoverCard.d.ts +5 -4
  104. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  105. package/dist/HoverCard/useHoverCard.js +20 -33
  106. package/dist/Icon/Icon.d.ts +5 -1
  107. package/dist/Icon/Icon.d.ts.map +1 -1
  108. package/dist/Icon/Icon.js +5 -2
  109. package/dist/InfoTip/InfoTip.d.ts +5 -5
  110. package/dist/InfoTip/InfoTip.d.ts.map +1 -1
  111. package/dist/InfoTip/InfoTip.js +58 -19
  112. package/dist/Item/useSwipeAction.d.ts.map +1 -1
  113. package/dist/Item/useSwipeAction.js +3 -0
  114. package/dist/Layer/modalOutlet.d.ts.map +1 -1
  115. package/dist/Layer/modalOutlet.js +2 -0
  116. package/dist/Layer/outsidePress.d.ts.map +1 -1
  117. package/dist/Layer/outsidePress.js +1 -0
  118. package/dist/Layer/useLayer.d.ts.map +1 -1
  119. package/dist/Layer/useLayer.js +4 -1
  120. package/dist/Layer/useLayerDismissal.d.ts.map +1 -1
  121. package/dist/Layer/useLayerDismissal.js +3 -0
  122. package/dist/Layer/useTouchTrigger.d.ts +13 -7
  123. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  124. package/dist/Layer/useTouchTrigger.js +20 -6
  125. package/dist/Layout/index.d.ts +1 -1
  126. package/dist/Layout/index.d.ts.map +1 -1
  127. package/dist/Layout/index.js +1 -1
  128. package/dist/Layout/layoutReset.js +1 -1
  129. package/dist/Layout/overlayPaddingReset.stylex.d.ts +68 -0
  130. package/dist/Layout/overlayPaddingReset.stylex.d.ts.map +1 -0
  131. package/dist/Layout/overlayPaddingReset.stylex.js +72 -0
  132. package/dist/Layout/padding.stylex.d.ts +5 -129
  133. package/dist/Layout/padding.stylex.d.ts.map +1 -1
  134. package/dist/Layout/padding.stylex.js +9 -143
  135. package/dist/Layout/paddingStyles.stylex.d.ts +83 -0
  136. package/dist/Layout/paddingStyles.stylex.d.ts.map +1 -0
  137. package/dist/Layout/paddingStyles.stylex.js +99 -0
  138. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  139. package/dist/Lightbox/Lightbox.js +20 -1
  140. package/dist/MobileNav/MobileNav.d.ts +3 -2
  141. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  142. package/dist/MobileNav/MobileNav.js +10 -26
  143. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  144. package/dist/MultiSelector/MultiSelector.js +2 -1
  145. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  146. package/dist/NumberInput/NumberInput.js +2 -1
  147. package/dist/Outline/useOutlineFromDOM.d.ts.map +1 -1
  148. package/dist/Outline/useOutlineFromDOM.js +3 -0
  149. package/dist/Outline/useScrollSpy.d.ts.map +1 -1
  150. package/dist/Outline/useScrollSpy.js +3 -0
  151. package/dist/OverflowList/OverflowList.d.ts.map +1 -1
  152. package/dist/OverflowList/OverflowList.js +3 -0
  153. package/dist/Popover/Popover.d.ts.map +1 -1
  154. package/dist/Popover/Popover.js +6 -0
  155. package/dist/Popover/usePopover.js +2 -2
  156. package/dist/PowerSearch/PowerSearch.d.ts +39 -4
  157. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  158. package/dist/PowerSearch/PowerSearch.js +441 -134
  159. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts +102 -0
  160. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -0
  161. package/dist/PowerSearch/PowerSearchBottomSheet.js +1919 -0
  162. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +35 -2
  163. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  164. package/dist/PowerSearch/PowerSearchEditPopover.js +43 -10
  165. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts +1 -1
  166. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts.map +1 -1
  167. package/dist/PowerSearch/PowerSearchFilterEditor.js +4 -2
  168. package/dist/PowerSearch/PowerSearchToken.d.ts +1 -1
  169. package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
  170. package/dist/PowerSearch/PowerSearchToken.js +3 -2
  171. package/dist/PowerSearch/PowerSearchValueEditor.d.ts +38 -3
  172. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  173. package/dist/PowerSearch/PowerSearchValueEditor.js +273 -86
  174. package/dist/PowerSearch/formatFilterValue.d.ts +14 -7
  175. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  176. package/dist/PowerSearch/formatFilterValue.js +31 -23
  177. package/dist/PowerSearch/formatTokenValue.d.ts +28 -0
  178. package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -0
  179. package/dist/PowerSearch/formatTokenValue.js +161 -0
  180. package/dist/PowerSearch/index.d.ts +1 -1
  181. package/dist/PowerSearch/index.d.ts.map +1 -1
  182. package/dist/PowerSearch/powerSearchDateZone.d.ts +25 -0
  183. package/dist/PowerSearch/powerSearchDateZone.d.ts.map +1 -0
  184. package/dist/PowerSearch/powerSearchDateZone.js +57 -0
  185. package/dist/PowerSearch/powerSearchSheetUtils.d.ts +65 -0
  186. package/dist/PowerSearch/powerSearchSheetUtils.d.ts.map +1 -0
  187. package/dist/PowerSearch/powerSearchSheetUtils.js +168 -0
  188. package/dist/PowerSearch/types.d.ts +8 -1
  189. package/dist/PowerSearch/types.d.ts.map +1 -1
  190. package/dist/ProgressBar/ProgressBarTouch.d.ts.map +1 -1
  191. package/dist/ProgressBar/ProgressBarTouch.js +2 -0
  192. package/dist/RadioList/RadioList.d.ts.map +1 -1
  193. package/dist/RadioList/RadioList.js +3 -2
  194. package/dist/RadioList/RadioListItem.d.ts +1 -1
  195. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  196. package/dist/RadioList/RadioListItem.js +5 -3
  197. package/dist/Resizable/ResizeHandle.d.ts +2 -1
  198. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  199. package/dist/Resizable/ResizeHandle.js +101 -77
  200. package/dist/Resizable/createResizable.d.ts +145 -0
  201. package/dist/Resizable/createResizable.d.ts.map +1 -0
  202. package/dist/Resizable/createResizable.js +575 -0
  203. package/dist/Resizable/useResizable.d.ts +3 -3
  204. package/dist/Resizable/useResizable.d.ts.map +1 -1
  205. package/dist/Resizable/useResizable.js +252 -459
  206. package/dist/SegmentedControl/useSegmentedSelectionMotion.d.ts.map +1 -1
  207. package/dist/SegmentedControl/useSegmentedSelectionMotion.js +3 -3
  208. package/dist/SelectableCard/SelectableCard.d.ts +2 -0
  209. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  210. package/dist/SelectableCard/SelectableCard.js +36 -11
  211. package/dist/SelectableCard/selectableCardInput.d.ts +12 -0
  212. package/dist/SelectableCard/selectableCardInput.d.ts.map +1 -0
  213. package/dist/SelectableCard/selectableCardInput.js +20 -0
  214. package/dist/Selector/Selector.d.ts.map +1 -1
  215. package/dist/Selector/Selector.js +7 -9
  216. package/dist/SideNav/SideNav.d.ts.map +1 -1
  217. package/dist/SideNav/SideNav.js +36 -5
  218. package/dist/Slider/Slider.d.ts.map +1 -1
  219. package/dist/Slider/Slider.js +16 -11
  220. package/dist/Slider/sliderTouchController.js +2 -2
  221. package/dist/Spinner/Spinner.d.ts +1 -1
  222. package/dist/Spinner/Spinner.d.ts.map +1 -1
  223. package/dist/Spinner/Spinner.js +60 -58
  224. package/dist/Stepper/Stepper.d.ts.map +1 -1
  225. package/dist/Stepper/Stepper.js +10 -15
  226. package/dist/Switch/Switch.d.ts.map +1 -1
  227. package/dist/Switch/Switch.js +4 -10
  228. package/dist/Switch/useSwitchTouch.js +4 -4
  229. package/dist/Table/BaseTable.d.ts.map +1 -1
  230. package/dist/Table/BaseTable.js +29 -8
  231. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  232. package/dist/Table/plugins/columnResize/useTableColumnResize.js +3 -1
  233. package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
  234. package/dist/Table/plugins/filtering/useTableFiltering.js +2 -1
  235. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  236. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +4 -0
  237. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
  238. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +2 -0
  239. package/dist/TextArea/TextArea.d.ts.map +1 -1
  240. package/dist/TextArea/TextArea.js +2 -1
  241. package/dist/TextInput/TextInput.d.ts +2 -2
  242. package/dist/TextInput/TextInput.d.ts.map +1 -1
  243. package/dist/TextInput/TextInput.js +12 -8
  244. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  245. package/dist/TimeInput/TimeInput.js +2 -0
  246. package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
  247. package/dist/TimeInput/TouchTimeField.js +2 -0
  248. package/dist/Timer/Timer.d.ts.map +1 -1
  249. package/dist/Timer/Timer.js +2 -0
  250. package/dist/Timestamp/Timestamp.js +1 -1
  251. package/dist/Timestamp/formatInstant.d.ts.map +1 -1
  252. package/dist/Timestamp/formatInstant.js +1 -23
  253. package/dist/Toast/Toast.d.ts +11 -1
  254. package/dist/Toast/Toast.d.ts.map +1 -1
  255. package/dist/Toast/Toast.js +25 -15
  256. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  257. package/dist/Toast/ToastViewport.js +97 -34
  258. package/dist/Toast/types.d.ts +9 -3
  259. package/dist/Toast/types.d.ts.map +1 -1
  260. package/dist/Toast/useToast.d.ts.map +1 -1
  261. package/dist/Toast/useToast.js +1 -0
  262. package/dist/Tokenizer/Tokenizer.d.ts +44 -46
  263. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  264. package/dist/Tokenizer/Tokenizer.js +20 -21
  265. package/dist/Tokenizer/TokenizerBottomSheet.d.ts +1 -1
  266. package/dist/Tokenizer/TokenizerBottomSheet.js +4 -6
  267. package/dist/Tokenizer/index.d.ts +1 -1
  268. package/dist/Tokenizer/index.d.ts.map +1 -1
  269. package/dist/Tooltip/Tooltip.d.ts +2 -23
  270. package/dist/Tooltip/Tooltip.d.ts.map +1 -1
  271. package/dist/Tooltip/Tooltip.js +5 -29
  272. package/dist/Tooltip/useTooltip.d.ts +23 -30
  273. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  274. package/dist/Tooltip/useTooltip.js +194 -108
  275. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  276. package/dist/Typeahead/BaseTypeahead.js +27 -18
  277. package/dist/Typeahead/TypeaheadItem.d.ts +2 -1
  278. package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
  279. package/dist/animator/createAnimator.d.ts +98 -0
  280. package/dist/animator/createAnimator.d.ts.map +1 -0
  281. package/dist/animator/createAnimator.js +259 -0
  282. package/dist/astryx.css +41 -7
  283. package/dist/gestures/GestureHost.d.ts +16 -1
  284. package/dist/gestures/GestureHost.d.ts.map +1 -1
  285. package/dist/gestures/GestureHost.js +1 -1
  286. package/dist/gestures/PressTracker.d.ts.map +1 -1
  287. package/dist/gestures/PressTracker.js +4 -3
  288. package/dist/hooks/ModalAnnounceProvider.d.ts.map +1 -1
  289. package/dist/hooks/ModalAnnounceProvider.js +1 -0
  290. package/dist/hooks/actionGroupTracker.d.ts +4 -1
  291. package/dist/hooks/actionGroupTracker.d.ts.map +1 -1
  292. package/dist/hooks/actionGroupTracker.js +13 -3
  293. package/dist/hooks/index.d.ts +1 -0
  294. package/dist/hooks/index.d.ts.map +1 -1
  295. package/dist/hooks/index.js +1 -0
  296. package/dist/hooks/longPressDetector.d.ts +66 -0
  297. package/dist/hooks/longPressDetector.d.ts.map +1 -0
  298. package/dist/hooks/longPressDetector.js +200 -0
  299. package/dist/hooks/pressGroupContext.d.ts +6 -0
  300. package/dist/hooks/pressGroupContext.d.ts.map +1 -0
  301. package/dist/hooks/pressGroupContext.js +20 -0
  302. package/dist/hooks/rootScrollStyles.d.ts +48 -0
  303. package/dist/hooks/rootScrollStyles.d.ts.map +1 -0
  304. package/dist/hooks/rootScrollStyles.js +207 -0
  305. package/dist/hooks/scrollLockTouchGuard.d.ts +13 -0
  306. package/dist/hooks/scrollLockTouchGuard.d.ts.map +1 -0
  307. package/dist/hooks/scrollLockTouchGuard.js +117 -0
  308. package/dist/hooks/scrollbarGutter.d.ts +4 -4
  309. package/dist/hooks/scrollbarGutter.d.ts.map +1 -1
  310. package/dist/hooks/scrollbarGutter.js +36 -23
  311. package/dist/hooks/useActionGroupTracking.d.ts +53 -0
  312. package/dist/hooks/useActionGroupTracking.d.ts.map +1 -0
  313. package/dist/hooks/useActionGroupTracking.js +174 -0
  314. package/dist/hooks/useAnimator.d.ts +41 -0
  315. package/dist/hooks/useAnimator.d.ts.map +1 -0
  316. package/dist/hooks/useAnimator.js +70 -0
  317. package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
  318. package/dist/hooks/useAnnounceRenderedText.js +1 -0
  319. package/dist/hooks/useAttachment.d.ts +1 -1
  320. package/dist/hooks/useAttachment.js +1 -1
  321. package/dist/hooks/useAutoMediaMode.d.ts.map +1 -1
  322. package/dist/hooks/useAutoMediaMode.js +1 -0
  323. package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
  324. package/dist/hooks/useBusyAnnouncement.js +2 -0
  325. package/dist/hooks/useDevWarning.d.ts.map +1 -1
  326. package/dist/hooks/useDevWarning.js +2 -0
  327. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  328. package/dist/hooks/useFocusTrap.js +2 -0
  329. package/dist/hooks/useGridFocus.d.ts +8 -5
  330. package/dist/hooks/useGridFocus.d.ts.map +1 -1
  331. package/dist/hooks/useGridFocus.js +4 -3
  332. package/dist/hooks/useHotkeys.d.ts.map +1 -1
  333. package/dist/hooks/useHotkeys.js +3 -0
  334. package/dist/hooks/useImageMode.d.ts.map +1 -1
  335. package/dist/hooks/useImageMode.js +3 -0
  336. package/dist/hooks/useInputStatusIcon.d.ts +1 -1
  337. package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
  338. package/dist/hooks/useInputStatusIcon.js +2 -2
  339. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  340. package/dist/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
  341. package/dist/hooks/useKeyboardHint.js +1 -1
  342. package/dist/hooks/useLongPress.d.ts +8 -9
  343. package/dist/hooks/useLongPress.d.ts.map +1 -1
  344. package/dist/hooks/useLongPress.js +23 -106
  345. package/dist/hooks/useMenuHover.d.ts.map +1 -1
  346. package/dist/hooks/useMenuHover.js +2 -0
  347. package/dist/hooks/useMenuPress.d.ts.map +1 -1
  348. package/dist/hooks/useMenuPress.js +3 -0
  349. package/dist/hooks/useOverflow.d.ts.map +1 -1
  350. package/dist/hooks/useOverflow.js +2 -1
  351. package/dist/hooks/usePressFeedback.d.ts.map +1 -1
  352. package/dist/hooks/usePressFeedback.js +1 -0
  353. package/dist/hooks/useResolvedRequired.d.ts +3 -0
  354. package/dist/hooks/useResolvedRequired.d.ts.map +1 -1
  355. package/dist/hooks/useResolvedRequired.js +3 -0
  356. package/dist/hooks/useScrollLock.d.ts +8 -9
  357. package/dist/hooks/useScrollLock.d.ts.map +1 -1
  358. package/dist/hooks/useScrollLock.js +50 -48
  359. package/dist/hooks/useScrollableArea.d.ts.map +1 -1
  360. package/dist/hooks/useScrollableArea.js +5 -0
  361. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  362. package/dist/hooks/useStreamingText.js +3 -0
  363. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts +8 -0
  364. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts.map +1 -0
  365. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.js +42 -0
  366. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.d.ts.map +1 -1
  367. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.js +6 -0
  368. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts +8 -0
  369. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts.map +1 -0
  370. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.js +14 -0
  371. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  372. package/dist/i18n/generated-locales/en.generated.js +30 -0
  373. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  374. package/dist/i18n/generated-locales/pseudo.generated.js +30 -0
  375. package/dist/index.d.ts +1 -0
  376. package/dist/index.d.ts.map +1 -1
  377. package/dist/index.js +4 -0
  378. package/dist/internal/indicatorPress.stylex.d.ts +20 -0
  379. package/dist/internal/indicatorPress.stylex.d.ts.map +1 -0
  380. package/dist/internal/indicatorPress.stylex.js +26 -0
  381. package/dist/internal/selectable-card.d.ts +21 -0
  382. package/dist/internal/selectable-card.d.ts.map +1 -0
  383. package/dist/internal/selectable-card.js +20 -0
  384. package/dist/internal/sheetDraft.d.ts +2 -2
  385. package/dist/internal/sheetDraft.js +2 -2
  386. package/dist/motion/animatedLayout.d.ts +8 -0
  387. package/dist/motion/animatedLayout.d.ts.map +1 -1
  388. package/dist/motion/animatedLayout.js +246 -53
  389. package/dist/motion/animator.d.ts +14 -14
  390. package/dist/motion/animator.d.ts.map +1 -1
  391. package/dist/motion/animator.js +45 -26
  392. package/dist/motion/frameBlock.d.ts +14 -0
  393. package/dist/motion/frameBlock.d.ts.map +1 -0
  394. package/dist/motion/frameBlock.js +16 -0
  395. package/dist/motion/progress.d.ts +88 -0
  396. package/dist/motion/progress.d.ts.map +1 -0
  397. package/dist/motion/progress.js +128 -0
  398. package/dist/motion/reducedMotion.d.ts.map +1 -1
  399. package/dist/motion/reducedMotion.js +3 -1
  400. package/dist/motion/uikit/alert.d.ts +41 -0
  401. package/dist/motion/uikit/alert.d.ts.map +1 -0
  402. package/dist/motion/uikit/alert.js +43 -0
  403. package/dist/motion/uikit/index.d.ts +4 -3
  404. package/dist/motion/uikit/index.d.ts.map +1 -1
  405. package/dist/motion/uikit/index.js +4 -3
  406. package/dist/motion/uikit/picker.d.ts +96 -0
  407. package/dist/motion/uikit/picker.d.ts.map +1 -0
  408. package/dist/motion/uikit/picker.js +117 -0
  409. package/dist/privateAttributes/pressGroupItem.stylex.d.ts +22 -0
  410. package/dist/privateAttributes/pressGroupItem.stylex.d.ts.map +1 -0
  411. package/dist/privateAttributes/pressGroupItem.stylex.js +36 -0
  412. package/dist/privateAttributes/reducedMotion.stylex.d.ts +23 -0
  413. package/dist/privateAttributes/reducedMotion.stylex.d.ts.map +1 -0
  414. package/dist/privateAttributes/reducedMotion.stylex.js +40 -0
  415. package/dist/theme/Theme.d.ts.map +1 -1
  416. package/dist/theme/Theme.js +29 -4
  417. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  418. package/dist/theme/generateThemeRules.js +14 -13
  419. package/dist/theme/motionKnobs.d.ts +4 -3
  420. package/dist/theme/motionKnobs.d.ts.map +1 -1
  421. package/dist/theme/motionKnobs.js +3 -2
  422. package/dist/theme/themeMotion.d.ts +6 -0
  423. package/dist/theme/themeMotion.d.ts.map +1 -1
  424. package/dist/theme/themeMotion.js +15 -2
  425. package/dist/theme/tokens.stylex.d.ts +3 -0
  426. package/dist/theme/tokens.stylex.d.ts.map +1 -1
  427. package/dist/theme/tokens.stylex.js +4 -1
  428. package/dist/utils/dateParser.d.ts.map +1 -1
  429. package/dist/utils/dateParser.js +12 -0
  430. package/dist/utils/disabledInteraction.d.ts +10 -2
  431. package/dist/utils/disabledInteraction.d.ts.map +1 -1
  432. package/dist/utils/disabledInteraction.js +16 -2
  433. package/dist/utils/focusReturn.d.ts +22 -25
  434. package/dist/utils/focusReturn.d.ts.map +1 -1
  435. package/dist/utils/focusReturn.js +36 -29
  436. package/dist/utils/index.d.ts +1 -1
  437. package/dist/utils/index.d.ts.map +1 -1
  438. package/dist/utils/index.js +1 -1
  439. package/dist/utils/interactionModality.d.ts.map +1 -1
  440. package/dist/utils/interactionModality.js +4 -0
  441. package/dist/utils/interactionOverlay.stylex.d.ts +3 -2
  442. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  443. package/dist/utils/interactionOverlay.stylex.js +3 -2
  444. package/dist/utils/isFocusDetached.d.ts +27 -0
  445. package/dist/utils/isFocusDetached.d.ts.map +1 -0
  446. package/dist/utils/isFocusDetached.js +32 -0
  447. package/dist/utils/plainDate.d.ts +31 -0
  448. package/dist/utils/plainDate.d.ts.map +1 -1
  449. package/dist/utils/plainDate.js +68 -4
  450. package/dist/utils/pressFeedback.d.ts.map +1 -1
  451. package/dist/utils/pressFeedback.js +20 -6
  452. package/dist/utils/triggerFocus.d.ts +36 -0
  453. package/dist/utils/triggerFocus.d.ts.map +1 -0
  454. package/dist/utils/triggerFocus.js +65 -0
  455. package/locales/en.json +120 -0
  456. package/locales/pseudo.json +90 -0
  457. package/package.json +14 -9
  458. package/src/AlertDialog/AlertDialog.doc.mjs +2 -2
  459. package/src/AlertDialog/AlertDialog.tsx +46 -5
  460. package/src/AppShell/AppShell.tsx +13 -4
  461. package/src/BottomSheet/BottomSheet.tsx +1 -0
  462. package/src/BottomSheet/BottomSheetPanel.tsx +39 -3
  463. package/src/BottomSheet/BottomSheetSwitcher.tsx +5 -0
  464. package/src/BottomSheet/useMobileKeyboard.ts +4 -0
  465. package/src/BottomSheet/useSheetGestures.ts +10 -1
  466. package/src/Button/Button.tsx +26 -4
  467. package/src/Calendar/Calendar.tsx +40 -32
  468. package/src/Calendar/getWeekdayHeaderNames.ts +88 -0
  469. package/src/Calendar/hooks/useCalendarDays.ts +5 -10
  470. package/src/Calendar/{standaloneShortWeekdayNames.generated.ts → weekdayHeaderNames.generated.ts} +14 -14
  471. package/src/Carousel/Carousel.tsx +1 -0
  472. package/src/Chat/ChatComposerInput.tsx +4 -7
  473. package/src/Chat/ChatMessageList.tsx +2 -1
  474. package/src/Chat/useChatDictation.ts +1 -0
  475. package/src/Chat/useChatNewMessages.ts +1 -1
  476. package/src/Chat/useChatStreamScroll.ts +2 -0
  477. package/src/Chat/useSpeechRecognition.ts +2 -0
  478. package/src/Chat/useTriggerMenu.tsx +1 -1
  479. package/src/CheckboxInput/CheckboxInput.doc.mjs +18 -0
  480. package/src/CheckboxInput/CheckboxInput.tsx +38 -15
  481. package/src/CheckboxList/CheckboxList.doc.mjs +7 -0
  482. package/src/CheckboxList/CheckboxList.tsx +9 -0
  483. package/src/CodeBlock/CodeBlock.doc.mjs +9 -1
  484. package/src/CodeBlock/CodeBlock.tsx +41 -4
  485. package/src/CommandPalette/CommandPalette.tsx +1 -0
  486. package/src/CommandPalette/CommandPaletteItem.tsx +1 -0
  487. package/src/ComplexSelector/ComplexSelector.tsx +20 -5
  488. package/src/ContextMenu/ContextMenu.tsx +2 -2
  489. package/src/DateInput/MonthScroller.tsx +8 -2
  490. package/src/DateInput/PickerWheel.tsx +765 -0
  491. package/src/DateInput/TouchDateField.tsx +6 -32
  492. package/src/DateInput/Wheel.tsx +94 -150
  493. package/src/DateInput/useOwnScrollGesture.ts +25 -3
  494. package/src/DateInput/usePointerDragScroll.ts +1 -0
  495. package/src/DateInput/useScrollSettle.ts +2 -0
  496. package/src/DateInput/useWheelListbox.ts +112 -0
  497. package/src/DateInput/wheelOptions.ts +155 -0
  498. package/src/DateInput/wheelPhysics.ts +406 -0
  499. package/src/DateInput/wheelStrip.ts +341 -0
  500. package/src/DateTimeInput/TouchDateTimeField.tsx +8 -13
  501. package/src/Dialog/Dialog.tsx +12 -32
  502. package/src/Drawer/useDrawerDialogPresence.ts +2 -0
  503. package/src/DropdownMenu/useMenuOverflow.ts +3 -0
  504. package/src/Field/Field.tsx +2 -2
  505. package/src/FieldStatus/useFieldStatusAnnouncement.ts +1 -0
  506. package/src/FormLayout/FormLayout.doc.mjs +181 -46
  507. package/src/FormLayout/FormLayout.tsx +5 -1
  508. package/src/HoverCard/HoverCard.doc.mjs +10 -8
  509. package/src/HoverCard/HoverCard.tsx +58 -6
  510. package/src/HoverCard/useHoverCard.doc.mjs +178 -36
  511. package/src/HoverCard/useHoverCard.tsx +49 -54
  512. package/src/Icon/Icon.doc.mjs +51 -10
  513. package/src/Icon/Icon.tsx +15 -7
  514. package/src/IconButton/IconButton.doc.mjs +141 -21
  515. package/src/InfoTip/InfoTip.tsx +72 -16
  516. package/src/Item/useSwipeAction.ts +2 -0
  517. package/src/Layer/modalOutlet.ts +2 -0
  518. package/src/Layer/outsidePress.ts +1 -0
  519. package/src/Layer/useLayer.tsx +3 -1
  520. package/src/Layer/useLayerDismissal.ts +2 -0
  521. package/src/Layer/useTouchTrigger.ts +19 -6
  522. package/src/Layout/index.ts +1 -1
  523. package/src/Layout/layoutReset.ts +1 -1
  524. package/src/Layout/overlayPaddingReset.stylex.ts +73 -0
  525. package/src/Layout/padding.stylex.ts +9 -133
  526. package/src/Layout/paddingStyles.stylex.ts +87 -0
  527. package/src/Lightbox/Lightbox.tsx +20 -1
  528. package/src/Lightbox/useLightbox.doc.mjs +167 -0
  529. package/src/MobileNav/MobileNav.tsx +10 -31
  530. package/src/MultiSelector/MultiSelector.tsx +2 -7
  531. package/src/NumberInput/NumberInput.tsx +2 -7
  532. package/src/Outline/useOutlineFromDOM.ts +2 -0
  533. package/src/Outline/useScrollSpy.ts +2 -0
  534. package/src/OverflowList/OverflowList.tsx +2 -0
  535. package/src/Popover/Popover.tsx +4 -0
  536. package/src/Popover/usePopover.tsx +2 -2
  537. package/src/PowerSearch/PowerSearch.doc.mjs +60 -8
  538. package/src/PowerSearch/PowerSearch.tsx +620 -157
  539. package/src/PowerSearch/PowerSearchBottomSheet.tsx +2525 -0
  540. package/src/PowerSearch/PowerSearchEditPopover.tsx +65 -9
  541. package/src/PowerSearch/PowerSearchFilterEditor.tsx +2 -0
  542. package/src/PowerSearch/PowerSearchToken.tsx +2 -0
  543. package/src/PowerSearch/PowerSearchValueEditor.tsx +340 -59
  544. package/src/PowerSearch/formatFilterValue.ts +49 -27
  545. package/src/PowerSearch/formatTokenValue.ts +220 -0
  546. package/src/PowerSearch/index.ts +5 -1
  547. package/src/PowerSearch/powerSearchDateZone.ts +95 -0
  548. package/src/PowerSearch/powerSearchSheetUtils.ts +224 -0
  549. package/src/PowerSearch/types.ts +8 -1
  550. package/src/ProgressBar/ProgressBarTouch.ts +2 -0
  551. package/src/RadioList/RadioList.tsx +3 -2
  552. package/src/RadioList/RadioListItem.tsx +5 -3
  553. package/src/Resizable/Resizable.doc.mjs +5 -4
  554. package/src/Resizable/ResizeHandle.tsx +169 -109
  555. package/src/Resizable/createResizable.ts +831 -0
  556. package/src/Resizable/useResizable.ts +292 -623
  557. package/src/SegmentedControl/useSegmentedSelectionMotion.ts +6 -3
  558. package/src/SelectableCard/SelectableCard.tsx +39 -10
  559. package/src/SelectableCard/selectableCardInput.ts +30 -0
  560. package/src/Selector/Selector.tsx +7 -19
  561. package/src/SideNav/SideNav.tsx +41 -5
  562. package/src/Slider/Slider.tsx +20 -11
  563. package/src/Slider/sliderTouchController.ts +2 -2
  564. package/src/Spinner/Spinner.tsx +77 -63
  565. package/src/Stepper/Stepper.tsx +10 -27
  566. package/src/Switch/Switch.tsx +2 -6
  567. package/src/Switch/useSwitchTouch.ts +4 -4
  568. package/src/Table/BaseTable.tsx +46 -12
  569. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +2 -1
  570. package/src/Table/plugins/filtering/useTableFiltering.tsx +1 -0
  571. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +4 -0
  572. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +2 -0
  573. package/src/TextArea/TextArea.tsx +2 -7
  574. package/src/TextInput/TextInput.tsx +13 -17
  575. package/src/TimeInput/TimeInput.tsx +2 -0
  576. package/src/TimeInput/TouchTimeField.tsx +2 -0
  577. package/src/Timer/Timer.tsx +1 -0
  578. package/src/Timestamp/Timestamp.tsx +1 -1
  579. package/src/Timestamp/formatInstant.ts +1 -33
  580. package/src/Toast/Toast.doc.mjs +4 -3
  581. package/src/Toast/Toast.tsx +52 -32
  582. package/src/Toast/ToastViewport.tsx +123 -35
  583. package/src/Toast/types.ts +9 -3
  584. package/src/Toast/useToast.tsx +1 -0
  585. package/src/Tokenizer/Tokenizer.doc.mjs +10 -10
  586. package/src/Tokenizer/Tokenizer.tsx +61 -62
  587. package/src/Tokenizer/TokenizerBottomSheet.tsx +9 -11
  588. package/src/Tokenizer/index.ts +1 -0
  589. package/src/Tooltip/Tooltip.tsx +6 -42
  590. package/src/Tooltip/useTooltip.doc.mjs +24 -0
  591. package/src/Tooltip/useTooltip.tsx +237 -134
  592. package/src/Typeahead/BaseTypeahead.tsx +27 -17
  593. package/src/Typeahead/TypeaheadItem.doc.mjs +6 -3
  594. package/src/Typeahead/TypeaheadItem.tsx +2 -1
  595. package/src/animator/createAnimator.doc.mjs +153 -0
  596. package/src/animator/createAnimator.ts +324 -0
  597. package/src/gestures/GestureHost.ts +1 -1
  598. package/src/gestures/PressTracker.ts +4 -3
  599. package/src/gestures/README.md +10 -4
  600. package/src/hooks/ModalAnnounceProvider.tsx +1 -0
  601. package/src/hooks/actionGroupTracker.ts +20 -5
  602. package/src/hooks/index.ts +2 -0
  603. package/src/hooks/longPressDetector.ts +273 -0
  604. package/src/hooks/pressGroupContext.ts +21 -0
  605. package/src/hooks/rootScrollStyles.ts +247 -0
  606. package/src/hooks/scrollLockTouchGuard.ts +149 -0
  607. package/src/hooks/scrollbarGutter.ts +41 -26
  608. package/src/hooks/useActionGroupTracking.ts +224 -0
  609. package/src/hooks/useAnimator.doc.mjs +109 -0
  610. package/src/hooks/useAnimator.ts +67 -0
  611. package/src/hooks/useAnnounceRenderedText.ts +1 -0
  612. package/src/hooks/useAttachment.ts +1 -1
  613. package/src/hooks/useAutoMediaMode.ts +1 -0
  614. package/src/hooks/useBusyAnnouncement.ts +2 -0
  615. package/src/hooks/useDevWarning.ts +2 -0
  616. package/src/hooks/useFocusTrap.ts +2 -0
  617. package/src/hooks/useGridFocus.doc.mjs +6 -6
  618. package/src/hooks/useGridFocus.ts +10 -7
  619. package/src/hooks/useHotkeys.ts +2 -0
  620. package/src/hooks/useImageMode.ts +2 -0
  621. package/src/hooks/useInputStatusIcon.tsx +3 -2
  622. package/src/hooks/useKeyboardHint.tsx +1 -1
  623. package/src/hooks/useLongPress.doc.mjs +2 -2
  624. package/src/hooks/useLongPress.ts +32 -122
  625. package/src/hooks/useMenuHover.ts +1 -0
  626. package/src/hooks/useMenuPress.ts +2 -0
  627. package/src/hooks/useOverflow.ts +2 -1
  628. package/src/hooks/usePressFeedback.ts +1 -0
  629. package/src/hooks/useResolvedRequired.ts +3 -0
  630. package/src/hooks/useScrollLock.doc.mjs +51 -12
  631. package/src/hooks/useScrollLock.ts +53 -60
  632. package/src/hooks/useScrollableArea.ts +4 -0
  633. package/src/hooks/useStreamingText.ts +2 -0
  634. package/src/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.ts +43 -0
  635. package/src/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.ts +6 -0
  636. package/src/i18n/generated-english/PowerSearch/formatTokenValue.generated.ts +15 -0
  637. package/src/i18n/generated-locales/en.generated.ts +41 -0
  638. package/src/i18n/generated-locales/pseudo.generated.ts +42 -0
  639. package/src/index.ts +13 -0
  640. package/src/internal/indicatorPress.stylex.ts +24 -0
  641. package/src/internal/selectable-card.ts +21 -0
  642. package/src/internal/sheetDraft.ts +2 -2
  643. package/src/motion/MEASUREMENTS.md +18 -0
  644. package/src/motion/README.md +10 -5
  645. package/src/motion/animatedLayout.ts +323 -60
  646. package/src/motion/animator.ts +66 -37
  647. package/src/motion/frameBlock.ts +16 -0
  648. package/src/motion/progress.ts +155 -0
  649. package/src/motion/reducedMotion.ts +3 -1
  650. package/src/motion/uikit/alert.ts +43 -0
  651. package/src/motion/uikit/index.ts +4 -3
  652. package/src/motion/uikit/picker.ts +116 -0
  653. package/src/privateAttributes/pressGroupItem.stylex.ts +44 -0
  654. package/src/privateAttributes/reducedMotion.stylex.ts +45 -0
  655. package/src/theme/Theme.tsx +37 -3
  656. package/src/theme/generateThemeRules.ts +14 -12
  657. package/src/theme/motionKnobs.ts +4 -3
  658. package/src/theme/themeMotion.ts +17 -2
  659. package/src/theme/tokens.stylex.ts +2 -0
  660. package/src/utils/dateParser.ts +16 -0
  661. package/src/utils/disabledInteraction.ts +23 -2
  662. package/src/utils/focusReturn.ts +38 -31
  663. package/src/utils/index.ts +1 -1
  664. package/src/utils/interactionModality.ts +4 -0
  665. package/src/utils/interactionOverlay.stylex.ts +3 -2
  666. package/src/utils/isFocusDetached.ts +34 -0
  667. package/src/utils/plainDate.ts +80 -4
  668. package/src/utils/pressFeedback.ts +24 -6
  669. package/src/utils/triggerFocus.ts +80 -0
  670. package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts +0 -14
  671. package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts.map +0 -1
  672. package/dist/Calendar/getStandaloneShortWeekdayNames.js +0 -26
  673. package/dist/Calendar/standaloneShortWeekdayNames.generated.d.ts.map +0 -1
  674. package/dist/Layer/usePressPin.d.ts +0 -93
  675. package/dist/Layer/usePressPin.d.ts.map +0 -1
  676. package/dist/Layer/usePressPin.js +0 -363
  677. package/dist/internal/touch-sheet.d.ts +0 -21
  678. package/dist/internal/touch-sheet.d.ts.map +0 -1
  679. package/dist/internal/touch-sheet.js +0 -19
  680. package/src/Calendar/getStandaloneShortWeekdayNames.ts +0 -38
  681. package/src/Layer/usePressPin.ts +0 -510
  682. package/src/internal/touch-sheet.ts +0 -21
@@ -273,6 +273,8 @@ export function TouchTimeField({
273
273
  return {
274
274
  value: hour,
275
275
  label: String(hour),
276
+ // Keys step in time order: 12 PM comes before 1 PM.
277
+ order: hour24,
276
278
  isDisabled: !rangeOverlaps(hour24 * 3600, hour24 * 3600 + 3599, min, max)
277
279
  };
278
280
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Timer.d.ts","sourceRoot":"","sources":["../../src/Timer/Timer.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAsB9E,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AA8E9C,MAAM,WAAW,UAAW,SAAQ,IAAI,CACtC,SAAS,CAAC,eAAe,CAAC,EAC1B,UAAU,CACX;IACC,sDAAsD;IACtD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,mEAAmE;IACnE,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,EACpB,SAAS,EACT,MAAkB,EAClB,IAAmB,EACnB,IAAI,EACJ,KAAmB,EACnB,MAAM,EACN,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,UAAU,+BA0EZ;yBAtFe,KAAK"}
1
+ {"version":3,"file":"Timer.d.ts","sourceRoot":"","sources":["../../src/Timer/Timer.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAsB9E,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AA8E9C,MAAM,WAAW,UAAW,SAAQ,IAAI,CACtC,SAAS,CAAC,eAAe,CAAC,EAC1B,UAAU,CACX;IACC,sDAAsD;IACtD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,mEAAmE;IACnE,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,EACpB,SAAS,EACT,MAAkB,EAClB,IAAmB,EACnB,IAAI,EACJ,KAAmB,EACnB,MAAM,EACN,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,IAAI,EACR,EAAE,UAAU,+BA2EZ;yBAvFe,KAAK"}
@@ -104,6 +104,8 @@ export function Timer({
104
104
  const mergedRef = useMergedRefs(ref, timerRef);
105
105
  const resolvedFormat = resolveFormat(format);
106
106
  const initialPresentation = getPresentation(0, resolvedFormat);
107
+
108
+ // Syncs the elapsed-time text with a timer.
107
109
  useEffect(() => {
108
110
  const resolvedStartTime = startTime !== undefined && Number.isFinite(startTime) ? startTime : mountTime;
109
111
  let timeoutID;
@@ -197,7 +197,7 @@ export function Timestamp({
197
197
  timeZoneNameStyle: 'long'
198
198
  }) : '';
199
199
 
200
- // Live updates
200
+ // Syncs the relative time with an interval timer while the timestamp is live.
201
201
  useEffect(() => {
202
202
  if (!isLive || !isValidDate || !isRelativeFormat(effectiveFormat)) {
203
203
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"formatInstant.d.ts","sourceRoot":"","sources":["../../src/Timestamp/formatInstant.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAMjD;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GACvB,OAAO,CAAC,eAAe,EAAE,UAAU,GAAG,gBAAgB,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AAE5E,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACtC;AA6ED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,EACd,EACE,QAAQ,EACR,eAAuB,EACvB,iBAA2B,GAC5B,GAAE,oBAAyB,GAC3B,MAAM,CAsER"}
1
+ {"version":3,"file":"formatInstant.d.ts","sourceRoot":"","sources":["../../src/Timestamp/formatInstant.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAMjD;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GACvB,OAAO,CAAC,eAAe,EAAE,UAAU,GAAG,gBAAgB,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AAE5E,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACtC;AA6CD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,EACd,EACE,QAAQ,EACR,eAAuB,EACvB,iBAA2B,GAC5B,GAAE,oBAAyB,GAC3B,MAAM,CAsER"}
@@ -29,7 +29,7 @@
29
29
  * - /packages/core/src/Timestamp/Timestamp.test.tsx
30
30
  */
31
31
 
32
- import { SHARED_DATE_FORMAT_OPTIONS, getTimeZoneParts } from "../utils/plainDate.js";
32
+ import { SHARED_DATE_FORMAT_OPTIONS, getWallClock } from "../utils/plainDate.js";
33
33
 
34
34
  // =============================================================================
35
35
  // Types
@@ -87,28 +87,6 @@ function pad(n) {
87
87
  return String(n).padStart(2, '0');
88
88
  }
89
89
 
90
- /** The fields a `system_*` string is assembled from. */
91
-
92
- /**
93
- * Wall-clock fields for an instant: in the named zone, or — with no zone —
94
- * the viewer's own, read straight off the `Date`. The zone-less branch
95
- * deliberately stays on plain getters so the default rendering never gains a
96
- * dependency on `Intl` zone data it did not have before.
97
- *
98
- * The explicit return type is load-bearing: it is what forces the two branches
99
- * to keep producing the same shape.
100
- */
101
- function getWallClock(date, timeZone) {
102
- return timeZone === undefined ? {
103
- year: date.getFullYear(),
104
- month: date.getMonth() + 1,
105
- day: date.getDate(),
106
- hour: date.getHours(),
107
- minute: date.getMinutes(),
108
- second: date.getSeconds()
109
- } : getTimeZoneParts(date.getTime(), timeZone);
110
- }
111
-
112
90
  /**
113
91
  * Renders one instant in one absolute format.
114
92
  *
@@ -18,6 +18,16 @@ export interface ToastProps {
18
18
  }
19
19
  interface ToastSurfaceProps extends ToastProps {
20
20
  gestureDirection: ToastGestureDirection;
21
+ /**
22
+ * Changes when a uniqueID overwrite updates this card in place: the new
23
+ * toast's auto-hide timer starts over.
24
+ */
25
+ timerKey?: string;
26
+ /**
27
+ * False when the viewport announces the toast: the card then carries no
28
+ * live region of its own, so an update in place is announced once.
29
+ */
30
+ isLiveRegion?: boolean;
21
31
  }
22
32
  /**
23
33
  * Individual toast notification.
@@ -43,7 +53,7 @@ export declare function Toast(props: ToastProps): import("react").JSX.Element;
43
53
  export declare namespace Toast {
44
54
  var displayName: string;
45
55
  }
46
- export declare function ToastSurface({ type, body, endContent, isAutoHide, autoHideDuration, isExiting, onDismiss, renderContent, gestureDirection, }: ToastSurfaceProps): import("react").JSX.Element;
56
+ export declare function ToastSurface({ type, body, endContent, isAutoHide, autoHideDuration, isExiting, onDismiss, renderContent, gestureDirection, timerKey, isLiveRegion, }: ToastSurfaceProps): import("react").JSX.Element;
47
57
  export declare namespace ToastSurface {
48
58
  var displayName: string;
49
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../src/Toast/Toast.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAa,SAAS,EAAY,MAAM,OAAO,CAAC;AAkB5D,OAAO,KAAK,EACV,SAAS,EACT,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAkB,KAAK,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AA8F9E,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;IAChD;;;;OAIG;IACH,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAED,UAAU,iBAAkB,SAAQ,UAAU;IAC5C,gBAAgB,EAAE,qBAAqB,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,+BAEtC;yBAFe,KAAK;;;AAOrB,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,SAAiB,EACjB,SAAS,EACT,aAAa,EACb,gBAAgB,GACjB,EAAE,iBAAiB,+BA6NnB;yBAvOe,YAAY"}
1
+ {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../src/Toast/Toast.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAa,SAAS,EAAY,MAAM,OAAO,CAAC;AAkB5D,OAAO,KAAK,EACV,SAAS,EACT,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAkB,KAAK,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AA8F9E,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;IAChD;;;;OAIG;IACH,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAED,UAAU,iBAAkB,SAAQ,UAAU;IAC5C,gBAAgB,EAAE,qBAAqB,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,+BAEtC;yBAFe,KAAK;;;AAOrB,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,SAAiB,EACjB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,YAAmB,GACpB,EAAE,iBAAiB,+BAqOnB;yBAjPe,YAAY"}
@@ -85,7 +85,9 @@ export function ToastSurface({
85
85
  isExiting = false,
86
86
  onDismiss,
87
87
  renderContent,
88
- gestureDirection
88
+ gestureDirection,
89
+ timerKey,
90
+ isLiveRegion = true
89
91
  }) {
90
92
  const t = useComponentTranslator();
91
93
  const timerRef = useRef(null);
@@ -117,10 +119,11 @@ export function ToastSurface({
117
119
  onDismissRef.current('auto');
118
120
  }, remainingRef.current);
119
121
  }, [isAutoHide]);
122
+
123
+ // Pointer, focus and gesture holds are tracked whatever isAutoHide is: an
124
+ // overwrite can turn a toast that does not auto-hide into one that does
125
+ // while a hold is in place. The window hold leaves with its listeners.
120
126
  const pauseTimer = useCallback(source => {
121
- if (!isAutoHide) {
122
- return;
123
- }
124
127
  const sources = pauseSourcesRef.current;
125
128
  const wasRunning = sources.size === 0;
126
129
  sources.add(source);
@@ -135,11 +138,8 @@ export function ToastSurface({
135
138
  const elapsed = Date.now() - startTimeRef.current;
136
139
  remainingRef.current = Math.max(remainingRef.current - elapsed, 1000);
137
140
  }
138
- }, [isAutoHide]);
141
+ }, []);
139
142
  const resumeTimer = useCallback(source => {
140
- if (!isAutoHide) {
141
- return;
142
- }
143
143
  const sources = pauseSourcesRef.current;
144
144
  if (!sources.delete(source)) {
145
145
  return;
@@ -152,18 +152,25 @@ export function ToastSurface({
152
152
  return;
153
153
  }
154
154
  startTimer();
155
- }, [isAutoHide, startTimer]);
155
+ }, [startTimer]);
156
156
  useEffect(() => {
157
157
  remainingRef.current = autoHideDuration;
158
+ // An update in place can remove the focused control, which fires no blur:
159
+ // a focus hold whose focus has left the card is stale.
160
+ const root = cardRootRef.current?.current;
161
+ if (pauseSourcesRef.current.has('focus') && root != null && !root.contains(root.ownerDocument.activeElement)) {
162
+ pauseSourcesRef.current.delete('focus');
163
+ }
158
164
  startTimer();
159
165
  return () => {
160
166
  if (timerRef.current) {
161
167
  clearTimeout(timerRef.current);
162
168
  }
163
169
  };
164
- // startTimer's identity is stable per isAutoHide, so this runs on mount
165
- // and on a genuine duration change — not on unrelated viewport renders.
166
- }, [autoHideDuration, startTimer]);
170
+ // startTimer's identity is stable per isAutoHide, so this runs on mount,
171
+ // on a genuine duration change and on an overwrite (timerKey), not on
172
+ // unrelated viewport renders.
173
+ }, [autoHideDuration, startTimer, timerKey]);
167
174
 
168
175
  // Pause the auto-hide timer while the window is not focused, so a toast
169
176
  // doesn't silently expire while the user is in another window or tab.
@@ -171,6 +178,7 @@ export function ToastSurface({
171
178
  if (!isAutoHide) {
172
179
  return;
173
180
  }
181
+ const pauseSources = pauseSourcesRef.current;
174
182
  const pauseForWindow = () => pauseTimer('window');
175
183
  const resumeForWindow = () => resumeTimer('window');
176
184
  window.addEventListener('blur', pauseForWindow);
@@ -183,6 +191,8 @@ export function ToastSurface({
183
191
  return () => {
184
192
  window.removeEventListener('blur', pauseForWindow);
185
193
  window.removeEventListener('focus', resumeForWindow);
194
+ // With the listeners gone, no focus event would clear the window hold.
195
+ pauseSources.delete('window');
186
196
  };
187
197
  }, [isAutoHide, pauseTimer, resumeTimer]);
188
198
  const isGesturePausing = useCallback(() => pauseSourcesRef.current.has('gesture'), []);
@@ -229,9 +239,9 @@ export function ToastSurface({
229
239
  const fallbackMediaMode = isError || mode === 'light' ? 'dark' : 'light';
230
240
  return /*#__PURE__*/_jsx("div", {
231
241
  ref: rootRef,
232
- role: isError ? 'alert' : 'status',
233
- "aria-live": isError ? 'assertive' : 'polite',
234
- "aria-atomic": "true",
242
+ role: isLiveRegion ? isError ? 'alert' : 'status' : undefined,
243
+ "aria-live": isLiveRegion ? isError ? 'assertive' : 'polite' : undefined,
244
+ "aria-atomic": isLiveRegion ? 'true' : undefined,
235
245
  onMouseEnter: pauseForPointer,
236
246
  onMouseLeave: resumeForPointer,
237
247
  onFocusCapture: pauseForFocus,
@@ -1 +1 @@
1
- {"version":3,"file":"ToastViewport.d.ts","sourceRoot":"","sources":["../../src/Toast/ToastViewport.tsx"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAa,aAAa,EAAqB,MAAM,SAAS,CAAC;AAE3E,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAwItD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,mDAAmD;IACnD,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;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAyGD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAsB,EACtB,UAAc,EACd,KAAK,EACL,UAAU,EACV,UAAiB,EACjB,QAAQ,GACT,EAAE,kBAAkB,+BAqhBpB;yBA5hBe,aAAa"}
1
+ {"version":3,"file":"ToastViewport.d.ts","sourceRoot":"","sources":["../../src/Toast/ToastViewport.tsx"],"names":[],"mappings":"AAiDA,OAAO,KAAK,EAAa,aAAa,EAAqB,MAAM,SAAS,CAAC;AAE3E,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAwItD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,mDAAmD;IACnD,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;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAiHD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAsB,EACtB,UAAc,EACd,KAAK,EACL,UAAU,EACV,UAAiB,EACjB,QAAQ,GACT,EAAE,kBAAkB,+BA+lBpB;yBAtmBe,aAAa"}
@@ -13,13 +13,14 @@
13
13
  * SYNC: When placement, stacking, hosting, focus, announcement, or safe-area
14
14
  * behavior changes, update ToastViewport.test.tsx, Toast.doc.mjs, and Toast.stories.tsx.
15
15
  */
16
- import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
16
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
17
17
  import { createPortal } from 'react-dom';
18
18
  import * as stylex from '@stylexjs/stylex';
19
19
  import "../theme/tokens.stylex.js";
20
20
  import { spacingVars, durationVars, easeVars } from "../theme/tokens.stylex.js";
21
21
  import { mergeProps } from "../utils/index.js";
22
22
  import { getNodeText } from "../utils/getNodeText.js";
23
+ import { moveFocusLeftBehind, noteFocusWithin } from "../utils/focusReturn.js";
23
24
  import { INTERACTIVE_SELECTORS } from "../hooks/useClickableContainer.js";
24
25
  import { useAnnounce } from "../hooks/useAnnounce.js";
25
26
  import { layerTextReset } from "../Layer/layerTextReset.stylex.js";
@@ -122,7 +123,8 @@ function ToastRow({
122
123
  isExiting,
123
124
  isReversed,
124
125
  onExited,
125
- onDismiss
126
+ onDismiss,
127
+ isLiveRegion
126
128
  }) {
127
129
  const o = entry.options;
128
130
  const type = o.type ?? 'info';
@@ -194,12 +196,16 @@ function ToastRow({
194
196
  isExiting: isExiting,
195
197
  gestureDirection: isReversed ? -1 : 1,
196
198
  onDismiss: reason => onDismiss(entry.id, reason),
197
- renderContent: o.renderContent
199
+ renderContent: o.renderContent,
200
+ timerKey: entry.id,
201
+ isLiveRegion: isLiveRegion
198
202
  })
199
203
  })
200
204
  });
201
205
  }
202
206
  ToastRow.displayName = 'ToastRow';
207
+ const hasActiveModalOutlet = () => getActiveModalOutlet() != null;
208
+ const hasNoModalOutlet = () => false;
203
209
 
204
210
  /**
205
211
  * Container that renders and manages toast notifications. Place at the root
@@ -260,6 +266,11 @@ export function ToastViewport({
260
266
  // The next toast id that should receive focus once the dismissed toast has
261
267
  // unmounted, or 'restore' to fall back to the previously-focused element.
262
268
  const pendingFocusRef = useRef(null);
269
+ // The id of a toast whose overwrite updated a row that held focus. If the
270
+ // update removed the focused control, the commit hands focus off.
271
+ const overwriteFocusRef = useRef(null);
272
+ // Where focus was inside a toast whose dismissal hands focus off.
273
+ const dismissFocusNoteRef = useRef(null);
263
274
 
264
275
  // Collect a focusable control within a toast node, if any.
265
276
  // Reuses the canonical INTERACTIVE_SELECTORS list (native controls plus
@@ -280,13 +291,9 @@ export function ToastViewport({
280
291
  return null;
281
292
  }, []);
282
293
 
283
- // Announce toasts through the persistent singleton live regions. Each
284
- // <Toast> also renders its own role="status"/"alert" region, but that region
285
- // is "born with content" — mounted together with its text — which many
286
- // screen readers do not announce (see useAnnounce.ts); the singleton regions
287
- // are mounted empty and only mutated afterwards, so they are what actually
288
- // guarantees the announcement (the per-toast markup is kept for browse-mode
289
- // discoverability). The announcement happens in addToast — the imperative
294
+ // Announce toasts through the persistent singleton live regions. They are
295
+ // mounted empty and only mutated afterwards, which screen readers announce
296
+ // (see useAnnounce.ts). The announcement happens in addToast — the imperative
290
297
  // dispatch path invoked once per useToast() call from an event handler,
291
298
  // never from render — so each toast is announced exactly once by
292
299
  // construction, independent of the React render lifecycle (StrictMode
@@ -294,6 +301,12 @@ export function ToastViewport({
294
301
  // re-renders never re-announce). It is client-only (addToast never runs
295
302
  // during SSR), so it is SSR-safe.
296
303
  const announce = useAnnounce();
304
+ // An open native modal hides the body-level channel above from assistive
305
+ // technology, so while the viewport is hosted in one, each card announces
306
+ // itself through its own live region instead. Outside a modal the cards
307
+ // carry none, so a card updated in place is announced once.
308
+ const hasModalOutlet = useSyncExternalStore(subscribeModalOutlets, hasActiveModalOutlet, hasNoModalOutlet);
309
+ const isModalHosted = isTopLayer && hasModalOutlet;
297
310
  const addToast = useCallback(entry => {
298
311
  const {
299
312
  uniqueID,
@@ -326,7 +339,26 @@ export function ToastViewport({
326
339
  if (overwritten && renderedToastsRef.current.includes(overwritten)) {
327
340
  replacedRef.current.set(overwritten.id, overwritten);
328
341
  }
329
- const projected = overwritten ? committed.map(t => t === overwritten ? entry : t) : [...committed, entry];
342
+ // An overwrite of a toast that is not leaving keeps its row, so the card
343
+ // updates in place and focus inside it stays. A leaving namesake
344
+ // is replaced by a new row, which enters again.
345
+ const keepsRow = overwritten != null && !exitingIdsRef.current.has(overwritten.id);
346
+ const placed = keepsRow ? {
347
+ ...entry,
348
+ rowKey: overwritten.rowKey ?? overwritten.id
349
+ } : entry;
350
+ if (keepsRow) {
351
+ // If the update removes the focused control, the commit hands focus
352
+ // off as a dismissal does.
353
+ const note = noteFocusWithin(viewportRef.current?.querySelector(`[data-toast-id="${overwritten.id}"]`));
354
+ if (note != null) {
355
+ overwriteFocusRef.current = {
356
+ id: placed.id,
357
+ note
358
+ };
359
+ }
360
+ }
361
+ const projected = overwritten ? committed.map(t => t === overwritten ? placed : t) : [...committed, placed];
330
362
  // `maxVisible={0}` shows every toast (FR7): nothing leaves the window.
331
363
  const firstVisible = maxVisible > 0 ? projected.length - maxVisible : 0;
332
364
  const cutIds = new Set(projected.filter((t, i) => i < firstVisible && exitingIdsRef.current.has(t.id)).map(t => t.id));
@@ -349,7 +381,7 @@ export function ToastViewport({
349
381
  }
350
382
  }
351
383
  }
352
- pending.set(entry.id, entry);
384
+ pending.set(entry.id, placed);
353
385
  // An overwrite swaps a new entry, with a new id, into the replaced
354
386
  // toast's place, so the old row leaves the DOM without ever being
355
387
  // dismissed. Its settled id is dropped by the prune below, which covers
@@ -360,7 +392,7 @@ export function ToastViewport({
360
392
  // replaced namesake as leaving since, which must not turn the
361
393
  // overwrite into an append. An ignored collision already returned.
362
394
  const kept = prev.filter(t => !cutIds.has(t.id));
363
- return overwritten && kept.includes(overwritten) ? kept.map(t => t === overwritten ? entry : t) : [...kept, entry];
395
+ return overwritten && kept.includes(overwritten) ? kept.map(t => t === overwritten ? placed : t) : [...kept, placed];
364
396
  });
365
397
  }, [announce, maxVisible]);
366
398
  const removeToast = useCallback((id, reason) => {
@@ -383,9 +415,15 @@ export function ToastViewport({
383
415
  // focused before the user entered the viewport) rather than <body>.
384
416
  const el = viewportRef.current;
385
417
  const active = document.activeElement;
386
- const dismissedNode = el?.querySelector(`[data-toast-id="${id}"]`) ?? null;
418
+ // A toast an overwrite replaced in place no longer owns its row: the
419
+ // replacement does, so dismissing the replaced toast leaves the row, and
420
+ // focus in it, to the replacement.
421
+ const rowKey = entry.rowKey ?? entry.id;
422
+ const isReplacedInPlace = !toastsRef.current.some(t => t.id === id) && toastsRef.current.some(t => t.rowKey === rowKey);
423
+ const dismissedNode = isReplacedInPlace ? null : el?.querySelector(`[data-toast-id="${id}"]`) ?? null;
387
424
  if (dismissedNode && active instanceof Node && dismissedNode.contains(active)) {
388
425
  focusHandoffIdRef.current = id;
426
+ dismissFocusNoteRef.current = noteFocusWithin(dismissedNode);
389
427
  // Pick the toast to receive focus while the DOM is still intact: the
390
428
  // nearest one after it, then before it, that shows once it is gone
391
429
  // (FR10), else restore. The list may already run ahead of the render
@@ -441,6 +479,31 @@ export function ToastViewport({
441
479
  setToasts(prev => prev.filter(t => t.id !== id));
442
480
  }, []);
443
481
 
482
+ // Moves focus to a control in the target toast, else in another toast that
483
+ // shows (newest first), else back to the element focused before focus
484
+ // entered the viewport, so a handoff never drops focus to <body>.
485
+ const handOffFocus = useCallback((note, targetId) => {
486
+ const el = viewportRef.current;
487
+ const rowFor = id => el?.querySelector(`[data-toast-id="${id}"]`) ?? null;
488
+ const shownIds = toastsRef.current.slice(maxVisibleRef.current > 0 ? -maxVisibleRef.current : 0).map(t => t.id).reverse();
489
+ const candidates = targetId == null ? [] : [targetId, ...shownIds.filter(id => id !== targetId)];
490
+ let target = null;
491
+ for (const id of candidates) {
492
+ target = getFocusable(rowFor(id));
493
+ if (target != null) {
494
+ break;
495
+ }
496
+ }
497
+ const prev = prevFocusRef.current;
498
+ const isReturning = target == null && prev != null && prev.isConnected;
499
+ if (target == null) {
500
+ target = isReturning ? prev : el;
501
+ }
502
+ if (moveFocusLeftBehind(note, target) && isReturning) {
503
+ prevFocusRef.current = null;
504
+ }
505
+ }, [getFocusable]);
506
+
444
507
  // After a dismissed toast unmounts, hand focus off so it never falls to
445
508
  // <body>. Runs in a layout effect once the toast list no longer contains
446
509
  // the dismissed toast.
@@ -456,25 +519,21 @@ export function ToastViewport({
456
519
  }
457
520
  focusHandoffIdRef.current = null;
458
521
  pendingFocusRef.current = null;
459
- const el = viewportRef.current;
460
- if (target !== 'restore' && el) {
461
- const nextNode = el.querySelector(`[data-toast-id="${target}"]`);
462
- const focusable = getFocusable(nextNode) ?? nextNode;
463
- if (focusable) {
464
- focusable.focus();
465
- return;
466
- }
467
- }
468
- // No remaining toast to receive focus — restore the previously-focused
469
- // element if it's still connected, else fall back to the container.
470
- const prev = prevFocusRef.current;
471
- prevFocusRef.current = null;
472
- if (prev && prev.isConnected) {
473
- prev.focus();
474
- } else if (el) {
475
- el.focus();
522
+ const note = dismissFocusNoteRef.current;
523
+ dismissFocusNoteRef.current = null;
524
+ handOffFocus(note, target === 'restore' ? null : target);
525
+ }, [toasts, handOffFocus]);
526
+
527
+ // After an overwrite updated a row that held focus: focus stays on the same
528
+ // control, or, if the update removed it, moves as a dismissal hands it off.
529
+ useLayoutEffect(() => {
530
+ const overwrite = overwriteFocusRef.current;
531
+ if (overwrite == null) {
532
+ return;
476
533
  }
477
- }, [toasts, getFocusable]);
534
+ overwriteFocusRef.current = null;
535
+ handOffFocus(overwrite.note, overwrite.id);
536
+ }, [toasts, handOffFocus]);
478
537
  const findByUniqueID = useCallback(uid => {
479
538
  return toastsRef.current.find(t => t.options.uniqueID === uid);
480
539
  }, []);
@@ -519,6 +578,9 @@ export function ToastViewport({
519
578
  setHost(null);
520
579
  };
521
580
  }, [isTopLayer]);
581
+
582
+ // Syncs the host's place with the modal outlet registry. The host moves into
583
+ // the latest open modal, and back when that modal closes.
522
584
  useLayoutEffect(() => {
523
585
  if (!isTopLayer || host == null) {
524
586
  return;
@@ -663,8 +725,9 @@ export function ToastViewport({
663
725
  isExiting: exitingIds.has(entry.id),
664
726
  isReversed: isReversed,
665
727
  onExited: handleExited,
666
- onDismiss: removeToast
667
- }, entry.id))
728
+ onDismiss: removeToast,
729
+ isLiveRegion: isModalHosted
730
+ }, entry.rowKey ?? entry.id))
668
731
  })
669
732
  });
670
733
  return /*#__PURE__*/_jsxs(ToastContext, {
@@ -31,9 +31,10 @@ export interface ToastOptions {
31
31
  /**
32
32
  * Replaces the content of this toast's card with your own layout.
33
33
  *
34
- * Astryx keeps the card, live-region role and auto-hide behavior, then hands
35
- * the renderer this toast's content, resolved settings and `dismiss`
36
- * callback. The renderer owns every control inside its layout; call
34
+ * Astryx keeps the card and its auto-hide behavior (inside a
35
+ * `ToastViewport` the viewport announces the toast, and while a modal hosts
36
+ * the viewport the card announces itself), then hands the
37
+ * renderer this toast's content, resolved settings and `dismiss` callback. The renderer owns every control inside its layout; call
37
38
  * `dismiss` from the control that should close the toast. Astryx does not
38
39
  * inject a fallback control into custom content.
39
40
  *
@@ -85,5 +86,10 @@ export interface ToastEntry {
85
86
  id: string;
86
87
  options: ToastOptions;
87
88
  createdAt: number;
89
+ /**
90
+ * The row's identity in the stack. A uniqueID overwrite keeps the replaced
91
+ * toast's, so the card updates in place and focus inside it stays.
92
+ */
93
+ rowKey?: string;
88
94
  }
89
95
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Toast/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAErC,gDAAgD;AAChD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC,6DAA6D;AAC7D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC;AAEhF,mEAAmE;AACnE,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE5D,wCAAwC;AACxC,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEnD,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAErC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,gDAAgD;IAChD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC/C;AAED,oDAAoD;AACpD,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AAExC,wDAAwD;AACxD,MAAM,WAAW,uBAAuB;IACtC,yDAAyD;IACzD,IAAI,EAAE,SAAS,CAAC;IAChB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,4EAA4E;IAC5E,IAAI,EAAE,SAAS,CAAC;IAChB,8CAA8C;IAC9C,UAAU,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,OAAO,EAAE,cAAc,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,KAAK,EAAE,uBAAuB,KAC3B,SAAS,CAAC;AAEf,oDAAoD;AACpD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,cAAc,CAAC;AAEpE,iDAAiD;AACjD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Toast/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAErC,gDAAgD;AAChD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC,6DAA6D;AAC7D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC;AAEhF,mEAAmE;AACnE,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE5D,wCAAwC;AACxC,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEnD,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAErC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,gDAAgD;IAChD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC/C;AAED,oDAAoD;AACpD,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AAExC,wDAAwD;AACxD,MAAM,WAAW,uBAAuB;IACtC,yDAAyD;IACzD,IAAI,EAAE,SAAS,CAAC;IAChB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,4EAA4E;IAC5E,IAAI,EAAE,SAAS,CAAC;IAChB,8CAA8C;IAC9C,UAAU,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,OAAO,EAAE,cAAc,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,KAAK,EAAE,uBAAuB,KAC3B,SAAS,CAAC;AAEf,oDAAoD;AACpD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,cAAc,CAAC;AAEpE,iDAAiD;AACjD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useToast.d.ts","sourceRoot":"","sources":["../../src/Toast/useToast.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAGV,WAAW,EAEZ,MAAM,SAAS,CAAC;AAwIjB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,IAAI,WAAW,CAetC"}
1
+ {"version":3,"file":"useToast.d.ts","sourceRoot":"","sources":["../../src/Toast/useToast.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAGV,WAAW,EAEZ,MAAM,SAAS,CAAC;AAyIjB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,IAAI,WAAW,CAetC"}
@@ -70,6 +70,7 @@ function getFallbackContext() {
70
70
  const FallbackCapture = () => {
71
71
  const ctx = use(ToastContext);
72
72
  const doneRef = useRef(false);
73
+ // Syncs the module-level fallback with the first toast context that mounts.
73
74
  useEffect(() => {
74
75
  if (ctx && !doneRef.current) {
75
76
  doneRef.current = true;
@@ -4,8 +4,8 @@
4
4
  * useAdaptivePresentation, and TokenizerBottomSheet (lazy)
5
5
  * @output Exports Tokenizer multi-select typeahead component
6
6
  * @position Composed component; forwards DOM ref and exposes focus control via
7
- * handleRef. The experimental `presentation` option swaps the inline
8
- * combobox for a trigger that opens TokenizerBottomSheet.
7
+ * handleRef. The `presentation` prop swaps the inline combobox for a
8
+ * trigger that opens TokenizerBottomSheet.
9
9
  *
10
10
  * SYNC: When modified, update:
11
11
  * - /packages/core/src/Tokenizer/index.ts
@@ -15,6 +15,7 @@
15
15
  */
16
16
  import React, { type ReactNode } from 'react';
17
17
  import { type FieldInputBaseProps } from '../Field/fieldParts.js';
18
+ import { type AdaptivePresentation } from '../hooks/useAdaptivePresentation.js';
18
19
  import type { SizeValue } from '../utils/types.js';
19
20
  import { type InputStatus } from '../Field/index.js';
20
21
  import { type IconType } from '../Icon/index.js';
@@ -202,62 +203,59 @@ export interface TokenizerProps<T extends SearchableItem> extends Omit<FieldInpu
202
203
  onFocus?: (e: React.FocusEvent) => void;
203
204
  /** Fires when focus leaves the tokenizer entirely. */
204
205
  onBlur?: (e: React.FocusEvent) => void;
205
- /** Ref forwarded to the combobox input. */
206
+ /**
207
+ * How the field presents its choices.
208
+ * - `'popover'`: the inline combobox with its anchored suggestion menu, on
209
+ * every device.
210
+ * - `'bottom-sheet'`: a trigger showing the selected tokens that opens one
211
+ * tall modal sheet: a search row on top, full-width checkbox rows that
212
+ * keep their place while the sheet is open, a create row with
213
+ * `hasCreate`, and a footer pinned in every state with a confirmed Clear
214
+ * all and Save. The sheet edits a draft: `onChange` fires once, when Save
215
+ * commits it, and a swipe, scrim or Escape close of a changed draft asks
216
+ * before discarding. Suited to compact touch screens, where the inline
217
+ * combobox competes with the software keyboard.
218
+ * - `'adaptive'`: the bottom sheet on compact coarse-pointer screens,
219
+ * otherwise the popover — the same resolution Selector uses. The server
220
+ * render and the hydrating render are the popover.
221
+ *
222
+ * In the sheet presentation the trigger is the control: `ref`, `id`,
223
+ * `aria-*`, and `data-*` reach it. `renderItem`, `renderToken`,
224
+ * `endContent`, `hasClear`, `hasEntriesOnFocus`, `menuWidth`,
225
+ * `tokenOverflowBehavior`, and `hasAutoFocus` have no surface to act on
226
+ * and warn once in development. Pass `'popover'` to keep the inline field
227
+ * and those props on every device.
228
+ * @default 'adaptive'
229
+ */
230
+ presentation?: TokenizerPresentation;
231
+ /**
232
+ * Ref forwarded to the control: the combobox input in the popover
233
+ * presentation, the trigger button in the sheet presentation. This type
234
+ * keeps its released input element; the component itself also accepts a
235
+ * `Ref<HTMLInputElement | HTMLButtonElement>`, the type to use where the
236
+ * sheet can present.
237
+ */
206
238
  ref?: React.Ref<HTMLInputElement>;
207
239
  /** Imperative handle ref for focus/blur control. */
208
240
  handleRef?: React.Ref<TokenizerHandle>;
209
- /**
210
- * Experimental options, outside the stable compatibility promise: anything
211
- * in this object may change or be removed in a patch release. Omit it for
212
- * the stable behavior.
213
- * @experimental
214
- */
215
- experimental?: {
216
- /**
217
- * How the field presents its choices.
218
- * - `'popover'`: the inline combobox with its anchored suggestion menu —
219
- * the stable behavior.
220
- * - `'bottom-sheet'`: a trigger showing the selected tokens that opens one
221
- * tall modal sheet: a search row on top, full-width checkbox rows that
222
- * keep their place while the sheet is open, a create row with
223
- * `hasCreate`, and a footer pinned in every state with a confirmed Clear
224
- * all and Save. The sheet edits a draft: `onChange` fires once, when Save
225
- * commits it, and a swipe, scrim or Escape close of a changed draft asks
226
- * before discarding. Suited to compact touch screens, where the inline
227
- * combobox competes with the software keyboard.
228
- * - `'adaptive'`: the bottom sheet on compact coarse-pointer screens,
229
- * otherwise the popover — the same resolution Selector uses.
230
- *
231
- * In the sheet presentation the trigger is the control: `ref`, `id`,
232
- * `aria-*`, and `data-*` reach it. `renderItem`, `renderToken`,
233
- * `endContent`, `hasClear`, `hasEntriesOnFocus`, `menuWidth`,
234
- * `tokenOverflowBehavior`, and `hasAutoFocus` have no surface to act on
235
- * and warn once in development.
236
- * @experimental
237
- * @default 'popover'
238
- */
239
- presentation?: 'popover' | 'bottom-sheet' | 'adaptive';
240
- };
241
241
  }
242
+ /** How Tokenizer presents its choices; see `TokenizerProps.presentation`. */
243
+ export type TokenizerPresentation = AdaptivePresentation;
242
244
  /**
243
- * The props the experimental opt-in admits. `experimental` is present, and
244
- * `ref` also accepts the sheet presentation's trigger button, the control it
245
- * stands for there. Only the overload below reaches this type. `TokenizerProps`
246
- * stays the component's declared props type: it is an interface, so
247
- * `interface X extends TokenizerProps<T>`, `Omit<TokenizerProps<T>, …>` and
248
- * `ComponentProps<typeof Tokenizer>` keep their released shapes.
245
+ * The props the component accepts: `TokenizerProps`, whose `ref` keeps its
246
+ * released input type, with a `ref` that also accepts the sheet
247
+ * presentation's trigger button. `TokenizerProps` stays the declared props
248
+ * type, so `interface X extends TokenizerProps<T>`, `Omit<TokenizerProps<T>,
249
+ * …>` and `ComponentProps<typeof Tokenizer>` keep their released shapes.
249
250
  */
250
- type TokenizerExperimentalProps<T extends SearchableItem> = Omit<TokenizerProps<T>, 'ref' | 'experimental'> & {
251
- /** @experimental */
252
- experimental: NonNullable<TokenizerProps<T>['experimental']>;
251
+ type TokenizerAcceptedProps<T extends SearchableItem> = Omit<TokenizerProps<T>, 'ref'> & {
253
252
  /**
254
253
  * Ref forwarded to the control: the combobox input in the popover
255
254
  * presentation, the trigger button in the sheet presentation.
256
- * @experimental
257
255
  */
258
256
  ref?: React.Ref<HTMLInputElement | HTMLButtonElement>;
259
257
  };
260
- export declare function Tokenizer<T extends SearchableItem>(props: TokenizerExperimentalProps<T>): React.JSX.Element;
258
+ export declare function Tokenizer<T extends SearchableItem>(props: TokenizerAcceptedProps<T>): React.JSX.Element;
261
259
  export declare function Tokenizer<T extends SearchableItem>(props: TokenizerProps<T>): React.JSX.Element;
262
260
  export declare namespace Tokenizer {
263
261
  var displayName: string;