@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
@@ -108,8 +108,6 @@ import {
108
108
  formatSharedDate,
109
109
  plainDateFromISO,
110
110
  plainDateToday,
111
- plainDateFormat,
112
- DATE_FORMAT_WEEKDAY_ONLY,
113
111
  type ISODateString,
114
112
  } from '../utils';
115
113
  import {plainDateFormatStandaloneMonthYear} from '../utils/plainDate';
@@ -117,6 +115,7 @@ import {chainEventHandlers} from '../utils/chainEventHandlers';
117
115
  import {interactionOverlayStyles} from '../utils/interactionOverlay.stylex';
118
116
  import {usePressFeedback} from '../hooks/usePressFeedback';
119
117
  import {normalizeDayOfWeek} from '../utils/dateTypes';
118
+ import {getWeekdayHeaders} from '../Calendar/getWeekdayHeaderNames';
120
119
  import {MonthScroller, type MonthScrollerHandle} from './MonthScroller';
121
120
  import {MonthYearWheels} from './MonthYearWheels';
122
121
  import {
@@ -676,6 +675,7 @@ export function TouchDateField({
676
675
  const scrollerHandleRef = useRef<MonthScrollerHandle | null>(null);
677
676
  // Pending focus handoff from the clear button; see handleClear.
678
677
  const clearFocusTimerRef = useRef<number | null>(null);
678
+ // Releases the focus timer on unmount.
679
679
  useEffect(
680
680
  () => () => {
681
681
  if (clearFocusTimerRef.current != null) {
@@ -720,34 +720,8 @@ export function TouchDateField({
720
720
 
721
721
  const {year, month} = fromMonthIndex(monthIndex);
722
722
 
723
- /**
724
- * Three-letter weekday names — "Sun", not Calendar's "Su".
725
- *
726
- * The sheet is full width and the columns are ~51px, so there is room for
727
- * the form people actually read, and a picker operated by thumb should not
728
- * make anyone decode "Tu" against "Th".
729
- *
730
- * This is CLDR's `abbreviated` width, which `Intl` produces natively — no
731
- * truncation, so the 28 non-English locales stay correct rather than being
732
- * sliced to three characters. (Verified against the CLDR tables for all 30
733
- * locales in the catalog.) Calendar's 2-letter row is CLDR's *short* width,
734
- * which `Intl` cannot express, which is exactly why that surface needs a
735
- * generated table and this one does not.
736
- *
737
- * Built here rather than taken from `useCalendarDays`, which supplies the
738
- * short form for Calendar's own header. The rotation matches: day 4 of
739
- * January 1970 was a Sunday, so offsetting from it by `weekStartsOn` walks
740
- * the week in the same order the panes lay out their columns.
741
- */
742
- const dayNames = useMemo(
743
- () =>
744
- Array.from({length: 7}, (_, offset) =>
745
- plainDateFormat(
746
- {year: 1970, month: 1, day: 4 + ((weekStartsOn + offset) % 7)},
747
- DATE_FORMAT_WEEKDAY_ONLY,
748
- locale,
749
- ),
750
- ),
723
+ const weekdayHeaders = useMemo(
724
+ () => getWeekdayHeaders(locale, weekStartsOn),
751
725
  [locale, weekStartsOn],
752
726
  );
753
727
  const monthYearLabel = plainDateFormatStandaloneMonthYear(
@@ -1107,8 +1081,8 @@ export function TouchDateField({
1107
1081
  styles.weekdays,
1108
1082
  isWheelOpen && styles.weekdaysHidden,
1109
1083
  )}>
1110
- {dayNames.map(name => (
1111
- <div key={name} {...stylex.props(styles.weekday)}>
1084
+ {weekdayHeaders.map(({dayOfWeek, name}) => (
1085
+ <div key={dayOfWeek} {...stylex.props(styles.weekday)}>
1112
1086
  {name}
1113
1087
  </div>
1114
1088
  ))}
@@ -4,41 +4,37 @@
4
4
 
5
5
  /**
6
6
  * @file Wheel.tsx
7
- * @input Option list, selected value, change callback
8
- * @output Exports Wheel — a snap-scrolling picker column
9
- * @position Internal component; consumed by MonthYearWheels.tsx
7
+ * @input Option list, selected value and change callback; a ref for
8
+ * programmatic turns
9
+ * @output Exports Wheel (one picker column), ScrollWheel (the scrolling
10
+ * column) and the shared types of wheelOptions.ts
11
+ * @position Internal component; consumed by MonthYearWheels.tsx,
12
+ * TouchTimeField.tsx and TouchDateTimeField.tsx
10
13
  *
11
- * A wheel is a scroll container, not a custom gesture surface. Momentum,
12
- * rubber-banding, and the settle animation are the platform's; all this adds
13
- * is `scroll-snap-align: center` on each option, half a viewport of padding at
14
- * each end so the first and last option can reach the middle, and a commit
15
- * when the scrolling stops and no finger or mouse drag still holds it.
14
+ * Wheel picks its column by the primary pointer. Under a finger it is
15
+ * PickerWheel.tsx, the touch layer, imported here alone. Under a fine pointer
16
+ * it is the snap-scrolling column below.
16
17
  *
17
- * The falloff (rows fading and tipping away from the centre) is a CSS
18
- * scroll-driven animation on a `view()` timeline — the browser interpolates it
19
- * against each row's own position in the scrollport, so it stays glued to the
20
- * finger with no JS in the frame loop. It is guarded by `@supports`, because a
21
- * browser that does not understand `animation-timeline` would otherwise run
22
- * the same keyframes on the document timeline and simply play them once.
23
- *
24
- * Under Reduce Motion, the wheel's own scrolls (a step from a key or a click,
25
- * the travel to the nearest enabled row) land without travel. They cross-fade
26
- * on a touch screen and land at once otherwise. A finger's scroll and its
27
- * momentum stay the platform's.
28
- *
29
- * Accessibility: this is a listbox, not a novel widget. It is one tab stop
30
- * with arrow/Home/End/PageUp/PageDown keys, `aria-activedescendant` tracking
31
- * the active row, and every row reachable by tap — none of which depends on
32
- * the scroll-driven decoration.
18
+ * The scrolling column is a scroll container: momentum, rubber-banding and the
19
+ * settle are the platform's. Its rows fade and tip on a CSS `view()` timeline,
20
+ * behind `@supports`. Under Reduce Motion its own scrolls land without travel.
33
21
  *
34
22
  * SYNC: When modified, update:
23
+ * - /packages/core/src/DateInput/PickerWheel.tsx (the touch column)
24
+ * - /packages/core/src/DateInput/wheelOptions.ts
35
25
  * - /packages/core/src/DateInput/TouchDateField.tsx
36
26
  * - /packages/core/src/DateTimeInput/TouchDateTimeField.tsx
37
27
  * - /packages/core/src/DateInput/DateInput.doc.mjs
38
28
  * - /packages/core/src/DateInput/DateInputTouch.test.tsx
39
29
  */
40
30
 
41
- import {useCallback, useEffect, useId, useRef, useState} from 'react';
31
+ import {
32
+ useCallback,
33
+ useEffect,
34
+ useImperativeHandle,
35
+ useRef,
36
+ useState,
37
+ } from 'react';
42
38
  import * as stylex from '@stylexjs/stylex';
43
39
  import {
44
40
  colorVars,
@@ -54,10 +50,27 @@ import {
54
50
  reducedMotionFade,
55
51
  type ReducedMotionDip,
56
52
  } from '../motion/reducedMotion';
53
+ import {useTouchPresentation} from '../utils/touchPresentation';
54
+ import {PickerWheel} from './PickerWheel';
57
55
  import {dateInputTouchSizes, dateInputTouchGeometry} from './tokens.stylex';
58
56
  import {useOwnScrollGesture} from './useOwnScrollGesture';
59
57
  import {usePointerDragScroll} from './usePointerDragScroll';
60
58
  import {useScrollSettle} from './useScrollSettle';
59
+ import {useWheelListbox} from './useWheelListbox';
60
+ import {
61
+ canSpinTo,
62
+ endIndex,
63
+ nearestEnabledIndex,
64
+ steppedIndex,
65
+ type WheelProps,
66
+ } from './wheelOptions';
67
+
68
+ export {
69
+ nearestEnabledIndex,
70
+ type WheelHandle,
71
+ type WheelOption,
72
+ type WheelProps,
73
+ } from './wheelOptions';
61
74
 
62
75
  const ITEM_BLOCK_SIZE = dateInputTouchSizes.wheelItemSize;
63
76
 
@@ -67,23 +80,38 @@ const ITEM_BLOCK_SIZE = dateInputTouchSizes.wheelItemSize;
67
80
  * at the top — which is what a `view()` timeline over the `cover` range means,
68
81
  * and why this reads as a cylinder rotating under the finger.
69
82
  */
70
- const falloff = stylex.keyframes({
83
+ const tip = stylex.keyframes({
84
+ '0%': {transform: 'rotateX(52deg) scale(0.86)'},
85
+ '50%': {transform: 'rotateX(0deg) scale(1)'},
86
+ '100%': {transform: 'rotateX(-52deg) scale(0.86)'},
87
+ });
88
+
89
+ /**
90
+ * Colour keeps every row at WCAG AA, which an opacity fade does not. The ends
91
+ * stop halfway to the secondary text colour, because that colour alone falls
92
+ * below AA in two shipped themes.
93
+ */
94
+ const fade = stylex.keyframes({
71
95
  '0%': {
72
- opacity: 0.3,
73
- transform: 'rotateX(52deg) scale(0.86)',
74
- },
75
- '50%': {
76
- opacity: 1,
77
- transform: 'rotateX(0deg) scale(1)',
96
+ color: `color-mix(in oklab, ${colorVars['--color-text-primary']}, ${colorVars['--color-text-secondary']})`,
78
97
  },
98
+ '50%': {color: colorVars['--color-text-primary']},
79
99
  '100%': {
80
- opacity: 0.3,
81
- transform: 'rotateX(-52deg) scale(0.86)',
100
+ color: `color-mix(in oklab, ${colorVars['--color-text-primary']}, ${colorVars['--color-text-secondary']})`,
82
101
  },
83
102
  });
84
103
 
85
- /** Motion-free equivalent: the depth cue survives as opacity alone. */
86
- const fadeOnly = stylex.keyframes({
104
+ /**
105
+ * A disabled row keeps its disabled colour and fades by opacity instead: WCAG
106
+ * 1.4.3 exempts inactive components from the contrast minimum.
107
+ */
108
+ const tipAndDim = stylex.keyframes({
109
+ '0%': {opacity: 0.3, transform: 'rotateX(52deg) scale(0.86)'},
110
+ '50%': {opacity: 1, transform: 'rotateX(0deg) scale(1)'},
111
+ '100%': {opacity: 0.3, transform: 'rotateX(-52deg) scale(0.86)'},
112
+ });
113
+
114
+ const dim = stylex.keyframes({
87
115
  '0%': {opacity: 0.3},
88
116
  '50%': {opacity: 1},
89
117
  '100%': {opacity: 0.3},
@@ -111,7 +139,7 @@ const styles = stylex.create({
111
139
  overscrollBehavior: 'contain',
112
140
  // Room for row 0 and row n-1 to reach the centre.
113
141
  paddingBlock: dateInputTouchGeometry.wheelEdgePadding,
114
- // Gives the rotateX falloff somewhere to recede to.
142
+ // Gives the rotateX tip somewhere to recede to.
115
143
  perspective: '520px',
116
144
  transformStyle: 'preserve-3d',
117
145
  scrollbarWidth: 'none',
@@ -140,7 +168,7 @@ const styles = stylex.create({
140
168
  whiteSpace: 'nowrap',
141
169
  // NO `overflow: hidden` here. It would make the row itself a scroll
142
170
  // container, and `view()` binds to the subject's nearest ancestor scroll
143
- // container — the falloff would measure the row against itself and sit
171
+ // container — the tip would measure the row against itself and sit
144
172
  // frozen at 50% forever. Clipping belongs on the inner element.
145
173
  cursor: {
146
174
  default: 'pointer',
@@ -151,7 +179,7 @@ const styles = stylex.create({
151
179
  transitionDuration: durationVars['--duration-fast'],
152
180
  },
153
181
  /**
154
- * The falloff rides an inner element, never the row itself.
182
+ * The tip rides an inner element, never the row itself.
155
183
  *
156
184
  * A snap area is the element's TRANSFORMED border box, so animating the row
157
185
  * would move the very positions the scroller is snapping to — the wheel
@@ -167,15 +195,14 @@ const styles = stylex.create({
167
195
  overflow: 'hidden',
168
196
  textOverflow: 'ellipsis',
169
197
  // The wheel look. Held behind @supports so browsers without scroll-driven
170
- // animations get a plain, fully legible list instead of these keyframes
171
- // playing themselves out once on the document timeline. Under reduced
172
- // motion the same timeline drives opacity only — the depth cue survives,
173
- // the tipping does not.
198
+ // animations get a plain list instead of these keyframes playing
199
+ // themselves out once on the document timeline. Under reduced motion, the
200
+ // colour fade on the row keeps the depth cue.
174
201
  animationName: {
175
202
  default: null,
176
203
  '@supports (animation-timeline: view())': {
177
- default: falloff,
178
- '@media (prefers-reduced-motion: reduce)': fadeOnly,
204
+ default: tip,
205
+ '@media (prefers-reduced-motion: reduce)': 'none',
179
206
  },
180
207
  },
181
208
  animationTimeline: 'view(y)',
@@ -185,6 +212,31 @@ const styles = stylex.create({
185
212
  animationTimingFunction: 'linear',
186
213
  backfaceVisibility: 'hidden',
187
214
  },
215
+ itemInnerDisabled: {
216
+ animationName: {
217
+ default: null,
218
+ '@supports (animation-timeline: view())': {
219
+ default: tipAndDim,
220
+ '@media (prefers-reduced-motion: reduce)': dim,
221
+ },
222
+ },
223
+ },
224
+ /**
225
+ * The colour fade, on the row and not the tipped inner element: colour does
226
+ * not move a snap area. An animated colour outranks the selected and
227
+ * disabled colours, so those rows do not take this fade.
228
+ */
229
+ itemFade: {
230
+ animationName: {
231
+ default: null,
232
+ '@supports (animation-timeline: view())': fade,
233
+ },
234
+ animationTimeline: 'view(y)',
235
+ animationRange: 'cover 0% cover 100%',
236
+ animationFillMode: 'both',
237
+ animationDuration: 'auto',
238
+ animationTimingFunction: 'linear',
239
+ },
188
240
  itemActive: {
189
241
  color: colorVars['--color-text-accent'],
190
242
  fontWeight: fontWeightVars['--font-weight-semibold'],
@@ -214,80 +266,35 @@ const styles = stylex.create({
214
266
  },
215
267
  });
216
268
 
217
- export interface WheelOption {
218
- /** Stable numeric identity of the row (a month 1-12, or a year). */
219
- value: number;
220
- /** Row text. */
221
- label: string;
222
- /**
223
- * Rows outside min/max stay visible but cannot be committed: a wheel that
224
- * stops on one travels on to the nearest enabled row.
225
- */
226
- isDisabled?: boolean;
227
- }
228
-
229
- export interface WheelProps {
230
- /** Accessible name for the column, e.g. "Month". */
231
- label: string;
232
- /** Rows, top to bottom. */
233
- options: ReadonlyArray<WheelOption>;
234
- /** Committed value; must match one option's `value`. */
235
- value: number;
236
- /** Fired when the wheel comes to rest on a different, enabled row. */
237
- onChange: (value: number) => void;
238
- /**
239
- * False while the wheel is hidden — scroll offsets of a display:none
240
- * scroller are meaningless, so listeners and the initial scroll wait.
241
- */
242
- isActive?: boolean;
243
- }
244
-
245
269
  /**
246
- * The enabled row nearest `index`: `index` itself when it is enabled,
247
- * otherwise the closest enabled row on either side. A tie goes to the side of
248
- * `towardIndex` (the committed row), and a wheel with no enabled row stays on
249
- * `towardIndex`.
270
+ * One picker column: UIPickerView's motion with flat rows under a finger, the
271
+ * snap-scrolling column under a fine pointer.
250
272
  *
251
273
  * @example
252
274
  * ```
253
- * // Hours 0-23 with 09:00-17:00 bounds: stopping on 7 rests on 9.
254
- * nearestEnabledIndex(hourOptions, 7, 10); // 9
275
+ * <Wheel
276
+ * label="Month"
277
+ * options={monthOptions}
278
+ * value={month}
279
+ * onChange={setMonth}
280
+ * />
255
281
  * ```
256
282
  */
257
- export function nearestEnabledIndex(
258
- options: ReadonlyArray<WheelOption>,
259
- index: number,
260
- towardIndex: number,
261
- ): number {
262
- const isEnabled = (i: number) =>
263
- i >= 0 && i < options.length && !options[i].isDisabled;
264
- if (isEnabled(index)) {
265
- return index;
266
- }
267
- for (let distance = 1; distance < options.length; distance++) {
268
- const below = index - distance;
269
- const above = index + distance;
270
- const isBelowEnabled = isEnabled(below);
271
- const isAboveEnabled = isEnabled(above);
272
- if (isBelowEnabled && isAboveEnabled) {
273
- return towardIndex < index ? below : above;
274
- }
275
- if (isBelowEnabled) {
276
- return below;
277
- }
278
- if (isAboveEnabled) {
279
- return above;
280
- }
281
- }
282
- return towardIndex;
283
+ export function Wheel(props: WheelProps) {
284
+ // One touch model on every touch device: a finger gets UIPickerView's motion
285
+ // with flat rows, a fine pointer the scrolling column.
286
+ const {isTouch} = useTouchPresentation();
287
+ return isTouch ? <PickerWheel {...props} /> : <ScrollWheel {...props} />;
283
288
  }
284
289
 
290
+ Wheel.displayName = 'Wheel';
291
+
285
292
  /**
286
- * One snap-scrolling picker column.
293
+ * One snap-scrolling picker column, under a fine pointer.
287
294
  *
288
295
  * @example
289
296
  * ```
290
- * <Wheel
297
+ * <ScrollWheel
291
298
  * label="Month"
292
299
  * options={monthOptions}
293
300
  * value={month}
@@ -295,14 +302,32 @@ export function nearestEnabledIndex(
295
302
  * />
296
303
  * ```
297
304
  */
298
- export function Wheel({
305
+ export function ScrollWheel({
299
306
  label,
300
307
  options,
301
308
  value,
302
309
  onChange,
303
310
  isActive = true,
311
+ ref,
304
312
  }: WheelProps) {
305
- const id = useId();
313
+ // A spin commits the row at once. The new value then scrolls the column
314
+ // there, as any new value does.
315
+ useImperativeHandle(
316
+ ref,
317
+ () => ({
318
+ spinTo: async index => {
319
+ if (!canSpinTo(options, index)) {
320
+ return false;
321
+ }
322
+ const option = options[index];
323
+ if (option.value !== value) {
324
+ onChange(option.value);
325
+ }
326
+ return true;
327
+ },
328
+ }),
329
+ [options, value, onChange],
330
+ );
306
331
  const scrollerRef = useRef<HTMLDivElement | null>(null);
307
332
  const selectedIndex = Math.max(
308
333
  0,
@@ -462,6 +487,8 @@ export function Wheel({
462
487
  // useScrollSettle. The settle handler re-checks the position afterwards, so
463
488
  // a correction that is genuinely needed still happens, just at rest.
464
489
  const parkedRef = useRef(false);
490
+ // Syncs the wheel's scroll position with the selected index while the wheel
491
+ // is active.
465
492
  useEffect(() => {
466
493
  if (!isActive) {
467
494
  parkedRef.current = false;
@@ -492,6 +519,8 @@ export function Wheel({
492
519
  // Highlight follows the finger. rAF-throttled: a scroll can fire far more
493
520
  // often than the display refreshes, and this only feeds a repaint.
494
521
  const frameRef = useRef<number | undefined>(undefined);
522
+ // Syncs a scroll listener with the active wheel. It updates the highlighted
523
+ // row.
495
524
  useEffect(() => {
496
525
  const scroller = scrollerRef.current;
497
526
  if (scroller == null || !isActive) {
@@ -531,69 +560,63 @@ export function Wheel({
531
560
  // there is no way to share — it takes every touch that lands on it.
532
561
  useOwnScrollGesture(scrollerRef, 'all', {isEnabled: isActive});
533
562
 
534
- const moveBy = useCallback(
535
- (delta: number) => {
536
- const next = Math.min(
537
- options.length - 1,
538
- Math.max(0, activeIndex + delta),
539
- );
540
- const option = options[next];
541
- if (option == null || option.isDisabled) {
563
+ const moveTo = useCallback(
564
+ (row: number | null) => {
565
+ const option = row == null ? undefined : options[row];
566
+ if (row == null || option == null || option.isDisabled) {
542
567
  return;
543
568
  }
544
- setActiveIndex(next);
545
- scrollToIndex(next, 'smooth');
569
+ setActiveIndex(row);
570
+ scrollToIndex(row, 'smooth');
546
571
  if (option.value !== value) {
547
572
  onChange(option.value);
548
573
  }
549
574
  },
550
- [activeIndex, options, scrollToIndex, value, onChange],
575
+ [options, scrollToIndex, value, onChange],
576
+ );
577
+
578
+ const moveBy = useCallback(
579
+ (delta: number) => moveTo(steppedIndex(options, activeIndex, delta)),
580
+ [moveTo, options, activeIndex],
581
+ );
582
+
583
+ // Home and End: the first and the last enabled row.
584
+ const toEnd = useCallback(
585
+ (end: 'first' | 'last') => moveTo(endIndex(options, end)),
586
+ [moveTo, options],
551
587
  );
552
588
 
553
- const handleKeyDown = useCallback(
554
- (event: React.KeyboardEvent) => {
555
- switch (event.key) {
556
- case 'ArrowDown':
557
- event.preventDefault();
558
- moveBy(1);
559
- break;
560
- case 'ArrowUp':
561
- event.preventDefault();
562
- moveBy(-1);
563
- break;
564
- case 'PageDown':
565
- event.preventDefault();
566
- moveBy(10);
567
- break;
568
- case 'PageUp':
569
- event.preventDefault();
570
- moveBy(-10);
571
- break;
572
- case 'Home':
573
- event.preventDefault();
574
- moveBy(-activeIndex);
575
- break;
576
- case 'End':
577
- event.preventDefault();
578
- moveBy(options.length - 1 - activeIndex);
579
- break;
580
- default:
581
- break;
589
+ const activate = useCallback(
590
+ (index: number) => {
591
+ const option = options[index];
592
+ if (option == null || option.isDisabled) {
593
+ return;
594
+ }
595
+ setActiveIndex(index);
596
+ scrollToIndex(index, 'smooth');
597
+ if (option.value !== value) {
598
+ onChange(option.value);
582
599
  }
583
600
  },
584
- [moveBy, activeIndex, options.length],
601
+ [options, scrollToIndex, value, onChange],
585
602
  );
586
603
 
604
+ const {listboxProps, optionProps} = useWheelListbox({
605
+ label,
606
+ options,
607
+ value,
608
+ activeIndex,
609
+ stepBy: moveBy,
610
+ toEnd,
611
+ activate,
612
+ });
613
+
587
614
  return (
588
615
  <div {...stylex.props(styles.column)}>
589
616
  <div aria-hidden="true" {...stylex.props(styles.band)} />
590
617
  <div
591
618
  ref={scrollerRef}
592
- role="listbox"
593
- aria-label={label}
594
- aria-activedescendant={`${id}-${options[activeIndex]?.value}`}
595
- tabIndex={0}
596
- onKeyDown={handleKeyDown}
619
+ {...listboxProps}
597
620
  // Read in the capture phase. usePointerDragScroll stops a primary
598
621
  // mouse press from bubbling, so that it does not reach BottomSheet's
599
622
  // drag. A bubbling handler would never see a mouse, and would keep the
@@ -608,26 +631,20 @@ export function Wheel({
608
631
  {options.map((option, index) => (
609
632
  <div
610
633
  key={option.value}
611
- id={`${id}-${option.value}`}
612
- role="option"
613
- aria-selected={option.value === value}
614
- aria-disabled={option.isDisabled || undefined}
615
- onClick={() => {
616
- if (option.isDisabled) {
617
- return;
618
- }
619
- setActiveIndex(index);
620
- scrollToIndex(index, 'smooth');
621
- if (option.value !== value) {
622
- onChange(option.value);
623
- }
624
- }}
634
+ {...optionProps(option, index)}
625
635
  {...stylex.props(
626
636
  styles.item,
637
+ index !== activeIndex && !option.isDisabled && styles.itemFade,
627
638
  index === activeIndex && styles.itemActive,
628
639
  option.isDisabled && styles.itemDisabled,
629
640
  )}>
630
- <span {...stylex.props(styles.itemInner)}>{option.label}</span>
641
+ <span
642
+ {...stylex.props(
643
+ styles.itemInner,
644
+ option.isDisabled && styles.itemInnerDisabled,
645
+ )}>
646
+ {option.label}
647
+ </span>
631
648
  </div>
632
649
  ))}
633
650
  </div>
@@ -635,4 +652,4 @@ export function Wheel({
635
652
  );
636
653
  }
637
654
 
638
- Wheel.displayName = 'Wheel';
655
+ ScrollWheel.displayName = 'ScrollWheel';
@@ -0,0 +1,15 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file datePickerTouch.ts
5
+ * @input The date and time pickers' touch-only pieces
6
+ * @output Re-exports what the date and time sheets use only under a finger:
7
+ * TimeWheels
8
+ * @position The pickers' touch layer. The sheets import touch behaviour from
9
+ * here only, so a desktop build can replace this one module.
10
+ *
11
+ * SYNC: When modified, update TouchTimeField.tsx and TouchDateTimeField.tsx.
12
+ */
13
+
14
+ export {TimeWheels} from '../TimeInput/TimeWheels';
15
+ export type {TimeWheelsProps} from '../TimeInput/TimeWheels';
@@ -6,7 +6,8 @@
6
6
  * @file useOwnScrollGesture.ts
7
7
  * @input A scroll container ref and which axis it owns
8
8
  * @output Stops touch gestures on that container from reaching an ancestor
9
- * @position Internal behavior hook; consumed by Wheel.tsx and MonthScroller.tsx
9
+ * @position Internal behavior hook; consumed by Wheel.tsx, PickerWheel.tsx and
10
+ * MonthScroller.tsx
10
11
  *
11
12
  * Lets a nested scroller keep the finger that lands on it.
12
13
  *
@@ -114,6 +115,16 @@ export type OwnScrollGestureOptions = {
114
115
  * so momentum and snapping are never second-guessed.
115
116
  */
116
117
  onSwipe?: (direction: 1 | -1) => void;
118
+ /**
119
+ * Also keep the pointer a touch lands with, for an `'all'` scroller that pans
120
+ * through the gesture system rather than natively. A sheet arms its pull-down
121
+ * on its body's `pointerdown`, and counts on a native pan to cancel a touch
122
+ * pointer. A pan of the gesture system never cancels it. Without this, the
123
+ * sheet follows the first 8 px of a downward drag before the scroller's own
124
+ * pan takes over. The gesture host and the shared modality tracker listen in
125
+ * the capture phase, before this.
126
+ */
127
+ isPointerKept?: boolean;
117
128
  };
118
129
 
119
130
  /**
@@ -130,13 +141,15 @@ export function useOwnScrollGesture(
130
141
  axis: OwnedAxis = 'all',
131
142
  options: OwnScrollGestureOptions = {},
132
143
  ): void {
133
- const {isEnabled = true, onSwipe} = options;
144
+ const {isEnabled = true, onSwipe, isPointerKept = false} = options;
134
145
 
135
146
  // Read through a ref so a caller need not memoize the callback: re-running
136
147
  // this effect would tear the listeners off mid-gesture.
137
148
  const onSwipeRef = useRef(onSwipe);
138
149
  onSwipeRef.current = onSwipe;
139
150
 
151
+ // Syncs touch listeners on the element with `isEnabled`. They decide which
152
+ // gesture owns a horizontal scroll.
140
153
  useEffect(() => {
141
154
  const element = ref.current;
142
155
  if (element == null || !isEnabled) {
@@ -213,15 +226,24 @@ export function useOwnScrollGesture(
213
226
  claimed = null;
214
227
  };
215
228
 
229
+ const keepPointer = (event: PointerEvent) => event.stopPropagation();
230
+ const isKeepingPointer = axis === 'all' && isPointerKept;
231
+
216
232
  element.addEventListener('touchstart', onStart, {passive: true});
217
233
  element.addEventListener('touchmove', onMove, {passive: true});
218
234
  element.addEventListener('touchend', onEnd, {passive: true});
219
235
  element.addEventListener('touchcancel', onEnd, {passive: true});
236
+ if (isKeepingPointer) {
237
+ element.addEventListener('pointerdown', keepPointer);
238
+ }
220
239
  return () => {
221
240
  element.removeEventListener('touchstart', onStart);
222
241
  element.removeEventListener('touchmove', onMove);
223
242
  element.removeEventListener('touchend', onEnd);
224
243
  element.removeEventListener('touchcancel', onEnd);
244
+ if (isKeepingPointer) {
245
+ element.removeEventListener('pointerdown', keepPointer);
246
+ }
225
247
  };
226
- }, [ref, axis, isEnabled]);
248
+ }, [ref, axis, isEnabled, isPointerKept]);
227
249
  }