@astryxdesign/core 0.7.7 → 0.7.8-canary.07ee4b5

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
@@ -4,16 +4,19 @@
4
4
 
5
5
  /**
6
6
  * @file PowerSearch.tsx
7
- * @input PowerSearchConfig, filters, onChange
7
+ * @input PowerSearchConfig, filters, onChange; Tokenizer, Field parts, Token,
8
+ * useAdaptivePresentation, and PowerSearchBottomSheet (lazy)
8
9
  * @output Structured filter bar with token-based filter management
9
10
  * @position Main component; forwards DOM ref and exposes tokenizer control via
10
- * handleRef
11
+ * handleRef. The `presentation` prop swaps the tokenizer field and editor
12
+ * popover for one trigger that opens PowerSearchBottomSheet.
11
13
  *
12
14
  * SYNC: When modified, update:
13
15
  * - /packages/core/src/PowerSearch/index.ts
16
+ * - /packages/core/src/PowerSearch/PowerSearchBottomSheet.tsx (sheet presentation)
14
17
  * - /packages/cli/assets/templates/blocks/components/PowerSearch/ (showcase blocks)
15
18
  */
16
- import React, { useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
19
+ import React, { lazy, Suspense, useCallback, useEffect, useId, useImperativeHandle, useMemo, useRef, useState } from 'react';
17
20
  import * as stylex from '@stylexjs/stylex';
18
21
  import { Tokenizer } from "../Tokenizer/index.js";
19
22
  import { TokenizerClearAllMessageContext } from "../Tokenizer/TokenizerClearAllMessageContext.js";
@@ -23,22 +26,31 @@ import { Token } from "../Token/index.js";
23
26
  import { TokenNamingContext } from "../Token/TokenNamingContext.js";
24
27
  import { Avatar } from "../Avatar/index.js";
25
28
  import { layerAnimations } from "../Layer/layerAnimations.stylex.js";
26
- import { Icon } from "../Icon/index.js";
29
+ import { Icon, renderIconSlot } from "../Icon/index.js";
30
+ import { Field } from "../Field/Field.js";
31
+ import { inputStatusBorderStyles, inputStatusFocusWithinStyles, inputStatusHoverShadowStyles, inputWrapperStyles } from "../Field/inputStyles.stylex.js";
27
32
  import { usePopover } from "../Popover/usePopover.js";
33
+ import { useTooltip } from "../Tooltip/useTooltip.js";
28
34
  import "../Layer/layerViewportInset.stylex.js";
29
35
  import { layerViewportInset } from "../Layer/layerViewportInset.stylex.js";
30
36
  import { useAnnounce } from "../hooks/useAnnounce.js";
37
+ import { useAdaptivePresentation } from "../hooks/useAdaptivePresentation.js";
38
+ import { useDevWarning } from "../hooks/useDevWarning.js";
39
+ import { useIsHydrating } from "../hooks/useIsHydrating.js";
31
40
  import "../theme/tokens.stylex.js";
32
- import { spacingVars, colorVars, typeScaleVars, fontWeightVars } from "../theme/tokens.stylex.js";
41
+ import { spacingVars, colorVars, sizeVars, typeScaleVars, typographyVars, fontWeightVars } from "../theme/tokens.stylex.js";
33
42
  import { useSize } from "../SizeContext/SizeContext.js";
43
+ import { isFocusDetached } from "../utils/isFocusDetached.js";
44
+ import { isRenderable } from "../utils/isRenderable.js";
34
45
  import { useInternalConfig } from "./useInternalConfig.js";
35
46
  import { usePowerSearchSource } from "./usePowerSearchSource.js";
36
- import { formatFilterValue, formatDateAbsoluteCompact } from "./formatFilterValue.js";
37
- import { PowerSearchEditPopover } from "./PowerSearchEditPopover.js";
47
+ import { formatFilterValue } from "./formatFilterValue.js";
48
+ import { NestedEditor, PowerSearchEditPopover } from "./PowerSearchEditPopover.js";
49
+ import { buildRelativeDateOptions, PowerSearchValueEditor } from "./PowerSearchValueEditor.js";
38
50
  import { resolveOperatorLabel } from "./resolveOperatorLabel.js";
39
51
  import { themeProps } from "../utils/themeProps.js";
40
- import { truncateCharacters } from "../utils/characters.js";
41
52
  import { useLocale } from "../i18n/useLocale.js";
53
+ import { formatTokenValueText } from "./formatTokenValue.js";
42
54
  import { useMergedRefs } from "../hooks/useMergedRefs.js";
43
55
  import { registerEnglishFallback, useComponentTranslator } from "../i18n/useComponentTranslator.js";
44
56
  import english from "../i18n/generated-english/PowerSearch/PowerSearch.generated.js";
@@ -83,106 +95,76 @@ const popoverLayerStyles = {
83
95
  $$css: true
84
96
  }
85
97
  };
86
- function truncateString(value, limit) {
87
- // Same semantics as before — strings within limit + 3 pass through, longer
88
- // ones cut to limit + '...' — but counted in characters, not code units.
89
- return truncateCharacters(value, limit + 3, '...');
90
- }
91
- function getEnumLabel(values, value) {
92
- return values.find(v => v.value === value)?.label ?? value;
93
- }
98
+ // The sheet presentation's trigger field: the same control box as the
99
+ // tokenizer field, with display-only tokens and one button as its only tab
100
+ // stop.
101
+ const sheetTriggerSizeStyles = {
102
+ sm: {
103
+ kAzted: "x1gdqauq",
104
+ $$css: true
105
+ },
106
+ md: {
107
+ kAzted: "x1uogy3y",
108
+ $$css: true
109
+ },
110
+ lg: {
111
+ kAzted: "x1xf4nls",
112
+ $$css: true
113
+ }
114
+ };
115
+ const sheetTriggerStyles = {
116
+ wrapper: {
117
+ kVAEAm: "x1n2onr6",
118
+ kwnvtZ: "xozqiw3",
119
+ kOIVth: "xzye2dw",
120
+ kZKoxP: "xt7dq6l",
121
+ kkrTdU: "x1ypdohk xvivl9a",
122
+ $$css: true
123
+ },
124
+ wrapperWithTokens: {
125
+ k8WAf4: "x1x7cmac",
126
+ kg3NbH: "xx2oswg",
127
+ $$css: true
128
+ }
129
+ };
130
+
131
+ // The sheet flow (three standalone sheets, the sheet editors) only
132
+ // renders for the bottom-sheet presentation. Loading it on demand keeps it out
133
+ // of pages whose PowerSearch stays a tokenizer field.
134
+ // One import promise, shared by the preload and the lazy element: the sheet
135
+ // presentation loads the flow's chunk as soon as it is active, so the first
136
+ // press does not wait for the network, while nothing of the flow is rendered
137
+ // until a press.
138
+ const loadPowerSearchBottomSheet = async () => import("./PowerSearchBottomSheet.js");
139
+ const LazyPowerSearchBottomSheet = /*#__PURE__*/lazy(async () => loadPowerSearchBottomSheet().then(module => ({
140
+ default: module.PowerSearchBottomSheet
141
+ })));
142
+ // The value step reuses the popover presentation's editors, which this
143
+ // module already loads; see PowerSearchSheetEditors.
144
+ const SHEET_EDITORS = {
145
+ NestedEditor,
146
+ PowerSearchValueEditor,
147
+ buildRelativeDateOptions
148
+ };
94
149
 
95
150
  /**
96
- * The visible text of a filter token's value. The token renders it, and the
97
- * token's remove button and editor dialog are named by the same text.
151
+ * Hosts the lazily loaded sheet flow. Renders nothing on the server or in the
152
+ * render that hydrates server HTML: a lazy component that has not loaded yet
153
+ * would leave server markup incomplete and abort hydration. The closed flow
154
+ * has no visible markup, so it first renders right after hydration.
98
155
  */
99
- function tokenValueText(operatorValue, filterValue, maxLength, locale) {
100
- switch (filterValue.type) {
101
- case 'empty':
102
- return null;
103
- case 'string':
104
- return truncateString(filterValue.value, maxLength);
105
- case 'integer':
106
- case 'float':
107
- return String(filterValue.value);
108
- case 'enum':
109
- if (operatorValue.type === 'enum') {
110
- return truncateString(getEnumLabel(operatorValue.values, filterValue.value), maxLength);
111
- }
112
- return truncateString(filterValue.value, maxLength);
113
- case 'string_list':
114
- {
115
- const items = filterValue.value;
116
- if (items.length === 0) {
117
- return null;
118
- }
119
- if (items.length === 1) {
120
- return truncateString(items[0], maxLength);
121
- }
122
- const totalLength = items.reduce((sum, s) => sum + s.length, 0);
123
- if (totalLength > maxLength) {
124
- return `${items.length} items`;
125
- }
126
- return items.join(', ');
127
- }
128
- case 'enum_list':
129
- {
130
- const items = filterValue.value;
131
- if (items.length === 0) {
132
- return null;
133
- }
134
- if (operatorValue.type === 'enum_list') {
135
- const labels = items.map(v => getEnumLabel(operatorValue.values, v));
136
- if (labels.length === 1) {
137
- return truncateString(labels[0], maxLength);
138
- }
139
- const totalLength = labels.reduce((sum, s) => sum + s.length, 0);
140
- if (totalLength > maxLength) {
141
- return `${labels.length} items`;
142
- }
143
- return labels.join(', ');
144
- }
145
- if (items.length === 1) {
146
- return truncateString(items[0], maxLength);
147
- }
148
- return `${items.length} items`;
149
- }
150
- case 'entity_list':
151
- {
152
- const entities = filterValue.value;
153
- if (entities.length === 0) {
154
- return null;
155
- }
156
- if (entities.length === 1) {
157
- return truncateString(entities[0].label, maxLength);
158
- }
159
- const totalLength = entities.reduce((sum, e) => sum + e.label.length, 0);
160
- if (totalLength > maxLength) {
161
- return `${entities.length} items`;
162
- }
163
- return entities.map(e => e.label).join(', ');
164
- }
165
- case 'time':
166
- return filterValue.value;
167
- case 'date_absolute':
168
- return truncateString(formatDateAbsoluteCompact(filterValue.unixSeconds, locale), maxLength);
169
- case 'date_relative':
170
- return truncateString(filterValue.value, maxLength);
171
- case 'date_range':
172
- return 'date range';
173
- case 'custom':
174
- if (operatorValue.type === 'custom') {
175
- return truncateString(operatorValue.getString(filterValue.value), maxLength);
176
- }
177
- return filterValue.value;
178
- case 'nested':
179
- {
180
- const count = filterValue.value.length;
181
- return count === 1 ? '1 filter' : `${count} filters`;
182
- }
183
- default:
184
- return null;
156
+ function PowerSearchSheetHost(props) {
157
+ const isHydrating = useIsHydrating();
158
+ if (isHydrating) {
159
+ return null;
185
160
  }
161
+ return /*#__PURE__*/_jsx(Suspense, {
162
+ fallback: null,
163
+ children: /*#__PURE__*/_jsx(LazyPowerSearchBottomSheet, {
164
+ ...props,
165
+ editors: SHEET_EDITORS
166
+ })
167
+ });
186
168
  }
187
169
  function PowerSearchTokenValue({
188
170
  text
@@ -199,6 +181,8 @@ function PowerSearchTokenValue({
199
181
  // Types
200
182
  // =============================================================================
201
183
 
184
+ /** How PowerSearch presents filter editing; see `PowerSearchProps.presentation`. */
185
+
202
186
  // =============================================================================
203
187
  // State
204
188
  // =============================================================================
@@ -314,7 +298,8 @@ export function PowerSearch({
314
298
  xstyle,
315
299
  className,
316
300
  style,
317
- components: componentOverrides
301
+ components: componentOverrides,
302
+ presentation = 'adaptive'
318
303
  }) {
319
304
  const size = useSize(sizeProp, 'md');
320
305
  const config = useInternalConfig(configProp);
@@ -325,6 +310,81 @@ export function PowerSearch({
325
310
  const placeholder = placeholderFromProps ?? t('@astryx.powersearch.placeholder');
326
311
  const popoverSaveButtonLabel = popoverSaveButtonLabelFromProps ?? t('@astryx.powersearch.editor.apply');
327
312
  const tokenizerRef = useRef(null);
313
+ const resolvedPresentation = useAdaptivePresentation(presentation);
314
+ const [isSheetOpen, setIsSheetOpen] = useState(false);
315
+ // Latched for the flow's lifetime: the flow stays presented after it closes
316
+ // until the sheets have run their exit and handed focus back to the trigger.
317
+ // Without the latch, `adaptive` resolving to `popover` mid-session (a phone
318
+ // turned to landscape) would unmount the sheets and the trigger they return
319
+ // focus to in the same render, dropping focus to the page body.
320
+ const [isSheetPresented, setIsSheetPresented] = useState(false);
321
+ const isSheetPresentation = isSheetOpen || isSheetPresented || resolvedPresentation === 'bottom-sheet';
322
+ const triggerRef = useRef(null);
323
+ // `hasAutoFocus` applies only to the control the field first mounts. A
324
+ // presentation swap remounts the control (combobox input or trigger), and
325
+ // React's `autoFocus` on the new one would pull focus from wherever on the
326
+ // page it was; the roots' callback refs hand over the focus the field held
327
+ // instead. A field that never swaps keeps `autoFocus` on every render, so a
328
+ // Dialog that keeps it mounted still finds its `data-autofocus` on open.
329
+ const [autoFocusState, setAutoFocusState] = useState({
330
+ presentation: isSheetPresentation,
331
+ isFirstControl: true
332
+ });
333
+ if (autoFocusState.presentation !== isSheetPresentation) {
334
+ setAutoFocusState({
335
+ presentation: isSheetPresentation,
336
+ isFirstControl: false
337
+ });
338
+ }
339
+ const autoFocusOnMount = hasAutoFocus && autoFocusState.isFirstControl && autoFocusState.presentation === isSheetPresentation;
340
+ // A focus the swap moves continues the same visit to the field: the
341
+ // control that held focus is gone (no blur fires for a removed element), so
342
+ // the caller is told of neither a blur nor a new focus.
343
+ const isSwapFocusRef = useRef(false);
344
+ const focusAfterSwap = useCallback(control => {
345
+ if (control == null) {
346
+ return;
347
+ }
348
+ isSwapFocusRef.current = true;
349
+ try {
350
+ control.focus();
351
+ } finally {
352
+ isSwapFocusRef.current = false;
353
+ }
354
+ }, []);
355
+ const handleFieldFocus = useCallback(event => {
356
+ if (!isSwapFocusRef.current) {
357
+ onFocus?.(event);
358
+ }
359
+ }, [onFocus]);
360
+ const handleFieldBlur = useCallback(event => {
361
+ onBlur?.(event);
362
+ }, [onBlur]);
363
+ // While the flow is open, the sheet announces its own content from inside
364
+ // its dialog; this component announces only with the flow closed, and
365
+ // `useAnnounce` routes those messages by where the field is — into a Dialog
366
+ // or modal Drawer that holds it, or the shared channel when no modal does.
367
+ // A result count that changed during the flow's exit is spoken once the
368
+ // flow has fully closed and focus is back on the trigger: the closing
369
+ // dialog stays modal through its exit, so neither its region nor the
370
+ // page-body channel is heard before.
371
+ const afterCloseResultCountRef = useRef(null);
372
+ const triggerId = useId();
373
+ const triggerLabelId = useId();
374
+ const triggerContentId = useId();
375
+ const statusMessageId = useId();
376
+ // A field that becomes disabled cannot keep its flow open, and must not
377
+ // reopen it when re-enabled. Adjusted in the
378
+ // render that sees the change, not an effect, so no frame shows both.
379
+ const [wasDisabled, setWasDisabled] = useState(isDisabled);
380
+ if (isDisabled !== wasDisabled) {
381
+ setWasDisabled(isDisabled);
382
+ if (isDisabled && isSheetOpen) {
383
+ setIsSheetOpen(false);
384
+ }
385
+ }
386
+ useDevWarning('PowerSearch', '`menuWidth` has no surface in the bottom-sheet presentation: the sheet flow has no typeahead popover to size. Pass `presentation="popover"` to keep the popover on every device, or leave it out.', isSheetPresentation && menuWidth != null);
387
+ useDevWarning('PowerSearch', '`tokenOverflowBehavior` has no surface in the bottom-sheet presentation: the trigger wraps its display-only tokens. Pass `presentation="popover"` to keep the tokenizer field on every device, or leave it out.', isSheetPresentation && tokenOverflowBehavior != null);
328
388
  const [popoverState, setPopoverStateRaw] = useState({
329
389
  type: 'idle'
330
390
  });
@@ -338,21 +398,35 @@ export function PowerSearch({
338
398
  const fieldLabel = field?.label ?? '';
339
399
  const operatorLabel = operator ? resolveOperatorLabel(operator, t) : '';
340
400
  const label = `${fieldLabel}: ${operatorLabel}`.trim();
341
- const value = operator ? tokenValueText(operator.value, filter.value, Math.max(maxTokenLength - fieldLabel.length - operatorLabel.length, 10), locale) : null;
401
+ const value = operator ? formatTokenValueText(operator.value, filter.value, Math.max(maxTokenLength - fieldLabel.length - operatorLabel.length, 10), locale, undefined, undefined, timezoneID) : null;
342
402
  return {
343
403
  label,
344
404
  value,
345
405
  full: value != null ? `${label} ${value}` : label
346
406
  };
347
- }, [config, maxTokenLength, t, locale]);
407
+ }, [config, maxTokenLength, t, locale, timezoneID]);
348
408
  // The built-in token being edited. A token from a `components` override
349
409
  // names itself, so its editor keeps the plain popover.
350
410
  const editedFilter = popoverState.type === 'editing' ? filters[popoverState.filterIndex] : undefined;
351
411
  const editedOperator = editedFilter != null ? config.getOperator(editedFilter.field, editedFilter.operator) : undefined;
352
412
  const editedBuiltInFilter = editedOperator == null || componentOverrides?.[editedOperator.value.type]?.Token == null ? editedFilter : undefined;
413
+ // Whether the editor popover is open, for the hand-off below, which runs
414
+ // in the commit that swaps presentations.
415
+ const isPopoverOpenRef = useRef(false);
416
+ // When `adaptive` flips to the sheet while the editor popover is open (a
417
+ // phone rotated), the editing ends with the popover: its state returns to
418
+ // idle (through the raw setter, since the tokenizer input is gone), in the
419
+ // render that sees the swap, so a later switch back does not reopen a stale
420
+ // editor.
421
+ if (isSheetPresentation && popoverState.type !== 'idle') {
422
+ setPopoverStateRaw({
423
+ type: 'idle'
424
+ });
425
+ }
353
426
 
354
427
  // Layer for positioning the edit popover anchored to the tokenizer
355
428
  const handleLayerHide = useCallback(() => {
429
+ isPopoverOpenRef.current = false;
356
430
  setPopoverStateRaw({
357
431
  type: 'idle'
358
432
  });
@@ -371,8 +445,47 @@ export function PowerSearch({
371
445
  dialogLabel: editedBuiltInFilter != null ? tokenText(editedBuiltInFilter).full : undefined
372
446
  });
373
447
 
448
+ // A presentation swap removes the focused control, so the other
449
+ // presentation's primary control (the combobox input or the trigger) takes
450
+ // focus and focus never falls to the page body. Each presentation keys its
451
+ // root, so a swap mounts a new root. The detaching root notes that it held
452
+ // focus, which also covers an input focused by server-rendered `autofocus`
453
+ // before hydration. The editor popover is portaled outside the root, so an
454
+ // open editor counts as held focus. The attaching root gives focus to its
455
+ // primary control when focus has fallen to the page body; the sheet root
456
+ // also hides a popover layer left open.
457
+ const isFocusPendingHandOffRef = useRef(false);
458
+ const hidePopover = popover.hide;
459
+ const handOffFocusRef = useCallback(node => {
460
+ if (node == null) {
461
+ return;
462
+ }
463
+ const trigger = triggerRef.current;
464
+ const isSheetRoot = trigger != null && node.contains(trigger);
465
+ // The sheet presentation preloads the flow's chunk, so the first press
466
+ // opens without waiting for the network; nothing renders.
467
+ if (isSheetRoot) {
468
+ void loadPowerSearchBottomSheet();
469
+ }
470
+ if (isSheetRoot && isPopoverOpenRef.current) {
471
+ isPopoverOpenRef.current = false;
472
+ hidePopover();
473
+ }
474
+ const takesFocus = isFocusPendingHandOffRef.current;
475
+ isFocusPendingHandOffRef.current = false;
476
+ if (takesFocus && isFocusDetached(node.ownerDocument)) {
477
+ focusAfterSwap(isSheetRoot ? trigger : tokenizerRef.current);
478
+ }
479
+ return () => {
480
+ if (node.contains(node.ownerDocument.activeElement) || isPopoverOpenRef.current) {
481
+ isFocusPendingHandOffRef.current = true;
482
+ }
483
+ };
484
+ }, [focusAfterSwap, hidePopover]);
485
+
374
486
  // Wrapper that manages layer visibility and tokenizer focus alongside state
375
487
  const setPopoverState = useCallback(state => {
488
+ isPopoverOpenRef.current = state.type !== 'idle';
376
489
  setPopoverStateRaw(state);
377
490
  if (state.type !== 'idle') {
378
491
  // Schedule after the current frame so React can render the popover
@@ -387,13 +500,22 @@ export function PowerSearch({
387
500
  }
388
501
  }, [popover]);
389
502
 
390
- // Expose imperative handle
503
+ // Expose imperative handle; in the sheet presentation the trigger is the
504
+ // field's focusable control.
391
505
  useImperativeHandle(handleRef, () => ({
392
506
  focusTypeahead() {
393
- tokenizerRef.current?.focus();
507
+ if (isSheetPresentation) {
508
+ triggerRef.current?.focus();
509
+ } else {
510
+ tokenizerRef.current?.focus();
511
+ }
394
512
  },
395
513
  blurTypeahead() {
396
- tokenizerRef.current?.blur();
514
+ if (isSheetPresentation) {
515
+ triggerRef.current?.blur();
516
+ } else {
517
+ tokenizerRef.current?.blur();
518
+ }
397
519
  }
398
520
  }));
399
521
 
@@ -554,15 +676,17 @@ export function PowerSearch({
554
676
  });
555
677
  }, [setPopoverState]);
556
678
 
557
- // Custom token renderer
558
- // Custom token renderer
559
- const renderToken = useCallback((item, onRemove) => {
679
+ // Token renderer for both presentations. Given `onRemove`, the token is
680
+ // the tokenizer field's: click edits, × removes. Without it (the sheet
681
+ // presentation's trigger) the token is display-only; the field as a whole
682
+ // opens the flow.
683
+ const renderFilterToken = useCallback((item, onRemove) => {
560
684
  const auxData = item.auxiliaryData;
561
685
  const filterIndex = auxData?.filterIndex ?? -1;
562
686
  const filter = filterIndex >= 0 ? filters[filterIndex] : undefined;
563
687
  const field = auxData ? config.getField(auxData.fieldKey) : undefined;
564
688
  const operator = auxData?.operatorKey ? config.getOperator(auxData.fieldKey, auxData.operatorKey) : undefined;
565
- const canInteract = !isReadOnly && !isDisabled && !filter?.isReadOnly;
689
+ const canInteract = onRemove != null && !isReadOnly && !isDisabled && !filter?.isReadOnly;
566
690
  const handleClick = canInteract ? () => handleTokenClick(filterIndex) : undefined;
567
691
  const handleRemove = canInteract ? onRemove : undefined;
568
692
 
@@ -577,7 +701,8 @@ export function PowerSearch({
577
701
  maxLength: maxTokenLength,
578
702
  onClick: handleClick,
579
703
  onRemove: handleRemove,
580
- isDisabled: isDisabled
704
+ isDisabled: isDisabled,
705
+ timezoneID: timezoneID
581
706
  });
582
707
  }
583
708
 
@@ -635,7 +760,8 @@ export function PowerSearch({
635
760
  isDisabled: isDisabled
636
761
  })
637
762
  });
638
- }, [filters, config, configProp, maxTokenLength, size, isReadOnly, isDisabled, handleTokenClick, componentOverrides, t, popoverState, tokenText]);
763
+ }, [timezoneID, filters, config, configProp, maxTokenLength, size, isReadOnly, isDisabled, handleTokenClick, componentOverrides, t, popoverState, tokenText]);
764
+ const renderToken = useCallback((item, onRemove) => renderFilterToken(item, onRemove), [renderFilterToken]);
639
765
 
640
766
  // Custom typeahead item renderer — adds field icon and description
641
767
  const renderItem = useCallback(item => {
@@ -692,7 +818,8 @@ export function PowerSearch({
692
818
  onSave: handlePopoverSave,
693
819
  onCancel: handlePopoverCancel,
694
820
  saveButtonLabel: popoverSaveButtonLabel,
695
- isReadOnly: isReadOnly
821
+ isReadOnly: isReadOnly,
822
+ timezoneID: timezoneID
696
823
  }, popoverKey);
697
824
  }
698
825
  return /*#__PURE__*/_jsx(PowerSearchEditPopover, {
@@ -703,9 +830,10 @@ export function PowerSearch({
703
830
  onCancel: handlePopoverCancel,
704
831
  saveButtonLabel: popoverSaveButtonLabel,
705
832
  maxMenuItems: maxOperatorMenuItems,
706
- isReadOnly: isReadOnly
833
+ isReadOnly: isReadOnly,
834
+ timezoneID: timezoneID
707
835
  }, popoverKey);
708
- }, [popoverPartialFilter, popoverState, EditorOverride, configProp, config, handlePopoverSave, handlePopoverCancel, popoverSaveButtonLabel, maxOperatorMenuItems, isReadOnly]);
836
+ }, [timezoneID, popoverPartialFilter, popoverState, EditorOverride, configProp, config, handlePopoverSave, handlePopoverCancel, popoverSaveButtonLabel, maxOperatorMenuItems, isReadOnly]);
709
837
 
710
838
  // Plain-text form of the result count, shared by the visible label and the
711
839
  // screen-reader announcement so the two never drift. The ICU plural handles
@@ -723,28 +851,38 @@ export function PowerSearch({
723
851
  return resultCount;
724
852
  }, [resultCount, t]);
725
853
 
726
- // Announce result-count changes to screen readers through a polite live
727
- // region, mirroring the way Typeahead announces its dropdown result count.
728
- // The count is otherwise only shown visually and stays silent to assistive
729
- // tech. Only a change after mount is spoken: the guard compares against the
730
- // last announced text rather than a mounted flag, so StrictMode's effect
731
- // replay (which resets a flag and would speak the count present on mount
732
- // unprompted) announces nothing until the count changes.
854
+ // This Effect synchronizes a polite live region with the result count,
855
+ // mirroring the way Typeahead announces its dropdown result count: the count
856
+ // is otherwise only shown visually and stays silent to assistive tech. The
857
+ // region follows where the field is: the modal that holds the field (a
858
+ // Dialog, a modal Drawer), else the shared channel. While a sheet of the flow is open the sheet itself announces the
859
+ // count from inside its dialog, and this Effect stays quiet. Only a
860
+ // change after mount is spoken — the count present on mount is not
861
+ // announced unprompted — and the guard compares against the last announced
862
+ // text rather than a mounted flag, so StrictMode's effect replay announces
863
+ // nothing either. A change that lands while the flow is closing waits for
864
+ // the trigger focus, since the dialog is still modal through its exit. The
865
+ // announcement acquires no resource, so there is no cleanup.
733
866
  const announce = useAnnounce();
734
867
  // PowerSearch words its Clear all as its record does; the field announces
735
868
  // these words instead of Tokenizer's (component:Tokenizer AR7).
736
869
  const hasReadOnlyFilter = filters.some(filter => filter.isReadOnly);
737
870
  const clearAllMessage = useMemo(() => hasReadOnlyFilter ? t('@astryx.powersearch.editableFiltersRemoved') : t('@astryx.powersearch.allFiltersRemoved'), [hasReadOnlyFilter, t]);
738
871
  const announcedResultCountRef = useRef(resultCountText);
872
+ const isSheetExiting = isSheetPresented && !isSheetOpen;
739
873
  useEffect(() => {
740
874
  if (resultCountText === announcedResultCountRef.current) {
741
875
  return;
742
876
  }
743
877
  announcedResultCountRef.current = resultCountText;
744
878
  if (resultCountText != null) {
745
- announce(resultCountText);
879
+ if (isSheetExiting) {
880
+ afterCloseResultCountRef.current = resultCountText;
881
+ } else if (!isSheetOpen) {
882
+ announce(resultCountText);
883
+ }
746
884
  }
747
- }, [resultCountText, announce]);
885
+ }, [resultCountText, announce, isSheetExiting, isSheetOpen]);
748
886
 
749
887
  // Build combined endContent from resultCount + endContent props
750
888
  const combinedEndContent = useMemo(() => {
@@ -763,9 +901,177 @@ export function PowerSearch({
763
901
  }
764
902
  return resultCountNode || endContent || undefined;
765
903
  }, [resultCountText, endContent]);
904
+
905
+ // ------------------------------------------------------- sheet trigger --
906
+
907
+ // Disabled-reason tooltip for the sheet trigger. Disabled controls swallow
908
+ // pointer events, so the listeners attach to the field's control box; the
909
+ // trigger stays perceivable through aria-disabled.
910
+ const showsDisabledMessage = isDisabled && !!disabledMessage;
911
+ const disabledMessageTooltip = useTooltip({
912
+ placement: 'above',
913
+ focusTrigger: 'always',
914
+ isEnabled: isSheetPresentation && showsDisabledMessage
915
+ });
916
+ const rootRef = useMergedRefs(ref, popover.triggerRef, handOffFocusRef);
917
+ const openSheet = useCallback(() => {
918
+ if (isDisabled) {
919
+ return;
920
+ }
921
+ // The flow restores focus to the element that was active when it opened;
922
+ // make sure that is the trigger even for a tap on a token.
923
+ triggerRef.current?.focus({
924
+ preventScroll: true
925
+ });
926
+ setIsSheetPresented(true);
927
+ setIsSheetOpen(true);
928
+ }, [isDisabled]);
929
+
930
+ // The field's end lane — the result count and `endContent` — sits outside
931
+ // the trigger button: a caller's action button there keeps its own tab stop
932
+ // and taps, and an interactive control must not nest in a component
933
+ // button, so a tap on it must not open the flow.
934
+ const endLaneRef = useRef(null);
935
+ const handleTriggerWrapperClick = useCallback(event => {
936
+ // Tokens are display-only; a tap on them or the empty space around them
937
+ // opens the flow. The trigger button handles its own click, and the end
938
+ // lane handles its own.
939
+ if (event.target instanceof Node && (triggerRef.current?.contains(event.target) || endLaneRef.current?.contains(event.target))) {
940
+ return;
941
+ }
942
+ openSheet();
943
+ }, [openSheet]);
944
+ const handleTriggerFocusWithin = useCallback(event => {
945
+ // The flow focuses the trigger only after its exit completes; that focus
946
+ // is the signal that the retained sheets can leave. If the resolution
947
+ // moved to the popover meanwhile, the tokenizer input takes over the
948
+ // focus once it mounts (the hand-off above).
949
+ if (!isSheetOpen && isSheetPresented) {
950
+ setIsSheetPresented(false);
951
+ // The dialogs have closed: the page-body channel is exposed again.
952
+ const resultCount = afterCloseResultCountRef.current;
953
+ afterCloseResultCountRef.current = null;
954
+ if (resultCount != null) {
955
+ announce(resultCount);
956
+ }
957
+ }
958
+ if (!(event.relatedTarget instanceof Node) || !event.currentTarget.contains(event.relatedTarget)) {
959
+ handleFieldFocus(event);
960
+ }
961
+ }, [announce, handleFieldFocus, isSheetOpen, isSheetPresented]);
962
+ const handleTriggerBlurWithin = useCallback(event => {
963
+ if (!(event.relatedTarget instanceof Node) || !event.currentTarget.contains(event.relatedTarget)) {
964
+ handleFieldBlur(event);
965
+ }
966
+ }, [handleFieldBlur]);
967
+ if (isSheetPresentation) {
968
+ const triggerDescribedBy = [status?.message ? statusMessageId : null, showsDisabledMessage ? disabledMessageTooltip.describedBy : null].filter(Boolean).join(' ') || undefined;
969
+ return /*#__PURE__*/_jsxs("div", {
970
+ ref: rootRef,
971
+ ...themeProps('power-search'),
972
+ children: [/*#__PURE__*/_jsxs(Field, {
973
+ label: label,
974
+ isLabelHidden: isLabelHidden,
975
+ inputID: triggerId,
976
+ labelID: triggerLabelId,
977
+ isDisabled: isDisabled,
978
+ status: status ? {
979
+ type: status.type,
980
+ message: status.message,
981
+ messageID: status.message ? statusMessageId : undefined
982
+ } : undefined,
983
+ statusVariant: statusVariant,
984
+ xstyle: xstyle,
985
+ className: className,
986
+ style: style,
987
+ children: [/*#__PURE__*/_jsxs("div", {
988
+ ref: disabledMessageTooltip.ref,
989
+ onClick: handleTriggerWrapperClick,
990
+ onFocus: handleTriggerFocusWithin,
991
+ onBlur: handleTriggerBlurWithin,
992
+ "aria-disabled": isDisabled ? true : undefined,
993
+ ...stylex.props(inputWrapperStyles.base, sheetTriggerStyles.wrapper, filters.length > 0 && sheetTriggerStyles.wrapperWithTokens, sheetTriggerSizeStyles[size], isDisabled && inputWrapperStyles.disabled, status && inputStatusBorderStyles[status.type], status && !isDisabled && inputStatusHoverShadowStyles[status.type], status && inputStatusFocusWithinStyles[status.type]),
994
+ children: [/*#__PURE__*/_jsxs("div", {
995
+ id: triggerContentId,
996
+ ...{
997
+ className: "x1n2onr6 xeuugli x1iyjqo2 x78zum5 x6s0dn4 x1a02dak x1lfs0n9 xajebq8"
998
+ },
999
+ children: [isRenderable(startIcon) && /*#__PURE__*/_jsx("span", {
1000
+ ...{
1001
+ 0: {},
1002
+ 1: {
1003
+ className: "x1xrm450"
1004
+ }
1005
+ }[!!(filters.length > 0) << 0],
1006
+ children: renderIconSlot(startIcon, {
1007
+ size: 'sm',
1008
+ color: 'secondary'
1009
+ })
1010
+ }), tokenizerValue.map(item => /*#__PURE__*/_jsx(React.Fragment, {
1011
+ children: renderFilterToken(item, undefined)
1012
+ }, item.id)), /*#__PURE__*/_jsx("button", {
1013
+ type: "button",
1014
+ id: triggerId,
1015
+ ref: triggerRef
1016
+ // The field's primary control: `data-testid` lands here, as it
1017
+ // lands on the combobox input in the popover presentation.
1018
+ ,
1019
+ "data-testid": testId,
1020
+ autoFocus: autoFocusOnMount,
1021
+ onClick: openSheet,
1022
+ "aria-disabled": isDisabled ? true : undefined,
1023
+ "aria-haspopup": "dialog",
1024
+ "aria-expanded": isSheetOpen,
1025
+ "aria-labelledby": `${triggerLabelId} ${triggerContentId}`,
1026
+ "aria-describedby": triggerDescribedBy,
1027
+ ...{
1028
+ 0: {
1029
+ className: "xjyslct xfoc8du x1fns5xo xkh2ocl x78zum5 x6s0dn4 xt970qd x7a5moj x1ghz6dp xc342km xng3xce xjbqb8w xv1l7n4 x9ynric xjm74w1 xw6l6zx x1yc453h xuxw1ft x1ypdohk xvivl9a x1a2a7pz"
1030
+ },
1031
+ 1: {
1032
+ className: "xjyslct xfoc8du xkh2ocl x78zum5 x6s0dn4 xt970qd x7a5moj x1ghz6dp xc342km xng3xce xjbqb8w xv1l7n4 x9ynric xjm74w1 xw6l6zx x1yc453h xuxw1ft x1ypdohk xvivl9a x1a2a7pz x10l6tqk x10a8y8t xeuugli x1717udv"
1033
+ }
1034
+ }[!!(filters.length > 0) << 0],
1035
+ children: filters.length === 0 ? placeholder : null
1036
+ })]
1037
+ }), (endContent || isRenderable(resultCountText)) && /*#__PURE__*/_jsxs("div", {
1038
+ ref: endLaneRef,
1039
+ ...{
1040
+ className: "x78zum5 x6s0dn4 x1txdalj x2lah0s x1nryj5t"
1041
+ },
1042
+ children: [isRenderable(resultCountText) && /*#__PURE__*/_jsx("span", {
1043
+ ...{
1044
+ className: "x141an7d x1ltkj2j xv1l7n4 xuxw1ft"
1045
+ },
1046
+ children: resultCountText
1047
+ }), endContent]
1048
+ })]
1049
+ }), showsDisabledMessage && disabledMessageTooltip.renderTooltip(disabledMessage)]
1050
+ }), (isSheetOpen || isSheetPresented) && /*#__PURE__*/_jsx(PowerSearchSheetHost, {
1051
+ isOpen: isSheetOpen,
1052
+ onOpenChange: setIsSheetOpen,
1053
+ finalFocusRef: triggerRef,
1054
+ resultCountText: resultCountText,
1055
+ config: config,
1056
+ configProp: configProp,
1057
+ filters: filters,
1058
+ onChange: onChange,
1059
+ searchSource: searchSource,
1060
+ placeholder: placeholder,
1061
+ isReadOnly: isReadOnly,
1062
+ isDisabled: isDisabled,
1063
+ hasClear: hasClear,
1064
+ maxOperatorMenuItems: maxOperatorMenuItems,
1065
+ timezoneID: timezoneID,
1066
+ maxSearchResults: maxSearchResults,
1067
+ saveButtonLabel: popoverSaveButtonLabelFromProps,
1068
+ components: componentOverrides
1069
+ })]
1070
+ }, "sheet");
1071
+ }
766
1072
  return /*#__PURE__*/_jsxs(_Fragment, {
767
1073
  children: [/*#__PURE__*/_jsx("div", {
768
- ref: useMergedRefs(ref, popover.triggerRef),
1074
+ ref: rootRef,
769
1075
  ...themeProps('power-search'),
770
1076
  children: /*#__PURE__*/_jsx(TokenizerClearAllMessageContext, {
771
1077
  value: clearAllMessage,
@@ -783,7 +1089,7 @@ export function PowerSearch({
783
1089
  maxMenuItems: MAX_BROWSE_MENU_ITEMS,
784
1090
  menuWidth: menuWidth,
785
1091
  placeholder: filters.length === 0 ? placeholder : '',
786
- hasAutoFocus: hasAutoFocus,
1092
+ hasAutoFocus: autoFocusOnMount,
787
1093
  hasClear: hasClear && !isReadOnly,
788
1094
  startIcon: startIcon,
789
1095
  endContent: combinedEndContent,
@@ -795,16 +1101,17 @@ export function PowerSearch({
795
1101
  debounceMs: 0,
796
1102
  status: status,
797
1103
  statusVariant: statusVariant,
798
- onFocus: onFocus,
799
- onBlur: onBlur,
1104
+ onFocus: handleFieldFocus,
1105
+ onBlur: handleFieldBlur,
800
1106
  containerXstyle: xstyle,
801
1107
  containerClassName: className,
802
1108
  containerStyle: style,
803
- "data-testid": testId
1109
+ "data-testid": testId,
1110
+ presentation: "popover"
804
1111
  })
805
1112
  })
806
1113
  })
807
- }), popover.render(popoverContent, {
1114
+ }, "popover"), popover.render(popoverContent, {
808
1115
  placement: 'below',
809
1116
  alignment: 'start',
810
1117
  offset: spacingVars['--spacing-1'],