@astryxdesign/core 0.7.7 → 0.7.8-canary.0d54fd3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (682) hide show
  1. package/dist/AlertDialog/AlertDialog.d.ts +4 -1
  2. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  3. package/dist/AlertDialog/AlertDialog.js +46 -6
  4. package/dist/AppShell/AppShell.d.ts.map +1 -1
  5. package/dist/AppShell/AppShell.js +11 -3
  6. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  7. package/dist/BottomSheet/BottomSheet.js +1 -0
  8. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  9. package/dist/BottomSheet/BottomSheetPanel.js +25 -4
  10. package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
  11. package/dist/BottomSheet/BottomSheetSwitcher.js +5 -0
  12. package/dist/BottomSheet/useMobileKeyboard.d.ts.map +1 -1
  13. package/dist/BottomSheet/useMobileKeyboard.js +6 -0
  14. package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
  15. package/dist/BottomSheet/useSheetGestures.js +12 -1
  16. package/dist/Button/Button.d.ts.map +1 -1
  17. package/dist/Button/Button.js +17 -1
  18. package/dist/Calendar/Calendar.d.ts.map +1 -1
  19. package/dist/Calendar/Calendar.js +18 -22
  20. package/dist/Calendar/getWeekdayHeaderNames.d.ts +16 -0
  21. package/dist/Calendar/getWeekdayHeaderNames.d.ts.map +1 -0
  22. package/dist/Calendar/getWeekdayHeaderNames.js +70 -0
  23. package/dist/Calendar/hooks/useCalendarDays.d.ts.map +1 -1
  24. package/dist/Calendar/hooks/useCalendarDays.js +2 -10
  25. package/dist/Calendar/{standaloneShortWeekdayNames.generated.d.ts → weekdayHeaderNames.generated.d.ts} +14 -14
  26. package/dist/Calendar/weekdayHeaderNames.generated.d.ts.map +1 -0
  27. package/dist/Calendar/{standaloneShortWeekdayNames.generated.js → weekdayHeaderNames.generated.js} +12 -12
  28. package/dist/Carousel/Carousel.d.ts.map +1 -1
  29. package/dist/Carousel/Carousel.js +2 -0
  30. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  31. package/dist/Chat/ChatComposerInput.js +6 -1
  32. package/dist/Chat/ChatMessageList.d.ts.map +1 -1
  33. package/dist/Chat/ChatMessageList.js +2 -1
  34. package/dist/Chat/useChatDictation.d.ts.map +1 -1
  35. package/dist/Chat/useChatDictation.js +2 -0
  36. package/dist/Chat/useChatNewMessages.js +1 -1
  37. package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
  38. package/dist/Chat/useChatStreamScroll.js +2 -0
  39. package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
  40. package/dist/Chat/useSpeechRecognition.js +3 -0
  41. package/dist/Chat/useTriggerMenu.js +1 -1
  42. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  43. package/dist/CheckboxInput/CheckboxInput.js +17 -12
  44. package/dist/CheckboxList/CheckboxList.d.ts +8 -1
  45. package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
  46. package/dist/CheckboxList/CheckboxList.js +2 -0
  47. package/dist/CodeBlock/CodeBlock.d.ts +10 -1
  48. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  49. package/dist/CodeBlock/CodeBlock.js +28 -11
  50. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  51. package/dist/CommandPalette/CommandPalette.js +2 -0
  52. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  53. package/dist/CommandPalette/CommandPaletteItem.js +2 -0
  54. package/dist/ComplexSelector/ComplexSelector.d.ts +4 -1
  55. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  56. package/dist/ComplexSelector/ComplexSelector.js +14 -4
  57. package/dist/ContextMenu/ContextMenu.js +2 -2
  58. package/dist/DateInput/MonthScroller.d.ts.map +1 -1
  59. package/dist/DateInput/MonthScroller.js +5 -2
  60. package/dist/DateInput/PickerWheel.d.ts +19 -0
  61. package/dist/DateInput/PickerWheel.d.ts.map +1 -0
  62. package/dist/DateInput/PickerWheel.js +625 -0
  63. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  64. package/dist/DateInput/TouchDateField.js +9 -30
  65. package/dist/DateInput/Wheel.d.ts +18 -37
  66. package/dist/DateInput/Wheel.d.ts.map +1 -1
  67. package/dist/DateInput/Wheel.js +84 -113
  68. package/dist/DateInput/useOwnScrollGesture.d.ts +10 -0
  69. package/dist/DateInput/useOwnScrollGesture.d.ts.map +1 -1
  70. package/dist/DateInput/useOwnScrollGesture.js +16 -3
  71. package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -1
  72. package/dist/DateInput/usePointerDragScroll.js +2 -0
  73. package/dist/DateInput/useScrollSettle.d.ts.map +1 -1
  74. package/dist/DateInput/useScrollSettle.js +3 -0
  75. package/dist/DateInput/useWheelListbox.d.ts +59 -0
  76. package/dist/DateInput/useWheelListbox.d.ts.map +1 -0
  77. package/dist/DateInput/useWheelListbox.js +88 -0
  78. package/dist/DateInput/wheelOptions.d.ts +74 -0
  79. package/dist/DateInput/wheelOptions.d.ts.map +1 -0
  80. package/dist/DateInput/wheelOptions.js +98 -0
  81. package/dist/DateInput/wheelPhysics.d.ts +127 -0
  82. package/dist/DateInput/wheelPhysics.d.ts.map +1 -0
  83. package/dist/DateInput/wheelPhysics.js +341 -0
  84. package/dist/DateInput/wheelStrip.d.ts +92 -0
  85. package/dist/DateInput/wheelStrip.d.ts.map +1 -0
  86. package/dist/DateInput/wheelStrip.js +258 -0
  87. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  88. package/dist/DateTimeInput/TouchDateTimeField.js +10 -10
  89. package/dist/Dialog/Dialog.d.ts.map +1 -1
  90. package/dist/Dialog/Dialog.js +9 -32
  91. package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
  92. package/dist/Drawer/useDrawerDialogPresence.js +3 -0
  93. package/dist/DropdownMenu/useMenuOverflow.d.ts.map +1 -1
  94. package/dist/DropdownMenu/useMenuOverflow.js +5 -0
  95. package/dist/Field/Field.js +2 -2
  96. package/dist/FieldStatus/useFieldStatusAnnouncement.d.ts.map +1 -1
  97. package/dist/FieldStatus/useFieldStatusAnnouncement.js +1 -0
  98. package/dist/FormLayout/FormLayout.d.ts +5 -1
  99. package/dist/FormLayout/FormLayout.d.ts.map +1 -1
  100. package/dist/HoverCard/HoverCard.d.ts +6 -4
  101. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  102. package/dist/HoverCard/HoverCard.js +48 -3
  103. package/dist/HoverCard/useHoverCard.d.ts +5 -4
  104. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  105. package/dist/HoverCard/useHoverCard.js +20 -33
  106. package/dist/Icon/Icon.d.ts +5 -1
  107. package/dist/Icon/Icon.d.ts.map +1 -1
  108. package/dist/Icon/Icon.js +5 -2
  109. package/dist/InfoTip/InfoTip.d.ts +5 -5
  110. package/dist/InfoTip/InfoTip.d.ts.map +1 -1
  111. package/dist/InfoTip/InfoTip.js +58 -19
  112. package/dist/Item/useSwipeAction.d.ts.map +1 -1
  113. package/dist/Item/useSwipeAction.js +3 -0
  114. package/dist/Layer/modalOutlet.d.ts.map +1 -1
  115. package/dist/Layer/modalOutlet.js +2 -0
  116. package/dist/Layer/outsidePress.d.ts.map +1 -1
  117. package/dist/Layer/outsidePress.js +1 -0
  118. package/dist/Layer/useLayer.d.ts.map +1 -1
  119. package/dist/Layer/useLayer.js +4 -1
  120. package/dist/Layer/useLayerDismissal.d.ts.map +1 -1
  121. package/dist/Layer/useLayerDismissal.js +3 -0
  122. package/dist/Layer/useTouchTrigger.d.ts +13 -7
  123. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  124. package/dist/Layer/useTouchTrigger.js +20 -6
  125. package/dist/Layout/index.d.ts +1 -1
  126. package/dist/Layout/index.d.ts.map +1 -1
  127. package/dist/Layout/index.js +1 -1
  128. package/dist/Layout/layoutReset.js +1 -1
  129. package/dist/Layout/overlayPaddingReset.stylex.d.ts +68 -0
  130. package/dist/Layout/overlayPaddingReset.stylex.d.ts.map +1 -0
  131. package/dist/Layout/overlayPaddingReset.stylex.js +72 -0
  132. package/dist/Layout/padding.stylex.d.ts +5 -129
  133. package/dist/Layout/padding.stylex.d.ts.map +1 -1
  134. package/dist/Layout/padding.stylex.js +9 -143
  135. package/dist/Layout/paddingStyles.stylex.d.ts +83 -0
  136. package/dist/Layout/paddingStyles.stylex.d.ts.map +1 -0
  137. package/dist/Layout/paddingStyles.stylex.js +99 -0
  138. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  139. package/dist/Lightbox/Lightbox.js +20 -1
  140. package/dist/MobileNav/MobileNav.d.ts +3 -2
  141. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  142. package/dist/MobileNav/MobileNav.js +10 -26
  143. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  144. package/dist/MultiSelector/MultiSelector.js +2 -1
  145. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  146. package/dist/NumberInput/NumberInput.js +2 -1
  147. package/dist/Outline/useOutlineFromDOM.d.ts.map +1 -1
  148. package/dist/Outline/useOutlineFromDOM.js +3 -0
  149. package/dist/Outline/useScrollSpy.d.ts.map +1 -1
  150. package/dist/Outline/useScrollSpy.js +3 -0
  151. package/dist/OverflowList/OverflowList.d.ts.map +1 -1
  152. package/dist/OverflowList/OverflowList.js +3 -0
  153. package/dist/Popover/Popover.d.ts.map +1 -1
  154. package/dist/Popover/Popover.js +6 -0
  155. package/dist/Popover/usePopover.js +2 -2
  156. package/dist/PowerSearch/PowerSearch.d.ts +39 -4
  157. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  158. package/dist/PowerSearch/PowerSearch.js +441 -134
  159. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts +102 -0
  160. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -0
  161. package/dist/PowerSearch/PowerSearchBottomSheet.js +1919 -0
  162. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +35 -2
  163. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  164. package/dist/PowerSearch/PowerSearchEditPopover.js +43 -10
  165. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts +1 -1
  166. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts.map +1 -1
  167. package/dist/PowerSearch/PowerSearchFilterEditor.js +4 -2
  168. package/dist/PowerSearch/PowerSearchToken.d.ts +1 -1
  169. package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
  170. package/dist/PowerSearch/PowerSearchToken.js +3 -2
  171. package/dist/PowerSearch/PowerSearchValueEditor.d.ts +38 -3
  172. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  173. package/dist/PowerSearch/PowerSearchValueEditor.js +273 -86
  174. package/dist/PowerSearch/formatFilterValue.d.ts +14 -7
  175. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  176. package/dist/PowerSearch/formatFilterValue.js +31 -23
  177. package/dist/PowerSearch/formatTokenValue.d.ts +28 -0
  178. package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -0
  179. package/dist/PowerSearch/formatTokenValue.js +161 -0
  180. package/dist/PowerSearch/index.d.ts +1 -1
  181. package/dist/PowerSearch/index.d.ts.map +1 -1
  182. package/dist/PowerSearch/powerSearchDateZone.d.ts +25 -0
  183. package/dist/PowerSearch/powerSearchDateZone.d.ts.map +1 -0
  184. package/dist/PowerSearch/powerSearchDateZone.js +57 -0
  185. package/dist/PowerSearch/powerSearchSheetUtils.d.ts +65 -0
  186. package/dist/PowerSearch/powerSearchSheetUtils.d.ts.map +1 -0
  187. package/dist/PowerSearch/powerSearchSheetUtils.js +168 -0
  188. package/dist/PowerSearch/types.d.ts +8 -1
  189. package/dist/PowerSearch/types.d.ts.map +1 -1
  190. package/dist/ProgressBar/ProgressBarTouch.d.ts.map +1 -1
  191. package/dist/ProgressBar/ProgressBarTouch.js +2 -0
  192. package/dist/RadioList/RadioList.d.ts.map +1 -1
  193. package/dist/RadioList/RadioList.js +3 -2
  194. package/dist/RadioList/RadioListItem.d.ts +1 -1
  195. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  196. package/dist/RadioList/RadioListItem.js +5 -3
  197. package/dist/Resizable/ResizeHandle.d.ts +2 -1
  198. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  199. package/dist/Resizable/ResizeHandle.js +101 -77
  200. package/dist/Resizable/createResizable.d.ts +145 -0
  201. package/dist/Resizable/createResizable.d.ts.map +1 -0
  202. package/dist/Resizable/createResizable.js +575 -0
  203. package/dist/Resizable/useResizable.d.ts +3 -3
  204. package/dist/Resizable/useResizable.d.ts.map +1 -1
  205. package/dist/Resizable/useResizable.js +252 -459
  206. package/dist/SegmentedControl/useSegmentedSelectionMotion.d.ts.map +1 -1
  207. package/dist/SegmentedControl/useSegmentedSelectionMotion.js +3 -3
  208. package/dist/SelectableCard/SelectableCard.d.ts +2 -0
  209. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  210. package/dist/SelectableCard/SelectableCard.js +36 -11
  211. package/dist/SelectableCard/selectableCardInput.d.ts +12 -0
  212. package/dist/SelectableCard/selectableCardInput.d.ts.map +1 -0
  213. package/dist/SelectableCard/selectableCardInput.js +20 -0
  214. package/dist/Selector/Selector.d.ts.map +1 -1
  215. package/dist/Selector/Selector.js +7 -9
  216. package/dist/SideNav/SideNav.d.ts.map +1 -1
  217. package/dist/SideNav/SideNav.js +36 -5
  218. package/dist/Slider/Slider.d.ts.map +1 -1
  219. package/dist/Slider/Slider.js +16 -11
  220. package/dist/Slider/sliderTouchController.js +2 -2
  221. package/dist/Spinner/Spinner.d.ts +1 -1
  222. package/dist/Spinner/Spinner.d.ts.map +1 -1
  223. package/dist/Spinner/Spinner.js +60 -58
  224. package/dist/Stepper/Stepper.d.ts.map +1 -1
  225. package/dist/Stepper/Stepper.js +10 -15
  226. package/dist/Switch/Switch.d.ts.map +1 -1
  227. package/dist/Switch/Switch.js +4 -10
  228. package/dist/Switch/useSwitchTouch.js +4 -4
  229. package/dist/Table/BaseTable.d.ts.map +1 -1
  230. package/dist/Table/BaseTable.js +29 -8
  231. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  232. package/dist/Table/plugins/columnResize/useTableColumnResize.js +3 -1
  233. package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
  234. package/dist/Table/plugins/filtering/useTableFiltering.js +2 -1
  235. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  236. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +4 -0
  237. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
  238. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +2 -0
  239. package/dist/TextArea/TextArea.d.ts.map +1 -1
  240. package/dist/TextArea/TextArea.js +2 -1
  241. package/dist/TextInput/TextInput.d.ts +2 -2
  242. package/dist/TextInput/TextInput.d.ts.map +1 -1
  243. package/dist/TextInput/TextInput.js +12 -8
  244. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  245. package/dist/TimeInput/TimeInput.js +2 -0
  246. package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
  247. package/dist/TimeInput/TouchTimeField.js +2 -0
  248. package/dist/Timer/Timer.d.ts.map +1 -1
  249. package/dist/Timer/Timer.js +2 -0
  250. package/dist/Timestamp/Timestamp.js +1 -1
  251. package/dist/Timestamp/formatInstant.d.ts.map +1 -1
  252. package/dist/Timestamp/formatInstant.js +1 -23
  253. package/dist/Toast/Toast.d.ts +11 -1
  254. package/dist/Toast/Toast.d.ts.map +1 -1
  255. package/dist/Toast/Toast.js +25 -15
  256. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  257. package/dist/Toast/ToastViewport.js +97 -34
  258. package/dist/Toast/types.d.ts +9 -3
  259. package/dist/Toast/types.d.ts.map +1 -1
  260. package/dist/Toast/useToast.d.ts.map +1 -1
  261. package/dist/Toast/useToast.js +1 -0
  262. package/dist/Tokenizer/Tokenizer.d.ts +44 -46
  263. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  264. package/dist/Tokenizer/Tokenizer.js +20 -21
  265. package/dist/Tokenizer/TokenizerBottomSheet.d.ts +1 -1
  266. package/dist/Tokenizer/TokenizerBottomSheet.js +4 -6
  267. package/dist/Tokenizer/index.d.ts +1 -1
  268. package/dist/Tokenizer/index.d.ts.map +1 -1
  269. package/dist/Tooltip/Tooltip.d.ts +2 -23
  270. package/dist/Tooltip/Tooltip.d.ts.map +1 -1
  271. package/dist/Tooltip/Tooltip.js +5 -29
  272. package/dist/Tooltip/useTooltip.d.ts +23 -30
  273. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  274. package/dist/Tooltip/useTooltip.js +194 -108
  275. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  276. package/dist/Typeahead/BaseTypeahead.js +27 -18
  277. package/dist/Typeahead/TypeaheadItem.d.ts +2 -1
  278. package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
  279. package/dist/animator/createAnimator.d.ts +98 -0
  280. package/dist/animator/createAnimator.d.ts.map +1 -0
  281. package/dist/animator/createAnimator.js +259 -0
  282. package/dist/astryx.css +41 -7
  283. package/dist/gestures/GestureHost.d.ts +16 -1
  284. package/dist/gestures/GestureHost.d.ts.map +1 -1
  285. package/dist/gestures/GestureHost.js +1 -1
  286. package/dist/gestures/PressTracker.d.ts.map +1 -1
  287. package/dist/gestures/PressTracker.js +4 -3
  288. package/dist/hooks/ModalAnnounceProvider.d.ts.map +1 -1
  289. package/dist/hooks/ModalAnnounceProvider.js +1 -0
  290. package/dist/hooks/actionGroupTracker.d.ts +4 -1
  291. package/dist/hooks/actionGroupTracker.d.ts.map +1 -1
  292. package/dist/hooks/actionGroupTracker.js +13 -3
  293. package/dist/hooks/index.d.ts +1 -0
  294. package/dist/hooks/index.d.ts.map +1 -1
  295. package/dist/hooks/index.js +1 -0
  296. package/dist/hooks/longPressDetector.d.ts +66 -0
  297. package/dist/hooks/longPressDetector.d.ts.map +1 -0
  298. package/dist/hooks/longPressDetector.js +200 -0
  299. package/dist/hooks/pressGroupContext.d.ts +6 -0
  300. package/dist/hooks/pressGroupContext.d.ts.map +1 -0
  301. package/dist/hooks/pressGroupContext.js +20 -0
  302. package/dist/hooks/rootScrollStyles.d.ts +48 -0
  303. package/dist/hooks/rootScrollStyles.d.ts.map +1 -0
  304. package/dist/hooks/rootScrollStyles.js +207 -0
  305. package/dist/hooks/scrollLockTouchGuard.d.ts +13 -0
  306. package/dist/hooks/scrollLockTouchGuard.d.ts.map +1 -0
  307. package/dist/hooks/scrollLockTouchGuard.js +117 -0
  308. package/dist/hooks/scrollbarGutter.d.ts +4 -4
  309. package/dist/hooks/scrollbarGutter.d.ts.map +1 -1
  310. package/dist/hooks/scrollbarGutter.js +36 -23
  311. package/dist/hooks/useActionGroupTracking.d.ts +53 -0
  312. package/dist/hooks/useActionGroupTracking.d.ts.map +1 -0
  313. package/dist/hooks/useActionGroupTracking.js +174 -0
  314. package/dist/hooks/useAnimator.d.ts +41 -0
  315. package/dist/hooks/useAnimator.d.ts.map +1 -0
  316. package/dist/hooks/useAnimator.js +70 -0
  317. package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
  318. package/dist/hooks/useAnnounceRenderedText.js +1 -0
  319. package/dist/hooks/useAttachment.d.ts +1 -1
  320. package/dist/hooks/useAttachment.js +1 -1
  321. package/dist/hooks/useAutoMediaMode.d.ts.map +1 -1
  322. package/dist/hooks/useAutoMediaMode.js +1 -0
  323. package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
  324. package/dist/hooks/useBusyAnnouncement.js +2 -0
  325. package/dist/hooks/useDevWarning.d.ts.map +1 -1
  326. package/dist/hooks/useDevWarning.js +2 -0
  327. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  328. package/dist/hooks/useFocusTrap.js +2 -0
  329. package/dist/hooks/useGridFocus.d.ts +8 -5
  330. package/dist/hooks/useGridFocus.d.ts.map +1 -1
  331. package/dist/hooks/useGridFocus.js +4 -3
  332. package/dist/hooks/useHotkeys.d.ts.map +1 -1
  333. package/dist/hooks/useHotkeys.js +3 -0
  334. package/dist/hooks/useImageMode.d.ts.map +1 -1
  335. package/dist/hooks/useImageMode.js +3 -0
  336. package/dist/hooks/useInputStatusIcon.d.ts +1 -1
  337. package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
  338. package/dist/hooks/useInputStatusIcon.js +2 -2
  339. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  340. package/dist/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
  341. package/dist/hooks/useKeyboardHint.js +1 -1
  342. package/dist/hooks/useLongPress.d.ts +8 -9
  343. package/dist/hooks/useLongPress.d.ts.map +1 -1
  344. package/dist/hooks/useLongPress.js +23 -106
  345. package/dist/hooks/useMenuHover.d.ts.map +1 -1
  346. package/dist/hooks/useMenuHover.js +2 -0
  347. package/dist/hooks/useMenuPress.d.ts.map +1 -1
  348. package/dist/hooks/useMenuPress.js +3 -0
  349. package/dist/hooks/useOverflow.d.ts.map +1 -1
  350. package/dist/hooks/useOverflow.js +2 -1
  351. package/dist/hooks/usePressFeedback.d.ts.map +1 -1
  352. package/dist/hooks/usePressFeedback.js +1 -0
  353. package/dist/hooks/useResolvedRequired.d.ts +3 -0
  354. package/dist/hooks/useResolvedRequired.d.ts.map +1 -1
  355. package/dist/hooks/useResolvedRequired.js +3 -0
  356. package/dist/hooks/useScrollLock.d.ts +8 -9
  357. package/dist/hooks/useScrollLock.d.ts.map +1 -1
  358. package/dist/hooks/useScrollLock.js +50 -48
  359. package/dist/hooks/useScrollableArea.d.ts.map +1 -1
  360. package/dist/hooks/useScrollableArea.js +5 -0
  361. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  362. package/dist/hooks/useStreamingText.js +3 -0
  363. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts +8 -0
  364. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts.map +1 -0
  365. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.js +42 -0
  366. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.d.ts.map +1 -1
  367. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.js +6 -0
  368. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts +8 -0
  369. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts.map +1 -0
  370. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.js +14 -0
  371. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  372. package/dist/i18n/generated-locales/en.generated.js +30 -0
  373. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  374. package/dist/i18n/generated-locales/pseudo.generated.js +30 -0
  375. package/dist/index.d.ts +1 -0
  376. package/dist/index.d.ts.map +1 -1
  377. package/dist/index.js +4 -0
  378. package/dist/internal/indicatorPress.stylex.d.ts +20 -0
  379. package/dist/internal/indicatorPress.stylex.d.ts.map +1 -0
  380. package/dist/internal/indicatorPress.stylex.js +26 -0
  381. package/dist/internal/selectable-card.d.ts +21 -0
  382. package/dist/internal/selectable-card.d.ts.map +1 -0
  383. package/dist/internal/selectable-card.js +20 -0
  384. package/dist/internal/sheetDraft.d.ts +2 -2
  385. package/dist/internal/sheetDraft.js +2 -2
  386. package/dist/motion/animatedLayout.d.ts +8 -0
  387. package/dist/motion/animatedLayout.d.ts.map +1 -1
  388. package/dist/motion/animatedLayout.js +246 -53
  389. package/dist/motion/animator.d.ts +14 -14
  390. package/dist/motion/animator.d.ts.map +1 -1
  391. package/dist/motion/animator.js +45 -26
  392. package/dist/motion/frameBlock.d.ts +14 -0
  393. package/dist/motion/frameBlock.d.ts.map +1 -0
  394. package/dist/motion/frameBlock.js +16 -0
  395. package/dist/motion/progress.d.ts +88 -0
  396. package/dist/motion/progress.d.ts.map +1 -0
  397. package/dist/motion/progress.js +128 -0
  398. package/dist/motion/reducedMotion.d.ts.map +1 -1
  399. package/dist/motion/reducedMotion.js +3 -1
  400. package/dist/motion/uikit/alert.d.ts +41 -0
  401. package/dist/motion/uikit/alert.d.ts.map +1 -0
  402. package/dist/motion/uikit/alert.js +43 -0
  403. package/dist/motion/uikit/index.d.ts +4 -3
  404. package/dist/motion/uikit/index.d.ts.map +1 -1
  405. package/dist/motion/uikit/index.js +4 -3
  406. package/dist/motion/uikit/picker.d.ts +96 -0
  407. package/dist/motion/uikit/picker.d.ts.map +1 -0
  408. package/dist/motion/uikit/picker.js +117 -0
  409. package/dist/privateAttributes/pressGroupItem.stylex.d.ts +22 -0
  410. package/dist/privateAttributes/pressGroupItem.stylex.d.ts.map +1 -0
  411. package/dist/privateAttributes/pressGroupItem.stylex.js +36 -0
  412. package/dist/privateAttributes/reducedMotion.stylex.d.ts +23 -0
  413. package/dist/privateAttributes/reducedMotion.stylex.d.ts.map +1 -0
  414. package/dist/privateAttributes/reducedMotion.stylex.js +40 -0
  415. package/dist/theme/Theme.d.ts.map +1 -1
  416. package/dist/theme/Theme.js +29 -4
  417. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  418. package/dist/theme/generateThemeRules.js +14 -13
  419. package/dist/theme/motionKnobs.d.ts +4 -3
  420. package/dist/theme/motionKnobs.d.ts.map +1 -1
  421. package/dist/theme/motionKnobs.js +3 -2
  422. package/dist/theme/themeMotion.d.ts +6 -0
  423. package/dist/theme/themeMotion.d.ts.map +1 -1
  424. package/dist/theme/themeMotion.js +15 -2
  425. package/dist/theme/tokens.stylex.d.ts +3 -0
  426. package/dist/theme/tokens.stylex.d.ts.map +1 -1
  427. package/dist/theme/tokens.stylex.js +4 -1
  428. package/dist/utils/dateParser.d.ts.map +1 -1
  429. package/dist/utils/dateParser.js +12 -0
  430. package/dist/utils/disabledInteraction.d.ts +10 -2
  431. package/dist/utils/disabledInteraction.d.ts.map +1 -1
  432. package/dist/utils/disabledInteraction.js +16 -2
  433. package/dist/utils/focusReturn.d.ts +22 -25
  434. package/dist/utils/focusReturn.d.ts.map +1 -1
  435. package/dist/utils/focusReturn.js +36 -29
  436. package/dist/utils/index.d.ts +1 -1
  437. package/dist/utils/index.d.ts.map +1 -1
  438. package/dist/utils/index.js +1 -1
  439. package/dist/utils/interactionModality.d.ts.map +1 -1
  440. package/dist/utils/interactionModality.js +4 -0
  441. package/dist/utils/interactionOverlay.stylex.d.ts +3 -2
  442. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  443. package/dist/utils/interactionOverlay.stylex.js +3 -2
  444. package/dist/utils/isFocusDetached.d.ts +27 -0
  445. package/dist/utils/isFocusDetached.d.ts.map +1 -0
  446. package/dist/utils/isFocusDetached.js +32 -0
  447. package/dist/utils/plainDate.d.ts +31 -0
  448. package/dist/utils/plainDate.d.ts.map +1 -1
  449. package/dist/utils/plainDate.js +68 -4
  450. package/dist/utils/pressFeedback.d.ts.map +1 -1
  451. package/dist/utils/pressFeedback.js +20 -6
  452. package/dist/utils/triggerFocus.d.ts +36 -0
  453. package/dist/utils/triggerFocus.d.ts.map +1 -0
  454. package/dist/utils/triggerFocus.js +65 -0
  455. package/locales/en.json +120 -0
  456. package/locales/pseudo.json +90 -0
  457. package/package.json +14 -9
  458. package/src/AlertDialog/AlertDialog.doc.mjs +2 -2
  459. package/src/AlertDialog/AlertDialog.tsx +46 -5
  460. package/src/AppShell/AppShell.tsx +13 -4
  461. package/src/BottomSheet/BottomSheet.tsx +1 -0
  462. package/src/BottomSheet/BottomSheetPanel.tsx +39 -3
  463. package/src/BottomSheet/BottomSheetSwitcher.tsx +5 -0
  464. package/src/BottomSheet/useMobileKeyboard.ts +4 -0
  465. package/src/BottomSheet/useSheetGestures.ts +10 -1
  466. package/src/Button/Button.tsx +26 -4
  467. package/src/Calendar/Calendar.tsx +40 -32
  468. package/src/Calendar/getWeekdayHeaderNames.ts +88 -0
  469. package/src/Calendar/hooks/useCalendarDays.ts +5 -10
  470. package/src/Calendar/{standaloneShortWeekdayNames.generated.ts → weekdayHeaderNames.generated.ts} +14 -14
  471. package/src/Carousel/Carousel.tsx +1 -0
  472. package/src/Chat/ChatComposerInput.tsx +4 -7
  473. package/src/Chat/ChatMessageList.tsx +2 -1
  474. package/src/Chat/useChatDictation.ts +1 -0
  475. package/src/Chat/useChatNewMessages.ts +1 -1
  476. package/src/Chat/useChatStreamScroll.ts +2 -0
  477. package/src/Chat/useSpeechRecognition.ts +2 -0
  478. package/src/Chat/useTriggerMenu.tsx +1 -1
  479. package/src/CheckboxInput/CheckboxInput.doc.mjs +18 -0
  480. package/src/CheckboxInput/CheckboxInput.tsx +38 -15
  481. package/src/CheckboxList/CheckboxList.doc.mjs +7 -0
  482. package/src/CheckboxList/CheckboxList.tsx +9 -0
  483. package/src/CodeBlock/CodeBlock.doc.mjs +9 -1
  484. package/src/CodeBlock/CodeBlock.tsx +41 -4
  485. package/src/CommandPalette/CommandPalette.tsx +1 -0
  486. package/src/CommandPalette/CommandPaletteItem.tsx +1 -0
  487. package/src/ComplexSelector/ComplexSelector.tsx +20 -5
  488. package/src/ContextMenu/ContextMenu.tsx +2 -2
  489. package/src/DateInput/MonthScroller.tsx +8 -2
  490. package/src/DateInput/PickerWheel.tsx +765 -0
  491. package/src/DateInput/TouchDateField.tsx +6 -32
  492. package/src/DateInput/Wheel.tsx +94 -150
  493. package/src/DateInput/useOwnScrollGesture.ts +25 -3
  494. package/src/DateInput/usePointerDragScroll.ts +1 -0
  495. package/src/DateInput/useScrollSettle.ts +2 -0
  496. package/src/DateInput/useWheelListbox.ts +112 -0
  497. package/src/DateInput/wheelOptions.ts +155 -0
  498. package/src/DateInput/wheelPhysics.ts +406 -0
  499. package/src/DateInput/wheelStrip.ts +341 -0
  500. package/src/DateTimeInput/TouchDateTimeField.tsx +8 -13
  501. package/src/Dialog/Dialog.tsx +12 -32
  502. package/src/Drawer/useDrawerDialogPresence.ts +2 -0
  503. package/src/DropdownMenu/useMenuOverflow.ts +3 -0
  504. package/src/Field/Field.tsx +2 -2
  505. package/src/FieldStatus/useFieldStatusAnnouncement.ts +1 -0
  506. package/src/FormLayout/FormLayout.doc.mjs +181 -46
  507. package/src/FormLayout/FormLayout.tsx +5 -1
  508. package/src/HoverCard/HoverCard.doc.mjs +10 -8
  509. package/src/HoverCard/HoverCard.tsx +58 -6
  510. package/src/HoverCard/useHoverCard.doc.mjs +178 -36
  511. package/src/HoverCard/useHoverCard.tsx +49 -54
  512. package/src/Icon/Icon.doc.mjs +51 -10
  513. package/src/Icon/Icon.tsx +15 -7
  514. package/src/IconButton/IconButton.doc.mjs +141 -21
  515. package/src/InfoTip/InfoTip.tsx +72 -16
  516. package/src/Item/useSwipeAction.ts +2 -0
  517. package/src/Layer/modalOutlet.ts +2 -0
  518. package/src/Layer/outsidePress.ts +1 -0
  519. package/src/Layer/useLayer.tsx +3 -1
  520. package/src/Layer/useLayerDismissal.ts +2 -0
  521. package/src/Layer/useTouchTrigger.ts +19 -6
  522. package/src/Layout/index.ts +1 -1
  523. package/src/Layout/layoutReset.ts +1 -1
  524. package/src/Layout/overlayPaddingReset.stylex.ts +73 -0
  525. package/src/Layout/padding.stylex.ts +9 -133
  526. package/src/Layout/paddingStyles.stylex.ts +87 -0
  527. package/src/Lightbox/Lightbox.tsx +20 -1
  528. package/src/Lightbox/useLightbox.doc.mjs +167 -0
  529. package/src/MobileNav/MobileNav.tsx +10 -31
  530. package/src/MultiSelector/MultiSelector.tsx +2 -7
  531. package/src/NumberInput/NumberInput.tsx +2 -7
  532. package/src/Outline/useOutlineFromDOM.ts +2 -0
  533. package/src/Outline/useScrollSpy.ts +2 -0
  534. package/src/OverflowList/OverflowList.tsx +2 -0
  535. package/src/Popover/Popover.tsx +4 -0
  536. package/src/Popover/usePopover.tsx +2 -2
  537. package/src/PowerSearch/PowerSearch.doc.mjs +60 -8
  538. package/src/PowerSearch/PowerSearch.tsx +620 -157
  539. package/src/PowerSearch/PowerSearchBottomSheet.tsx +2525 -0
  540. package/src/PowerSearch/PowerSearchEditPopover.tsx +65 -9
  541. package/src/PowerSearch/PowerSearchFilterEditor.tsx +2 -0
  542. package/src/PowerSearch/PowerSearchToken.tsx +2 -0
  543. package/src/PowerSearch/PowerSearchValueEditor.tsx +340 -59
  544. package/src/PowerSearch/formatFilterValue.ts +49 -27
  545. package/src/PowerSearch/formatTokenValue.ts +220 -0
  546. package/src/PowerSearch/index.ts +5 -1
  547. package/src/PowerSearch/powerSearchDateZone.ts +95 -0
  548. package/src/PowerSearch/powerSearchSheetUtils.ts +224 -0
  549. package/src/PowerSearch/types.ts +8 -1
  550. package/src/ProgressBar/ProgressBarTouch.ts +2 -0
  551. package/src/RadioList/RadioList.tsx +3 -2
  552. package/src/RadioList/RadioListItem.tsx +5 -3
  553. package/src/Resizable/Resizable.doc.mjs +5 -4
  554. package/src/Resizable/ResizeHandle.tsx +169 -109
  555. package/src/Resizable/createResizable.ts +831 -0
  556. package/src/Resizable/useResizable.ts +292 -623
  557. package/src/SegmentedControl/useSegmentedSelectionMotion.ts +6 -3
  558. package/src/SelectableCard/SelectableCard.tsx +39 -10
  559. package/src/SelectableCard/selectableCardInput.ts +30 -0
  560. package/src/Selector/Selector.tsx +7 -19
  561. package/src/SideNav/SideNav.tsx +41 -5
  562. package/src/Slider/Slider.tsx +20 -11
  563. package/src/Slider/sliderTouchController.ts +2 -2
  564. package/src/Spinner/Spinner.tsx +77 -63
  565. package/src/Stepper/Stepper.tsx +10 -27
  566. package/src/Switch/Switch.tsx +2 -6
  567. package/src/Switch/useSwitchTouch.ts +4 -4
  568. package/src/Table/BaseTable.tsx +46 -12
  569. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +2 -1
  570. package/src/Table/plugins/filtering/useTableFiltering.tsx +1 -0
  571. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +4 -0
  572. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +2 -0
  573. package/src/TextArea/TextArea.tsx +2 -7
  574. package/src/TextInput/TextInput.tsx +13 -17
  575. package/src/TimeInput/TimeInput.tsx +2 -0
  576. package/src/TimeInput/TouchTimeField.tsx +2 -0
  577. package/src/Timer/Timer.tsx +1 -0
  578. package/src/Timestamp/Timestamp.tsx +1 -1
  579. package/src/Timestamp/formatInstant.ts +1 -33
  580. package/src/Toast/Toast.doc.mjs +4 -3
  581. package/src/Toast/Toast.tsx +52 -32
  582. package/src/Toast/ToastViewport.tsx +123 -35
  583. package/src/Toast/types.ts +9 -3
  584. package/src/Toast/useToast.tsx +1 -0
  585. package/src/Tokenizer/Tokenizer.doc.mjs +10 -10
  586. package/src/Tokenizer/Tokenizer.tsx +61 -62
  587. package/src/Tokenizer/TokenizerBottomSheet.tsx +9 -11
  588. package/src/Tokenizer/index.ts +1 -0
  589. package/src/Tooltip/Tooltip.tsx +6 -42
  590. package/src/Tooltip/useTooltip.doc.mjs +24 -0
  591. package/src/Tooltip/useTooltip.tsx +237 -134
  592. package/src/Typeahead/BaseTypeahead.tsx +27 -17
  593. package/src/Typeahead/TypeaheadItem.doc.mjs +6 -3
  594. package/src/Typeahead/TypeaheadItem.tsx +2 -1
  595. package/src/animator/createAnimator.doc.mjs +153 -0
  596. package/src/animator/createAnimator.ts +324 -0
  597. package/src/gestures/GestureHost.ts +1 -1
  598. package/src/gestures/PressTracker.ts +4 -3
  599. package/src/gestures/README.md +10 -4
  600. package/src/hooks/ModalAnnounceProvider.tsx +1 -0
  601. package/src/hooks/actionGroupTracker.ts +20 -5
  602. package/src/hooks/index.ts +2 -0
  603. package/src/hooks/longPressDetector.ts +273 -0
  604. package/src/hooks/pressGroupContext.ts +21 -0
  605. package/src/hooks/rootScrollStyles.ts +247 -0
  606. package/src/hooks/scrollLockTouchGuard.ts +149 -0
  607. package/src/hooks/scrollbarGutter.ts +41 -26
  608. package/src/hooks/useActionGroupTracking.ts +224 -0
  609. package/src/hooks/useAnimator.doc.mjs +109 -0
  610. package/src/hooks/useAnimator.ts +67 -0
  611. package/src/hooks/useAnnounceRenderedText.ts +1 -0
  612. package/src/hooks/useAttachment.ts +1 -1
  613. package/src/hooks/useAutoMediaMode.ts +1 -0
  614. package/src/hooks/useBusyAnnouncement.ts +2 -0
  615. package/src/hooks/useDevWarning.ts +2 -0
  616. package/src/hooks/useFocusTrap.ts +2 -0
  617. package/src/hooks/useGridFocus.doc.mjs +6 -6
  618. package/src/hooks/useGridFocus.ts +10 -7
  619. package/src/hooks/useHotkeys.ts +2 -0
  620. package/src/hooks/useImageMode.ts +2 -0
  621. package/src/hooks/useInputStatusIcon.tsx +3 -2
  622. package/src/hooks/useKeyboardHint.tsx +1 -1
  623. package/src/hooks/useLongPress.doc.mjs +2 -2
  624. package/src/hooks/useLongPress.ts +32 -122
  625. package/src/hooks/useMenuHover.ts +1 -0
  626. package/src/hooks/useMenuPress.ts +2 -0
  627. package/src/hooks/useOverflow.ts +2 -1
  628. package/src/hooks/usePressFeedback.ts +1 -0
  629. package/src/hooks/useResolvedRequired.ts +3 -0
  630. package/src/hooks/useScrollLock.doc.mjs +51 -12
  631. package/src/hooks/useScrollLock.ts +53 -60
  632. package/src/hooks/useScrollableArea.ts +4 -0
  633. package/src/hooks/useStreamingText.ts +2 -0
  634. package/src/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.ts +43 -0
  635. package/src/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.ts +6 -0
  636. package/src/i18n/generated-english/PowerSearch/formatTokenValue.generated.ts +15 -0
  637. package/src/i18n/generated-locales/en.generated.ts +41 -0
  638. package/src/i18n/generated-locales/pseudo.generated.ts +42 -0
  639. package/src/index.ts +13 -0
  640. package/src/internal/indicatorPress.stylex.ts +24 -0
  641. package/src/internal/selectable-card.ts +21 -0
  642. package/src/internal/sheetDraft.ts +2 -2
  643. package/src/motion/MEASUREMENTS.md +18 -0
  644. package/src/motion/README.md +10 -5
  645. package/src/motion/animatedLayout.ts +323 -60
  646. package/src/motion/animator.ts +66 -37
  647. package/src/motion/frameBlock.ts +16 -0
  648. package/src/motion/progress.ts +155 -0
  649. package/src/motion/reducedMotion.ts +3 -1
  650. package/src/motion/uikit/alert.ts +43 -0
  651. package/src/motion/uikit/index.ts +4 -3
  652. package/src/motion/uikit/picker.ts +116 -0
  653. package/src/privateAttributes/pressGroupItem.stylex.ts +44 -0
  654. package/src/privateAttributes/reducedMotion.stylex.ts +45 -0
  655. package/src/theme/Theme.tsx +37 -3
  656. package/src/theme/generateThemeRules.ts +14 -12
  657. package/src/theme/motionKnobs.ts +4 -3
  658. package/src/theme/themeMotion.ts +17 -2
  659. package/src/theme/tokens.stylex.ts +2 -0
  660. package/src/utils/dateParser.ts +16 -0
  661. package/src/utils/disabledInteraction.ts +23 -2
  662. package/src/utils/focusReturn.ts +38 -31
  663. package/src/utils/index.ts +1 -1
  664. package/src/utils/interactionModality.ts +4 -0
  665. package/src/utils/interactionOverlay.stylex.ts +3 -2
  666. package/src/utils/isFocusDetached.ts +34 -0
  667. package/src/utils/plainDate.ts +80 -4
  668. package/src/utils/pressFeedback.ts +24 -6
  669. package/src/utils/triggerFocus.ts +80 -0
  670. package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts +0 -14
  671. package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts.map +0 -1
  672. package/dist/Calendar/getStandaloneShortWeekdayNames.js +0 -26
  673. package/dist/Calendar/standaloneShortWeekdayNames.generated.d.ts.map +0 -1
  674. package/dist/Layer/usePressPin.d.ts +0 -93
  675. package/dist/Layer/usePressPin.d.ts.map +0 -1
  676. package/dist/Layer/usePressPin.js +0 -363
  677. package/dist/internal/touch-sheet.d.ts +0 -21
  678. package/dist/internal/touch-sheet.d.ts.map +0 -1
  679. package/dist/internal/touch-sheet.js +0 -19
  680. package/src/Calendar/getStandaloneShortWeekdayNames.ts +0 -38
  681. package/src/Layer/usePressPin.ts +0 -510
  682. package/src/internal/touch-sheet.ts +0 -21
@@ -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,30 @@
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
8
+ * @output Exports Wheel (one picker column), ScrollWheel (the scrolling
9
+ * column) and the shared types of wheelOptions.ts
10
+ * @position Internal component; consumed by MonthYearWheels.tsx,
11
+ * TouchTimeField.tsx and TouchDateTimeField.tsx
10
12
  *
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.
13
+ * Wheel picks its column by the primary pointer. Under a finger it is
14
+ * PickerWheel.tsx, the touch layer, imported here alone. Under a fine pointer
15
+ * it is the snap-scrolling column below.
16
16
  *
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.
17
+ * The scrolling column is a scroll container: momentum, rubber-banding and the
18
+ * settle are the platform's. Its rows fade and tip on a CSS `view()` timeline,
19
+ * behind `@supports`. Under Reduce Motion its own scrolls land without travel.
33
20
  *
34
21
  * SYNC: When modified, update:
22
+ * - /packages/core/src/DateInput/PickerWheel.tsx (the touch column)
23
+ * - /packages/core/src/DateInput/wheelOptions.ts
35
24
  * - /packages/core/src/DateInput/TouchDateField.tsx
36
25
  * - /packages/core/src/DateTimeInput/TouchDateTimeField.tsx
37
26
  * - /packages/core/src/DateInput/DateInput.doc.mjs
38
27
  * - /packages/core/src/DateInput/DateInputTouch.test.tsx
39
28
  */
40
29
 
41
- import {useCallback, useEffect, useId, useRef, useState} from 'react';
30
+ import {useCallback, useEffect, useRef, useState} from 'react';
42
31
  import * as stylex from '@stylexjs/stylex';
43
32
  import {
44
33
  colorVars,
@@ -54,10 +43,25 @@ import {
54
43
  reducedMotionFade,
55
44
  type ReducedMotionDip,
56
45
  } from '../motion/reducedMotion';
46
+ import {useTouchPresentation} from '../utils/touchPresentation';
47
+ import {PickerWheel} from './PickerWheel';
57
48
  import {dateInputTouchSizes, dateInputTouchGeometry} from './tokens.stylex';
58
49
  import {useOwnScrollGesture} from './useOwnScrollGesture';
59
50
  import {usePointerDragScroll} from './usePointerDragScroll';
60
51
  import {useScrollSettle} from './useScrollSettle';
52
+ import {useWheelListbox} from './useWheelListbox';
53
+ import {
54
+ endIndex,
55
+ nearestEnabledIndex,
56
+ steppedIndex,
57
+ type WheelProps,
58
+ } from './wheelOptions';
59
+
60
+ export {
61
+ nearestEnabledIndex,
62
+ type WheelOption,
63
+ type WheelProps,
64
+ } from './wheelOptions';
61
65
 
62
66
  const ITEM_BLOCK_SIZE = dateInputTouchSizes.wheelItemSize;
63
67
 
@@ -214,80 +218,35 @@ const styles = stylex.create({
214
218
  },
215
219
  });
216
220
 
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
221
  /**
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`.
222
+ * One picker column: UIPickerView's motion with flat rows under a finger, the
223
+ * snap-scrolling column under a fine pointer.
250
224
  *
251
225
  * @example
252
226
  * ```
253
- * // Hours 0-23 with 09:00-17:00 bounds: stopping on 7 rests on 9.
254
- * nearestEnabledIndex(hourOptions, 7, 10); // 9
227
+ * <Wheel
228
+ * label="Month"
229
+ * options={monthOptions}
230
+ * value={month}
231
+ * onChange={setMonth}
232
+ * />
255
233
  * ```
256
234
  */
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;
235
+ export function Wheel(props: WheelProps) {
236
+ // One touch model on every touch device: a finger gets UIPickerView's motion
237
+ // with flat rows, a fine pointer the scrolling column.
238
+ const {isTouch} = useTouchPresentation();
239
+ return isTouch ? <PickerWheel {...props} /> : <ScrollWheel {...props} />;
283
240
  }
284
241
 
242
+ Wheel.displayName = 'Wheel';
243
+
285
244
  /**
286
- * One snap-scrolling picker column.
245
+ * One snap-scrolling picker column, under a fine pointer.
287
246
  *
288
247
  * @example
289
248
  * ```
290
- * <Wheel
249
+ * <ScrollWheel
291
250
  * label="Month"
292
251
  * options={monthOptions}
293
252
  * value={month}
@@ -295,14 +254,13 @@ export function nearestEnabledIndex(
295
254
  * />
296
255
  * ```
297
256
  */
298
- export function Wheel({
257
+ export function ScrollWheel({
299
258
  label,
300
259
  options,
301
260
  value,
302
261
  onChange,
303
262
  isActive = true,
304
263
  }: WheelProps) {
305
- const id = useId();
306
264
  const scrollerRef = useRef<HTMLDivElement | null>(null);
307
265
  const selectedIndex = Math.max(
308
266
  0,
@@ -462,6 +420,8 @@ export function Wheel({
462
420
  // useScrollSettle. The settle handler re-checks the position afterwards, so
463
421
  // a correction that is genuinely needed still happens, just at rest.
464
422
  const parkedRef = useRef(false);
423
+ // Syncs the wheel's scroll position with the selected index while the wheel
424
+ // is active.
465
425
  useEffect(() => {
466
426
  if (!isActive) {
467
427
  parkedRef.current = false;
@@ -492,6 +452,8 @@ export function Wheel({
492
452
  // Highlight follows the finger. rAF-throttled: a scroll can fire far more
493
453
  // often than the display refreshes, and this only feeds a repaint.
494
454
  const frameRef = useRef<number | undefined>(undefined);
455
+ // Syncs a scroll listener with the active wheel. It updates the highlighted
456
+ // row.
495
457
  useEffect(() => {
496
458
  const scroller = scrollerRef.current;
497
459
  if (scroller == null || !isActive) {
@@ -531,69 +493,64 @@ export function Wheel({
531
493
  // there is no way to share — it takes every touch that lands on it.
532
494
  useOwnScrollGesture(scrollerRef, 'all', {isEnabled: isActive});
533
495
 
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) {
496
+ // A key commits the row it moves to and scrolls the column there.
497
+ const moveTo = useCallback(
498
+ (row: number | null) => {
499
+ const option = row == null ? undefined : options[row];
500
+ if (row == null || option == null || option.isDisabled) {
542
501
  return;
543
502
  }
544
- setActiveIndex(next);
545
- scrollToIndex(next, 'smooth');
503
+ setActiveIndex(row);
504
+ scrollToIndex(row, 'smooth');
546
505
  if (option.value !== value) {
547
506
  onChange(option.value);
548
507
  }
549
508
  },
550
- [activeIndex, options, scrollToIndex, value, onChange],
509
+ [options, scrollToIndex, value, onChange],
510
+ );
511
+
512
+ const moveBy = useCallback(
513
+ (delta: number) => moveTo(steppedIndex(options, activeIndex, delta)),
514
+ [moveTo, options, activeIndex],
551
515
  );
552
516
 
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;
517
+ // Home and End: the first and the last enabled row.
518
+ const toEnd = useCallback(
519
+ (end: 'first' | 'last') => moveTo(endIndex(options, end)),
520
+ [moveTo, options],
521
+ );
522
+
523
+ const activate = useCallback(
524
+ (index: number) => {
525
+ const option = options[index];
526
+ if (option == null || option.isDisabled) {
527
+ return;
528
+ }
529
+ setActiveIndex(index);
530
+ scrollToIndex(index, 'smooth');
531
+ if (option.value !== value) {
532
+ onChange(option.value);
582
533
  }
583
534
  },
584
- [moveBy, activeIndex, options.length],
535
+ [options, scrollToIndex, value, onChange],
585
536
  );
586
537
 
538
+ const {listboxProps, optionProps} = useWheelListbox({
539
+ label,
540
+ options,
541
+ value,
542
+ activeIndex,
543
+ stepBy: moveBy,
544
+ toEnd,
545
+ activate,
546
+ });
547
+
587
548
  return (
588
549
  <div {...stylex.props(styles.column)}>
589
550
  <div aria-hidden="true" {...stylex.props(styles.band)} />
590
551
  <div
591
552
  ref={scrollerRef}
592
- role="listbox"
593
- aria-label={label}
594
- aria-activedescendant={`${id}-${options[activeIndex]?.value}`}
595
- tabIndex={0}
596
- onKeyDown={handleKeyDown}
553
+ {...listboxProps}
597
554
  // Read in the capture phase. usePointerDragScroll stops a primary
598
555
  // mouse press from bubbling, so that it does not reach BottomSheet's
599
556
  // drag. A bubbling handler would never see a mouse, and would keep the
@@ -608,20 +565,7 @@ export function Wheel({
608
565
  {options.map((option, index) => (
609
566
  <div
610
567
  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
- }}
568
+ {...optionProps(option, index)}
625
569
  {...stylex.props(
626
570
  styles.item,
627
571
  index === activeIndex && styles.itemActive,
@@ -635,4 +579,4 @@ export function Wheel({
635
579
  );
636
580
  }
637
581
 
638
- Wheel.displayName = 'Wheel';
582
+ ScrollWheel.displayName = 'ScrollWheel';
@@ -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
  }
@@ -87,6 +87,7 @@ export function usePointerDragScroll(
87
87
  ): PointerDragScrollState {
88
88
  const isDraggingRef = useRef(false);
89
89
 
90
+ // Syncs pointer listeners with `isEnabled`. A mouse drag scrolls the element.
90
91
  useEffect(() => {
91
92
  const element = ref.current;
92
93
  if (element == null || !isEnabled) {
@@ -98,6 +98,8 @@ export function useScrollSettle(
98
98
 
99
99
  const isAtRestRef = useRef(true);
100
100
 
101
+ // Syncs scroll, touch and pointer listeners with `isEnabled`. They find when
102
+ // scrolling stops.
101
103
  useEffect(() => {
102
104
  const element = ref.current;
103
105
  if (element == null || !isEnabled) {
@@ -0,0 +1,112 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ /**
6
+ * @file useWheelListbox.ts
7
+ * @input A wheel's label, options, committed value and active row, and its
8
+ * presentation's three moves: a step, an end, a row
9
+ * @output useWheelListbox: the listbox and option props both wheels share
10
+ * @position Internal hook of ScrollWheel (Wheel.tsx) and PickerWheel.tsx
11
+ *
12
+ * A wheel is a listbox: one tab stop, with Arrow, Page, Home and End keys.
13
+ * Each presentation decides what its keys and clicks do to its own column.
14
+ *
15
+ * SYNC: When modified, update Wheel.tsx and PickerWheel.tsx.
16
+ */
17
+
18
+ import {useCallback, useId, type KeyboardEvent} from 'react';
19
+ import type {WheelOption} from './wheelOptions';
20
+
21
+ /** Rows a Page Up or Page Down key moves. */
22
+ const PAGE_ROWS = 10;
23
+
24
+ export interface WheelListboxProps {
25
+ /** Accessible name for the column. */
26
+ label: string;
27
+ /** Rows, top to bottom. */
28
+ options: ReadonlyArray<WheelOption>;
29
+ /** Committed value. */
30
+ value: number;
31
+ /** The row `aria-activedescendant` names. */
32
+ activeIndex: number;
33
+ /** An Arrow or Page key: a step of `delta` rows. */
34
+ stepBy: (delta: number) => void;
35
+ /** Home or End. */
36
+ toEnd: (end: 'first' | 'last') => void;
37
+ /** A click on row `index`. */
38
+ activate: (index: number) => void;
39
+ }
40
+
41
+ /**
42
+ * The listbox and option props of one wheel column: ids, ARIA, the keys and
43
+ * a click on a row. `aria-activedescendant` marks the active row, and a click
44
+ * reaches every row. The scrolling column steps from the row under its band. The
45
+ * touch column steps from the row it is heading to.
46
+ *
47
+ * @example
48
+ * ```
49
+ * const {listboxProps, optionProps} = useWheelListbox({label, options, value, activeIndex, stepBy, toEnd, activate});
50
+ * <div {...listboxProps}>{options.map((option, index) => <div key={option.value} {...optionProps(option, index)} />)}</div>
51
+ * ```
52
+ */
53
+ export function useWheelListbox({
54
+ label,
55
+ options,
56
+ value,
57
+ activeIndex,
58
+ stepBy,
59
+ toEnd,
60
+ activate,
61
+ }: WheelListboxProps) {
62
+ const id = useId();
63
+ const onKeyDown = useCallback(
64
+ (event: KeyboardEvent) => {
65
+ switch (event.key) {
66
+ case 'ArrowDown':
67
+ event.preventDefault();
68
+ stepBy(1);
69
+ break;
70
+ case 'ArrowUp':
71
+ event.preventDefault();
72
+ stepBy(-1);
73
+ break;
74
+ case 'PageDown':
75
+ event.preventDefault();
76
+ stepBy(PAGE_ROWS);
77
+ break;
78
+ case 'PageUp':
79
+ event.preventDefault();
80
+ stepBy(-PAGE_ROWS);
81
+ break;
82
+ case 'Home':
83
+ event.preventDefault();
84
+ toEnd('first');
85
+ break;
86
+ case 'End':
87
+ event.preventDefault();
88
+ toEnd('last');
89
+ break;
90
+ default:
91
+ break;
92
+ }
93
+ },
94
+ [stepBy, toEnd],
95
+ );
96
+ return {
97
+ listboxProps: {
98
+ role: 'listbox' as const,
99
+ 'aria-label': label,
100
+ 'aria-activedescendant': `${id}-${options[activeIndex]?.value}`,
101
+ tabIndex: 0,
102
+ onKeyDown,
103
+ },
104
+ optionProps: (option: WheelOption, index: number) => ({
105
+ id: `${id}-${option.value}`,
106
+ role: 'option' as const,
107
+ 'aria-selected': option.value === value,
108
+ 'aria-disabled': option.isDisabled || undefined,
109
+ onClick: () => activate(index),
110
+ }),
111
+ };
112
+ }