@astryxdesign/core 0.7.7 → 0.7.8-canary.0588a13

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 (798) 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 +1 -1
  9. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  10. package/dist/BottomSheet/BottomSheetPanel.js +55 -18
  11. package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
  12. package/dist/BottomSheet/BottomSheetSwitcher.js +5 -0
  13. package/dist/BottomSheet/bottomSheetStack.js +1 -1
  14. package/dist/BottomSheet/useSheetGestures.d.ts +3 -1
  15. package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
  16. package/dist/BottomSheet/useSheetGestures.js +16 -1
  17. package/dist/Button/Button.d.ts.map +1 -1
  18. package/dist/Button/Button.js +17 -1
  19. package/dist/Calendar/Calendar.d.ts.map +1 -1
  20. package/dist/Calendar/Calendar.js +18 -22
  21. package/dist/Calendar/getWeekdayHeaderNames.d.ts +16 -0
  22. package/dist/Calendar/getWeekdayHeaderNames.d.ts.map +1 -0
  23. package/dist/Calendar/getWeekdayHeaderNames.js +70 -0
  24. package/dist/Calendar/hooks/useCalendarDays.d.ts.map +1 -1
  25. package/dist/Calendar/hooks/useCalendarDays.js +2 -10
  26. package/dist/Calendar/{standaloneShortWeekdayNames.generated.d.ts → weekdayHeaderNames.generated.d.ts} +14 -14
  27. package/dist/Calendar/weekdayHeaderNames.generated.d.ts.map +1 -0
  28. package/dist/Calendar/{standaloneShortWeekdayNames.generated.js → weekdayHeaderNames.generated.js} +12 -12
  29. package/dist/Carousel/Carousel.d.ts.map +1 -1
  30. package/dist/Carousel/Carousel.js +2 -0
  31. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  32. package/dist/Chat/ChatComposerInput.js +6 -1
  33. package/dist/Chat/ChatMessageList.d.ts.map +1 -1
  34. package/dist/Chat/ChatMessageList.js +2 -1
  35. package/dist/Chat/useChatDictation.d.ts.map +1 -1
  36. package/dist/Chat/useChatDictation.js +2 -0
  37. package/dist/Chat/useChatNewMessages.js +1 -1
  38. package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
  39. package/dist/Chat/useChatStreamScroll.js +2 -0
  40. package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
  41. package/dist/Chat/useSpeechRecognition.js +3 -0
  42. package/dist/Chat/useTriggerMenu.js +1 -1
  43. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  44. package/dist/CheckboxInput/CheckboxInput.js +17 -12
  45. package/dist/CheckboxList/CheckboxList.d.ts +20 -2
  46. package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
  47. package/dist/CheckboxList/CheckboxList.js +12 -4
  48. package/dist/CheckboxList/CheckboxListContext.d.ts +7 -0
  49. package/dist/CheckboxList/CheckboxListContext.d.ts.map +1 -1
  50. package/dist/CheckboxList/CheckboxListContext.js +2 -1
  51. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  52. package/dist/CheckboxList/CheckboxListItem.js +14 -2
  53. package/dist/CheckboxList/requiredGroup.d.ts +22 -0
  54. package/dist/CheckboxList/requiredGroup.d.ts.map +1 -0
  55. package/dist/CheckboxList/requiredGroup.js +52 -0
  56. package/dist/CodeBlock/CodeBlock.d.ts +10 -1
  57. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  58. package/dist/CodeBlock/CodeBlock.js +28 -11
  59. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  60. package/dist/CommandPalette/CommandPalette.js +2 -0
  61. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  62. package/dist/CommandPalette/CommandPaletteItem.js +2 -0
  63. package/dist/ComplexSelector/ComplexSelector.d.ts +4 -1
  64. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  65. package/dist/ComplexSelector/ComplexSelector.js +14 -4
  66. package/dist/ContextMenu/ContextMenu.js +2 -2
  67. package/dist/DateInput/MonthScroller.d.ts.map +1 -1
  68. package/dist/DateInput/MonthScroller.js +5 -2
  69. package/dist/DateInput/PickerWheel.d.ts +19 -0
  70. package/dist/DateInput/PickerWheel.d.ts.map +1 -0
  71. package/dist/DateInput/PickerWheel.js +646 -0
  72. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  73. package/dist/DateInput/TouchDateField.js +9 -30
  74. package/dist/DateInput/Wheel.d.ts +18 -37
  75. package/dist/DateInput/Wheel.d.ts.map +1 -1
  76. package/dist/DateInput/Wheel.js +133 -120
  77. package/dist/DateInput/datePickerTouch.d.ts +13 -0
  78. package/dist/DateInput/datePickerTouch.d.ts.map +1 -0
  79. package/dist/DateInput/datePickerTouch.js +14 -0
  80. package/dist/DateInput/useOwnScrollGesture.d.ts +10 -0
  81. package/dist/DateInput/useOwnScrollGesture.d.ts.map +1 -1
  82. package/dist/DateInput/useOwnScrollGesture.js +16 -3
  83. package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -1
  84. package/dist/DateInput/usePointerDragScroll.js +2 -0
  85. package/dist/DateInput/useScrollSettle.d.ts.map +1 -1
  86. package/dist/DateInput/useScrollSettle.js +3 -0
  87. package/dist/DateInput/useWheelListbox.d.ts +59 -0
  88. package/dist/DateInput/useWheelListbox.d.ts.map +1 -0
  89. package/dist/DateInput/useWheelListbox.js +88 -0
  90. package/dist/DateInput/wheelOptions.d.ts +94 -0
  91. package/dist/DateInput/wheelOptions.d.ts.map +1 -0
  92. package/dist/DateInput/wheelOptions.js +110 -0
  93. package/dist/DateInput/wheelPhysics.d.ts +127 -0
  94. package/dist/DateInput/wheelPhysics.d.ts.map +1 -0
  95. package/dist/DateInput/wheelPhysics.js +341 -0
  96. package/dist/DateInput/wheelStrip.d.ts +92 -0
  97. package/dist/DateInput/wheelStrip.d.ts.map +1 -0
  98. package/dist/DateInput/wheelStrip.js +258 -0
  99. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  100. package/dist/DateTimeInput/TouchDateTimeField.js +70 -127
  101. package/dist/Dialog/Dialog.d.ts.map +1 -1
  102. package/dist/Dialog/Dialog.js +9 -32
  103. package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
  104. package/dist/Drawer/useDrawerDialogPresence.js +3 -0
  105. package/dist/DropdownMenu/useMenuOverflow.d.ts.map +1 -1
  106. package/dist/DropdownMenu/useMenuOverflow.js +5 -0
  107. package/dist/Field/Field.js +2 -2
  108. package/dist/FieldStatus/useFieldStatusAnnouncement.d.ts.map +1 -1
  109. package/dist/FieldStatus/useFieldStatusAnnouncement.js +1 -0
  110. package/dist/FormLayout/FormLayout.d.ts +5 -1
  111. package/dist/FormLayout/FormLayout.d.ts.map +1 -1
  112. package/dist/HoverCard/HoverCard.d.ts +6 -4
  113. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  114. package/dist/HoverCard/HoverCard.js +48 -3
  115. package/dist/HoverCard/useHoverCard.d.ts +5 -4
  116. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  117. package/dist/HoverCard/useHoverCard.js +26 -34
  118. package/dist/Icon/Icon.d.ts +5 -1
  119. package/dist/Icon/Icon.d.ts.map +1 -1
  120. package/dist/Icon/Icon.js +20 -3
  121. package/dist/InfoTip/InfoTip.d.ts +5 -5
  122. package/dist/InfoTip/InfoTip.d.ts.map +1 -1
  123. package/dist/InfoTip/InfoTip.js +58 -19
  124. package/dist/Item/useSwipeAction.d.ts.map +1 -1
  125. package/dist/Item/useSwipeAction.js +3 -0
  126. package/dist/Layer/modalOutlet.d.ts.map +1 -1
  127. package/dist/Layer/modalOutlet.js +2 -0
  128. package/dist/Layer/outsidePress.d.ts.map +1 -1
  129. package/dist/Layer/outsidePress.js +1 -0
  130. package/dist/Layer/useLayer.d.ts.map +1 -1
  131. package/dist/Layer/useLayer.js +4 -1
  132. package/dist/Layer/useLayerDismissal.d.ts.map +1 -1
  133. package/dist/Layer/useLayerDismissal.js +3 -0
  134. package/dist/Layer/useTouchTrigger.d.ts +13 -7
  135. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  136. package/dist/Layer/useTouchTrigger.js +20 -6
  137. package/dist/Layout/index.d.ts +1 -1
  138. package/dist/Layout/index.d.ts.map +1 -1
  139. package/dist/Layout/index.js +1 -1
  140. package/dist/Layout/layoutReset.js +1 -1
  141. package/dist/Layout/overlayPaddingReset.stylex.d.ts +68 -0
  142. package/dist/Layout/overlayPaddingReset.stylex.d.ts.map +1 -0
  143. package/dist/Layout/overlayPaddingReset.stylex.js +72 -0
  144. package/dist/Layout/padding.stylex.d.ts +5 -129
  145. package/dist/Layout/padding.stylex.d.ts.map +1 -1
  146. package/dist/Layout/padding.stylex.js +9 -143
  147. package/dist/Layout/paddingStyles.stylex.d.ts +83 -0
  148. package/dist/Layout/paddingStyles.stylex.d.ts.map +1 -0
  149. package/dist/Layout/paddingStyles.stylex.js +99 -0
  150. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  151. package/dist/Lightbox/Lightbox.js +20 -1
  152. package/dist/MobileNav/MobileNav.d.ts +3 -2
  153. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  154. package/dist/MobileNav/MobileNav.js +10 -26
  155. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  156. package/dist/MultiSelector/MultiSelector.js +2 -1
  157. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  158. package/dist/NumberInput/NumberInput.js +2 -1
  159. package/dist/Outline/useOutlineFromDOM.d.ts.map +1 -1
  160. package/dist/Outline/useOutlineFromDOM.js +3 -0
  161. package/dist/Outline/useScrollSpy.d.ts.map +1 -1
  162. package/dist/Outline/useScrollSpy.js +3 -0
  163. package/dist/OverflowList/OverflowList.d.ts.map +1 -1
  164. package/dist/OverflowList/OverflowList.js +3 -0
  165. package/dist/Overlay/Overlay.d.ts.map +1 -1
  166. package/dist/Overlay/Overlay.js +7 -2
  167. package/dist/Popover/Popover.d.ts.map +1 -1
  168. package/dist/Popover/Popover.js +6 -0
  169. package/dist/Popover/usePopover.js +2 -2
  170. package/dist/PowerSearch/PowerSearch.d.ts +41 -4
  171. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  172. package/dist/PowerSearch/PowerSearch.js +441 -134
  173. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts +125 -0
  174. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -0
  175. package/dist/PowerSearch/PowerSearchBottomSheet.js +2041 -0
  176. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +35 -2
  177. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  178. package/dist/PowerSearch/PowerSearchEditPopover.js +43 -10
  179. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts +1 -1
  180. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts.map +1 -1
  181. package/dist/PowerSearch/PowerSearchFilterEditor.js +4 -2
  182. package/dist/PowerSearch/PowerSearchToken.d.ts +1 -1
  183. package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
  184. package/dist/PowerSearch/PowerSearchToken.js +3 -2
  185. package/dist/PowerSearch/PowerSearchValueEditor.d.ts +38 -3
  186. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  187. package/dist/PowerSearch/PowerSearchValueEditor.js +273 -86
  188. package/dist/PowerSearch/formatFilterValue.d.ts +14 -7
  189. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  190. package/dist/PowerSearch/formatFilterValue.js +31 -23
  191. package/dist/PowerSearch/formatTokenValue.d.ts +28 -0
  192. package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -0
  193. package/dist/PowerSearch/formatTokenValue.js +161 -0
  194. package/dist/PowerSearch/index.d.ts +1 -1
  195. package/dist/PowerSearch/index.d.ts.map +1 -1
  196. package/dist/PowerSearch/powerSearchDateZone.d.ts +25 -0
  197. package/dist/PowerSearch/powerSearchDateZone.d.ts.map +1 -0
  198. package/dist/PowerSearch/powerSearchDateZone.js +57 -0
  199. package/dist/PowerSearch/powerSearchSheetUtils.d.ts +65 -0
  200. package/dist/PowerSearch/powerSearchSheetUtils.d.ts.map +1 -0
  201. package/dist/PowerSearch/powerSearchSheetUtils.js +168 -0
  202. package/dist/PowerSearch/types.d.ts +8 -1
  203. package/dist/PowerSearch/types.d.ts.map +1 -1
  204. package/dist/ProgressBar/ProgressBarTouch.d.ts.map +1 -1
  205. package/dist/ProgressBar/ProgressBarTouch.js +2 -0
  206. package/dist/RadioList/RadioList.d.ts.map +1 -1
  207. package/dist/RadioList/RadioList.js +3 -2
  208. package/dist/RadioList/RadioListItem.d.ts +1 -1
  209. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  210. package/dist/RadioList/RadioListItem.js +5 -3
  211. package/dist/Resizable/ResizeHandle.d.ts +2 -1
  212. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  213. package/dist/Resizable/ResizeHandle.js +116 -92
  214. package/dist/Resizable/createResizable.d.ts +199 -0
  215. package/dist/Resizable/createResizable.d.ts.map +1 -0
  216. package/dist/Resizable/createResizable.js +733 -0
  217. package/dist/Resizable/separatorAttributes.d.ts +45 -0
  218. package/dist/Resizable/separatorAttributes.d.ts.map +1 -0
  219. package/dist/Resizable/separatorAttributes.js +35 -0
  220. package/dist/Resizable/useResizable.d.ts +3 -3
  221. package/dist/Resizable/useResizable.d.ts.map +1 -1
  222. package/dist/Resizable/useResizable.js +252 -459
  223. package/dist/SegmentedControl/useSegmentedSelectionMotion.d.ts.map +1 -1
  224. package/dist/SegmentedControl/useSegmentedSelectionMotion.js +3 -3
  225. package/dist/SelectableCard/SelectableCard.d.ts +2 -0
  226. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  227. package/dist/SelectableCard/SelectableCard.js +36 -11
  228. package/dist/SelectableCard/selectableCardInput.d.ts +12 -0
  229. package/dist/SelectableCard/selectableCardInput.d.ts.map +1 -0
  230. package/dist/SelectableCard/selectableCardInput.js +20 -0
  231. package/dist/Selector/Selector.d.ts.map +1 -1
  232. package/dist/Selector/Selector.js +7 -9
  233. package/dist/SideNav/SideNav.d.ts.map +1 -1
  234. package/dist/SideNav/SideNav.js +36 -5
  235. package/dist/Slider/Slider.d.ts.map +1 -1
  236. package/dist/Slider/Slider.js +16 -11
  237. package/dist/Slider/sliderTouchController.js +2 -2
  238. package/dist/Spinner/Spinner.d.ts +1 -1
  239. package/dist/Spinner/Spinner.d.ts.map +1 -1
  240. package/dist/Spinner/Spinner.js +60 -58
  241. package/dist/Stepper/Stepper.d.ts.map +1 -1
  242. package/dist/Stepper/Stepper.js +10 -15
  243. package/dist/Switch/Switch.d.ts.map +1 -1
  244. package/dist/Switch/Switch.js +4 -10
  245. package/dist/Switch/useSwitchTouch.js +4 -4
  246. package/dist/Table/BaseTable.d.ts.map +1 -1
  247. package/dist/Table/BaseTable.js +29 -8
  248. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  249. package/dist/Table/plugins/columnResize/useTableColumnResize.js +3 -1
  250. package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
  251. package/dist/Table/plugins/filtering/useTableFiltering.js +2 -1
  252. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +12 -0
  253. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  254. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +17 -3
  255. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
  256. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +2 -0
  257. package/dist/Table/plugins/tree/useTableTreeData.d.ts +11 -0
  258. package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
  259. package/dist/Table/plugins/tree/useTableTreeData.js +27 -14
  260. package/dist/TextArea/TextArea.d.ts.map +1 -1
  261. package/dist/TextArea/TextArea.js +2 -1
  262. package/dist/TextInput/TextInput.d.ts +2 -2
  263. package/dist/TextInput/TextInput.d.ts.map +1 -1
  264. package/dist/TextInput/TextInput.js +12 -8
  265. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  266. package/dist/TimeInput/TimeInput.js +2 -0
  267. package/dist/TimeInput/TimeWheels.d.ts +32 -0
  268. package/dist/TimeInput/TimeWheels.d.ts.map +1 -0
  269. package/dist/TimeInput/TimeWheels.js +144 -0
  270. package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
  271. package/dist/TimeInput/TouchTimeField.js +63 -116
  272. package/dist/TimeInput/timeWheelRules.d.ts +124 -0
  273. package/dist/TimeInput/timeWheelRules.d.ts.map +1 -0
  274. package/dist/TimeInput/timeWheelRules.js +277 -0
  275. package/dist/Timer/Timer.d.ts.map +1 -1
  276. package/dist/Timer/Timer.js +2 -0
  277. package/dist/Timestamp/Timestamp.js +1 -1
  278. package/dist/Timestamp/formatInstant.d.ts.map +1 -1
  279. package/dist/Timestamp/formatInstant.js +1 -23
  280. package/dist/Toast/Toast.d.ts +11 -1
  281. package/dist/Toast/Toast.d.ts.map +1 -1
  282. package/dist/Toast/Toast.js +25 -15
  283. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  284. package/dist/Toast/ToastViewport.js +97 -34
  285. package/dist/Toast/types.d.ts +9 -3
  286. package/dist/Toast/types.d.ts.map +1 -1
  287. package/dist/Toast/useToast.d.ts.map +1 -1
  288. package/dist/Toast/useToast.js +1 -0
  289. package/dist/Tokenizer/Tokenizer.d.ts +44 -46
  290. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  291. package/dist/Tokenizer/Tokenizer.js +20 -21
  292. package/dist/Tokenizer/TokenizerBottomSheet.d.ts +1 -1
  293. package/dist/Tokenizer/TokenizerBottomSheet.js +12 -18
  294. package/dist/Tokenizer/index.d.ts +1 -1
  295. package/dist/Tokenizer/index.d.ts.map +1 -1
  296. package/dist/Tooltip/Tooltip.d.ts +2 -23
  297. package/dist/Tooltip/Tooltip.d.ts.map +1 -1
  298. package/dist/Tooltip/Tooltip.js +5 -29
  299. package/dist/Tooltip/useTooltip.d.ts +23 -30
  300. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  301. package/dist/Tooltip/useTooltip.js +200 -108
  302. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  303. package/dist/Typeahead/BaseTypeahead.js +27 -18
  304. package/dist/Typeahead/TypeaheadItem.d.ts +2 -1
  305. package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
  306. package/dist/animator/createAnimator.d.ts +98 -0
  307. package/dist/animator/createAnimator.d.ts.map +1 -0
  308. package/dist/animator/createAnimator.js +259 -0
  309. package/dist/astryx.css +53 -8
  310. package/dist/gestures/GestureHost.d.ts +16 -1
  311. package/dist/gestures/GestureHost.d.ts.map +1 -1
  312. package/dist/gestures/GestureHost.js +4 -1
  313. package/dist/gestures/PressTracker.d.ts.map +1 -1
  314. package/dist/gestures/PressTracker.js +4 -3
  315. package/dist/hooks/ModalAnnounceProvider.d.ts.map +1 -1
  316. package/dist/hooks/ModalAnnounceProvider.js +1 -0
  317. package/dist/hooks/actionGroupTracker.d.ts +4 -1
  318. package/dist/hooks/actionGroupTracker.d.ts.map +1 -1
  319. package/dist/hooks/actionGroupTracker.js +18 -7
  320. package/dist/hooks/index.d.ts +1 -0
  321. package/dist/hooks/index.d.ts.map +1 -1
  322. package/dist/hooks/index.js +1 -0
  323. package/dist/hooks/longPressDetector.d.ts +66 -0
  324. package/dist/hooks/longPressDetector.d.ts.map +1 -0
  325. package/dist/hooks/longPressDetector.js +200 -0
  326. package/dist/hooks/pressGroupContext.d.ts +6 -0
  327. package/dist/hooks/pressGroupContext.d.ts.map +1 -0
  328. package/dist/hooks/pressGroupContext.js +20 -0
  329. package/dist/hooks/rootScrollStyles.d.ts +48 -0
  330. package/dist/hooks/rootScrollStyles.d.ts.map +1 -0
  331. package/dist/hooks/rootScrollStyles.js +207 -0
  332. package/dist/hooks/scrollLockTouchGuard.d.ts +13 -0
  333. package/dist/hooks/scrollLockTouchGuard.d.ts.map +1 -0
  334. package/dist/hooks/scrollLockTouchGuard.js +117 -0
  335. package/dist/hooks/scrollbarGutter.d.ts +4 -4
  336. package/dist/hooks/scrollbarGutter.d.ts.map +1 -1
  337. package/dist/hooks/scrollbarGutter.js +36 -23
  338. package/dist/hooks/useActionGroupTracking.d.ts +53 -0
  339. package/dist/hooks/useActionGroupTracking.d.ts.map +1 -0
  340. package/dist/hooks/useActionGroupTracking.js +174 -0
  341. package/dist/hooks/useAnimator.d.ts +41 -0
  342. package/dist/hooks/useAnimator.d.ts.map +1 -0
  343. package/dist/hooks/useAnimator.js +70 -0
  344. package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
  345. package/dist/hooks/useAnnounceRenderedText.js +1 -0
  346. package/dist/hooks/useAttachment.d.ts +1 -1
  347. package/dist/hooks/useAttachment.js +1 -1
  348. package/dist/hooks/useAutoMediaMode.d.ts.map +1 -1
  349. package/dist/hooks/useAutoMediaMode.js +1 -0
  350. package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
  351. package/dist/hooks/useBusyAnnouncement.js +2 -0
  352. package/dist/hooks/useDevWarning.d.ts.map +1 -1
  353. package/dist/hooks/useDevWarning.js +2 -0
  354. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  355. package/dist/hooks/useFocusTrap.js +2 -0
  356. package/dist/hooks/useGridFocus.d.ts +8 -5
  357. package/dist/hooks/useGridFocus.d.ts.map +1 -1
  358. package/dist/hooks/useGridFocus.js +4 -3
  359. package/dist/hooks/useHotkeys.d.ts.map +1 -1
  360. package/dist/hooks/useHotkeys.js +3 -0
  361. package/dist/hooks/useImageMode.d.ts.map +1 -1
  362. package/dist/hooks/useImageMode.js +3 -0
  363. package/dist/hooks/useInputStatusIcon.d.ts +1 -1
  364. package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
  365. package/dist/hooks/useInputStatusIcon.js +2 -2
  366. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  367. package/dist/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
  368. package/dist/hooks/useKeyboardHint.js +1 -1
  369. package/dist/hooks/useLongPress.d.ts +8 -9
  370. package/dist/hooks/useLongPress.d.ts.map +1 -1
  371. package/dist/hooks/useLongPress.js +23 -106
  372. package/dist/hooks/useMenuHover.d.ts.map +1 -1
  373. package/dist/hooks/useMenuHover.js +2 -0
  374. package/dist/hooks/useMenuPress.d.ts.map +1 -1
  375. package/dist/hooks/useMenuPress.js +3 -0
  376. package/dist/hooks/useOverflow.d.ts.map +1 -1
  377. package/dist/hooks/useOverflow.js +2 -1
  378. package/dist/hooks/usePressFeedback.d.ts.map +1 -1
  379. package/dist/hooks/usePressFeedback.js +1 -0
  380. package/dist/hooks/useResolvedRequired.d.ts +3 -0
  381. package/dist/hooks/useResolvedRequired.d.ts.map +1 -1
  382. package/dist/hooks/useResolvedRequired.js +3 -0
  383. package/dist/hooks/useScrollLock.d.ts +8 -9
  384. package/dist/hooks/useScrollLock.d.ts.map +1 -1
  385. package/dist/hooks/useScrollLock.js +50 -48
  386. package/dist/hooks/useScrollableArea.d.ts.map +1 -1
  387. package/dist/hooks/useScrollableArea.js +5 -0
  388. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  389. package/dist/hooks/useStreamingText.js +3 -0
  390. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts +8 -0
  391. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts.map +1 -0
  392. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.js +45 -0
  393. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.d.ts.map +1 -1
  394. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.js +6 -0
  395. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts +8 -0
  396. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts.map +1 -0
  397. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.js +14 -0
  398. package/dist/i18n/generated-english/Resizable/createResizable.generated.d.ts +8 -0
  399. package/dist/i18n/generated-english/Resizable/createResizable.generated.d.ts.map +1 -0
  400. package/dist/i18n/generated-english/Resizable/createResizable.generated.js +13 -0
  401. package/dist/i18n/generated-english/Table/plugins/rowExpansion/useTableRowExpansion.generated.d.ts.map +1 -1
  402. package/dist/i18n/generated-english/Table/plugins/rowExpansion/useTableRowExpansion.generated.js +3 -1
  403. package/dist/i18n/generated-english/Table/plugins/tree/useTableTreeData.generated.d.ts.map +1 -1
  404. package/dist/i18n/generated-english/Table/plugins/tree/useTableTreeData.generated.js +3 -1
  405. package/dist/i18n/generated-english/TimeInput/TimeWheels.generated.d.ts +8 -0
  406. package/dist/i18n/generated-english/TimeInput/TimeWheels.generated.d.ts.map +1 -0
  407. package/dist/i18n/generated-english/TimeInput/TimeWheels.generated.js +17 -0
  408. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  409. package/dist/i18n/generated-locales/en.generated.js +37 -0
  410. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  411. package/dist/i18n/generated-locales/pseudo.generated.js +37 -0
  412. package/dist/index.d.ts +1 -0
  413. package/dist/index.d.ts.map +1 -1
  414. package/dist/index.js +4 -0
  415. package/dist/internal/indicatorPress.stylex.d.ts +20 -0
  416. package/dist/internal/indicatorPress.stylex.d.ts.map +1 -0
  417. package/dist/internal/indicatorPress.stylex.js +26 -0
  418. package/dist/internal/selectable-card.d.ts +21 -0
  419. package/dist/internal/selectable-card.d.ts.map +1 -0
  420. package/dist/internal/selectable-card.js +20 -0
  421. package/dist/internal/sheetDraft.d.ts +2 -2
  422. package/dist/internal/sheetDraft.js +2 -2
  423. package/dist/keyboard/index.d.ts +17 -0
  424. package/dist/keyboard/index.d.ts.map +1 -0
  425. package/dist/keyboard/index.js +19 -0
  426. package/dist/keyboard/keyboardHeight.d.ts +149 -0
  427. package/dist/keyboard/keyboardHeight.d.ts.map +1 -0
  428. package/dist/keyboard/keyboardHeight.js +432 -0
  429. package/dist/keyboard/keyboardLayoutGuide.d.ts +59 -0
  430. package/dist/keyboard/keyboardLayoutGuide.d.ts.map +1 -0
  431. package/dist/keyboard/keyboardLayoutGuide.js +207 -0
  432. package/dist/keyboard/keyboardModel.d.ts +93 -0
  433. package/dist/keyboard/keyboardModel.d.ts.map +1 -0
  434. package/dist/keyboard/keyboardModel.js +220 -0
  435. package/dist/keyboard/rideKeyboard.d.ts +42 -0
  436. package/dist/keyboard/rideKeyboard.d.ts.map +1 -0
  437. package/dist/keyboard/rideKeyboard.js +77 -0
  438. package/dist/keyboard/useMobileKeyboard.d.ts +61 -0
  439. package/dist/keyboard/useMobileKeyboard.d.ts.map +1 -0
  440. package/dist/keyboard/useMobileKeyboard.js +699 -0
  441. package/dist/motion/android/index.d.ts +16 -0
  442. package/dist/motion/android/index.d.ts.map +1 -0
  443. package/dist/motion/android/index.js +18 -0
  444. package/dist/motion/android/keyboard.d.ts +83 -0
  445. package/dist/motion/android/keyboard.d.ts.map +1 -0
  446. package/dist/motion/android/keyboard.js +96 -0
  447. package/dist/motion/animatedLayout.d.ts +8 -0
  448. package/dist/motion/animatedLayout.d.ts.map +1 -1
  449. package/dist/motion/animatedLayout.js +246 -53
  450. package/dist/motion/animator.d.ts +14 -14
  451. package/dist/motion/animator.d.ts.map +1 -1
  452. package/dist/motion/animator.js +45 -26
  453. package/dist/motion/frameBlock.d.ts +14 -0
  454. package/dist/motion/frameBlock.d.ts.map +1 -0
  455. package/dist/motion/frameBlock.js +16 -0
  456. package/dist/motion/progress.d.ts +88 -0
  457. package/dist/motion/progress.d.ts.map +1 -0
  458. package/dist/motion/progress.js +128 -0
  459. package/dist/motion/reducedMotion.d.ts.map +1 -1
  460. package/dist/motion/reducedMotion.js +3 -1
  461. package/dist/motion/uikit/alert.d.ts +41 -0
  462. package/dist/motion/uikit/alert.d.ts.map +1 -0
  463. package/dist/motion/uikit/alert.js +43 -0
  464. package/dist/motion/uikit/datePicker.d.ts +58 -0
  465. package/dist/motion/uikit/datePicker.d.ts.map +1 -0
  466. package/dist/motion/uikit/datePicker.js +60 -0
  467. package/dist/motion/uikit/index.d.ts +6 -4
  468. package/dist/motion/uikit/index.d.ts.map +1 -1
  469. package/dist/motion/uikit/index.js +6 -4
  470. package/dist/motion/uikit/picker.d.ts +96 -0
  471. package/dist/motion/uikit/picker.d.ts.map +1 -0
  472. package/dist/motion/uikit/picker.js +117 -0
  473. package/dist/privateAttributes/pressGroupItem.stylex.d.ts +22 -0
  474. package/dist/privateAttributes/pressGroupItem.stylex.d.ts.map +1 -0
  475. package/dist/privateAttributes/pressGroupItem.stylex.js +36 -0
  476. package/dist/privateAttributes/reducedMotion.stylex.d.ts +23 -0
  477. package/dist/privateAttributes/reducedMotion.stylex.d.ts.map +1 -0
  478. package/dist/privateAttributes/reducedMotion.stylex.js +40 -0
  479. package/dist/theme/Theme.d.ts.map +1 -1
  480. package/dist/theme/Theme.js +29 -4
  481. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  482. package/dist/theme/generateThemeRules.js +14 -13
  483. package/dist/theme/motionKnobs.d.ts +4 -3
  484. package/dist/theme/motionKnobs.d.ts.map +1 -1
  485. package/dist/theme/motionKnobs.js +3 -2
  486. package/dist/theme/themeMotion.d.ts +6 -0
  487. package/dist/theme/themeMotion.d.ts.map +1 -1
  488. package/dist/theme/themeMotion.js +15 -2
  489. package/dist/theme/tokens.stylex.d.ts +3 -0
  490. package/dist/theme/tokens.stylex.d.ts.map +1 -1
  491. package/dist/theme/tokens.stylex.js +4 -1
  492. package/dist/utils/dateParser.d.ts.map +1 -1
  493. package/dist/utils/dateParser.js +12 -0
  494. package/dist/utils/disabledInteraction.d.ts +10 -2
  495. package/dist/utils/disabledInteraction.d.ts.map +1 -1
  496. package/dist/utils/disabledInteraction.js +16 -2
  497. package/dist/utils/focusReturn.d.ts +22 -25
  498. package/dist/utils/focusReturn.d.ts.map +1 -1
  499. package/dist/utils/focusReturn.js +36 -29
  500. package/dist/utils/index.d.ts +1 -1
  501. package/dist/utils/index.d.ts.map +1 -1
  502. package/dist/utils/index.js +1 -1
  503. package/dist/utils/interactionModality.d.ts.map +1 -1
  504. package/dist/utils/interactionModality.js +4 -0
  505. package/dist/utils/interactionOverlay.stylex.d.ts +6 -4
  506. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  507. package/dist/utils/interactionOverlay.stylex.js +6 -4
  508. package/dist/utils/isFocusDetached.d.ts +27 -0
  509. package/dist/utils/isFocusDetached.d.ts.map +1 -0
  510. package/dist/utils/isFocusDetached.js +32 -0
  511. package/dist/utils/layoutViewport.d.ts +25 -0
  512. package/dist/utils/layoutViewport.d.ts.map +1 -0
  513. package/dist/utils/layoutViewport.js +102 -0
  514. package/dist/utils/plainDate.d.ts +31 -0
  515. package/dist/utils/plainDate.d.ts.map +1 -1
  516. package/dist/utils/plainDate.js +68 -4
  517. package/dist/utils/pressFeedback.d.ts +6 -0
  518. package/dist/utils/pressFeedback.d.ts.map +1 -1
  519. package/dist/utils/pressFeedback.js +97 -18
  520. package/dist/utils/pressGesture.d.ts +4 -2
  521. package/dist/utils/pressGesture.d.ts.map +1 -1
  522. package/dist/utils/pressGesture.js +3 -1
  523. package/dist/utils/selectionLock.d.ts +10 -1
  524. package/dist/utils/selectionLock.d.ts.map +1 -1
  525. package/dist/utils/selectionLock.js +31 -5
  526. package/dist/utils/sharedMutationObserver.d.ts +2 -1
  527. package/dist/utils/sharedMutationObserver.d.ts.map +1 -1
  528. package/dist/utils/sharedMutationObserver.js +2 -1
  529. package/dist/utils/timeParser.d.ts +2 -1
  530. package/dist/utils/timeParser.d.ts.map +1 -1
  531. package/dist/utils/timeParser.js +29 -3
  532. package/dist/utils/triggerFocus.d.ts +36 -0
  533. package/dist/utils/triggerFocus.d.ts.map +1 -0
  534. package/dist/utils/triggerFocus.js +65 -0
  535. package/locales/en.json +148 -0
  536. package/locales/pseudo.json +111 -0
  537. package/package.json +14 -9
  538. package/src/AlertDialog/AlertDialog.doc.mjs +2 -2
  539. package/src/AlertDialog/AlertDialog.tsx +46 -5
  540. package/src/AppShell/AppShell.tsx +13 -4
  541. package/src/BottomSheet/BottomSheet.doc.mjs +1 -1
  542. package/src/BottomSheet/BottomSheet.tsx +1 -0
  543. package/src/BottomSheet/BottomSheetPanel.tsx +80 -16
  544. package/src/BottomSheet/BottomSheetSwitcher.doc.mjs +5 -0
  545. package/src/BottomSheet/BottomSheetSwitcher.tsx +5 -0
  546. package/src/BottomSheet/bottomSheetStack.ts +1 -1
  547. package/src/BottomSheet/useSheetGestures.ts +16 -1
  548. package/src/Button/Button.tsx +26 -4
  549. package/src/Calendar/Calendar.tsx +40 -32
  550. package/src/Calendar/getWeekdayHeaderNames.ts +88 -0
  551. package/src/Calendar/hooks/useCalendarDays.ts +5 -10
  552. package/src/Calendar/{standaloneShortWeekdayNames.generated.ts → weekdayHeaderNames.generated.ts} +14 -14
  553. package/src/Carousel/Carousel.tsx +1 -0
  554. package/src/Chat/ChatComposerInput.tsx +4 -7
  555. package/src/Chat/ChatMessageList.tsx +2 -1
  556. package/src/Chat/useChatDictation.ts +1 -0
  557. package/src/Chat/useChatNewMessages.ts +1 -1
  558. package/src/Chat/useChatStreamScroll.ts +2 -0
  559. package/src/Chat/useSpeechRecognition.ts +2 -0
  560. package/src/Chat/useTriggerMenu.tsx +1 -1
  561. package/src/CheckboxInput/CheckboxInput.doc.mjs +18 -0
  562. package/src/CheckboxInput/CheckboxInput.tsx +38 -15
  563. package/src/CheckboxList/CheckboxList.doc.mjs +14 -0
  564. package/src/CheckboxList/CheckboxList.tsx +43 -2
  565. package/src/CheckboxList/CheckboxListContext.tsx +9 -1
  566. package/src/CheckboxList/CheckboxListItem.tsx +23 -2
  567. package/src/CheckboxList/requiredGroup.ts +77 -0
  568. package/src/CodeBlock/CodeBlock.doc.mjs +9 -1
  569. package/src/CodeBlock/CodeBlock.tsx +41 -4
  570. package/src/CommandPalette/CommandPalette.tsx +1 -0
  571. package/src/CommandPalette/CommandPaletteItem.tsx +1 -0
  572. package/src/ComplexSelector/ComplexSelector.tsx +20 -5
  573. package/src/ContextMenu/ContextMenu.tsx +2 -2
  574. package/src/DateInput/MonthScroller.tsx +8 -2
  575. package/src/DateInput/PickerWheel.tsx +796 -0
  576. package/src/DateInput/TouchDateField.tsx +6 -32
  577. package/src/DateInput/Wheel.tsx +188 -171
  578. package/src/DateInput/datePickerTouch.ts +15 -0
  579. package/src/DateInput/useOwnScrollGesture.ts +25 -3
  580. package/src/DateInput/usePointerDragScroll.ts +1 -0
  581. package/src/DateInput/useScrollSettle.ts +2 -0
  582. package/src/DateInput/useWheelListbox.ts +112 -0
  583. package/src/DateInput/wheelOptions.ts +184 -0
  584. package/src/DateInput/wheelPhysics.ts +406 -0
  585. package/src/DateInput/wheelStrip.ts +341 -0
  586. package/src/DateTimeInput/TouchDateTimeField.tsx +100 -189
  587. package/src/Dialog/Dialog.tsx +12 -32
  588. package/src/Drawer/useDrawerDialogPresence.ts +2 -0
  589. package/src/DropdownMenu/useMenuOverflow.ts +3 -0
  590. package/src/Field/Field.tsx +2 -2
  591. package/src/FieldStatus/useFieldStatusAnnouncement.ts +1 -0
  592. package/src/FormLayout/FormLayout.doc.mjs +181 -46
  593. package/src/FormLayout/FormLayout.tsx +5 -1
  594. package/src/HoverCard/HoverCard.doc.mjs +10 -8
  595. package/src/HoverCard/HoverCard.tsx +58 -6
  596. package/src/HoverCard/useHoverCard.doc.mjs +178 -36
  597. package/src/HoverCard/useHoverCard.tsx +55 -55
  598. package/src/Icon/Icon.doc.mjs +51 -10
  599. package/src/Icon/Icon.tsx +31 -8
  600. package/src/IconButton/IconButton.doc.mjs +141 -21
  601. package/src/InfoTip/InfoTip.tsx +72 -16
  602. package/src/Item/useSwipeAction.ts +2 -0
  603. package/src/Layer/modalOutlet.ts +2 -0
  604. package/src/Layer/outsidePress.ts +1 -0
  605. package/src/Layer/useLayer.tsx +3 -1
  606. package/src/Layer/useLayerDismissal.ts +2 -0
  607. package/src/Layer/useTouchTrigger.ts +19 -6
  608. package/src/Layout/index.ts +1 -1
  609. package/src/Layout/layoutReset.ts +1 -1
  610. package/src/Layout/overlayPaddingReset.stylex.ts +73 -0
  611. package/src/Layout/padding.stylex.ts +9 -133
  612. package/src/Layout/paddingStyles.stylex.ts +87 -0
  613. package/src/Lightbox/Lightbox.tsx +20 -1
  614. package/src/Lightbox/useLightbox.doc.mjs +167 -0
  615. package/src/MobileNav/MobileNav.tsx +10 -31
  616. package/src/MultiSelector/MultiSelector.tsx +2 -7
  617. package/src/NumberInput/NumberInput.tsx +2 -7
  618. package/src/Outline/useOutlineFromDOM.ts +2 -0
  619. package/src/Outline/useScrollSpy.ts +2 -0
  620. package/src/OverflowList/OverflowList.tsx +2 -0
  621. package/src/Overlay/Overlay.tsx +7 -2
  622. package/src/Popover/Popover.tsx +4 -0
  623. package/src/Popover/usePopover.tsx +2 -2
  624. package/src/PowerSearch/PowerSearch.doc.mjs +60 -8
  625. package/src/PowerSearch/PowerSearch.tsx +622 -157
  626. package/src/PowerSearch/PowerSearchBottomSheet.tsx +2700 -0
  627. package/src/PowerSearch/PowerSearchEditPopover.tsx +65 -9
  628. package/src/PowerSearch/PowerSearchFilterEditor.tsx +2 -0
  629. package/src/PowerSearch/PowerSearchToken.tsx +2 -0
  630. package/src/PowerSearch/PowerSearchValueEditor.tsx +340 -59
  631. package/src/PowerSearch/formatFilterValue.ts +49 -27
  632. package/src/PowerSearch/formatTokenValue.ts +220 -0
  633. package/src/PowerSearch/index.ts +5 -1
  634. package/src/PowerSearch/powerSearchDateZone.ts +95 -0
  635. package/src/PowerSearch/powerSearchSheetUtils.ts +224 -0
  636. package/src/PowerSearch/types.ts +8 -1
  637. package/src/ProgressBar/ProgressBarTouch.ts +2 -0
  638. package/src/RadioList/RadioList.tsx +3 -2
  639. package/src/RadioList/RadioListItem.tsx +5 -3
  640. package/src/Resizable/Resizable.doc.mjs +5 -4
  641. package/src/Resizable/ResizeHandle.tsx +187 -135
  642. package/src/Resizable/createResizable.ts +1046 -0
  643. package/src/Resizable/separatorAttributes.ts +73 -0
  644. package/src/Resizable/useResizable.ts +292 -623
  645. package/src/SegmentedControl/useSegmentedSelectionMotion.ts +6 -3
  646. package/src/SelectableCard/SelectableCard.tsx +39 -10
  647. package/src/SelectableCard/selectableCardInput.ts +30 -0
  648. package/src/Selector/Selector.tsx +7 -19
  649. package/src/SideNav/SideNav.tsx +41 -5
  650. package/src/Slider/Slider.tsx +20 -11
  651. package/src/Slider/sliderTouchController.ts +2 -2
  652. package/src/Spinner/Spinner.tsx +77 -63
  653. package/src/Stepper/Stepper.tsx +10 -27
  654. package/src/Switch/Switch.tsx +2 -6
  655. package/src/Switch/useSwitchTouch.ts +4 -4
  656. package/src/Table/BaseTable.tsx +46 -12
  657. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +2 -1
  658. package/src/Table/plugins/filtering/useTableFiltering.tsx +1 -0
  659. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +31 -7
  660. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +2 -0
  661. package/src/Table/plugins/tree/useTableTreeData.tsx +43 -20
  662. package/src/Table/useTableRowExpansion.doc.mjs +9 -0
  663. package/src/Table/useTableTreeData.doc.mjs +15 -3
  664. package/src/TextArea/TextArea.tsx +2 -7
  665. package/src/TextInput/TextInput.tsx +13 -17
  666. package/src/TimeInput/TimeInput.tsx +2 -0
  667. package/src/TimeInput/TimeWheels.tsx +218 -0
  668. package/src/TimeInput/TouchTimeField.tsx +93 -155
  669. package/src/TimeInput/timeWheelRules.ts +352 -0
  670. package/src/Timer/Timer.tsx +1 -0
  671. package/src/Timestamp/Timestamp.tsx +1 -1
  672. package/src/Timestamp/formatInstant.ts +1 -33
  673. package/src/Toast/Toast.doc.mjs +4 -3
  674. package/src/Toast/Toast.tsx +52 -32
  675. package/src/Toast/ToastViewport.tsx +123 -35
  676. package/src/Toast/types.ts +9 -3
  677. package/src/Toast/useToast.tsx +1 -0
  678. package/src/Tokenizer/Tokenizer.doc.mjs +10 -10
  679. package/src/Tokenizer/Tokenizer.tsx +61 -62
  680. package/src/Tokenizer/TokenizerBottomSheet.tsx +17 -23
  681. package/src/Tokenizer/index.ts +1 -0
  682. package/src/Tooltip/Tooltip.tsx +6 -42
  683. package/src/Tooltip/useTooltip.doc.mjs +24 -0
  684. package/src/Tooltip/useTooltip.tsx +243 -134
  685. package/src/Typeahead/BaseTypeahead.tsx +27 -17
  686. package/src/Typeahead/TypeaheadItem.doc.mjs +6 -3
  687. package/src/Typeahead/TypeaheadItem.tsx +2 -1
  688. package/src/animator/createAnimator.doc.mjs +153 -0
  689. package/src/animator/createAnimator.ts +324 -0
  690. package/src/gestures/GestureHost.ts +6 -5
  691. package/src/gestures/PressTracker.ts +4 -3
  692. package/src/gestures/README.md +10 -4
  693. package/src/hooks/ModalAnnounceProvider.tsx +1 -0
  694. package/src/hooks/actionGroupTracker.ts +25 -9
  695. package/src/hooks/index.ts +2 -0
  696. package/src/hooks/longPressDetector.ts +273 -0
  697. package/src/hooks/pressGroupContext.ts +21 -0
  698. package/src/hooks/rootScrollStyles.ts +247 -0
  699. package/src/hooks/scrollLockTouchGuard.ts +149 -0
  700. package/src/hooks/scrollbarGutter.ts +41 -26
  701. package/src/hooks/useActionGroupTracking.ts +224 -0
  702. package/src/hooks/useAnimator.doc.mjs +109 -0
  703. package/src/hooks/useAnimator.ts +67 -0
  704. package/src/hooks/useAnnounceRenderedText.ts +1 -0
  705. package/src/hooks/useAttachment.ts +1 -1
  706. package/src/hooks/useAutoMediaMode.ts +1 -0
  707. package/src/hooks/useBusyAnnouncement.ts +2 -0
  708. package/src/hooks/useDevWarning.ts +2 -0
  709. package/src/hooks/useFocusTrap.ts +2 -0
  710. package/src/hooks/useGridFocus.doc.mjs +6 -6
  711. package/src/hooks/useGridFocus.ts +10 -7
  712. package/src/hooks/useHotkeys.ts +2 -0
  713. package/src/hooks/useImageMode.ts +2 -0
  714. package/src/hooks/useInputStatusIcon.tsx +3 -2
  715. package/src/hooks/useKeyboardHint.tsx +1 -1
  716. package/src/hooks/useLongPress.doc.mjs +2 -2
  717. package/src/hooks/useLongPress.ts +32 -122
  718. package/src/hooks/useMenuHover.ts +1 -0
  719. package/src/hooks/useMenuPress.ts +2 -0
  720. package/src/hooks/useOverflow.ts +2 -1
  721. package/src/hooks/usePressFeedback.ts +1 -0
  722. package/src/hooks/useResolvedRequired.ts +3 -0
  723. package/src/hooks/useScrollLock.doc.mjs +51 -12
  724. package/src/hooks/useScrollLock.ts +53 -60
  725. package/src/hooks/useScrollableArea.ts +4 -0
  726. package/src/hooks/useStreamingText.ts +2 -0
  727. package/src/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.ts +46 -0
  728. package/src/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.ts +6 -0
  729. package/src/i18n/generated-english/PowerSearch/formatTokenValue.generated.ts +15 -0
  730. package/src/i18n/generated-english/Resizable/createResizable.generated.ts +14 -0
  731. package/src/i18n/generated-english/Table/plugins/rowExpansion/useTableRowExpansion.generated.ts +3 -1
  732. package/src/i18n/generated-english/Table/plugins/tree/useTableTreeData.generated.ts +3 -1
  733. package/src/i18n/generated-english/TimeInput/TimeWheels.generated.ts +18 -0
  734. package/src/i18n/generated-locales/en.generated.ts +47 -0
  735. package/src/i18n/generated-locales/pseudo.generated.ts +48 -0
  736. package/src/index.ts +13 -0
  737. package/src/internal/indicatorPress.stylex.ts +24 -0
  738. package/src/internal/selectable-card.ts +21 -0
  739. package/src/internal/sheetDraft.ts +2 -2
  740. package/src/keyboard/README.md +197 -0
  741. package/src/keyboard/index.ts +48 -0
  742. package/src/keyboard/keyboardHeight.ts +543 -0
  743. package/src/keyboard/keyboardLayoutGuide.ts +266 -0
  744. package/src/keyboard/keyboardModel.ts +301 -0
  745. package/src/keyboard/rideKeyboard.ts +100 -0
  746. package/src/keyboard/useMobileKeyboard.ts +866 -0
  747. package/src/motion/MEASUREMENTS.md +28 -0
  748. package/src/motion/README.md +12 -5
  749. package/src/motion/android/index.ts +18 -0
  750. package/src/motion/android/keyboard.ts +96 -0
  751. package/src/motion/animatedLayout.ts +323 -60
  752. package/src/motion/animator.ts +66 -37
  753. package/src/motion/frameBlock.ts +16 -0
  754. package/src/motion/progress.ts +155 -0
  755. package/src/motion/reducedMotion.ts +3 -1
  756. package/src/motion/uikit/alert.ts +43 -0
  757. package/src/motion/uikit/datePicker.ts +60 -0
  758. package/src/motion/uikit/index.ts +6 -4
  759. package/src/motion/uikit/picker.ts +116 -0
  760. package/src/privateAttributes/pressGroupItem.stylex.ts +44 -0
  761. package/src/privateAttributes/reducedMotion.stylex.ts +45 -0
  762. package/src/theme/Theme.tsx +37 -3
  763. package/src/theme/generateThemeRules.ts +14 -12
  764. package/src/theme/motionKnobs.ts +4 -3
  765. package/src/theme/themeMotion.ts +17 -2
  766. package/src/theme/tokens.stylex.ts +2 -0
  767. package/src/utils/dateParser.ts +16 -0
  768. package/src/utils/disabledInteraction.ts +23 -2
  769. package/src/utils/focusReturn.ts +38 -31
  770. package/src/utils/index.ts +1 -1
  771. package/src/utils/interactionModality.ts +4 -0
  772. package/src/utils/interactionOverlay.stylex.ts +6 -4
  773. package/src/utils/isFocusDetached.ts +34 -0
  774. package/src/utils/layoutViewport.ts +104 -0
  775. package/src/utils/plainDate.ts +80 -4
  776. package/src/utils/pressFeedback.ts +126 -30
  777. package/src/utils/pressGesture.ts +4 -2
  778. package/src/utils/selectionLock.ts +40 -6
  779. package/src/utils/sharedMutationObserver.ts +2 -1
  780. package/src/utils/timeParser.ts +40 -3
  781. package/src/utils/triggerFocus.ts +80 -0
  782. package/dist/BottomSheet/useMobileKeyboard.d.ts +0 -21
  783. package/dist/BottomSheet/useMobileKeyboard.d.ts.map +0 -1
  784. package/dist/BottomSheet/useMobileKeyboard.js +0 -407
  785. package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts +0 -14
  786. package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts.map +0 -1
  787. package/dist/Calendar/getStandaloneShortWeekdayNames.js +0 -26
  788. package/dist/Calendar/standaloneShortWeekdayNames.generated.d.ts.map +0 -1
  789. package/dist/Layer/usePressPin.d.ts +0 -93
  790. package/dist/Layer/usePressPin.d.ts.map +0 -1
  791. package/dist/Layer/usePressPin.js +0 -363
  792. package/dist/internal/touch-sheet.d.ts +0 -21
  793. package/dist/internal/touch-sheet.d.ts.map +0 -1
  794. package/dist/internal/touch-sheet.js +0 -19
  795. package/src/BottomSheet/useMobileKeyboard.ts +0 -538
  796. package/src/Calendar/getStandaloneShortWeekdayNames.ts +0 -38
  797. package/src/Layer/usePressPin.ts +0 -510
  798. package/src/internal/touch-sheet.ts +0 -21
@@ -21,6 +21,7 @@ import {
21
21
  useMemo,
22
22
  useRef,
23
23
  useState,
24
+ useSyncExternalStore,
24
25
  } from 'react';
25
26
  import type {ReactNode} from 'react';
26
27
  import {createPortal} from 'react-dom';
@@ -28,6 +29,11 @@ import * as stylex from '@stylexjs/stylex';
28
29
  import {spacingVars, durationVars, easeVars} from '../theme/tokens.stylex';
29
30
  import {mergeProps} from '../utils';
30
31
  import {getNodeText} from '../utils/getNodeText';
32
+ import {
33
+ moveFocusLeftBehind,
34
+ noteFocusWithin,
35
+ type FocusWithin,
36
+ } from '../utils/focusReturn';
31
37
  import {INTERACTIVE_SELECTORS} from '../hooks/useClickableContainer';
32
38
  import {useAnnounce} from '../hooks/useAnnounce';
33
39
  import {layerTextReset} from '../Layer/layerTextReset.stylex';
@@ -224,6 +230,8 @@ interface ToastRowProps {
224
230
  isReversed: boolean;
225
231
  onExited: (id: string) => void;
226
232
  onDismiss: (id: string, reason: ToastDismissReason) => void;
233
+ /** Whether the card carries its own live region (see ToastViewport). */
234
+ isLiveRegion: boolean;
227
235
  }
228
236
 
229
237
  /**
@@ -246,6 +254,7 @@ function ToastRow({
246
254
  isReversed,
247
255
  onExited,
248
256
  onDismiss,
257
+ isLiveRegion,
249
258
  }: ToastRowProps) {
250
259
  const o = entry.options;
251
260
  const type = o.type ?? 'info';
@@ -296,6 +305,8 @@ function ToastRow({
296
305
  gestureDirection={isReversed ? -1 : 1}
297
306
  onDismiss={reason => onDismiss(entry.id, reason)}
298
307
  renderContent={o.renderContent}
308
+ timerKey={entry.id}
309
+ isLiveRegion={isLiveRegion}
299
310
  />
300
311
  </div>
301
312
  </div>
@@ -303,6 +314,9 @@ function ToastRow({
303
314
  }
304
315
  ToastRow.displayName = 'ToastRow';
305
316
 
317
+ const hasActiveModalOutlet = (): boolean => getActiveModalOutlet() != null;
318
+ const hasNoModalOutlet = (): boolean => false;
319
+
306
320
  /**
307
321
  * Container that renders and manages toast notifications. Place at the root
308
322
  * of your app to enable useToast(). Toasts stack with enter/exit
@@ -363,6 +377,13 @@ export function ToastViewport({
363
377
  // The next toast id that should receive focus once the dismissed toast has
364
378
  // unmounted, or 'restore' to fall back to the previously-focused element.
365
379
  const pendingFocusRef = useRef<string | 'restore' | null>(null);
380
+ // The id of a toast whose overwrite updated a row that held focus. If the
381
+ // update removed the focused control, the commit hands focus off.
382
+ const overwriteFocusRef = useRef<{id: string; note: FocusWithin} | null>(
383
+ null,
384
+ );
385
+ // Where focus was inside a toast whose dismissal hands focus off.
386
+ const dismissFocusNoteRef = useRef<FocusWithin | null>(null);
366
387
 
367
388
  // Collect a focusable control within a toast node, if any.
368
389
  // Reuses the canonical INTERACTIVE_SELECTORS list (native controls plus
@@ -392,13 +413,9 @@ export function ToastViewport({
392
413
  [],
393
414
  );
394
415
 
395
- // Announce toasts through the persistent singleton live regions. Each
396
- // <Toast> also renders its own role="status"/"alert" region, but that region
397
- // is "born with content" — mounted together with its text — which many
398
- // screen readers do not announce (see useAnnounce.ts); the singleton regions
399
- // are mounted empty and only mutated afterwards, so they are what actually
400
- // guarantees the announcement (the per-toast markup is kept for browse-mode
401
- // discoverability). The announcement happens in addToast — the imperative
416
+ // Announce toasts through the persistent singleton live regions. They are
417
+ // mounted empty and only mutated afterwards, which screen readers announce
418
+ // (see useAnnounce.ts). The announcement happens in addToast — the imperative
402
419
  // dispatch path invoked once per useToast() call from an event handler,
403
420
  // never from render — so each toast is announced exactly once by
404
421
  // construction, independent of the React render lifecycle (StrictMode
@@ -406,6 +423,16 @@ export function ToastViewport({
406
423
  // re-renders never re-announce). It is client-only (addToast never runs
407
424
  // during SSR), so it is SSR-safe.
408
425
  const announce = useAnnounce();
426
+ // An open native modal hides the body-level channel above from assistive
427
+ // technology, so while the viewport is hosted in one, each card announces
428
+ // itself through its own live region instead. Outside a modal the cards
429
+ // carry none, so a card updated in place is announced once.
430
+ const hasModalOutlet = useSyncExternalStore(
431
+ subscribeModalOutlets,
432
+ hasActiveModalOutlet,
433
+ hasNoModalOutlet,
434
+ );
435
+ const isModalHosted = isTopLayer && hasModalOutlet;
409
436
 
410
437
  const addToast = useCallback(
411
438
  (entry: ToastEntry) => {
@@ -441,9 +468,29 @@ export function ToastViewport({
441
468
  if (overwritten && renderedToastsRef.current.includes(overwritten)) {
442
469
  replacedRef.current.set(overwritten.id, overwritten);
443
470
  }
471
+ // An overwrite of a toast that is not leaving keeps its row, so the card
472
+ // updates in place and focus inside it stays. A leaving namesake
473
+ // is replaced by a new row, which enters again.
474
+ const keepsRow =
475
+ overwritten != null && !exitingIdsRef.current.has(overwritten.id);
476
+ const placed: ToastEntry = keepsRow
477
+ ? {...entry, rowKey: overwritten.rowKey ?? overwritten.id}
478
+ : entry;
479
+ if (keepsRow) {
480
+ // If the update removes the focused control, the commit hands focus
481
+ // off as a dismissal does.
482
+ const note = noteFocusWithin(
483
+ viewportRef.current?.querySelector<HTMLElement>(
484
+ `[data-toast-id="${overwritten.id}"]`,
485
+ ),
486
+ );
487
+ if (note != null) {
488
+ overwriteFocusRef.current = {id: placed.id, note};
489
+ }
490
+ }
444
491
  const projected = overwritten
445
- ? committed.map(t => (t === overwritten ? entry : t))
446
- : [...committed, entry];
492
+ ? committed.map(t => (t === overwritten ? placed : t))
493
+ : [...committed, placed];
447
494
  // `maxVisible={0}` shows every toast (FR7): nothing leaves the window.
448
495
  const firstVisible = maxVisible > 0 ? projected.length - maxVisible : 0;
449
496
  const cutIds = new Set(
@@ -470,7 +517,7 @@ export function ToastViewport({
470
517
  }
471
518
  }
472
519
  }
473
- pending.set(entry.id, entry);
520
+ pending.set(entry.id, placed);
474
521
  // An overwrite swaps a new entry, with a new id, into the replaced
475
522
  // toast's place, so the old row leaves the DOM without ever being
476
523
  // dismissed. Its settled id is dropped by the prune below, which covers
@@ -482,8 +529,8 @@ export function ToastViewport({
482
529
  // overwrite into an append. An ignored collision already returned.
483
530
  const kept = prev.filter(t => !cutIds.has(t.id));
484
531
  return overwritten && kept.includes(overwritten)
485
- ? kept.map(t => (t === overwritten ? entry : t))
486
- : [...kept, entry];
532
+ ? kept.map(t => (t === overwritten ? placed : t))
533
+ : [...kept, placed];
487
534
  });
488
535
  },
489
536
  [announce, maxVisible],
@@ -512,14 +559,23 @@ export function ToastViewport({
512
559
  // focused before the user entered the viewport) rather than <body>.
513
560
  const el = viewportRef.current;
514
561
  const active = document.activeElement;
515
- const dismissedNode =
516
- el?.querySelector<HTMLElement>(`[data-toast-id="${id}"]`) ?? null;
562
+ // A toast an overwrite replaced in place no longer owns its row: the
563
+ // replacement does, so dismissing the replaced toast leaves the row, and
564
+ // focus in it, to the replacement.
565
+ const rowKey = entry.rowKey ?? entry.id;
566
+ const isReplacedInPlace =
567
+ !toastsRef.current.some(t => t.id === id) &&
568
+ toastsRef.current.some(t => t.rowKey === rowKey);
569
+ const dismissedNode = isReplacedInPlace
570
+ ? null
571
+ : (el?.querySelector<HTMLElement>(`[data-toast-id="${id}"]`) ?? null);
517
572
  if (
518
573
  dismissedNode &&
519
574
  active instanceof Node &&
520
575
  dismissedNode.contains(active)
521
576
  ) {
522
577
  focusHandoffIdRef.current = id;
578
+ dismissFocusNoteRef.current = noteFocusWithin(dismissedNode);
523
579
  // Pick the toast to receive focus while the DOM is still intact: the
524
580
  // nearest one after it, then before it, that shows once it is gone
525
581
  // (FR10), else restore. The list may already run ahead of the render
@@ -587,6 +643,41 @@ export function ToastViewport({
587
643
  setToasts(prev => prev.filter(t => t.id !== id));
588
644
  }, []);
589
645
 
646
+ // Moves focus to a control in the target toast, else in another toast that
647
+ // shows (newest first), else back to the element focused before focus
648
+ // entered the viewport, so a handoff never drops focus to <body>.
649
+ const handOffFocus = useCallback(
650
+ (note: FocusWithin | null, targetId: string | null) => {
651
+ const el = viewportRef.current;
652
+ const rowFor = (id: string) =>
653
+ el?.querySelector<HTMLElement>(`[data-toast-id="${id}"]`) ?? null;
654
+ const shownIds = toastsRef.current
655
+ .slice(maxVisibleRef.current > 0 ? -maxVisibleRef.current : 0)
656
+ .map(t => t.id)
657
+ .reverse();
658
+ const candidates =
659
+ targetId == null
660
+ ? []
661
+ : [targetId, ...shownIds.filter(id => id !== targetId)];
662
+ let target: HTMLElement | null = null;
663
+ for (const id of candidates) {
664
+ target = getFocusable(rowFor(id));
665
+ if (target != null) {
666
+ break;
667
+ }
668
+ }
669
+ const prev = prevFocusRef.current;
670
+ const isReturning = target == null && prev != null && prev.isConnected;
671
+ if (target == null) {
672
+ target = isReturning ? prev : el;
673
+ }
674
+ if (moveFocusLeftBehind(note, target) && isReturning) {
675
+ prevFocusRef.current = null;
676
+ }
677
+ },
678
+ [getFocusable],
679
+ );
680
+
590
681
  // After a dismissed toast unmounts, hand focus off so it never falls to
591
682
  // <body>. Runs in a layout effect once the toast list no longer contains
592
683
  // the dismissed toast.
@@ -602,27 +693,21 @@ export function ToastViewport({
602
693
  }
603
694
  focusHandoffIdRef.current = null;
604
695
  pendingFocusRef.current = null;
605
- const el = viewportRef.current;
606
- if (target !== 'restore' && el) {
607
- const nextNode = el.querySelector<HTMLElement>(
608
- `[data-toast-id="${target}"]`,
609
- );
610
- const focusable = getFocusable(nextNode) ?? nextNode;
611
- if (focusable) {
612
- focusable.focus();
613
- return;
614
- }
615
- }
616
- // No remaining toast to receive focus — restore the previously-focused
617
- // element if it's still connected, else fall back to the container.
618
- const prev = prevFocusRef.current;
619
- prevFocusRef.current = null;
620
- if (prev && prev.isConnected) {
621
- prev.focus();
622
- } else if (el) {
623
- el.focus();
696
+ const note = dismissFocusNoteRef.current;
697
+ dismissFocusNoteRef.current = null;
698
+ handOffFocus(note, target === 'restore' ? null : target);
699
+ }, [toasts, handOffFocus]);
700
+
701
+ // After an overwrite updated a row that held focus: focus stays on the same
702
+ // control, or, if the update removed it, moves as a dismissal hands it off.
703
+ useLayoutEffect(() => {
704
+ const overwrite = overwriteFocusRef.current;
705
+ if (overwrite == null) {
706
+ return;
624
707
  }
625
- }, [toasts, getFocusable]);
708
+ overwriteFocusRef.current = null;
709
+ handOffFocus(overwrite.note, overwrite.id);
710
+ }, [toasts, handOffFocus]);
626
711
 
627
712
  const findByUniqueID = useCallback((uid: string) => {
628
713
  return toastsRef.current.find(t => t.options.uniqueID === uid);
@@ -672,6 +757,8 @@ export function ToastViewport({
672
757
  };
673
758
  }, [isTopLayer]);
674
759
 
760
+ // Syncs the host's place with the modal outlet registry. The host moves into
761
+ // the latest open modal, and back when that modal closes.
675
762
  useLayoutEffect(() => {
676
763
  if (!isTopLayer || host == null) {
677
764
  return;
@@ -830,12 +917,13 @@ export function ToastViewport({
830
917
  <LayerContentBoundary>
831
918
  {visibleToasts.map(entry => (
832
919
  <ToastRow
833
- key={entry.id}
920
+ key={entry.rowKey ?? entry.id}
834
921
  entry={entry}
835
922
  isExiting={exitingIds.has(entry.id)}
836
923
  isReversed={isReversed}
837
924
  onExited={handleExited}
838
925
  onDismiss={removeToast}
926
+ isLiveRegion={isModalHosted}
839
927
  />
840
928
  ))}
841
929
  </LayerContentBoundary>
@@ -38,9 +38,10 @@ export interface ToastOptions {
38
38
  /**
39
39
  * Replaces the content of this toast's card with your own layout.
40
40
  *
41
- * Astryx keeps the card, live-region role and auto-hide behavior, then hands
42
- * the renderer this toast's content, resolved settings and `dismiss`
43
- * callback. The renderer owns every control inside its layout; call
41
+ * Astryx keeps the card and its auto-hide behavior (inside a
42
+ * `ToastViewport` the viewport announces the toast, and while a modal hosts
43
+ * the viewport the card announces itself), then hands the
44
+ * renderer this toast's content, resolved settings and `dismiss` callback. The renderer owns every control inside its layout; call
44
45
  * `dismiss` from the control that should close the toast. Astryx does not
45
46
  * inject a fallback control into custom content.
46
47
  *
@@ -100,4 +101,9 @@ export interface ToastEntry {
100
101
  id: string;
101
102
  options: ToastOptions;
102
103
  createdAt: number;
104
+ /**
105
+ * The row's identity in the stack. A uniqueID overwrite keeps the replaced
106
+ * toast's, so the card updates in place and focus inside it stays.
107
+ */
108
+ rowKey?: string;
103
109
  }
@@ -91,6 +91,7 @@ function getFallbackContext(): ToastContextValue {
91
91
  const FallbackCapture = () => {
92
92
  const ctx = use(ToastContext);
93
93
  const doneRef = useRef(false);
94
+ // Syncs the module-level fallback with the first toast context that mounts.
94
95
  useEffect(() => {
95
96
  if (ctx && !doneRef.current) {
96
97
  doneRef.current = true;
@@ -293,11 +293,11 @@ export const docs = {
293
293
  description: 'Inline styles for the visual control box.',
294
294
  },
295
295
  {
296
- name: 'experimental',
297
- type: "{presentation?: 'popover' | 'bottom-sheet' | 'adaptive'}",
298
- stability: 'experimental',
296
+ name: 'presentation',
297
+ type: "'popover' | 'bottom-sheet' | 'adaptive'",
299
298
  description:
300
- "Experimental options: anything in this object may change or be removed in a patch release, and omitting it keeps the stable behavior. presentation (default 'popover') chooses how the field presents its choices. popover is the inline combobox with its anchored suggestion menu. bottom-sheet replaces it with a trigger showing the selected tokens that opens one tall modal sheet: a search row on top, full-width checkbox rows that keep their place while the sheet is open, a Create row with hasCreate, and a footer pinned in every state with a confirmed Clear all and Save; the sheet edits a draft, so onChange fires once, when Save commits it, and a swipe, scrim or Escape close of a changed draft asks before discarding. adaptive uses the bottom sheet on compact touch screens and the popover otherwise, resolved the same way Selector resolves it. In the sheet presentation the trigger is the control (ref, id, aria-* and data-* reach it; with experimental passed, ref also accepts a Ref<HTMLInputElement | HTMLButtonElement> — an input-only ref still type-checks against that wider type, but with adaptive or bottom-sheet it receives the trigger button at runtime, so type the ref for both elements; TokenizerProps keeps its released ref type and gains only the optional experimental), and renderItem, renderToken, endContent, hasClear, hasEntriesOnFocus, menuWidth, tokenOverflowBehavior and hasAutoFocus have no surface to act on; the field warns once in development when they are passed. For example: <Tokenizer label=\"Tags\" searchSource={tagSource} value={tags} onChange={setTags} hasCreate experimental={{presentation: 'adaptive'}} />.",
299
+ 'How the field presents its choices. adaptive (the default) uses the bottom sheet on compact touch screens and the popover otherwise, resolved the same way Selector resolves it; the server render and the hydrating render are the popover. popover is the inline combobox with its anchored suggestion menu on every device. bottom-sheet replaces it on every device with a trigger showing the selected tokens that opens one tall modal sheet: a search row on top, full-width checkbox rows that keep their place while the sheet is open, a Create row with hasCreate, and a footer pinned in every state with a confirmed Clear all and Save; the sheet edits a draft, so onChange fires once, when Save commits it, and a swipe, scrim or Escape close of a changed draft asks before discarding. In the sheet presentation the trigger is the control: ref, id, aria-* and data-* reach it, and ref receives the trigger button there, so type it Ref<HTMLInputElement | HTMLButtonElement>, which the component accepts (TokenizerProps keeps its released input ref type). renderItem, renderToken, endContent, hasClear, hasEntriesOnFocus, menuWidth, tokenOverflowBehavior and hasAutoFocus have no surface in the sheet, and the field warns once in development when they are passed. Pass presentation="popover" to keep the inline field and those props on every device.',
300
+ default: "'adaptive'",
301
301
  },
302
302
  ],
303
303
  theming: {
@@ -639,11 +639,11 @@ export const docsZh = {
639
639
  description: '可视控件框的内联样式。',
640
640
  },
641
641
  {
642
- name: 'experimental',
643
- type: "{presentation?: 'popover' | 'bottom-sheet' | 'adaptive'}",
644
- stability: 'experimental',
642
+ name: 'presentation',
643
+ type: "'popover' | 'bottom-sheet' | 'adaptive'",
645
644
  description:
646
- "实验性选项:此对象中的任何内容都可能在补丁版本中更改或移除;省略它即保持稳定行为。presentation(默认 'popover')决定字段如何呈现选项:popover 为内联组合框及其锚定建议菜单;bottom-sheet 改为一个显示已选标记的触发按钮,点按后打开一个高的模态底部面板——顶部为搜索行,下方为整行复选框行(面板打开期间位置保持不变),hasCreate 时有「创建」行,底部固定显示需确认的「全部清除」和「保存」;面板编辑的是草稿,onChange 仅在「保存」提交时触发一次,草稿有改动时滑动、点击遮罩或按 Escape 关闭会先询问是否放弃;adaptive 在紧凑触摸屏上使用底部面板,其他情况使用 popover,解析方式与 Selector 相同。在底部面板呈现中,触发按钮即为控件(ref、id、aria-* 和 data-* 都作用于它;传入 experimental 后,ref 也接受 Ref<HTMLInputElement | HTMLButtonElement>——仅为输入框类型的 ref 在这个更宽的类型下仍能通过类型检查,但在 adaptive 或 bottom-sheet 下运行时收到的是触发按钮,因此请为两种元素声明 ref 的类型;TokenizerProps 保留已发布的 ref 类型,仅新增可选的 experimental);renderItem、renderToken、endContent、hasClear、hasEntriesOnFocus、menuWidth、tokenOverflowBehavior 和 hasAutoFocus 没有作用对象,传入时开发模式下会警告一次。例如:<Tokenizer label=\"标签\" searchSource={tagSource} value={tags} onChange={setTags} hasCreate experimental={{presentation: 'adaptive'}} />。",
645
+ '字段如何呈现选项。adaptive(默认)在紧凑触摸屏上使用底部面板,其他情况使用 popover,解析方式与 Selector 相同;服务端渲染和水合期间的渲染均为 popover。popover 在所有设备上为内联组合框及其锚定建议菜单。bottom-sheet 在所有设备上改为一个显示已选标记的触发按钮,点按后打开一个高的模态底部面板——顶部为搜索行,下方为整行复选框行(面板打开期间位置保持不变),hasCreate 时有「创建」行,底部固定显示需确认的「全部清除」和「保存」;面板编辑的是草稿,onChange 仅在「保存」提交时触发一次,草稿有改动时滑动、点击遮罩或按 Escape 关闭会先询问是否放弃。在底部面板呈现中,触发按钮即为控件:ref、id、aria-* 和 data-* 都作用于它,ref 在该呈现中收到的是触发按钮,因此请将其类型声明为组件所接受的 Ref<HTMLInputElement | HTMLButtonElement>(TokenizerProps 保留已发布的输入框 ref 类型)。renderItem、renderToken、endContent、hasClear、hasEntriesOnFocus、menuWidth、tokenOverflowBehavior 和 hasAutoFocus 在底部面板中没有作用对象,传入时开发模式下会警告一次。传入 presentation="popover" 可在所有设备上保留内联字段和这些属性。',
646
+ default: "'adaptive'",
647
647
  },
648
648
  ],
649
649
  theming: {
@@ -844,7 +844,7 @@ export const docsDense = {
844
844
  'Icon at input start, before tokens. Icon name, SVG component, or ReactNode.',
845
845
  endContent: 'Content at input row end. For buttons, counts, controls.',
846
846
  handleRef: 'Imperative handle for focus() and blur() control.',
847
- experimental:
848
- "Experimental; may change in a patch. presentation: 'popover' (default, inline combobox) | 'bottom-sheet' (trigger + one searchable modal sheet of checkbox rows editing a draft that Save commits; onChange fires once, on Save) | 'adaptive' (sheet on compact touch, else popover).",
847
+ presentation:
848
+ "'adaptive' (default: sheet on compact touch, else popover; SSR/hydration render popover) | 'popover' (inline combobox, every device) | 'bottom-sheet' (trigger + one searchable modal sheet of checkbox rows editing a draft that Save commits; onChange fires once, on Save). Sheet: ref reaches the trigger button; renderItem/renderToken/endContent/hasClear/hasEntriesOnFocus/menuWidth/tokenOverflowBehavior/hasAutoFocus inert (dev warning). presentation=\"popover\" keeps them on every device.",
849
849
  },
850
850
  };
@@ -8,8 +8,8 @@
8
8
  * useAdaptivePresentation, and TokenizerBottomSheet (lazy)
9
9
  * @output Exports Tokenizer multi-select typeahead component
10
10
  * @position Composed component; forwards DOM ref and exposes focus control via
11
- * handleRef. The experimental `presentation` option swaps the inline
12
- * combobox for a trigger that opens TokenizerBottomSheet.
11
+ * handleRef. The `presentation` prop swaps the inline combobox for a
12
+ * trigger that opens TokenizerBottomSheet.
13
13
  *
14
14
  * SYNC: When modified, update:
15
15
  * - /packages/core/src/Tokenizer/index.ts
@@ -51,7 +51,10 @@ import {useMergedRefs} from '../hooks/useMergedRefs';
51
51
  import {TokenizerClearAllMessageContext} from './TokenizerClearAllMessageContext';
52
52
  import {TokenizerItemRemovableContext} from './TokenizerItemRemovableContext';
53
53
  import {useBusyAnnouncement} from '../hooks/useBusyAnnouncement';
54
- import {useAdaptivePresentation} from '../hooks/useAdaptivePresentation';
54
+ import {
55
+ type AdaptivePresentation,
56
+ useAdaptivePresentation,
57
+ } from '../hooks/useAdaptivePresentation';
55
58
  import {useIsHydrating} from '../hooks/useIsHydrating';
56
59
  import {VisuallyHidden} from '../VisuallyHidden';
57
60
  import {warnOnce} from '../utils/devWarning';
@@ -88,7 +91,7 @@ import type {
88
91
  } from '../Typeahead/types';
89
92
  import {composeEventHandlers, mergeProps} from '../utils';
90
93
  import {joinAriaIDs} from '../utils/inputAria';
91
- import {isFocusDetached} from '../utils/focusReturn';
94
+ import {isFocusDetached} from '../utils/isFocusDetached';
92
95
  import {themeProps} from '../utils/themeProps';
93
96
  import type {SheetDraftChange} from '../internal/sheetDraft';
94
97
  import type {TokenizerBottomSheetProps} from './TokenizerBottomSheet';
@@ -296,62 +299,60 @@ export interface TokenizerProps<T extends SearchableItem> extends Omit<
296
299
  onFocus?: (e: React.FocusEvent) => void;
297
300
  /** Fires when focus leaves the tokenizer entirely. */
298
301
  onBlur?: (e: React.FocusEvent) => void;
299
- /** Ref forwarded to the combobox input. */
302
+ /**
303
+ * How the field presents its choices.
304
+ * - `'popover'`: the inline combobox with its anchored suggestion menu, on
305
+ * every device.
306
+ * - `'bottom-sheet'`: a trigger showing the selected tokens that opens one
307
+ * tall modal sheet: a search row on top, full-width checkbox rows that
308
+ * keep their place while the sheet is open, a create row with
309
+ * `hasCreate`, and a footer pinned in every state with a confirmed Clear
310
+ * all and Save. The sheet edits a draft: `onChange` fires once, when Save
311
+ * commits it, and a swipe, scrim or Escape close of a changed draft asks
312
+ * before discarding. Suited to compact touch screens, where the inline
313
+ * combobox competes with the software keyboard.
314
+ * - `'adaptive'`: the bottom sheet on compact coarse-pointer screens,
315
+ * otherwise the popover — the same resolution Selector uses. The server
316
+ * render and the hydrating render are the popover.
317
+ *
318
+ * In the sheet presentation the trigger is the control: `ref`, `id`,
319
+ * `aria-*`, and `data-*` reach it. `renderItem`, `renderToken`,
320
+ * `endContent`, `hasClear`, `hasEntriesOnFocus`, `menuWidth`,
321
+ * `tokenOverflowBehavior`, and `hasAutoFocus` have no surface to act on
322
+ * and warn once in development. Pass `'popover'` to keep the inline field
323
+ * and those props on every device.
324
+ * @default 'adaptive'
325
+ */
326
+ presentation?: TokenizerPresentation;
327
+ /**
328
+ * Ref forwarded to the control: the combobox input in the popover
329
+ * presentation, the trigger button in the sheet presentation. This type
330
+ * keeps its released input element; the component itself also accepts a
331
+ * `Ref<HTMLInputElement | HTMLButtonElement>`, the type to use where the
332
+ * sheet can present.
333
+ */
300
334
  ref?: React.Ref<HTMLInputElement>;
301
335
  /** Imperative handle ref for focus/blur control. */
302
336
  handleRef?: React.Ref<TokenizerHandle>;
303
- /**
304
- * Experimental options, outside the stable compatibility promise: anything
305
- * in this object may change or be removed in a patch release. Omit it for
306
- * the stable behavior.
307
- * @experimental
308
- */
309
- experimental?: {
310
- /**
311
- * How the field presents its choices.
312
- * - `'popover'`: the inline combobox with its anchored suggestion menu —
313
- * the stable behavior.
314
- * - `'bottom-sheet'`: a trigger showing the selected tokens that opens one
315
- * tall modal sheet: a search row on top, full-width checkbox rows that
316
- * keep their place while the sheet is open, a create row with
317
- * `hasCreate`, and a footer pinned in every state with a confirmed Clear
318
- * all and Save. The sheet edits a draft: `onChange` fires once, when Save
319
- * commits it, and a swipe, scrim or Escape close of a changed draft asks
320
- * before discarding. Suited to compact touch screens, where the inline
321
- * combobox competes with the software keyboard.
322
- * - `'adaptive'`: the bottom sheet on compact coarse-pointer screens,
323
- * otherwise the popover — the same resolution Selector uses.
324
- *
325
- * In the sheet presentation the trigger is the control: `ref`, `id`,
326
- * `aria-*`, and `data-*` reach it. `renderItem`, `renderToken`,
327
- * `endContent`, `hasClear`, `hasEntriesOnFocus`, `menuWidth`,
328
- * `tokenOverflowBehavior`, and `hasAutoFocus` have no surface to act on
329
- * and warn once in development.
330
- * @experimental
331
- * @default 'popover'
332
- */
333
- presentation?: 'popover' | 'bottom-sheet' | 'adaptive';
334
- };
335
337
  }
336
338
 
339
+ /** How Tokenizer presents its choices; see `TokenizerProps.presentation`. */
340
+ export type TokenizerPresentation = AdaptivePresentation;
341
+
337
342
  /**
338
- * The props the experimental opt-in admits. `experimental` is present, and
339
- * `ref` also accepts the sheet presentation's trigger button, the control it
340
- * stands for there. Only the overload below reaches this type. `TokenizerProps`
341
- * stays the component's declared props type: it is an interface, so
342
- * `interface X extends TokenizerProps<T>`, `Omit<TokenizerProps<T>, …>` and
343
- * `ComponentProps<typeof Tokenizer>` keep their released shapes.
343
+ * The props the component accepts: `TokenizerProps`, whose `ref` keeps its
344
+ * released input type, with a `ref` that also accepts the sheet
345
+ * presentation's trigger button. `TokenizerProps` stays the declared props
346
+ * type, so `interface X extends TokenizerProps<T>`, `Omit<TokenizerProps<T>,
347
+ * …>` and `ComponentProps<typeof Tokenizer>` keep their released shapes.
344
348
  */
345
- type TokenizerExperimentalProps<T extends SearchableItem> = Omit<
349
+ type TokenizerAcceptedProps<T extends SearchableItem> = Omit<
346
350
  TokenizerProps<T>,
347
- 'ref' | 'experimental'
351
+ 'ref'
348
352
  > & {
349
- /** @experimental */
350
- experimental: NonNullable<TokenizerProps<T>['experimental']>;
351
353
  /**
352
354
  * Ref forwarded to the control: the combobox input in the popover
353
355
  * presentation, the trigger button in the sheet presentation.
354
- * @experimental
355
356
  */
356
357
  ref?: React.Ref<HTMLInputElement | HTMLButtonElement>;
357
358
  };
@@ -722,11 +723,11 @@ function EndLane({
722
723
  }
723
724
 
724
725
  // Keep this overload first. TypeScript resolves `ComponentProps<typeof
725
- // Tokenizer>` against the last overload, so that type stays the stable props.
726
- // A call that passes `experimental` matches this one and may pass the wider
727
- // `ref`.
726
+ // Tokenizer>` against the last overload, so that type stays the released
727
+ // props. Every call matches this one, so a ref typed for both controls is
728
+ // accepted.
728
729
  export function Tokenizer<T extends SearchableItem>(
729
- props: TokenizerExperimentalProps<T>,
730
+ props: TokenizerAcceptedProps<T>,
730
731
  ): React.JSX.Element;
731
732
  export function Tokenizer<T extends SearchableItem>(
732
733
  props: TokenizerProps<T>,
@@ -776,12 +777,12 @@ export function Tokenizer<T extends SearchableItem>({
776
777
  ref,
777
778
  handleRef,
778
779
  onKeyDown,
779
- experimental,
780
+ presentation = 'adaptive',
780
781
  id: idProp,
781
782
  'aria-describedby': ariaDescribedByProp,
782
783
  'aria-labelledby': ariaLabelledByProp,
783
784
  ...restProps
784
- }: TokenizerProps<T> | TokenizerExperimentalProps<T>): React.JSX.Element {
785
+ }: TokenizerProps<T> | TokenizerAcceptedProps<T>): React.JSX.Element {
785
786
  const isEffectivelyRequired = useResolvedRequired({isRequired, isOptional});
786
787
  const {rest, container} = useFieldInputStyling('Tokenizer', restProps, {
787
788
  containerXstyle,
@@ -807,11 +808,9 @@ export function Tokenizer<T extends SearchableItem>({
807
808
  const inputRef = useRef<HTMLInputElement>(null);
808
809
  const wrapperRef = useRef<HTMLDivElement>(null);
809
810
 
810
- // Experimental presentation (`component:Tokenizer` DEC-3). `adaptive`
811
- // resolves through the policy the selection controls share; an open sheet
812
- // keeps its presentation until it closes, so a resolution change mid-task
813
- // cannot pull the surface out from under the person.
814
- const presentation = experimental?.presentation ?? 'popover';
811
+ // `adaptive` resolves through the policy the selection controls share. An
812
+ // open sheet keeps its presentation until it closes. A resolution change
813
+ // during a task does not replace the open surface.
815
814
  const resolvedPresentation = useAdaptivePresentation(presentation);
816
815
  const [isSheetOpen, setIsSheetOpen] = useState(false);
817
816
  // Latched for the sheet's lifetime: a sheet stays presented after it closes
@@ -931,7 +930,7 @@ export function Tokenizer<T extends SearchableItem>({
931
930
  inertSheetProps.length === 1 ? 'has' : 'have'
932
931
  } no surface in the bottom-sheet presentation and ${
933
932
  inertSheetProps.length === 1 ? 'is' : 'are'
934
- } not rendered there.`,
933
+ } not rendered there. Pass \`presentation="popover"\` to keep the inline field on every device.`,
935
934
  );
936
935
  // eslint-disable-next-line @eslint-react/exhaustive-deps -- keyed by the joined names
937
936
  }, [inertSheetPropsKey]);
@@ -1466,8 +1465,8 @@ export function Tokenizer<T extends SearchableItem>({
1466
1465
  {...rest}
1467
1466
  ref={useMergedRefs(
1468
1467
  inputRef,
1469
- // With `experimental`, the ref type admits the trigger too; in
1470
- // this presentation it receives the input.
1468
+ // The ref type admits the sheet's trigger too; in this
1469
+ // presentation it receives the input.
1471
1470
  ref as React.Ref<HTMLInputElement> | undefined,
1472
1471
  handOffFocusRef,
1473
1472
  )}
@@ -8,7 +8,7 @@
8
8
  * EmptyState, AlertDialog, Icon, Spinner, Text, useBusyAnnouncement, and
9
9
  * the i18n translator
10
10
  * @output Exports TokenizerBottomSheet — the touch surface of
11
- * `Tokenizer experimental.presentation="bottom-sheet"`: one tall modal sheet
11
+ * `Tokenizer presentation="bottom-sheet"`: one tall modal sheet
12
12
  * with a search row on top, stable-order checkbox rows, progressive
13
13
  * long-list rendering, an optional create row, and a confirmed Clear all
14
14
  * @position Internal presentation surface of Tokenizer. Loaded on demand by
@@ -354,10 +354,10 @@ function TokenizerSheetContent<T extends SearchableItem>({
354
354
  // has an entrance animation and no exit, so a close is its unmount; the
355
355
  // close handler commits that unmount at once and then places focus itself,
356
356
  // now that the modal is gone and the sheet's content can take focus again
357
- // (`architecture:react-component-runtime` INV2): on the search field
358
- // after a confirmed clear — the clear is spent, and the search field is
359
- // where the next selection starts (FR24, `spec:AST-085` FR4) — and back on
360
- // Clear all after a cancel. A confirmed clear is announced there too — a
357
+ // (`architecture:react-component-runtime` INV2). After a clear, Clear all
358
+ // is aria-disabled but stays focusable, so it keeps focus (FR24,
359
+ // `spec:AST-085` FR4). Focus on the search field opens the on-screen
360
+ // keyboard over the cleared rows. A confirmed clear is announced too — a
361
361
  // change the person hears about, as an add or a remove is
362
362
  // (`component:Tokenizer` AR6) — after the confirmation's dialog has gone,
363
363
  // so the sheet is the modal on top and the words are delivered inside it
@@ -372,11 +372,9 @@ function TokenizerSheetContent<T extends SearchableItem>({
372
372
  const closeClearConfirmation = (confirmed: boolean) => {
373
373
  // eslint-disable-next-line @eslint-react/dom-no-flush-sync -- the confirmation must be gone before focus moves into the sheet and the words are routed into it
374
374
  flushSync(() => setIsClearConfirmationOpen(false));
375
+ clearAllRef.current?.focus();
375
376
  if (confirmed) {
376
- searchRef.current?.focus();
377
377
  announce(t('@astryx.tokenizer.allRemoved'));
378
- } else {
379
- clearAllRef.current?.focus();
380
378
  }
381
379
  };
382
380
  // Keep editing: the confirmation is gone, and focus returns to the search
@@ -614,16 +612,14 @@ function TokenizerSheetContent<T extends SearchableItem>({
614
612
  // `action` is declared on `SearchableItem` for the grid-adopting hosts; the
615
613
  // sheet rows have not adopted it, so a row renders the item without the
616
614
  // control and says so (`spec:AST-058` FR9), as the inline panel does.
617
- useEffect(() => {
618
- if (results.some(item => item.action != null)) {
619
- warnOnce(
620
- 'tokenizer-sheet:item-action',
621
- 'Tokenizer',
622
- 'A result carries `action`, which the bottom-sheet rows do not render ' +
623
- 'yet; the item is shown without it.',
624
- );
625
- }
626
- }, [results]);
615
+ if (results.some(item => item.action != null)) {
616
+ warnOnce(
617
+ 'tokenizer-sheet:item-action',
618
+ 'Tokenizer',
619
+ 'A result carries `action`, which the bottom-sheet rows do not render ' +
620
+ 'yet; the item is shown without it.',
621
+ );
622
+ }
627
623
 
628
624
  // The pending Spinner below stays named, as the inline field's does
629
625
  // (`family:input-fields` FR7), but is not a live region; the sheet announces
@@ -1002,11 +998,9 @@ function TokenizerSheetContent<T extends SearchableItem>({
1002
998
  variant="secondary"
1003
999
  size="lg"
1004
1000
  isDisabled={draftValue.length === 0}
1005
- // With a tooltip, Button's disabled mode is `aria-disabled`: the
1006
- // action keeps its focus order and says why it does nothing
1007
- // (`spec:AST-085` FR1), instead of leaving the tab order as a
1008
- // natively disabled button does — a confirmed Clear all returns
1009
- // focus here before the search field takes it (FR24).
1001
+ // With a tooltip, Button uses aria-disabled, so Clear all stays
1002
+ // focusable after a clear and says why it does nothing
1003
+ // (`spec:AST-085` FR1; FR24).
1010
1004
  tooltip={
1011
1005
  draftValue.length === 0
1012
1006
  ? t('@astryx.tokenizer.nothingToClear')