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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (798) hide show
  1. package/dist/AlertDialog/AlertDialog.d.ts +4 -1
  2. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  3. package/dist/AlertDialog/AlertDialog.js +46 -6
  4. package/dist/AppShell/AppShell.d.ts.map +1 -1
  5. package/dist/AppShell/AppShell.js +11 -3
  6. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  7. package/dist/BottomSheet/BottomSheet.js +1 -0
  8. package/dist/BottomSheet/BottomSheetPanel.d.ts +1 -1
  9. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  10. package/dist/BottomSheet/BottomSheetPanel.js +55 -18
  11. package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
  12. package/dist/BottomSheet/BottomSheetSwitcher.js +5 -0
  13. package/dist/BottomSheet/bottomSheetStack.js +1 -1
  14. package/dist/BottomSheet/useSheetGestures.d.ts +3 -1
  15. package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
  16. package/dist/BottomSheet/useSheetGestures.js +16 -1
  17. package/dist/Button/Button.d.ts.map +1 -1
  18. package/dist/Button/Button.js +17 -1
  19. package/dist/Calendar/Calendar.d.ts.map +1 -1
  20. package/dist/Calendar/Calendar.js +18 -22
  21. package/dist/Calendar/getWeekdayHeaderNames.d.ts +16 -0
  22. package/dist/Calendar/getWeekdayHeaderNames.d.ts.map +1 -0
  23. package/dist/Calendar/getWeekdayHeaderNames.js +70 -0
  24. package/dist/Calendar/hooks/useCalendarDays.d.ts.map +1 -1
  25. package/dist/Calendar/hooks/useCalendarDays.js +2 -10
  26. package/dist/Calendar/{standaloneShortWeekdayNames.generated.d.ts → weekdayHeaderNames.generated.d.ts} +14 -14
  27. package/dist/Calendar/weekdayHeaderNames.generated.d.ts.map +1 -0
  28. package/dist/Calendar/{standaloneShortWeekdayNames.generated.js → weekdayHeaderNames.generated.js} +12 -12
  29. package/dist/Carousel/Carousel.d.ts.map +1 -1
  30. package/dist/Carousel/Carousel.js +2 -0
  31. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  32. package/dist/Chat/ChatComposerInput.js +6 -1
  33. package/dist/Chat/ChatMessageList.d.ts.map +1 -1
  34. package/dist/Chat/ChatMessageList.js +2 -1
  35. package/dist/Chat/useChatDictation.d.ts.map +1 -1
  36. package/dist/Chat/useChatDictation.js +2 -0
  37. package/dist/Chat/useChatNewMessages.js +1 -1
  38. package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
  39. package/dist/Chat/useChatStreamScroll.js +2 -0
  40. package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
  41. package/dist/Chat/useSpeechRecognition.js +3 -0
  42. package/dist/Chat/useTriggerMenu.js +1 -1
  43. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  44. package/dist/CheckboxInput/CheckboxInput.js +17 -12
  45. package/dist/CheckboxList/CheckboxList.d.ts +20 -2
  46. package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
  47. package/dist/CheckboxList/CheckboxList.js +12 -4
  48. package/dist/CheckboxList/CheckboxListContext.d.ts +7 -0
  49. package/dist/CheckboxList/CheckboxListContext.d.ts.map +1 -1
  50. package/dist/CheckboxList/CheckboxListContext.js +2 -1
  51. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  52. package/dist/CheckboxList/CheckboxListItem.js +14 -2
  53. package/dist/CheckboxList/requiredGroup.d.ts +22 -0
  54. package/dist/CheckboxList/requiredGroup.d.ts.map +1 -0
  55. package/dist/CheckboxList/requiredGroup.js +52 -0
  56. package/dist/CodeBlock/CodeBlock.d.ts +10 -1
  57. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  58. package/dist/CodeBlock/CodeBlock.js +28 -11
  59. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  60. package/dist/CommandPalette/CommandPalette.js +2 -0
  61. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  62. package/dist/CommandPalette/CommandPaletteItem.js +2 -0
  63. package/dist/ComplexSelector/ComplexSelector.d.ts +4 -1
  64. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  65. package/dist/ComplexSelector/ComplexSelector.js +14 -4
  66. package/dist/ContextMenu/ContextMenu.js +2 -2
  67. package/dist/DateInput/MonthScroller.d.ts.map +1 -1
  68. package/dist/DateInput/MonthScroller.js +5 -2
  69. package/dist/DateInput/PickerWheel.d.ts +19 -0
  70. package/dist/DateInput/PickerWheel.d.ts.map +1 -0
  71. package/dist/DateInput/PickerWheel.js +646 -0
  72. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  73. package/dist/DateInput/TouchDateField.js +9 -30
  74. package/dist/DateInput/Wheel.d.ts +18 -37
  75. package/dist/DateInput/Wheel.d.ts.map +1 -1
  76. package/dist/DateInput/Wheel.js +133 -120
  77. package/dist/DateInput/datePickerTouch.d.ts +13 -0
  78. package/dist/DateInput/datePickerTouch.d.ts.map +1 -0
  79. package/dist/DateInput/datePickerTouch.js +14 -0
  80. package/dist/DateInput/useOwnScrollGesture.d.ts +10 -0
  81. package/dist/DateInput/useOwnScrollGesture.d.ts.map +1 -1
  82. package/dist/DateInput/useOwnScrollGesture.js +16 -3
  83. package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -1
  84. package/dist/DateInput/usePointerDragScroll.js +2 -0
  85. package/dist/DateInput/useScrollSettle.d.ts.map +1 -1
  86. package/dist/DateInput/useScrollSettle.js +3 -0
  87. package/dist/DateInput/useWheelListbox.d.ts +59 -0
  88. package/dist/DateInput/useWheelListbox.d.ts.map +1 -0
  89. package/dist/DateInput/useWheelListbox.js +88 -0
  90. package/dist/DateInput/wheelOptions.d.ts +94 -0
  91. package/dist/DateInput/wheelOptions.d.ts.map +1 -0
  92. package/dist/DateInput/wheelOptions.js +110 -0
  93. package/dist/DateInput/wheelPhysics.d.ts +127 -0
  94. package/dist/DateInput/wheelPhysics.d.ts.map +1 -0
  95. package/dist/DateInput/wheelPhysics.js +341 -0
  96. package/dist/DateInput/wheelStrip.d.ts +92 -0
  97. package/dist/DateInput/wheelStrip.d.ts.map +1 -0
  98. package/dist/DateInput/wheelStrip.js +258 -0
  99. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  100. package/dist/DateTimeInput/TouchDateTimeField.js +70 -127
  101. package/dist/Dialog/Dialog.d.ts.map +1 -1
  102. package/dist/Dialog/Dialog.js +9 -32
  103. package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
  104. package/dist/Drawer/useDrawerDialogPresence.js +3 -0
  105. package/dist/DropdownMenu/useMenuOverflow.d.ts.map +1 -1
  106. package/dist/DropdownMenu/useMenuOverflow.js +5 -0
  107. package/dist/Field/Field.js +2 -2
  108. package/dist/FieldStatus/useFieldStatusAnnouncement.d.ts.map +1 -1
  109. package/dist/FieldStatus/useFieldStatusAnnouncement.js +1 -0
  110. package/dist/FormLayout/FormLayout.d.ts +5 -1
  111. package/dist/FormLayout/FormLayout.d.ts.map +1 -1
  112. package/dist/HoverCard/HoverCard.d.ts +6 -4
  113. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  114. package/dist/HoverCard/HoverCard.js +48 -3
  115. package/dist/HoverCard/useHoverCard.d.ts +5 -4
  116. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  117. package/dist/HoverCard/useHoverCard.js +26 -34
  118. package/dist/Icon/Icon.d.ts +5 -1
  119. package/dist/Icon/Icon.d.ts.map +1 -1
  120. package/dist/Icon/Icon.js +20 -3
  121. package/dist/InfoTip/InfoTip.d.ts +5 -5
  122. package/dist/InfoTip/InfoTip.d.ts.map +1 -1
  123. package/dist/InfoTip/InfoTip.js +58 -19
  124. package/dist/Item/useSwipeAction.d.ts.map +1 -1
  125. package/dist/Item/useSwipeAction.js +3 -0
  126. package/dist/Layer/modalOutlet.d.ts.map +1 -1
  127. package/dist/Layer/modalOutlet.js +2 -0
  128. package/dist/Layer/outsidePress.d.ts.map +1 -1
  129. package/dist/Layer/outsidePress.js +1 -0
  130. package/dist/Layer/useLayer.d.ts.map +1 -1
  131. package/dist/Layer/useLayer.js +4 -1
  132. package/dist/Layer/useLayerDismissal.d.ts.map +1 -1
  133. package/dist/Layer/useLayerDismissal.js +3 -0
  134. package/dist/Layer/useTouchTrigger.d.ts +13 -7
  135. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  136. package/dist/Layer/useTouchTrigger.js +20 -6
  137. package/dist/Layout/index.d.ts +1 -1
  138. package/dist/Layout/index.d.ts.map +1 -1
  139. package/dist/Layout/index.js +1 -1
  140. package/dist/Layout/layoutReset.js +1 -1
  141. package/dist/Layout/overlayPaddingReset.stylex.d.ts +68 -0
  142. package/dist/Layout/overlayPaddingReset.stylex.d.ts.map +1 -0
  143. package/dist/Layout/overlayPaddingReset.stylex.js +72 -0
  144. package/dist/Layout/padding.stylex.d.ts +5 -129
  145. package/dist/Layout/padding.stylex.d.ts.map +1 -1
  146. package/dist/Layout/padding.stylex.js +9 -143
  147. package/dist/Layout/paddingStyles.stylex.d.ts +83 -0
  148. package/dist/Layout/paddingStyles.stylex.d.ts.map +1 -0
  149. package/dist/Layout/paddingStyles.stylex.js +99 -0
  150. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  151. package/dist/Lightbox/Lightbox.js +20 -1
  152. package/dist/MobileNav/MobileNav.d.ts +3 -2
  153. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  154. package/dist/MobileNav/MobileNav.js +10 -26
  155. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  156. package/dist/MultiSelector/MultiSelector.js +2 -1
  157. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  158. package/dist/NumberInput/NumberInput.js +2 -1
  159. package/dist/Outline/useOutlineFromDOM.d.ts.map +1 -1
  160. package/dist/Outline/useOutlineFromDOM.js +3 -0
  161. package/dist/Outline/useScrollSpy.d.ts.map +1 -1
  162. package/dist/Outline/useScrollSpy.js +3 -0
  163. package/dist/OverflowList/OverflowList.d.ts.map +1 -1
  164. package/dist/OverflowList/OverflowList.js +3 -0
  165. package/dist/Overlay/Overlay.d.ts.map +1 -1
  166. package/dist/Overlay/Overlay.js +7 -2
  167. package/dist/Popover/Popover.d.ts.map +1 -1
  168. package/dist/Popover/Popover.js +6 -0
  169. package/dist/Popover/usePopover.js +2 -2
  170. package/dist/PowerSearch/PowerSearch.d.ts +41 -4
  171. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  172. package/dist/PowerSearch/PowerSearch.js +441 -134
  173. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts +125 -0
  174. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -0
  175. package/dist/PowerSearch/PowerSearchBottomSheet.js +2041 -0
  176. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +35 -2
  177. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  178. package/dist/PowerSearch/PowerSearchEditPopover.js +43 -10
  179. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts +1 -1
  180. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts.map +1 -1
  181. package/dist/PowerSearch/PowerSearchFilterEditor.js +4 -2
  182. package/dist/PowerSearch/PowerSearchToken.d.ts +1 -1
  183. package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
  184. package/dist/PowerSearch/PowerSearchToken.js +3 -2
  185. package/dist/PowerSearch/PowerSearchValueEditor.d.ts +38 -3
  186. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  187. package/dist/PowerSearch/PowerSearchValueEditor.js +273 -86
  188. package/dist/PowerSearch/formatFilterValue.d.ts +14 -7
  189. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  190. package/dist/PowerSearch/formatFilterValue.js +31 -23
  191. package/dist/PowerSearch/formatTokenValue.d.ts +28 -0
  192. package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -0
  193. package/dist/PowerSearch/formatTokenValue.js +161 -0
  194. package/dist/PowerSearch/index.d.ts +1 -1
  195. package/dist/PowerSearch/index.d.ts.map +1 -1
  196. package/dist/PowerSearch/powerSearchDateZone.d.ts +25 -0
  197. package/dist/PowerSearch/powerSearchDateZone.d.ts.map +1 -0
  198. package/dist/PowerSearch/powerSearchDateZone.js +57 -0
  199. package/dist/PowerSearch/powerSearchSheetUtils.d.ts +65 -0
  200. package/dist/PowerSearch/powerSearchSheetUtils.d.ts.map +1 -0
  201. package/dist/PowerSearch/powerSearchSheetUtils.js +168 -0
  202. package/dist/PowerSearch/types.d.ts +8 -1
  203. package/dist/PowerSearch/types.d.ts.map +1 -1
  204. package/dist/ProgressBar/ProgressBarTouch.d.ts.map +1 -1
  205. package/dist/ProgressBar/ProgressBarTouch.js +2 -0
  206. package/dist/RadioList/RadioList.d.ts.map +1 -1
  207. package/dist/RadioList/RadioList.js +3 -2
  208. package/dist/RadioList/RadioListItem.d.ts +1 -1
  209. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  210. package/dist/RadioList/RadioListItem.js +5 -3
  211. package/dist/Resizable/ResizeHandle.d.ts +2 -1
  212. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  213. package/dist/Resizable/ResizeHandle.js +116 -92
  214. package/dist/Resizable/createResizable.d.ts +199 -0
  215. package/dist/Resizable/createResizable.d.ts.map +1 -0
  216. package/dist/Resizable/createResizable.js +733 -0
  217. package/dist/Resizable/separatorAttributes.d.ts +45 -0
  218. package/dist/Resizable/separatorAttributes.d.ts.map +1 -0
  219. package/dist/Resizable/separatorAttributes.js +35 -0
  220. package/dist/Resizable/useResizable.d.ts +3 -3
  221. package/dist/Resizable/useResizable.d.ts.map +1 -1
  222. package/dist/Resizable/useResizable.js +252 -459
  223. package/dist/SegmentedControl/useSegmentedSelectionMotion.d.ts.map +1 -1
  224. package/dist/SegmentedControl/useSegmentedSelectionMotion.js +3 -3
  225. package/dist/SelectableCard/SelectableCard.d.ts +2 -0
  226. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  227. package/dist/SelectableCard/SelectableCard.js +36 -11
  228. package/dist/SelectableCard/selectableCardInput.d.ts +12 -0
  229. package/dist/SelectableCard/selectableCardInput.d.ts.map +1 -0
  230. package/dist/SelectableCard/selectableCardInput.js +20 -0
  231. package/dist/Selector/Selector.d.ts.map +1 -1
  232. package/dist/Selector/Selector.js +7 -9
  233. package/dist/SideNav/SideNav.d.ts.map +1 -1
  234. package/dist/SideNav/SideNav.js +36 -5
  235. package/dist/Slider/Slider.d.ts.map +1 -1
  236. package/dist/Slider/Slider.js +16 -11
  237. package/dist/Slider/sliderTouchController.js +2 -2
  238. package/dist/Spinner/Spinner.d.ts +1 -1
  239. package/dist/Spinner/Spinner.d.ts.map +1 -1
  240. package/dist/Spinner/Spinner.js +60 -58
  241. package/dist/Stepper/Stepper.d.ts.map +1 -1
  242. package/dist/Stepper/Stepper.js +10 -15
  243. package/dist/Switch/Switch.d.ts.map +1 -1
  244. package/dist/Switch/Switch.js +4 -10
  245. package/dist/Switch/useSwitchTouch.js +4 -4
  246. package/dist/Table/BaseTable.d.ts.map +1 -1
  247. package/dist/Table/BaseTable.js +29 -8
  248. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  249. package/dist/Table/plugins/columnResize/useTableColumnResize.js +3 -1
  250. package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
  251. package/dist/Table/plugins/filtering/useTableFiltering.js +2 -1
  252. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +12 -0
  253. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  254. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +17 -3
  255. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
  256. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +2 -0
  257. package/dist/Table/plugins/tree/useTableTreeData.d.ts +11 -0
  258. package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
  259. package/dist/Table/plugins/tree/useTableTreeData.js +27 -14
  260. package/dist/TextArea/TextArea.d.ts.map +1 -1
  261. package/dist/TextArea/TextArea.js +2 -1
  262. package/dist/TextInput/TextInput.d.ts +2 -2
  263. package/dist/TextInput/TextInput.d.ts.map +1 -1
  264. package/dist/TextInput/TextInput.js +12 -8
  265. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  266. package/dist/TimeInput/TimeInput.js +2 -0
  267. package/dist/TimeInput/TimeWheels.d.ts +32 -0
  268. package/dist/TimeInput/TimeWheels.d.ts.map +1 -0
  269. package/dist/TimeInput/TimeWheels.js +144 -0
  270. package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
  271. package/dist/TimeInput/TouchTimeField.js +63 -116
  272. package/dist/TimeInput/timeWheelRules.d.ts +124 -0
  273. package/dist/TimeInput/timeWheelRules.d.ts.map +1 -0
  274. package/dist/TimeInput/timeWheelRules.js +277 -0
  275. package/dist/Timer/Timer.d.ts.map +1 -1
  276. package/dist/Timer/Timer.js +2 -0
  277. package/dist/Timestamp/Timestamp.js +1 -1
  278. package/dist/Timestamp/formatInstant.d.ts.map +1 -1
  279. package/dist/Timestamp/formatInstant.js +1 -23
  280. package/dist/Toast/Toast.d.ts +11 -1
  281. package/dist/Toast/Toast.d.ts.map +1 -1
  282. package/dist/Toast/Toast.js +25 -15
  283. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  284. package/dist/Toast/ToastViewport.js +97 -34
  285. package/dist/Toast/types.d.ts +9 -3
  286. package/dist/Toast/types.d.ts.map +1 -1
  287. package/dist/Toast/useToast.d.ts.map +1 -1
  288. package/dist/Toast/useToast.js +1 -0
  289. package/dist/Tokenizer/Tokenizer.d.ts +44 -46
  290. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  291. package/dist/Tokenizer/Tokenizer.js +20 -21
  292. package/dist/Tokenizer/TokenizerBottomSheet.d.ts +1 -1
  293. package/dist/Tokenizer/TokenizerBottomSheet.js +12 -18
  294. package/dist/Tokenizer/index.d.ts +1 -1
  295. package/dist/Tokenizer/index.d.ts.map +1 -1
  296. package/dist/Tooltip/Tooltip.d.ts +2 -23
  297. package/dist/Tooltip/Tooltip.d.ts.map +1 -1
  298. package/dist/Tooltip/Tooltip.js +5 -29
  299. package/dist/Tooltip/useTooltip.d.ts +23 -30
  300. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  301. package/dist/Tooltip/useTooltip.js +200 -108
  302. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  303. package/dist/Typeahead/BaseTypeahead.js +27 -18
  304. package/dist/Typeahead/TypeaheadItem.d.ts +2 -1
  305. package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
  306. package/dist/animator/createAnimator.d.ts +98 -0
  307. package/dist/animator/createAnimator.d.ts.map +1 -0
  308. package/dist/animator/createAnimator.js +259 -0
  309. package/dist/astryx.css +53 -8
  310. package/dist/gestures/GestureHost.d.ts +16 -1
  311. package/dist/gestures/GestureHost.d.ts.map +1 -1
  312. package/dist/gestures/GestureHost.js +4 -1
  313. package/dist/gestures/PressTracker.d.ts.map +1 -1
  314. package/dist/gestures/PressTracker.js +4 -3
  315. package/dist/hooks/ModalAnnounceProvider.d.ts.map +1 -1
  316. package/dist/hooks/ModalAnnounceProvider.js +1 -0
  317. package/dist/hooks/actionGroupTracker.d.ts +4 -1
  318. package/dist/hooks/actionGroupTracker.d.ts.map +1 -1
  319. package/dist/hooks/actionGroupTracker.js +18 -7
  320. package/dist/hooks/index.d.ts +1 -0
  321. package/dist/hooks/index.d.ts.map +1 -1
  322. package/dist/hooks/index.js +1 -0
  323. package/dist/hooks/longPressDetector.d.ts +66 -0
  324. package/dist/hooks/longPressDetector.d.ts.map +1 -0
  325. package/dist/hooks/longPressDetector.js +200 -0
  326. package/dist/hooks/pressGroupContext.d.ts +6 -0
  327. package/dist/hooks/pressGroupContext.d.ts.map +1 -0
  328. package/dist/hooks/pressGroupContext.js +20 -0
  329. package/dist/hooks/rootScrollStyles.d.ts +48 -0
  330. package/dist/hooks/rootScrollStyles.d.ts.map +1 -0
  331. package/dist/hooks/rootScrollStyles.js +207 -0
  332. package/dist/hooks/scrollLockTouchGuard.d.ts +13 -0
  333. package/dist/hooks/scrollLockTouchGuard.d.ts.map +1 -0
  334. package/dist/hooks/scrollLockTouchGuard.js +117 -0
  335. package/dist/hooks/scrollbarGutter.d.ts +4 -4
  336. package/dist/hooks/scrollbarGutter.d.ts.map +1 -1
  337. package/dist/hooks/scrollbarGutter.js +36 -23
  338. package/dist/hooks/useActionGroupTracking.d.ts +53 -0
  339. package/dist/hooks/useActionGroupTracking.d.ts.map +1 -0
  340. package/dist/hooks/useActionGroupTracking.js +174 -0
  341. package/dist/hooks/useAnimator.d.ts +41 -0
  342. package/dist/hooks/useAnimator.d.ts.map +1 -0
  343. package/dist/hooks/useAnimator.js +70 -0
  344. package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
  345. package/dist/hooks/useAnnounceRenderedText.js +1 -0
  346. package/dist/hooks/useAttachment.d.ts +1 -1
  347. package/dist/hooks/useAttachment.js +1 -1
  348. package/dist/hooks/useAutoMediaMode.d.ts.map +1 -1
  349. package/dist/hooks/useAutoMediaMode.js +1 -0
  350. package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
  351. package/dist/hooks/useBusyAnnouncement.js +2 -0
  352. package/dist/hooks/useDevWarning.d.ts.map +1 -1
  353. package/dist/hooks/useDevWarning.js +2 -0
  354. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  355. package/dist/hooks/useFocusTrap.js +2 -0
  356. package/dist/hooks/useGridFocus.d.ts +8 -5
  357. package/dist/hooks/useGridFocus.d.ts.map +1 -1
  358. package/dist/hooks/useGridFocus.js +4 -3
  359. package/dist/hooks/useHotkeys.d.ts.map +1 -1
  360. package/dist/hooks/useHotkeys.js +3 -0
  361. package/dist/hooks/useImageMode.d.ts.map +1 -1
  362. package/dist/hooks/useImageMode.js +3 -0
  363. package/dist/hooks/useInputStatusIcon.d.ts +1 -1
  364. package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
  365. package/dist/hooks/useInputStatusIcon.js +2 -2
  366. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  367. package/dist/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
  368. package/dist/hooks/useKeyboardHint.js +1 -1
  369. package/dist/hooks/useLongPress.d.ts +8 -9
  370. package/dist/hooks/useLongPress.d.ts.map +1 -1
  371. package/dist/hooks/useLongPress.js +23 -106
  372. package/dist/hooks/useMenuHover.d.ts.map +1 -1
  373. package/dist/hooks/useMenuHover.js +2 -0
  374. package/dist/hooks/useMenuPress.d.ts.map +1 -1
  375. package/dist/hooks/useMenuPress.js +3 -0
  376. package/dist/hooks/useOverflow.d.ts.map +1 -1
  377. package/dist/hooks/useOverflow.js +2 -1
  378. package/dist/hooks/usePressFeedback.d.ts.map +1 -1
  379. package/dist/hooks/usePressFeedback.js +1 -0
  380. package/dist/hooks/useResolvedRequired.d.ts +3 -0
  381. package/dist/hooks/useResolvedRequired.d.ts.map +1 -1
  382. package/dist/hooks/useResolvedRequired.js +3 -0
  383. package/dist/hooks/useScrollLock.d.ts +8 -9
  384. package/dist/hooks/useScrollLock.d.ts.map +1 -1
  385. package/dist/hooks/useScrollLock.js +50 -48
  386. package/dist/hooks/useScrollableArea.d.ts.map +1 -1
  387. package/dist/hooks/useScrollableArea.js +5 -0
  388. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  389. package/dist/hooks/useStreamingText.js +3 -0
  390. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts +8 -0
  391. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts.map +1 -0
  392. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.js +45 -0
  393. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.d.ts.map +1 -1
  394. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.js +6 -0
  395. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts +8 -0
  396. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts.map +1 -0
  397. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.js +14 -0
  398. package/dist/i18n/generated-english/Resizable/createResizable.generated.d.ts +8 -0
  399. package/dist/i18n/generated-english/Resizable/createResizable.generated.d.ts.map +1 -0
  400. package/dist/i18n/generated-english/Resizable/createResizable.generated.js +13 -0
  401. package/dist/i18n/generated-english/Table/plugins/rowExpansion/useTableRowExpansion.generated.d.ts.map +1 -1
  402. package/dist/i18n/generated-english/Table/plugins/rowExpansion/useTableRowExpansion.generated.js +3 -1
  403. package/dist/i18n/generated-english/Table/plugins/tree/useTableTreeData.generated.d.ts.map +1 -1
  404. package/dist/i18n/generated-english/Table/plugins/tree/useTableTreeData.generated.js +3 -1
  405. package/dist/i18n/generated-english/TimeInput/TimeWheels.generated.d.ts +8 -0
  406. package/dist/i18n/generated-english/TimeInput/TimeWheels.generated.d.ts.map +1 -0
  407. package/dist/i18n/generated-english/TimeInput/TimeWheels.generated.js +17 -0
  408. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  409. package/dist/i18n/generated-locales/en.generated.js +37 -0
  410. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  411. package/dist/i18n/generated-locales/pseudo.generated.js +37 -0
  412. package/dist/index.d.ts +1 -0
  413. package/dist/index.d.ts.map +1 -1
  414. package/dist/index.js +4 -0
  415. package/dist/internal/indicatorPress.stylex.d.ts +20 -0
  416. package/dist/internal/indicatorPress.stylex.d.ts.map +1 -0
  417. package/dist/internal/indicatorPress.stylex.js +26 -0
  418. package/dist/internal/selectable-card.d.ts +21 -0
  419. package/dist/internal/selectable-card.d.ts.map +1 -0
  420. package/dist/internal/selectable-card.js +20 -0
  421. package/dist/internal/sheetDraft.d.ts +2 -2
  422. package/dist/internal/sheetDraft.js +2 -2
  423. package/dist/keyboard/index.d.ts +17 -0
  424. package/dist/keyboard/index.d.ts.map +1 -0
  425. package/dist/keyboard/index.js +19 -0
  426. package/dist/keyboard/keyboardHeight.d.ts +149 -0
  427. package/dist/keyboard/keyboardHeight.d.ts.map +1 -0
  428. package/dist/keyboard/keyboardHeight.js +432 -0
  429. package/dist/keyboard/keyboardLayoutGuide.d.ts +59 -0
  430. package/dist/keyboard/keyboardLayoutGuide.d.ts.map +1 -0
  431. package/dist/keyboard/keyboardLayoutGuide.js +207 -0
  432. package/dist/keyboard/keyboardModel.d.ts +93 -0
  433. package/dist/keyboard/keyboardModel.d.ts.map +1 -0
  434. package/dist/keyboard/keyboardModel.js +220 -0
  435. package/dist/keyboard/rideKeyboard.d.ts +42 -0
  436. package/dist/keyboard/rideKeyboard.d.ts.map +1 -0
  437. package/dist/keyboard/rideKeyboard.js +77 -0
  438. package/dist/keyboard/useMobileKeyboard.d.ts +61 -0
  439. package/dist/keyboard/useMobileKeyboard.d.ts.map +1 -0
  440. package/dist/keyboard/useMobileKeyboard.js +699 -0
  441. package/dist/motion/android/index.d.ts +16 -0
  442. package/dist/motion/android/index.d.ts.map +1 -0
  443. package/dist/motion/android/index.js +18 -0
  444. package/dist/motion/android/keyboard.d.ts +83 -0
  445. package/dist/motion/android/keyboard.d.ts.map +1 -0
  446. package/dist/motion/android/keyboard.js +96 -0
  447. package/dist/motion/animatedLayout.d.ts +8 -0
  448. package/dist/motion/animatedLayout.d.ts.map +1 -1
  449. package/dist/motion/animatedLayout.js +246 -53
  450. package/dist/motion/animator.d.ts +14 -14
  451. package/dist/motion/animator.d.ts.map +1 -1
  452. package/dist/motion/animator.js +45 -26
  453. package/dist/motion/frameBlock.d.ts +14 -0
  454. package/dist/motion/frameBlock.d.ts.map +1 -0
  455. package/dist/motion/frameBlock.js +16 -0
  456. package/dist/motion/progress.d.ts +88 -0
  457. package/dist/motion/progress.d.ts.map +1 -0
  458. package/dist/motion/progress.js +128 -0
  459. package/dist/motion/reducedMotion.d.ts.map +1 -1
  460. package/dist/motion/reducedMotion.js +3 -1
  461. package/dist/motion/uikit/alert.d.ts +41 -0
  462. package/dist/motion/uikit/alert.d.ts.map +1 -0
  463. package/dist/motion/uikit/alert.js +43 -0
  464. package/dist/motion/uikit/datePicker.d.ts +58 -0
  465. package/dist/motion/uikit/datePicker.d.ts.map +1 -0
  466. package/dist/motion/uikit/datePicker.js +60 -0
  467. package/dist/motion/uikit/index.d.ts +6 -4
  468. package/dist/motion/uikit/index.d.ts.map +1 -1
  469. package/dist/motion/uikit/index.js +6 -4
  470. package/dist/motion/uikit/picker.d.ts +96 -0
  471. package/dist/motion/uikit/picker.d.ts.map +1 -0
  472. package/dist/motion/uikit/picker.js +117 -0
  473. package/dist/privateAttributes/pressGroupItem.stylex.d.ts +22 -0
  474. package/dist/privateAttributes/pressGroupItem.stylex.d.ts.map +1 -0
  475. package/dist/privateAttributes/pressGroupItem.stylex.js +36 -0
  476. package/dist/privateAttributes/reducedMotion.stylex.d.ts +23 -0
  477. package/dist/privateAttributes/reducedMotion.stylex.d.ts.map +1 -0
  478. package/dist/privateAttributes/reducedMotion.stylex.js +40 -0
  479. package/dist/theme/Theme.d.ts.map +1 -1
  480. package/dist/theme/Theme.js +29 -4
  481. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  482. package/dist/theme/generateThemeRules.js +14 -13
  483. package/dist/theme/motionKnobs.d.ts +4 -3
  484. package/dist/theme/motionKnobs.d.ts.map +1 -1
  485. package/dist/theme/motionKnobs.js +3 -2
  486. package/dist/theme/themeMotion.d.ts +6 -0
  487. package/dist/theme/themeMotion.d.ts.map +1 -1
  488. package/dist/theme/themeMotion.js +15 -2
  489. package/dist/theme/tokens.stylex.d.ts +3 -0
  490. package/dist/theme/tokens.stylex.d.ts.map +1 -1
  491. package/dist/theme/tokens.stylex.js +4 -1
  492. package/dist/utils/dateParser.d.ts.map +1 -1
  493. package/dist/utils/dateParser.js +12 -0
  494. package/dist/utils/disabledInteraction.d.ts +10 -2
  495. package/dist/utils/disabledInteraction.d.ts.map +1 -1
  496. package/dist/utils/disabledInteraction.js +16 -2
  497. package/dist/utils/focusReturn.d.ts +22 -25
  498. package/dist/utils/focusReturn.d.ts.map +1 -1
  499. package/dist/utils/focusReturn.js +36 -29
  500. package/dist/utils/index.d.ts +1 -1
  501. package/dist/utils/index.d.ts.map +1 -1
  502. package/dist/utils/index.js +1 -1
  503. package/dist/utils/interactionModality.d.ts.map +1 -1
  504. package/dist/utils/interactionModality.js +4 -0
  505. package/dist/utils/interactionOverlay.stylex.d.ts +6 -4
  506. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  507. package/dist/utils/interactionOverlay.stylex.js +6 -4
  508. package/dist/utils/isFocusDetached.d.ts +27 -0
  509. package/dist/utils/isFocusDetached.d.ts.map +1 -0
  510. package/dist/utils/isFocusDetached.js +32 -0
  511. package/dist/utils/layoutViewport.d.ts +25 -0
  512. package/dist/utils/layoutViewport.d.ts.map +1 -0
  513. package/dist/utils/layoutViewport.js +102 -0
  514. package/dist/utils/plainDate.d.ts +31 -0
  515. package/dist/utils/plainDate.d.ts.map +1 -1
  516. package/dist/utils/plainDate.js +68 -4
  517. package/dist/utils/pressFeedback.d.ts +6 -0
  518. package/dist/utils/pressFeedback.d.ts.map +1 -1
  519. package/dist/utils/pressFeedback.js +97 -18
  520. package/dist/utils/pressGesture.d.ts +4 -2
  521. package/dist/utils/pressGesture.d.ts.map +1 -1
  522. package/dist/utils/pressGesture.js +3 -1
  523. package/dist/utils/selectionLock.d.ts +10 -1
  524. package/dist/utils/selectionLock.d.ts.map +1 -1
  525. package/dist/utils/selectionLock.js +31 -5
  526. package/dist/utils/sharedMutationObserver.d.ts +2 -1
  527. package/dist/utils/sharedMutationObserver.d.ts.map +1 -1
  528. package/dist/utils/sharedMutationObserver.js +2 -1
  529. package/dist/utils/timeParser.d.ts +2 -1
  530. package/dist/utils/timeParser.d.ts.map +1 -1
  531. package/dist/utils/timeParser.js +29 -3
  532. package/dist/utils/triggerFocus.d.ts +36 -0
  533. package/dist/utils/triggerFocus.d.ts.map +1 -0
  534. package/dist/utils/triggerFocus.js +65 -0
  535. package/locales/en.json +148 -0
  536. package/locales/pseudo.json +111 -0
  537. package/package.json +14 -9
  538. package/src/AlertDialog/AlertDialog.doc.mjs +2 -2
  539. package/src/AlertDialog/AlertDialog.tsx +46 -5
  540. package/src/AppShell/AppShell.tsx +13 -4
  541. package/src/BottomSheet/BottomSheet.doc.mjs +1 -1
  542. package/src/BottomSheet/BottomSheet.tsx +1 -0
  543. package/src/BottomSheet/BottomSheetPanel.tsx +80 -16
  544. package/src/BottomSheet/BottomSheetSwitcher.doc.mjs +5 -0
  545. package/src/BottomSheet/BottomSheetSwitcher.tsx +5 -0
  546. package/src/BottomSheet/bottomSheetStack.ts +1 -1
  547. package/src/BottomSheet/useSheetGestures.ts +16 -1
  548. package/src/Button/Button.tsx +26 -4
  549. package/src/Calendar/Calendar.tsx +40 -32
  550. package/src/Calendar/getWeekdayHeaderNames.ts +88 -0
  551. package/src/Calendar/hooks/useCalendarDays.ts +5 -10
  552. package/src/Calendar/{standaloneShortWeekdayNames.generated.ts → weekdayHeaderNames.generated.ts} +14 -14
  553. package/src/Carousel/Carousel.tsx +1 -0
  554. package/src/Chat/ChatComposerInput.tsx +4 -7
  555. package/src/Chat/ChatMessageList.tsx +2 -1
  556. package/src/Chat/useChatDictation.ts +1 -0
  557. package/src/Chat/useChatNewMessages.ts +1 -1
  558. package/src/Chat/useChatStreamScroll.ts +2 -0
  559. package/src/Chat/useSpeechRecognition.ts +2 -0
  560. package/src/Chat/useTriggerMenu.tsx +1 -1
  561. package/src/CheckboxInput/CheckboxInput.doc.mjs +18 -0
  562. package/src/CheckboxInput/CheckboxInput.tsx +38 -15
  563. package/src/CheckboxList/CheckboxList.doc.mjs +14 -0
  564. package/src/CheckboxList/CheckboxList.tsx +43 -2
  565. package/src/CheckboxList/CheckboxListContext.tsx +9 -1
  566. package/src/CheckboxList/CheckboxListItem.tsx +23 -2
  567. package/src/CheckboxList/requiredGroup.ts +77 -0
  568. package/src/CodeBlock/CodeBlock.doc.mjs +9 -1
  569. package/src/CodeBlock/CodeBlock.tsx +41 -4
  570. package/src/CommandPalette/CommandPalette.tsx +1 -0
  571. package/src/CommandPalette/CommandPaletteItem.tsx +1 -0
  572. package/src/ComplexSelector/ComplexSelector.tsx +20 -5
  573. package/src/ContextMenu/ContextMenu.tsx +2 -2
  574. package/src/DateInput/MonthScroller.tsx +8 -2
  575. package/src/DateInput/PickerWheel.tsx +796 -0
  576. package/src/DateInput/TouchDateField.tsx +6 -32
  577. package/src/DateInput/Wheel.tsx +188 -171
  578. package/src/DateInput/datePickerTouch.ts +15 -0
  579. package/src/DateInput/useOwnScrollGesture.ts +25 -3
  580. package/src/DateInput/usePointerDragScroll.ts +1 -0
  581. package/src/DateInput/useScrollSettle.ts +2 -0
  582. package/src/DateInput/useWheelListbox.ts +112 -0
  583. package/src/DateInput/wheelOptions.ts +184 -0
  584. package/src/DateInput/wheelPhysics.ts +406 -0
  585. package/src/DateInput/wheelStrip.ts +341 -0
  586. package/src/DateTimeInput/TouchDateTimeField.tsx +100 -189
  587. package/src/Dialog/Dialog.tsx +12 -32
  588. package/src/Drawer/useDrawerDialogPresence.ts +2 -0
  589. package/src/DropdownMenu/useMenuOverflow.ts +3 -0
  590. package/src/Field/Field.tsx +2 -2
  591. package/src/FieldStatus/useFieldStatusAnnouncement.ts +1 -0
  592. package/src/FormLayout/FormLayout.doc.mjs +181 -46
  593. package/src/FormLayout/FormLayout.tsx +5 -1
  594. package/src/HoverCard/HoverCard.doc.mjs +10 -8
  595. package/src/HoverCard/HoverCard.tsx +58 -6
  596. package/src/HoverCard/useHoverCard.doc.mjs +178 -36
  597. package/src/HoverCard/useHoverCard.tsx +55 -55
  598. package/src/Icon/Icon.doc.mjs +51 -10
  599. package/src/Icon/Icon.tsx +31 -8
  600. package/src/IconButton/IconButton.doc.mjs +141 -21
  601. package/src/InfoTip/InfoTip.tsx +72 -16
  602. package/src/Item/useSwipeAction.ts +2 -0
  603. package/src/Layer/modalOutlet.ts +2 -0
  604. package/src/Layer/outsidePress.ts +1 -0
  605. package/src/Layer/useLayer.tsx +3 -1
  606. package/src/Layer/useLayerDismissal.ts +2 -0
  607. package/src/Layer/useTouchTrigger.ts +19 -6
  608. package/src/Layout/index.ts +1 -1
  609. package/src/Layout/layoutReset.ts +1 -1
  610. package/src/Layout/overlayPaddingReset.stylex.ts +73 -0
  611. package/src/Layout/padding.stylex.ts +9 -133
  612. package/src/Layout/paddingStyles.stylex.ts +87 -0
  613. package/src/Lightbox/Lightbox.tsx +20 -1
  614. package/src/Lightbox/useLightbox.doc.mjs +167 -0
  615. package/src/MobileNav/MobileNav.tsx +10 -31
  616. package/src/MultiSelector/MultiSelector.tsx +2 -7
  617. package/src/NumberInput/NumberInput.tsx +2 -7
  618. package/src/Outline/useOutlineFromDOM.ts +2 -0
  619. package/src/Outline/useScrollSpy.ts +2 -0
  620. package/src/OverflowList/OverflowList.tsx +2 -0
  621. package/src/Overlay/Overlay.tsx +7 -2
  622. package/src/Popover/Popover.tsx +4 -0
  623. package/src/Popover/usePopover.tsx +2 -2
  624. package/src/PowerSearch/PowerSearch.doc.mjs +60 -8
  625. package/src/PowerSearch/PowerSearch.tsx +622 -157
  626. package/src/PowerSearch/PowerSearchBottomSheet.tsx +2700 -0
  627. package/src/PowerSearch/PowerSearchEditPopover.tsx +65 -9
  628. package/src/PowerSearch/PowerSearchFilterEditor.tsx +2 -0
  629. package/src/PowerSearch/PowerSearchToken.tsx +2 -0
  630. package/src/PowerSearch/PowerSearchValueEditor.tsx +340 -59
  631. package/src/PowerSearch/formatFilterValue.ts +49 -27
  632. package/src/PowerSearch/formatTokenValue.ts +220 -0
  633. package/src/PowerSearch/index.ts +5 -1
  634. package/src/PowerSearch/powerSearchDateZone.ts +95 -0
  635. package/src/PowerSearch/powerSearchSheetUtils.ts +224 -0
  636. package/src/PowerSearch/types.ts +8 -1
  637. package/src/ProgressBar/ProgressBarTouch.ts +2 -0
  638. package/src/RadioList/RadioList.tsx +3 -2
  639. package/src/RadioList/RadioListItem.tsx +5 -3
  640. package/src/Resizable/Resizable.doc.mjs +5 -4
  641. package/src/Resizable/ResizeHandle.tsx +187 -135
  642. package/src/Resizable/createResizable.ts +1046 -0
  643. package/src/Resizable/separatorAttributes.ts +73 -0
  644. package/src/Resizable/useResizable.ts +292 -623
  645. package/src/SegmentedControl/useSegmentedSelectionMotion.ts +6 -3
  646. package/src/SelectableCard/SelectableCard.tsx +39 -10
  647. package/src/SelectableCard/selectableCardInput.ts +30 -0
  648. package/src/Selector/Selector.tsx +7 -19
  649. package/src/SideNav/SideNav.tsx +41 -5
  650. package/src/Slider/Slider.tsx +20 -11
  651. package/src/Slider/sliderTouchController.ts +2 -2
  652. package/src/Spinner/Spinner.tsx +77 -63
  653. package/src/Stepper/Stepper.tsx +10 -27
  654. package/src/Switch/Switch.tsx +2 -6
  655. package/src/Switch/useSwitchTouch.ts +4 -4
  656. package/src/Table/BaseTable.tsx +46 -12
  657. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +2 -1
  658. package/src/Table/plugins/filtering/useTableFiltering.tsx +1 -0
  659. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +31 -7
  660. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +2 -0
  661. package/src/Table/plugins/tree/useTableTreeData.tsx +43 -20
  662. package/src/Table/useTableRowExpansion.doc.mjs +9 -0
  663. package/src/Table/useTableTreeData.doc.mjs +15 -3
  664. package/src/TextArea/TextArea.tsx +2 -7
  665. package/src/TextInput/TextInput.tsx +13 -17
  666. package/src/TimeInput/TimeInput.tsx +2 -0
  667. package/src/TimeInput/TimeWheels.tsx +218 -0
  668. package/src/TimeInput/TouchTimeField.tsx +93 -155
  669. package/src/TimeInput/timeWheelRules.ts +352 -0
  670. package/src/Timer/Timer.tsx +1 -0
  671. package/src/Timestamp/Timestamp.tsx +1 -1
  672. package/src/Timestamp/formatInstant.ts +1 -33
  673. package/src/Toast/Toast.doc.mjs +4 -3
  674. package/src/Toast/Toast.tsx +52 -32
  675. package/src/Toast/ToastViewport.tsx +123 -35
  676. package/src/Toast/types.ts +9 -3
  677. package/src/Toast/useToast.tsx +1 -0
  678. package/src/Tokenizer/Tokenizer.doc.mjs +10 -10
  679. package/src/Tokenizer/Tokenizer.tsx +61 -62
  680. package/src/Tokenizer/TokenizerBottomSheet.tsx +17 -23
  681. package/src/Tokenizer/index.ts +1 -0
  682. package/src/Tooltip/Tooltip.tsx +6 -42
  683. package/src/Tooltip/useTooltip.doc.mjs +24 -0
  684. package/src/Tooltip/useTooltip.tsx +243 -134
  685. package/src/Typeahead/BaseTypeahead.tsx +27 -17
  686. package/src/Typeahead/TypeaheadItem.doc.mjs +6 -3
  687. package/src/Typeahead/TypeaheadItem.tsx +2 -1
  688. package/src/animator/createAnimator.doc.mjs +153 -0
  689. package/src/animator/createAnimator.ts +324 -0
  690. package/src/gestures/GestureHost.ts +6 -5
  691. package/src/gestures/PressTracker.ts +4 -3
  692. package/src/gestures/README.md +10 -4
  693. package/src/hooks/ModalAnnounceProvider.tsx +1 -0
  694. package/src/hooks/actionGroupTracker.ts +25 -9
  695. package/src/hooks/index.ts +2 -0
  696. package/src/hooks/longPressDetector.ts +273 -0
  697. package/src/hooks/pressGroupContext.ts +21 -0
  698. package/src/hooks/rootScrollStyles.ts +247 -0
  699. package/src/hooks/scrollLockTouchGuard.ts +149 -0
  700. package/src/hooks/scrollbarGutter.ts +41 -26
  701. package/src/hooks/useActionGroupTracking.ts +224 -0
  702. package/src/hooks/useAnimator.doc.mjs +109 -0
  703. package/src/hooks/useAnimator.ts +67 -0
  704. package/src/hooks/useAnnounceRenderedText.ts +1 -0
  705. package/src/hooks/useAttachment.ts +1 -1
  706. package/src/hooks/useAutoMediaMode.ts +1 -0
  707. package/src/hooks/useBusyAnnouncement.ts +2 -0
  708. package/src/hooks/useDevWarning.ts +2 -0
  709. package/src/hooks/useFocusTrap.ts +2 -0
  710. package/src/hooks/useGridFocus.doc.mjs +6 -6
  711. package/src/hooks/useGridFocus.ts +10 -7
  712. package/src/hooks/useHotkeys.ts +2 -0
  713. package/src/hooks/useImageMode.ts +2 -0
  714. package/src/hooks/useInputStatusIcon.tsx +3 -2
  715. package/src/hooks/useKeyboardHint.tsx +1 -1
  716. package/src/hooks/useLongPress.doc.mjs +2 -2
  717. package/src/hooks/useLongPress.ts +32 -122
  718. package/src/hooks/useMenuHover.ts +1 -0
  719. package/src/hooks/useMenuPress.ts +2 -0
  720. package/src/hooks/useOverflow.ts +2 -1
  721. package/src/hooks/usePressFeedback.ts +1 -0
  722. package/src/hooks/useResolvedRequired.ts +3 -0
  723. package/src/hooks/useScrollLock.doc.mjs +51 -12
  724. package/src/hooks/useScrollLock.ts +53 -60
  725. package/src/hooks/useScrollableArea.ts +4 -0
  726. package/src/hooks/useStreamingText.ts +2 -0
  727. package/src/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.ts +46 -0
  728. package/src/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.ts +6 -0
  729. package/src/i18n/generated-english/PowerSearch/formatTokenValue.generated.ts +15 -0
  730. package/src/i18n/generated-english/Resizable/createResizable.generated.ts +14 -0
  731. package/src/i18n/generated-english/Table/plugins/rowExpansion/useTableRowExpansion.generated.ts +3 -1
  732. package/src/i18n/generated-english/Table/plugins/tree/useTableTreeData.generated.ts +3 -1
  733. package/src/i18n/generated-english/TimeInput/TimeWheels.generated.ts +18 -0
  734. package/src/i18n/generated-locales/en.generated.ts +47 -0
  735. package/src/i18n/generated-locales/pseudo.generated.ts +48 -0
  736. package/src/index.ts +13 -0
  737. package/src/internal/indicatorPress.stylex.ts +24 -0
  738. package/src/internal/selectable-card.ts +21 -0
  739. package/src/internal/sheetDraft.ts +2 -2
  740. package/src/keyboard/README.md +197 -0
  741. package/src/keyboard/index.ts +48 -0
  742. package/src/keyboard/keyboardHeight.ts +543 -0
  743. package/src/keyboard/keyboardLayoutGuide.ts +266 -0
  744. package/src/keyboard/keyboardModel.ts +301 -0
  745. package/src/keyboard/rideKeyboard.ts +100 -0
  746. package/src/keyboard/useMobileKeyboard.ts +866 -0
  747. package/src/motion/MEASUREMENTS.md +28 -0
  748. package/src/motion/README.md +12 -5
  749. package/src/motion/android/index.ts +18 -0
  750. package/src/motion/android/keyboard.ts +96 -0
  751. package/src/motion/animatedLayout.ts +323 -60
  752. package/src/motion/animator.ts +66 -37
  753. package/src/motion/frameBlock.ts +16 -0
  754. package/src/motion/progress.ts +155 -0
  755. package/src/motion/reducedMotion.ts +3 -1
  756. package/src/motion/uikit/alert.ts +43 -0
  757. package/src/motion/uikit/datePicker.ts +60 -0
  758. package/src/motion/uikit/index.ts +6 -4
  759. package/src/motion/uikit/picker.ts +116 -0
  760. package/src/privateAttributes/pressGroupItem.stylex.ts +44 -0
  761. package/src/privateAttributes/reducedMotion.stylex.ts +45 -0
  762. package/src/theme/Theme.tsx +37 -3
  763. package/src/theme/generateThemeRules.ts +14 -12
  764. package/src/theme/motionKnobs.ts +4 -3
  765. package/src/theme/themeMotion.ts +17 -2
  766. package/src/theme/tokens.stylex.ts +2 -0
  767. package/src/utils/dateParser.ts +16 -0
  768. package/src/utils/disabledInteraction.ts +23 -2
  769. package/src/utils/focusReturn.ts +38 -31
  770. package/src/utils/index.ts +1 -1
  771. package/src/utils/interactionModality.ts +4 -0
  772. package/src/utils/interactionOverlay.stylex.ts +6 -4
  773. package/src/utils/isFocusDetached.ts +34 -0
  774. package/src/utils/layoutViewport.ts +104 -0
  775. package/src/utils/plainDate.ts +80 -4
  776. package/src/utils/pressFeedback.ts +126 -30
  777. package/src/utils/pressGesture.ts +4 -2
  778. package/src/utils/selectionLock.ts +40 -6
  779. package/src/utils/sharedMutationObserver.ts +2 -1
  780. package/src/utils/timeParser.ts +40 -3
  781. package/src/utils/triggerFocus.ts +80 -0
  782. package/dist/BottomSheet/useMobileKeyboard.d.ts +0 -21
  783. package/dist/BottomSheet/useMobileKeyboard.d.ts.map +0 -1
  784. package/dist/BottomSheet/useMobileKeyboard.js +0 -407
  785. package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts +0 -14
  786. package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts.map +0 -1
  787. package/dist/Calendar/getStandaloneShortWeekdayNames.js +0 -26
  788. package/dist/Calendar/standaloneShortWeekdayNames.generated.d.ts.map +0 -1
  789. package/dist/Layer/usePressPin.d.ts +0 -93
  790. package/dist/Layer/usePressPin.d.ts.map +0 -1
  791. package/dist/Layer/usePressPin.js +0 -363
  792. package/dist/internal/touch-sheet.d.ts +0 -21
  793. package/dist/internal/touch-sheet.d.ts.map +0 -1
  794. package/dist/internal/touch-sheet.js +0 -19
  795. package/src/BottomSheet/useMobileKeyboard.ts +0 -538
  796. package/src/Calendar/getStandaloneShortWeekdayNames.ts +0 -38
  797. package/src/Layer/usePressPin.ts +0 -510
  798. package/src/internal/touch-sheet.ts +0 -21
@@ -4,9 +4,12 @@
4
4
 
5
5
  /**
6
6
  * @file PowerSearchValueEditor.tsx
7
- * @input OperatorValue, FilterValue, onChange callback
7
+ * @input OperatorValue, FilterValue, onChange callback, and the presentation
8
+ * the editor renders in
8
9
  * @output Renders the appropriate editor for a filter value type
9
- * @position Sub-component; consumed by PowerSearchEditPopover
10
+ * @position Sub-component; consumed by PowerSearchEditPopover (popover
11
+ * presentation) and PowerSearchBottomSheet (sheet presentation, which
12
+ * renders the closed vocabularies as rows itself)
10
13
  *
11
14
  * SYNC: When modified, update:
12
15
  * - /packages/core/src/PowerSearch/index.ts
@@ -16,6 +19,7 @@ import React, {
16
19
  useCallback,
17
20
  useMemo,
18
21
  useRef,
22
+ useState,
19
23
  type FormEvent,
20
24
  type KeyboardEvent,
21
25
  } from 'react';
@@ -39,13 +43,23 @@ import {
39
43
  type NumberInputCommitDecision,
40
44
  } from '../NumberInput/numberInputCommit';
41
45
  import {DateInput} from '../DateInput';
46
+ import {
47
+ isoDateTimeToUnixSeconds,
48
+ isoDateToUnixSeconds,
49
+ resolveDateZone,
50
+ unixSecondsToISODate,
51
+ unixSecondsToISODateTime,
52
+ } from './powerSearchDateZone';
53
+ import type {ISODateTimeString} from '../DateTimeInput/DateTimeInput';
54
+ import {HStack} from '../HStack/HStack';
42
55
  import {DateRangeInput, type DateRange} from '../DateRangeInput';
43
56
  import {resolveDateTimeRangePart} from './resolveDateTimeRangePart';
44
57
  import {TimeInput} from '../TimeInput';
45
58
  import {Selector} from '../Selector';
46
- import {Tokenizer} from '../Tokenizer';
59
+ import {Tokenizer} from '../Tokenizer/Tokenizer';
47
60
  import {Typeahead} from '../Typeahead';
48
61
  import {useLocale} from '../i18n';
62
+ import type {TranslatorFn} from '../i18n';
49
63
  import {
50
64
  registerEnglishFallback,
51
65
  useComponentTranslator,
@@ -64,8 +78,30 @@ export interface PowerSearchValueEditorProps {
64
78
  maxMenuItems?: number;
65
79
  isDisabled?: boolean;
66
80
  timezoneID?: string;
81
+ /**
82
+ * Called when a staged value no longer stands — the number input's draft is
83
+ * empty or does not parse — so the sheet presentation's confirm action
84
+ * disables again. Only the `bottom-sheet` presentation stages as typed; the
85
+ * popover commits on blur or Enter and never calls this.
86
+ */
87
+ onUnstage?: () => void;
88
+ /**
89
+ * Where the editor renders. In the `bottom-sheet` presentation the inputs
90
+ * fill the sheet's width, number inputs stage every parseable keystroke
91
+ * (the sheet's footer confirms; there is no Enter-to-save), the date range
92
+ * shows one month, and list values open the Tokenizer's own sheet titled
93
+ * with `fieldLabel`.
94
+ * @default 'popover'
95
+ */
96
+ presentation?: 'popover' | 'bottom-sheet';
97
+ /** The field's label; names the Tokenizer sheet in the sheet presentation. */
98
+ fieldLabel?: string;
67
99
  }
68
100
 
101
+ type EditorPresentation = NonNullable<
102
+ PowerSearchValueEditorProps['presentation']
103
+ >;
104
+
69
105
  // =============================================================================
70
106
  // Helpers
71
107
  // =============================================================================
@@ -96,10 +132,9 @@ function enumItemsToSearchableItems(
96
132
  function dateRangePartToISO(
97
133
  part: DateTimeRangePart,
98
134
  nowSeconds: number,
135
+ zone: string | undefined,
99
136
  ): ISODateString {
100
- return new Date(resolveDateTimeRangePart(part, nowSeconds) * 1000)
101
- .toISOString()
102
- .split('T')[0] as ISODateString;
137
+ return unixSecondsToISODate(resolveDateTimeRangePart(part, nowSeconds), zone);
103
138
  }
104
139
 
105
140
  // =============================================================================
@@ -113,6 +148,7 @@ function StringEditor({
113
148
  onEnter: _onEnter,
114
149
  maxMenuItems,
115
150
  isDisabled,
151
+ presentation,
116
152
  }: {
117
153
  operatorValue: OperatorValue & {type: 'string'};
118
154
  filterValue: FilterValue | undefined;
@@ -120,8 +156,10 @@ function StringEditor({
120
156
  onEnter?: () => void;
121
157
  maxMenuItems?: number;
122
158
  isDisabled?: boolean;
159
+ presentation: EditorPresentation;
123
160
  }) {
124
161
  const t = useComponentTranslator();
162
+ const width = presentation === 'bottom-sheet' ? '100%' : undefined;
125
163
  const currentValue = filterValue?.type === 'string' ? filterValue.value : '';
126
164
 
127
165
  // When a searchSource is provided, render a typeahead instead of a plain
@@ -148,6 +186,7 @@ function StringEditor({
148
186
  placeholder={t('@astryx.powersearch.valueEditor.searchPlaceholder')}
149
187
  debounceMs={150}
150
188
  maxMenuItems={maxMenuItems}
189
+ width={width}
151
190
  />
152
191
  );
153
192
  }
@@ -162,6 +201,7 @@ function StringEditor({
162
201
  onChange={(value: string) => {
163
202
  onChange({type: 'string', value});
164
203
  }}
204
+ width={width}
165
205
  />
166
206
  );
167
207
  }
@@ -172,14 +212,19 @@ function StringListEditor({
172
212
  onChange,
173
213
  maxMenuItems,
174
214
  isDisabled,
215
+ presentation,
216
+ fieldLabel,
175
217
  }: {
176
218
  operatorValue: OperatorValue & {type: 'string_list'};
177
219
  filterValue: FilterValue | undefined;
178
220
  onChange: (value: FilterValue) => void;
179
221
  maxMenuItems?: number;
180
222
  isDisabled?: boolean;
223
+ presentation: EditorPresentation;
224
+ fieldLabel?: string;
181
225
  }) {
182
226
  const t = useComponentTranslator();
227
+ const isSheet = presentation === 'bottom-sheet';
183
228
  const currentValue: SearchableItem[] = useMemo(() => {
184
229
  if (filterValue?.type !== 'string_list') {
185
230
  return [];
@@ -203,9 +248,16 @@ function StringListEditor({
203
248
  const hasCreate =
204
249
  operatorValue.isArbitraryStringAllowed || !operatorValue.searchSource;
205
250
 
251
+ // In the sheet presentation the list value edits through the Tokenizer's
252
+ // own sheet, titled with the field's label; a popover menu inside a sheet
253
+ // would stack a second anchored layer on a surface the person is already in.
206
254
  return (
207
255
  <Tokenizer
208
- label={t('@astryx.powersearch.valueEditor.values')}
256
+ label={
257
+ isSheet && fieldLabel != null
258
+ ? fieldLabel
259
+ : t('@astryx.powersearch.valueEditor.values')
260
+ }
209
261
  isLabelHidden
210
262
  isDisabled={isDisabled}
211
263
  searchSource={source}
@@ -220,6 +272,8 @@ function StringListEditor({
220
272
  debounceMs={operatorValue.searchSource ? 150 : 0}
221
273
  hasCreate={hasCreate}
222
274
  maxMenuItems={maxMenuItems}
275
+ width={isSheet ? '100%' : undefined}
276
+ presentation={isSheet ? 'bottom-sheet' : 'popover'}
223
277
  />
224
278
  );
225
279
  }
@@ -231,6 +285,8 @@ function useNumberEditorHandlers({
231
285
  isIntegerOnly,
232
286
  onChange,
233
287
  onEnter,
288
+ onUnstage,
289
+ stagesAsTyped,
234
290
  }: {
235
291
  valueType: 'integer' | 'float';
236
292
  min?: number;
@@ -238,6 +294,14 @@ function useNumberEditorHandlers({
238
294
  isIntegerOnly: boolean;
239
295
  onChange: (value: FilterValue, shouldSave?: boolean) => void;
240
296
  onEnter?: () => void;
297
+ onUnstage?: () => void;
298
+ /**
299
+ * Stage every keystroke the input would commit, and unstage when the draft
300
+ * stops parsing. The sheet presentation confirms from its footer, so the
301
+ * confirm action must enable while the person is still typing and disable
302
+ * again over an empty field; the popover commits on blur or Enter.
303
+ */
304
+ stagesAsTyped: boolean;
241
305
  }) {
242
306
  const locale = useLocale();
243
307
  const pendingDecisionRef = useRef<NumberInputCommitDecision | null>(null);
@@ -259,12 +323,30 @@ function useNumberEditorHandlers({
259
323
  }, []);
260
324
  const handleInput = useCallback(
261
325
  (event: FormEvent<HTMLElement>) => {
262
- pendingDecisionRef.current = resolveNumberInputCommit(
326
+ const decision = resolveNumberInputCommit(
263
327
  (event.currentTarget as HTMLInputElement).value,
264
328
  {min, max, isIntegerOnly, locale, hasClear: false},
265
329
  );
330
+ pendingDecisionRef.current = decision;
331
+ if (stagesAsTyped) {
332
+ if (decision.type === 'commit') {
333
+ onChange(toFilterValue(decision.value));
334
+ } else {
335
+ // Cleared, or not a number: nothing stands to confirm.
336
+ onUnstage?.();
337
+ }
338
+ }
266
339
  },
267
- [isIntegerOnly, locale, max, min],
340
+ [
341
+ isIntegerOnly,
342
+ locale,
343
+ max,
344
+ min,
345
+ onChange,
346
+ onUnstage,
347
+ stagesAsTyped,
348
+ toFilterValue,
349
+ ],
268
350
  );
269
351
  const handleEnter = useCallback(() => {
270
352
  const decision = pendingDecisionRef.current;
@@ -292,13 +374,17 @@ function IntegerEditor({
292
374
  filterValue,
293
375
  onChange,
294
376
  onEnter,
377
+ onUnstage,
295
378
  isDisabled,
379
+ presentation,
296
380
  }: {
297
381
  operatorValue: OperatorValue & {type: 'integer'};
298
382
  filterValue: FilterValue | undefined;
299
383
  onChange: (value: FilterValue, shouldSave?: boolean) => void;
300
384
  onEnter?: () => void;
385
+ onUnstage?: () => void;
301
386
  isDisabled?: boolean;
387
+ presentation: EditorPresentation;
302
388
  }) {
303
389
  const t = useComponentTranslator();
304
390
  const currentValue =
@@ -310,6 +396,8 @@ function IntegerEditor({
310
396
  isIntegerOnly: true,
311
397
  onChange,
312
398
  onEnter,
399
+ onUnstage,
400
+ stagesAsTyped: presentation === 'bottom-sheet',
313
401
  });
314
402
 
315
403
  return (
@@ -328,6 +416,7 @@ function IntegerEditor({
328
416
  units={operatorValue.units}
329
417
  isIntegerOnly
330
418
  placeholder={t('@astryx.powersearch.valueEditor.enterNumberPlaceholder')}
419
+ width={presentation === 'bottom-sheet' ? '100%' : undefined}
331
420
  />
332
421
  );
333
422
  }
@@ -337,13 +426,17 @@ function FloatEditor({
337
426
  filterValue,
338
427
  onChange,
339
428
  onEnter,
429
+ onUnstage,
340
430
  isDisabled,
431
+ presentation,
341
432
  }: {
342
433
  operatorValue: OperatorValue & {type: 'float'};
343
434
  filterValue: FilterValue | undefined;
344
435
  onChange: (value: FilterValue, shouldSave?: boolean) => void;
345
436
  onEnter?: () => void;
437
+ onUnstage?: () => void;
346
438
  isDisabled?: boolean;
439
+ presentation: EditorPresentation;
347
440
  }) {
348
441
  const t = useComponentTranslator();
349
442
  const currentValue =
@@ -355,6 +448,8 @@ function FloatEditor({
355
448
  isIntegerOnly: false,
356
449
  onChange,
357
450
  onEnter,
451
+ onUnstage,
452
+ stagesAsTyped: presentation === 'bottom-sheet',
358
453
  });
359
454
 
360
455
  return (
@@ -372,6 +467,7 @@ function FloatEditor({
372
467
  max={operatorValue.maxValue}
373
468
  units={operatorValue.units}
374
469
  placeholder={t('@astryx.powersearch.valueEditor.enterNumberPlaceholder')}
470
+ width={presentation === 'bottom-sheet' ? '100%' : undefined}
375
471
  />
376
472
  );
377
473
  }
@@ -381,11 +477,13 @@ function TimeEditor({
381
477
  filterValue,
382
478
  onChange,
383
479
  isDisabled,
480
+ presentation,
384
481
  }: {
385
482
  operatorValue: OperatorValue & {type: 'time'};
386
483
  filterValue: FilterValue | undefined;
387
484
  onChange: (value: FilterValue) => void;
388
485
  isDisabled?: boolean;
486
+ presentation: EditorPresentation;
389
487
  }) {
390
488
  const t = useComponentTranslator();
391
489
  const currentValue =
@@ -406,46 +504,207 @@ function TimeEditor({
406
504
  }}
407
505
  min={operatorValue.minValue as ISOTimeString | undefined}
408
506
  max={operatorValue.maxValue as ISOTimeString | undefined}
507
+ width={presentation === 'bottom-sheet' ? '100%' : undefined}
409
508
  />
410
509
  );
411
510
  }
412
511
 
512
+ /**
513
+ * A value with a time of day: its wall-clock time in `zone`, read and written
514
+ * as one instant through a date picker beside a time field.
515
+ */
516
+ function DateTimeEditor({
517
+ label,
518
+ isDisabled,
519
+ presentation,
520
+ unixSeconds,
521
+ zone,
522
+ onChange,
523
+ }: {
524
+ label: string;
525
+ isDisabled?: boolean;
526
+ presentation: EditorPresentation;
527
+ unixSeconds: number | undefined;
528
+ zone: string | undefined;
529
+ onChange: (value: FilterValue) => void;
530
+ }) {
531
+ const t = useComponentTranslator();
532
+ const [datePart, timePart] = useMemo(() => {
533
+ if (unixSeconds == null) {
534
+ return [undefined, undefined] as const;
535
+ }
536
+ const [date, time] = unixSecondsToISODateTime(unixSeconds, zone).split('T');
537
+ return [date as ISODateString, time as ISOTimeString] as const;
538
+ }, [unixSeconds, zone]);
539
+ // A part picked first waits for the other. The editor writes the instant
540
+ // once both parts exist.
541
+ const [pendingDate, setPendingDate] = useState<ISODateString | undefined>();
542
+ const [pendingTime, setPendingTime] = useState<ISOTimeString | undefined>();
543
+ const date = datePart ?? pendingDate;
544
+ const time = timePart ?? pendingTime;
545
+ const commit = (
546
+ nextDate: ISODateString | undefined,
547
+ nextTime: ISOTimeString | undefined,
548
+ ) => {
549
+ if (nextDate == null || nextTime == null) {
550
+ return;
551
+ }
552
+ onChange({
553
+ type: 'date_absolute',
554
+ unixSeconds: isoDateTimeToUnixSeconds(
555
+ `${nextDate}T${nextTime}` as ISODateTimeString,
556
+ zone,
557
+ ),
558
+ });
559
+ };
560
+ const width = presentation === 'bottom-sheet' ? '100%' : undefined;
561
+ // A nested sub-filter row keeps its selectors' widths, so the pair wraps
562
+ // where the value cell is narrower than the two inputs.
563
+ return (
564
+ <HStack gap={2} wrap="wrap">
565
+ <DateInput
566
+ label={label}
567
+ isLabelHidden
568
+ isDisabled={isDisabled}
569
+ value={date}
570
+ onChange={value => {
571
+ setPendingDate(value);
572
+ commit(value, time);
573
+ }}
574
+ width={width}
575
+ />
576
+ <TimeInput
577
+ label={t('@astryx.powersearch.valueEditor.time')}
578
+ isLabelHidden
579
+ isDisabled={isDisabled}
580
+ value={time}
581
+ onChange={value => {
582
+ setPendingTime(value);
583
+ commit(date, value);
584
+ }}
585
+ width={width}
586
+ />
587
+ </HStack>
588
+ );
589
+ }
590
+
413
591
  function DateAbsoluteEditor({
592
+ operatorValue,
414
593
  filterValue,
415
594
  onChange,
416
595
  isDisabled,
596
+ presentation,
597
+ timezoneID,
417
598
  }: {
418
599
  operatorValue: OperatorValue & {type: 'date_absolute'};
419
600
  filterValue: FilterValue | undefined;
420
601
  onChange: (value: FilterValue) => void;
421
602
  isDisabled?: boolean;
603
+ presentation: EditorPresentation;
604
+ timezoneID?: string;
422
605
  }) {
423
606
  const t = useComponentTranslator();
424
- // Convert unixSeconds to ISO date string for the date input
425
- const currentValue = useMemo(() => {
426
- if (filterValue?.type !== 'date_absolute') {
427
- return undefined;
428
- }
429
- const date = new Date(filterValue.unixSeconds * 1000);
430
- return date.toISOString().split('T')[0] as ISODateString;
431
- }, [filterValue]);
607
+ const label = t('@astryx.powersearch.valueEditor.date');
608
+ const unixSeconds =
609
+ filterValue?.type === 'date_absolute' ? filterValue.unixSeconds : undefined;
610
+
611
+ if (operatorValue.isDateOnly === false) {
612
+ return (
613
+ <DateTimeEditor
614
+ label={label}
615
+ isDisabled={isDisabled}
616
+ presentation={presentation}
617
+ unixSeconds={unixSeconds}
618
+ zone={resolveDateZone(timezoneID, false)}
619
+ onChange={onChange}
620
+ />
621
+ );
622
+ }
623
+
624
+ // A calendar day edits in the one zone the token and the label read it in.
625
+ const zone = resolveDateZone(timezoneID, true);
432
626
 
433
627
  return (
434
628
  <DateInput
435
- label={t('@astryx.powersearch.valueEditor.date')}
629
+ label={label}
436
630
  isLabelHidden
437
631
  isDisabled={isDisabled}
438
- value={currentValue}
632
+ value={
633
+ unixSeconds == null
634
+ ? undefined
635
+ : unixSecondsToISODate(unixSeconds, zone)
636
+ }
439
637
  onChange={value => {
440
638
  if (value != null) {
441
- const unixSeconds = Math.floor(new Date(value).getTime() / 1000);
442
- onChange({type: 'date_absolute', unixSeconds});
639
+ onChange({
640
+ type: 'date_absolute',
641
+ unixSeconds: isoDateToUnixSeconds(value, zone),
642
+ });
443
643
  }
444
644
  }}
645
+ width={presentation === 'bottom-sheet' ? '100%' : undefined}
445
646
  />
446
647
  );
447
648
  }
448
649
 
650
+ const RELATIVE_DATE_UNITS = [
651
+ {
652
+ unit: 'day',
653
+ plural: 'days',
654
+ amounts: [1, 3, 7, 14, 30],
655
+ ago: '@astryx.powersearch.sheet.relativeDaysAgo',
656
+ fromNow: '@astryx.powersearch.sheet.relativeDaysFromNow',
657
+ },
658
+ {
659
+ unit: 'week',
660
+ plural: 'weeks',
661
+ amounts: [1, 2, 4],
662
+ ago: '@astryx.powersearch.sheet.relativeWeeksAgo',
663
+ fromNow: '@astryx.powersearch.sheet.relativeWeeksFromNow',
664
+ },
665
+ {
666
+ unit: 'month',
667
+ plural: 'months',
668
+ amounts: [1, 3, 6, 12],
669
+ ago: '@astryx.powersearch.sheet.relativeMonthsAgo',
670
+ fromNow: '@astryx.powersearch.sheet.relativeMonthsFromNow',
671
+ },
672
+ ] as const;
673
+
674
+ /**
675
+ * The relative-date choices an operator offers, in display order. Shared by
676
+ * the popover's Selector and the sheet presentation's rows so both list the
677
+ * same values. With `t` the labels resolve through the catalog's ICU plural
678
+ * messages (the sheet presentation's rows); without it they are the popover
679
+ * editor's own literals. In English the two read identically.
680
+ */
681
+ export function buildRelativeDateOptions(
682
+ operatorValue: OperatorValue & {type: 'date_relative'},
683
+ t?: TranslatorFn,
684
+ ): {value: string; label: string}[] {
685
+ const result: {value: string; label: string}[] = [];
686
+ for (const {unit, plural, amounts, ago, fromNow} of RELATIVE_DATE_UNITS) {
687
+ for (const amount of amounts) {
688
+ const unitWord = amount === 1 ? unit : plural;
689
+ if (operatorValue.isPastAllowed !== false) {
690
+ result.push({
691
+ value: `${amount}${unit[0]}_ago`,
692
+ label: t ? t(ago, {count: amount}) : `${amount} ${unitWord} ago`,
693
+ });
694
+ }
695
+ if (operatorValue.isFutureAllowed !== false) {
696
+ result.push({
697
+ value: `${amount}${unit[0]}_from_now`,
698
+ label: t
699
+ ? t(fromNow, {count: amount})
700
+ : `${amount} ${unitWord} from now`,
701
+ });
702
+ }
703
+ }
704
+ }
705
+ return result;
706
+ }
707
+
449
708
  function DateRelativeEditor({
450
709
  operatorValue,
451
710
  filterValue,
@@ -461,37 +720,18 @@ function DateRelativeEditor({
461
720
  const currentValue =
462
721
  filterValue?.type === 'date_relative' ? filterValue.value : undefined;
463
722
 
464
- const options = useMemo(() => {
465
- const result: {value: string; label: string}[] = [];
466
- const units = [
467
- {unit: 'day', plural: 'days'},
468
- {unit: 'week', plural: 'weeks'},
469
- {unit: 'month', plural: 'months'},
470
- ];
471
- for (const {unit, plural} of units) {
472
- const amounts =
473
- unit === 'day'
474
- ? [1, 3, 7, 14, 30]
475
- : unit === 'week'
476
- ? [1, 2, 4]
477
- : [1, 3, 6, 12];
478
- for (const amount of amounts) {
479
- if (operatorValue.isPastAllowed !== false) {
480
- result.push({
481
- value: `${amount}${unit[0]}_ago`,
482
- label: `${amount} ${amount === 1 ? unit : plural} ago`,
483
- });
484
- }
485
- if (operatorValue.isFutureAllowed !== false) {
486
- result.push({
487
- value: `${amount}${unit[0]}_from_now`,
488
- label: `${amount} ${amount === 1 ? unit : plural} from now`,
489
- });
490
- }
491
- }
492
- }
493
- return result;
494
- }, [operatorValue.isPastAllowed, operatorValue.isFutureAllowed]);
723
+ // The choices depend on the two flags only; a config that rebuilds its
724
+ // operator objects per render keeps the same memoized list.
725
+ const {isPastAllowed, isFutureAllowed} = operatorValue;
726
+ const options = useMemo(
727
+ () =>
728
+ buildRelativeDateOptions({
729
+ type: 'date_relative',
730
+ isPastAllowed,
731
+ isFutureAllowed,
732
+ }),
733
+ [isPastAllowed, isFutureAllowed],
734
+ );
495
735
 
496
736
  return (
497
737
  <Selector
@@ -511,13 +751,19 @@ function DateRangeEditor({
511
751
  filterValue,
512
752
  onChange,
513
753
  isDisabled,
754
+ presentation,
755
+ timezoneID,
514
756
  }: {
515
757
  operatorValue: OperatorValue & {type: 'date_range'};
516
758
  filterValue: FilterValue | undefined;
517
759
  onChange: (value: FilterValue) => void;
518
760
  isDisabled?: boolean;
761
+ presentation: EditorPresentation;
762
+ timezoneID?: string;
519
763
  }) {
520
764
  const t = useComponentTranslator();
765
+ // A range part is a calendar day, read and written as a date-only value is.
766
+ const zone = resolveDateZone(timezoneID, true);
521
767
  const currentValue = useMemo<DateRange | null>(() => {
522
768
  if (filterValue?.type !== 'date_range') {
523
769
  return null;
@@ -525,10 +771,10 @@ function DateRangeEditor({
525
771
  const {start, end} = filterValue.value;
526
772
  const nowSeconds = Date.now() / 1000;
527
773
  return {
528
- start: dateRangePartToISO(start, nowSeconds),
529
- end: dateRangePartToISO(end, nowSeconds),
774
+ start: dateRangePartToISO(start, nowSeconds, zone),
775
+ end: dateRangePartToISO(end, nowSeconds, zone),
530
776
  };
531
- }, [filterValue]);
777
+ }, [filterValue, zone]);
532
778
 
533
779
  const handleChange = useCallback(
534
780
  (range: DateRange | null) => {
@@ -540,16 +786,16 @@ function DateRangeEditor({
540
786
  value: {
541
787
  start: {
542
788
  type: 'ABSOLUTE',
543
- unixSeconds: Date.parse(`${range.start}T00:00:00Z`) / 1000,
789
+ unixSeconds: isoDateToUnixSeconds(range.start, zone),
544
790
  },
545
791
  end: {
546
792
  type: 'ABSOLUTE',
547
- unixSeconds: Date.parse(`${range.end}T00:00:00Z`) / 1000,
793
+ unixSeconds: isoDateToUnixSeconds(range.end, zone),
548
794
  },
549
795
  },
550
796
  });
551
797
  },
552
- [onChange],
798
+ [onChange, zone],
553
799
  );
554
800
 
555
801
  const handleKeyDown = useCallback((event: KeyboardEvent<HTMLDivElement>) => {
@@ -569,6 +815,9 @@ function DateRangeEditor({
569
815
  value={currentValue}
570
816
  onChange={handleChange}
571
817
  hasClear={false}
818
+ // A phone-wide sheet fits one month; the popover keeps the default.
819
+ numberOfMonths={presentation === 'bottom-sheet' ? 1 : undefined}
820
+ width={presentation === 'bottom-sheet' ? '100%' : undefined}
572
821
  />
573
822
  </div>
574
823
  );
@@ -661,6 +910,7 @@ function EnumListEditor({
661
910
  // all of them instead of BaseTypeahead's 10-suggestion default, which
662
911
  // would silently drop valid choices with no way to reach them.
663
912
  maxMenuItems={items.length}
913
+ presentation="popover"
664
914
  />
665
915
  );
666
916
  }
@@ -671,14 +921,19 @@ function EntityListEditor({
671
921
  onChange,
672
922
  maxMenuItems,
673
923
  isDisabled,
924
+ presentation,
925
+ fieldLabel,
674
926
  }: {
675
927
  operatorValue: OperatorValue & {type: 'entity_list'};
676
928
  filterValue: FilterValue | undefined;
677
929
  onChange: (value: FilterValue) => void;
678
930
  maxMenuItems?: number;
679
931
  isDisabled?: boolean;
932
+ presentation: EditorPresentation;
933
+ fieldLabel?: string;
680
934
  }) {
681
935
  const t = useComponentTranslator();
936
+ const isSheet = presentation === 'bottom-sheet';
682
937
  const source = useMemo<SearchSource<SearchableItem>>(() => {
683
938
  if (operatorValue.searchSource) {
684
939
  return operatorValue.searchSource;
@@ -701,9 +956,15 @@ function EntityListEditor({
701
956
  }));
702
957
  }, [filterValue]);
703
958
 
959
+ // Sheet presentation: the Tokenizer's own sheet, titled with the field
960
+ // label, as for string_list.
704
961
  return (
705
962
  <Tokenizer
706
- label={t('@astryx.powersearch.valueEditor.entities')}
963
+ label={
964
+ isSheet && fieldLabel != null
965
+ ? fieldLabel
966
+ : t('@astryx.powersearch.valueEditor.entities')
967
+ }
707
968
  isLabelHidden
708
969
  isDisabled={isDisabled}
709
970
  searchSource={source}
@@ -726,6 +987,8 @@ function EntityListEditor({
726
987
  placeholder={t('@astryx.powersearch.valueEditor.searchPlaceholder')}
727
988
  debounceMs={operatorValue.searchSource ? 150 : 0}
728
989
  maxMenuItems={maxMenuItems}
990
+ width={isSheet ? '100%' : undefined}
991
+ presentation={isSheet ? 'bottom-sheet' : 'popover'}
729
992
  />
730
993
  );
731
994
  }
@@ -771,6 +1034,10 @@ export function PowerSearchValueEditor({
771
1034
  onEnter,
772
1035
  maxMenuItems,
773
1036
  isDisabled,
1037
+ onUnstage,
1038
+ presentation = 'popover',
1039
+ fieldLabel,
1040
+ timezoneID,
774
1041
  }: PowerSearchValueEditorProps) {
775
1042
  switch (operatorValue.type) {
776
1043
  case 'empty':
@@ -780,6 +1047,7 @@ export function PowerSearchValueEditor({
780
1047
  return (
781
1048
  <StringEditor
782
1049
  isDisabled={isDisabled}
1050
+ presentation={presentation}
783
1051
  operatorValue={operatorValue}
784
1052
  filterValue={filterValue}
785
1053
  onChange={onChange}
@@ -792,6 +1060,8 @@ export function PowerSearchValueEditor({
792
1060
  return (
793
1061
  <StringListEditor
794
1062
  isDisabled={isDisabled}
1063
+ presentation={presentation}
1064
+ fieldLabel={fieldLabel}
795
1065
  operatorValue={operatorValue}
796
1066
  filterValue={filterValue}
797
1067
  onChange={onChange}
@@ -803,6 +1073,8 @@ export function PowerSearchValueEditor({
803
1073
  return (
804
1074
  <IntegerEditor
805
1075
  isDisabled={isDisabled}
1076
+ presentation={presentation}
1077
+ onUnstage={onUnstage}
806
1078
  operatorValue={operatorValue}
807
1079
  filterValue={filterValue}
808
1080
  onChange={onChange}
@@ -814,6 +1086,8 @@ export function PowerSearchValueEditor({
814
1086
  return (
815
1087
  <FloatEditor
816
1088
  isDisabled={isDisabled}
1089
+ presentation={presentation}
1090
+ onUnstage={onUnstage}
817
1091
  operatorValue={operatorValue}
818
1092
  filterValue={filterValue}
819
1093
  onChange={onChange}
@@ -825,6 +1099,7 @@ export function PowerSearchValueEditor({
825
1099
  return (
826
1100
  <TimeEditor
827
1101
  isDisabled={isDisabled}
1102
+ presentation={presentation}
828
1103
  operatorValue={operatorValue}
829
1104
  filterValue={filterValue}
830
1105
  onChange={onChange}
@@ -835,9 +1110,11 @@ export function PowerSearchValueEditor({
835
1110
  return (
836
1111
  <DateAbsoluteEditor
837
1112
  isDisabled={isDisabled}
1113
+ presentation={presentation}
838
1114
  operatorValue={operatorValue}
839
1115
  filterValue={filterValue}
840
1116
  onChange={onChange}
1117
+ timezoneID={timezoneID}
841
1118
  />
842
1119
  );
843
1120
 
@@ -855,9 +1132,11 @@ export function PowerSearchValueEditor({
855
1132
  return (
856
1133
  <DateRangeEditor
857
1134
  isDisabled={isDisabled}
1135
+ presentation={presentation}
858
1136
  operatorValue={operatorValue}
859
1137
  filterValue={filterValue}
860
1138
  onChange={onChange}
1139
+ timezoneID={timezoneID}
861
1140
  />
862
1141
  );
863
1142
 
@@ -885,6 +1164,8 @@ export function PowerSearchValueEditor({
885
1164
  return (
886
1165
  <EntityListEditor
887
1166
  isDisabled={isDisabled}
1167
+ presentation={presentation}
1168
+ fieldLabel={fieldLabel}
888
1169
  operatorValue={operatorValue}
889
1170
  filterValue={filterValue}
890
1171
  onChange={onChange}