@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
@@ -4,9 +4,9 @@
4
4
 
5
5
  /**
6
6
  * @file useTooltip.tsx
7
- * @input Uses useLayer, usePressPin, React hooks
8
- * @output Exports useTooltip hook with stable trigger refs for hover/focus/tap tooltips,
9
- * and the module-only useTooltipWithTriggerBehavior that InfoTip's press-to-pin uses
7
+ * @input Uses useLayer, useTouchTriggerInternal, React hooks
8
+ * @output Exports useTooltip hook with stable trigger refs for hover/focus/tap tooltips
9
+ * and imperative show() and hide() for an app-built toggle trigger
10
10
  * @position Layer hook; builds on useLayer for tooltip behavior
11
11
  *
12
12
  * SYNC: When modified, update:
@@ -17,9 +17,11 @@ import {
17
17
  useCallback,
18
18
  useEffect,
19
19
  useRef,
20
+ useState,
20
21
  type ReactNode,
21
22
  type RefCallback,
22
23
  } from 'react';
24
+ import {createTriggerFocusGate} from '../utils/triggerFocus';
23
25
  import * as stylex from '@stylexjs/stylex';
24
26
  import {
25
27
  useLayerInternal,
@@ -27,12 +29,14 @@ import {
27
29
  type LayerAlignment,
28
30
  type LayerPlacement,
29
31
  } from '../Layer/useLayer';
30
- import type {LayerTouchTrigger} from '../Layer/useTouchTrigger';
32
+ import {
33
+ useTouchTriggerInternal,
34
+ type LayerTouchTrigger,
35
+ } from '../Layer/useTouchTrigger';
31
36
  import {useAnnounceRenderedText} from '../hooks/useAnnounceRenderedText';
32
37
  import {useMergedRefs} from '../hooks/useMergedRefs';
33
38
  import {layerAnimations} from '../Layer/layerAnimations.stylex';
34
39
  import {registerLayerSurface} from '../Layer/layerSurfacePress';
35
- import {usePressPin, type LayerTriggerBehavior} from '../Layer/usePressPin';
36
40
  import {useLayerDismissal} from '../Layer/useLayerDismissal';
37
41
  import {themeProps} from '../utils/themeProps';
38
42
  import {
@@ -216,29 +220,27 @@ export interface TooltipReturn {
216
220
  children: ReactNode,
217
221
  props?: Omit<ContextRenderProps, 'positioning'>,
218
222
  ) => ReactNode;
219
- }
220
223
 
221
- /**
222
- * Check if an element is naturally focusable
223
- */
224
- function isFocusable(element: HTMLElement): boolean {
225
- // Elements with explicit tabindex
226
- if (element.hasAttribute('tabindex')) {
227
- return element.tabIndex >= 0;
228
- }
229
-
230
- // Naturally focusable elements
231
- const focusableTags = ['A', 'BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'];
232
- if (focusableTags.includes(element.tagName)) {
233
- return !(element as HTMLButtonElement).disabled;
234
- }
235
-
236
- // Elements with contenteditable
237
- if (element.isContentEditable) {
238
- return true;
239
- }
240
-
241
- return false;
224
+ /**
225
+ * Opens the tooltip now and keeps it open until `hide()`, Escape, a press
226
+ * outside, or focus leaving its trigger. If a press on the trigger is down
227
+ * when you call it, and the press ends off the trigger with no click, the
228
+ * hold ends. The hover rules then decide.
229
+ * Its text is announced once. Reports through `onShow`. Under a controlled `isOpen`,
230
+ * it calls `onShow` and does not change `isOpen`. Does nothing while
231
+ * `isEnabled` is false.
232
+ *
233
+ * Use `show()` and `hide()` to build a toggle-style trigger: your own button
234
+ * calls them, sets `aria-describedby` and `aria-controls` to `describedBy`
235
+ * and `aria-expanded` (true while shown), and keeps its own accessible name.
236
+ */
237
+ show: () => void;
238
+
239
+ /**
240
+ * Closes the tooltip now. Reports through `onHide`. Under a controlled
241
+ * `isOpen`, it calls `onHide` and does not change `isOpen`.
242
+ */
243
+ hide: () => void;
242
244
  }
243
245
 
244
246
  /**
@@ -267,42 +269,6 @@ function isFocusable(element: HTMLElement): boolean {
267
269
  */
268
270
 
269
271
  export function useTooltip(options: TooltipOptions = {}): TooltipReturn {
270
- // The option is fixed to `adaptive`, so an options object that carries it at
271
- // runtime cannot reach the press-to-pin path.
272
- return useTooltipWithTriggerBehavior({
273
- ...options,
274
- triggerBehavior: 'adaptive',
275
- });
276
- }
277
-
278
- /**
279
- * Module-only options for `useTooltipWithTriggerBehavior`. Not exported from
280
- * the package.
281
- */
282
- export interface TooltipWithTriggerBehaviorOptions extends TooltipOptions {
283
- /**
284
- * How the trigger opens the tooltip:
285
- * - `adaptive` (the default): hover and focus preview it. `touchTrigger`
286
- * decides taps.
287
- * - `toggle`: on a button trigger, a click, a tap, Enter, or Space pins the
288
- * tooltip open, and the same press closes it. Hover and keyboard focus
289
- * still preview it. A pinned tooltip stays until Escape, a second press,
290
- * a press outside, or focus leaving. The trigger reports `aria-expanded`
291
- * and `aria-controls`, and the tooltip's text is announced once when it
292
- * pins. `touchTrigger` is ignored. InfoTip uses it.
293
- *
294
- * @default 'adaptive'
295
- */
296
- triggerBehavior?: LayerTriggerBehavior;
297
- }
298
-
299
- /**
300
- * `useTooltip` with a trigger behavior. Module-only: InfoTip's press-to-pin
301
- * goes through it, and the package does not export it.
302
- */
303
- export function useTooltipWithTriggerBehavior(
304
- options: TooltipWithTriggerBehaviorOptions = {},
305
- ): TooltipReturn {
306
272
  const {
307
273
  placement = 'above',
308
274
  alignment = 'center',
@@ -310,7 +276,6 @@ export function useTooltipWithTriggerBehavior(
310
276
  hideDelay = 0,
311
277
  focusTrigger = 'auto',
312
278
  touchTrigger = 'auto',
313
- triggerBehavior = 'adaptive',
314
279
  isEnabled = true,
315
280
  isOpen,
316
281
  isDefaultOpen = false,
@@ -368,39 +333,122 @@ export function useTooltipWithTriggerBehavior(
368
333
  hideLayer();
369
334
  }, [clearTimeouts, hideLayer]);
370
335
 
371
- // A press pins the tooltip under `triggerBehavior="toggle"`. The pin also
372
- // owns the tooltip's touch trigger, so this one call wires both.
336
+ // DOM listeners read the latest controlled state through a ref.
337
+ const latestRef = useRef({isOpen, isLayerOpen, onShow, onHide});
338
+ latestRef.current = {isOpen, isLayerOpen, onShow, onHide};
339
+
340
+ // The app's show() holds the tooltip open until hide(), Escape, a press or
341
+ // scroll outside, or focus leaving the trigger and the tooltip.
342
+ const isHeldRef = useRef(false);
343
+ const [isHeldState, setIsHeldState] = useState(false);
344
+ const setHeld = useCallback((next: boolean) => {
345
+ isHeldRef.current = next;
346
+ setIsHeldState(next);
347
+ }, []);
348
+
349
+ // Whether the current hold began during a press on the trigger. Such a
350
+ // hold ends with the press when the press ends off the trigger, as no click
351
+ // pins it. The hover rules then decide. isHoldInThisTaskRef covers a show()
352
+ // that runs before the hook's own pointerdown listener.
353
+ const isHoldFromPressRef = useRef(false);
354
+ const isHoldInThisTaskRef = useRef(false);
355
+ const handleReleaseInLayer = useCallback(() => {
356
+ if (isHoldFromPressRef.current && isHeldRef.current) {
357
+ isHoldFromPressRef.current = false;
358
+ setHeld(false);
359
+ }
360
+ }, [setHeld]);
361
+
362
+ // The touch trigger's outside dismissal (a press or scroll outside) ends a
363
+ // hold with the tooltip.
364
+ const hideFromTouch = useCallback(() => {
365
+ if (isHeldRef.current) {
366
+ setHeld(false);
367
+ const latest = latestRef.current;
368
+ if (latest.isOpen !== undefined) {
369
+ latest.onHide?.();
370
+ return;
371
+ }
372
+ }
373
+ hideNow();
374
+ }, [setHeld, hideNow]);
375
+
373
376
  const {
374
- isToggleTrigger,
375
- isHeldOpen: isPressHeldOpen,
376
- attach: attachPressPin,
377
- unpin: unpinPress,
378
- isPinShown,
379
- touch: {
380
- isTouchPointerRef,
381
- isTouchInteraction,
382
- handlePointerEnter,
383
- handlePointerDown: handleTouchPointerDown,
384
- clearTapOpen,
377
+ isTouchPointerRef,
378
+ isTouchInteraction,
379
+ handlePointerEnter,
380
+ handlePointerDown: handleTouchPointerDown,
381
+ clearTapOpen,
382
+ armOutsideDismiss,
383
+ } = useTouchTriggerInternal(
384
+ {
385
+ touchTrigger,
386
+ isEnabled,
387
+ isControlled: isOpen !== undefined,
388
+ isOpen: isLayerOpen,
389
+ layerId,
390
+ triggerRef,
391
+ show: showNow,
392
+ hide: hideFromTouch,
385
393
  },
386
- } = usePressPin({
387
- triggerBehavior,
388
- touchTrigger,
389
- isEnabled,
390
- isOpen,
391
- isLayerOpen,
392
- layerId,
393
- triggerRef,
394
- component: 'Tooltip',
395
- show: showNow,
396
- hide: hideNow,
397
- report: next => (next ? onShow?.() : onHide?.()),
398
- });
394
+ handleReleaseInLayer,
395
+ );
399
396
 
400
- // Only a pin announces the text: a preview is already the trigger's
397
+ const isHeldOpen = useCallback(() => {
398
+ const latest = latestRef.current;
399
+ return isHeldRef.current && latest.isLayerOpen && latest.isOpen !== false;
400
+ }, []);
401
+
402
+ const releaseHold = useCallback(() => {
403
+ clearTapOpen();
404
+ setHeld(false);
405
+ const latest = latestRef.current;
406
+ if (latest.isOpen !== undefined) {
407
+ latest.onHide?.();
408
+ return;
409
+ }
410
+ hideNow();
411
+ }, [clearTapOpen, setHeld, hideNow]);
412
+
413
+ const dropHold = useCallback(() => {
414
+ if (isHeldRef.current) {
415
+ setHeld(false);
416
+ }
417
+ }, [setHeld]);
418
+
419
+ // Focus leaving the trigger and the tooltip ends a hold, whatever
420
+ // `focusTrigger` is. Focus that leaves for no element is a press's to
421
+ // decide. The trigger can sit in another document, so the check uses its
422
+ // own window.
423
+ const handleHeldFocusOut = useCallback(
424
+ (event: FocusEvent) => {
425
+ if (!isHeldOpen()) {
426
+ return;
427
+ }
428
+ const next = event.relatedTarget;
429
+ const trigger = triggerRef.current;
430
+ const view = trigger?.ownerDocument.defaultView;
431
+ if (view == null || !(next instanceof view.Node)) {
432
+ return;
433
+ }
434
+ const surface = trigger?.ownerDocument.getElementById(layerId) ?? null;
435
+ if (
436
+ trigger?.contains(next) === true ||
437
+ surface?.contains(next) === true
438
+ ) {
439
+ return;
440
+ }
441
+ releaseHold();
442
+ },
443
+ [isHeldOpen, layerId, releaseHold],
444
+ );
445
+
446
+ const isHoldShown = isHeldState && isLayerOpen && isOpen !== false;
447
+
448
+ // Only a hold announces the text: a preview is already the trigger's
401
449
  // description.
402
450
  const contentRef = useRef<HTMLDivElement | null>(null);
403
- useAnnounceRenderedText(contentRef, isPinShown, 'pinned');
451
+ useAnnounceRenderedText(contentRef, isHoldShown, 'pinned');
404
452
  const contentRefs = useMergedRefs<HTMLDivElement>(
405
453
  contentRef,
406
454
  registerLayerSurface,
@@ -433,7 +481,7 @@ export function useTooltipWithTriggerBehavior(
433
481
  // trigger onto the tooltip surface without the tooltip vanishing — required
434
482
  // for WCAG 1.4.13 (Content on Hover or Focus: hoverable).
435
483
  const scheduleHide = useCallback(() => {
436
- if (isOpen === true || isPressHeldOpen()) {
484
+ if (isOpen === true || isHeldOpen()) {
437
485
  return;
438
486
  }
439
487
  clearTimeouts();
@@ -441,7 +489,7 @@ export function useTooltipWithTriggerBehavior(
441
489
  hideTimeoutRef.current = setTimeout(() => {
442
490
  hideLayer();
443
491
  }, effectiveHideDelay);
444
- }, [isOpen, isPressHeldOpen, clearTimeouts, hideLayer, hideDelay]);
492
+ }, [isOpen, isHeldOpen, clearTimeouts, hideLayer, hideDelay]);
445
493
 
446
494
  // Cancel a pending hide (e.g. the pointer entered the tooltip surface).
447
495
  const cancelHide = useCallback(() => {
@@ -485,32 +533,13 @@ export function useTooltipWithTriggerBehavior(
485
533
  [isTouchPointerRef, layerId, scheduleHide],
486
534
  );
487
535
 
488
- // Under `auto`, whether focus counts is decided when it arrives, not when
489
- // the listeners attach: a roving-tabindex member that was `tabindex="-1"`
490
- // then can be the tab stop now. A trigger that receives focus is focusable
491
- // by definition; focus inside it counts only while the trigger is
492
- // focusable too, so a plain wrapper still ignores its children's focus.
493
- const isFocusForTrigger = useCallback(
494
- (e: Event): boolean => {
495
- if (focusTrigger === 'always') {
496
- return true;
497
- }
498
- const triggerEl = e.currentTarget as HTMLElement | null;
499
- return (
500
- triggerEl != null && (e.target === triggerEl || isFocusable(triggerEl))
501
- );
502
- },
503
- [focusTrigger],
504
- );
505
-
506
- // Whether the trigger's current focus counted when it arrived, so its blur
507
- // hides the tooltip even if the trigger has since left the tab order.
508
- const focusCountedRef = useRef(false);
536
+ // Under `auto`, whether focus counts is decided when it arrives, and a
537
+ // focus that counted still hides on blur (utils/triggerFocus.ts).
538
+ const [focusGate] = useState(createTriggerFocusGate);
509
539
 
510
540
  const handleFocusIn = useCallback(
511
541
  (e: Event) => {
512
- focusCountedRef.current = isFocusForTrigger(e);
513
- if (!isEnabled || !focusCountedRef.current) {
542
+ if (!focusGate.focusIn(e, focusTrigger) || !isEnabled) {
514
543
  return;
515
544
  }
516
545
  // A tap focuses the trigger it activates, and `:focus-visible` does not
@@ -531,26 +560,26 @@ export function useTooltipWithTriggerBehavior(
531
560
  showLayer();
532
561
  },
533
562
  [
563
+ focusGate,
564
+ focusTrigger,
534
565
  isEnabled,
535
- isFocusForTrigger,
536
566
  isTouchInteraction,
537
567
  clearTimeouts,
538
568
  showLayer,
539
569
  ],
540
570
  );
541
571
 
542
- // A pinned tooltip's focus-leave close is the pin's own: it listens on the
543
- // trigger whatever `focusTrigger` is. This schedules the unpinned hide,
544
- // which a held tooltip skips.
572
+ // A held tooltip's focus-leave close is the hold's own: it listens on the
573
+ // trigger whatever `focusTrigger` is. This schedules the unheld hide, which
574
+ // a held tooltip skips.
545
575
  const handleFocusOut = useCallback(
546
576
  (e: Event) => {
547
- if (!focusCountedRef.current && !isFocusForTrigger(e)) {
577
+ if (!focusGate.focusOut(e, focusTrigger)) {
548
578
  return;
549
579
  }
550
- focusCountedRef.current = false;
551
580
  scheduleHide();
552
581
  },
553
- [isFocusForTrigger, scheduleHide],
582
+ [focusGate, focusTrigger, scheduleHide],
554
583
  );
555
584
 
556
585
  // Pressing the trigger hides its own tooltip: once the control is activated
@@ -560,14 +589,56 @@ export function useTooltipWithTriggerBehavior(
560
589
  // is owned by the consumer. `hideLayer()` self-guards when already closed.
561
590
  // A touch press is a different gesture (it may be the only way to open the
562
591
  // tooltip at all), so the touch path answers it first.
592
+ // Whether a press on the trigger is down, from the hook's pointerdown to
593
+ // the press's end.
594
+ const isTriggerPressedRef = useRef(false);
595
+ const stopPressTrackingRef = useRef<(() => void) | null>(null);
596
+ const trackTriggerPress = useCallback(() => {
597
+ stopPressTrackingRef.current?.();
598
+ const view = triggerRef.current?.ownerDocument.defaultView;
599
+ if (view == null) {
600
+ return;
601
+ }
602
+ isTriggerPressedRef.current = true;
603
+ const trigger = triggerRef.current;
604
+ const stop = (event?: Event) => {
605
+ // A press that ends on the trigger keeps its hold, as a click does.
606
+ if (
607
+ event?.type === 'pointerup' &&
608
+ event.target instanceof view.Node &&
609
+ trigger?.contains(event.target) === true
610
+ ) {
611
+ isHoldFromPressRef.current = false;
612
+ }
613
+ view.removeEventListener('pointerup', stop, true);
614
+ view.removeEventListener('pointercancel', stop, true);
615
+ isTriggerPressedRef.current = false;
616
+ stopPressTrackingRef.current = null;
617
+ };
618
+ view.addEventListener('pointerup', stop, true);
619
+ view.addEventListener('pointercancel', stop, true);
620
+ stopPressTrackingRef.current = stop;
621
+ }, []);
622
+
563
623
  const handlePointerDown = useCallback(
564
624
  (event: PointerEvent) => {
565
- // A press on a toggle trigger pins or closes through its click. It
566
- // neither hides the preview here nor waits for a tap verdict.
567
- if (isToggleTrigger(triggerRef.current)) {
625
+ trackTriggerPress();
626
+ // The app's hide() closes a held tooltip. A press neither hides it here
627
+ // nor waits for a tap verdict. A show() in a capture handler of this
628
+ // press runs before this listener. Tie that hold to the press.
629
+ if (isHeldRef.current) {
630
+ if (isHoldInThisTaskRef.current) {
631
+ isHoldFromPressRef.current = true;
632
+ }
568
633
  return;
569
634
  }
570
635
  if (handleTouchPointerDown(event)) {
636
+ // A pen in range starts the hover show before it lands. Left pending,
637
+ // that show opens the layer during the press. The tap then closes it.
638
+ if (showTimeoutRef.current) {
639
+ clearTimeout(showTimeoutRef.current);
640
+ showTimeoutRef.current = null;
641
+ }
571
642
  return;
572
643
  }
573
644
  if (isOpen !== undefined) {
@@ -576,7 +647,13 @@ export function useTooltipWithTriggerBehavior(
576
647
  clearTimeouts();
577
648
  hideLayer();
578
649
  },
579
- [isToggleTrigger, handleTouchPointerDown, isOpen, clearTimeouts, hideLayer],
650
+ [
651
+ handleTouchPointerDown,
652
+ trackTriggerPress,
653
+ isOpen,
654
+ clearTimeouts,
655
+ hideLayer,
656
+ ],
580
657
  );
581
658
 
582
659
  // Interaction ref that handles event listeners only
@@ -588,6 +665,8 @@ export function useTooltipWithTriggerBehavior(
588
665
  triggerRef.current.removeEventListener('mouseleave', handleMouseLeave);
589
666
  triggerRef.current.removeEventListener('focusin', handleFocusIn);
590
667
  triggerRef.current.removeEventListener('focusout', handleFocusOut);
668
+ triggerRef.current.removeEventListener('focusout', handleHeldFocusOut);
669
+ stopPressTrackingRef.current?.();
591
670
  triggerRef.current.removeEventListener(
592
671
  'pointerenter',
593
672
  handlePointerEnter,
@@ -609,18 +688,19 @@ export function useTooltipWithTriggerBehavior(
609
688
  el.addEventListener('pointerdown', handlePointerDown);
610
689
 
611
690
  // Focus listeners unless focus never opens the tooltip; `auto` decides
612
- // per event (isFocusForTrigger).
691
+ // per event (utils/triggerFocus.ts).
613
692
  if (focusTrigger !== 'never') {
614
693
  el.addEventListener('focusin', handleFocusIn);
615
694
  el.addEventListener('focusout', handleFocusOut);
616
695
  }
617
696
  }
618
697
 
698
+ // Its own focus-leave listener: `focusTrigger="never"` attaches none.
699
+ el?.addEventListener('focusout', handleHeldFocusOut);
619
700
  triggerRef.current = el;
620
- attachPressPin(el);
621
701
  },
622
702
  [
623
- attachPressPin,
703
+ handleHeldFocusOut,
624
704
  focusTrigger,
625
705
  handleMouseEnter,
626
706
  handleMouseLeave,
@@ -665,9 +745,11 @@ export function useTooltipWithTriggerBehavior(
665
745
  showLayer();
666
746
  } else {
667
747
  clearTimeouts();
748
+ // A hold ends when the consumer closes the tooltip.
749
+ dropHold();
668
750
  hideLayer();
669
751
  }
670
- }, [isOpen, clearTimeouts, showLayer, hideLayer]);
752
+ }, [isOpen, clearTimeouts, showLayer, hideLayer, dropHold]);
671
753
 
672
754
  // Dismiss on Escape (WCAG 1.4.13 — dismissible) through the shared layer
673
755
  // stack. A visible tip is the top-most layer, so it takes the press and
@@ -708,7 +790,7 @@ export function useTooltipWithTriggerBehavior(
708
790
  onDismiss: () => {
709
791
  clearTimeouts();
710
792
  clearTapOpen();
711
- unpinPress();
793
+ dropHold();
712
794
  if (isOpen !== undefined) {
713
795
  onHide?.();
714
796
  return;
@@ -745,7 +827,7 @@ export function useTooltipWithTriggerBehavior(
745
827
  // something else in the shared interactive-ancestor walk, so a
746
828
  // clickable container around the trigger leaves the press alone while
747
829
  // document listeners still see it.
748
- // The pin's announcement reads this element's text.
830
+ // The hold's announcement reads this element's text.
749
831
  <div ref={contentRefs} {...stylex.props(styles.content)}>
750
832
  {children}
751
833
  </div>,
@@ -763,6 +845,31 @@ export function useTooltipWithTriggerBehavior(
763
845
  ],
764
846
  );
765
847
 
848
+ const show = useCallback(() => {
849
+ clearTimeouts();
850
+ if (!isEnabled) {
851
+ return;
852
+ }
853
+ setHeld(true);
854
+ armOutsideDismiss();
855
+ isHoldFromPressRef.current = isTriggerPressedRef.current;
856
+ isHoldInThisTaskRef.current = true;
857
+ triggerRef.current?.ownerDocument.defaultView?.setTimeout(() => {
858
+ isHoldInThisTaskRef.current = false;
859
+ }, 0);
860
+ const latest = latestRef.current;
861
+ if (latest.isOpen !== undefined) {
862
+ latest.onShow?.();
863
+ return;
864
+ }
865
+ showLayer();
866
+ }, [clearTimeouts, isEnabled, setHeld, armOutsideDismiss, showLayer]);
867
+
868
+ const hide = useCallback(() => {
869
+ clearTimeouts();
870
+ releaseHold();
871
+ }, [clearTimeouts, releaseHold]);
872
+
766
873
  return {
767
874
  ref,
768
875
  positionRef: layerRef,
@@ -770,5 +877,7 @@ export function useTooltipWithTriggerBehavior(
770
877
  anchorId: layerAnchorId,
771
878
  describedBy: layerId,
772
879
  renderTooltip,
880
+ show,
881
+ hide,
773
882
  };
774
883
  }
@@ -24,6 +24,7 @@ import React, {
24
24
  useCallback,
25
25
  useEffect,
26
26
  useId,
27
+ useInsertionEffect,
27
28
  useMemo,
28
29
  useRef,
29
30
  useState,
@@ -775,15 +776,6 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
775
776
  // source: they can never be re-shown, so focus bootstraps the new source.
776
777
  const sourceGenRef = useRef(0);
777
778
 
778
- // Results still arriving from a replaced source must not land in the new
779
- // one's menu.
780
- const prevSearchSourceRef = useRef(searchSource);
781
- if (prevSearchSourceRef.current !== searchSource) {
782
- prevSearchSourceRef.current.cancel?.();
783
- prevSearchSourceRef.current = searchSource;
784
- sourceGenRef.current = ++searchGenRef.current;
785
- }
786
-
787
779
  // The previous source is remembered in state, not a ref, so a render React
788
780
  // discards cannot consume the comparison without its state updates.
789
781
  const [sourceOfState, setSourceOfState] = useState(searchSource);
@@ -793,7 +785,6 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
793
785
  setIsLoading(false);
794
786
  setHasSearched(false);
795
787
  }
796
- loadingRef.current = false;
797
788
  }
798
789
  // A field that becomes disabled stops showing a search as busy in the same
799
790
  // render, and the dropped query shows no outcome, so no empty state; the
@@ -807,15 +798,34 @@ export const BaseTypeahead = function BaseTypeahead<T extends SearchableItem>({
807
798
  }
808
799
  }
809
800
 
810
- // When the search source is replaced, any in-flight load from the previous
811
- // source is abandoned (generation bumped above). Notify the wrapper's busy lane
812
- // in an effect so external store listeners run safely after commit.
813
- const isInitialMountRef = useRef(true);
814
- useEffect(() => {
815
- if (isInitialMountRef.current) {
816
- isInitialMountRef.current = false;
801
+ // Results that arrive from a replaced source must not land in the new
802
+ // source's menu, so the replacement starts a new generation. That happens
803
+ // when the replacement commits, not in render. React can render a
804
+ // replacement and then discard it, for example when a transition suspends
805
+ // and a newer update replaces it. The source that stays then keeps its read.
806
+ // An insertion effect runs before every layout effect and ref callback of
807
+ // its commit. A read that one of them starts against the replacement gets a
808
+ // later generation, after the replaced source stopped its requests.
809
+ const prevSearchSourceRef = useRef(searchSource);
810
+ const isSourceReplacedRef = useRef(false);
811
+ useInsertionEffect(() => {
812
+ if (prevSearchSourceRef.current === searchSource) {
813
+ return;
814
+ }
815
+ prevSearchSourceRef.current.cancel?.();
816
+ prevSearchSourceRef.current = searchSource;
817
+ sourceGenRef.current = ++searchGenRef.current;
818
+ // The replacing render cleared the busy state.
819
+ loadingRef.current = false;
820
+ isSourceReplacedRef.current = true;
821
+ }, [searchSource]);
822
+ // Syncs the wrapper's busy lane. A read of the replacement that already
823
+ // started keeps the lane busy.
824
+ useIsomorphicLayoutEffect(() => {
825
+ if (!isSourceReplacedRef.current) {
817
826
  return;
818
827
  }
828
+ isSourceReplacedRef.current = false;
819
829
  if (!loadingRef.current) {
820
830
  onLoadingChangeRef.current?.(false);
821
831
  }
@@ -43,7 +43,8 @@ export const docs = {
43
43
  {
44
44
  name: 'group',
45
45
  type: 'string',
46
- description: 'Group label for grouping items visually.',
46
+ description:
47
+ 'This prop has no effect. Set `item.auxiliaryData.group` on search-source items to group results in Typeahead or BaseTypeahead.',
47
48
  },
48
49
  ],
49
50
  };
@@ -79,7 +80,8 @@ export const docsZh = {
79
80
  {
80
81
  name: 'group',
81
82
  type: 'string',
82
- description: '用于视觉分组的分组标签。',
83
+ description:
84
+ '此属性不影响渲染。要在 Typeahead 或 BaseTypeahead 中分组,请在搜索源返回的结果项上设置 `item.auxiliaryData.group`。',
83
85
  },
84
86
  ],
85
87
  };
@@ -94,6 +96,7 @@ export const docsDense = {
94
96
  icon: 'Icon/avatar before label.',
95
97
  description: 'Text below label.',
96
98
  isDisabled: 'Visually disabled.',
97
- group: 'Group label for visual grouping.',
99
+ group:
100
+ 'No effect. Group results via `item.auxiliaryData.group` in the search source.',
98
101
  },
99
102
  };
@@ -54,7 +54,8 @@ export interface TypeaheadItemProps<
54
54
  isDisabled?: boolean;
55
55
 
56
56
  /**
57
- * Group label for grouping items visually.
57
+ * This prop has no effect. Set `item.auxiliaryData.group` on search-source
58
+ * items to group results in Typeahead or BaseTypeahead.
58
59
  */
59
60
  group?: string;
60
61
  }