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

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 (581) 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 +5 -0
  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 +15 -16
  20. package/dist/Carousel/Carousel.d.ts.map +1 -1
  21. package/dist/Carousel/Carousel.js +2 -0
  22. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  23. package/dist/Chat/ChatComposerInput.js +4 -0
  24. package/dist/Chat/ChatMessageList.d.ts.map +1 -1
  25. package/dist/Chat/ChatMessageList.js +2 -1
  26. package/dist/Chat/useChatDictation.d.ts.map +1 -1
  27. package/dist/Chat/useChatDictation.js +2 -0
  28. package/dist/Chat/useChatNewMessages.js +1 -1
  29. package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
  30. package/dist/Chat/useChatStreamScroll.js +2 -0
  31. package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
  32. package/dist/Chat/useSpeechRecognition.js +3 -0
  33. package/dist/Chat/useTriggerMenu.js +1 -1
  34. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  35. package/dist/CheckboxInput/CheckboxInput.js +17 -12
  36. package/dist/CodeBlock/CodeBlock.d.ts +10 -1
  37. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  38. package/dist/CodeBlock/CodeBlock.js +28 -11
  39. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  40. package/dist/CommandPalette/CommandPalette.js +2 -0
  41. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  42. package/dist/CommandPalette/CommandPaletteItem.js +2 -0
  43. package/dist/ComplexSelector/ComplexSelector.d.ts +4 -1
  44. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  45. package/dist/ComplexSelector/ComplexSelector.js +14 -4
  46. package/dist/ContextMenu/ContextMenu.js +2 -2
  47. package/dist/DateInput/MonthScroller.d.ts.map +1 -1
  48. package/dist/DateInput/MonthScroller.js +5 -2
  49. package/dist/DateInput/PickerWheel.d.ts +19 -0
  50. package/dist/DateInput/PickerWheel.d.ts.map +1 -0
  51. package/dist/DateInput/PickerWheel.js +625 -0
  52. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  53. package/dist/DateInput/TouchDateField.js +1 -0
  54. package/dist/DateInput/Wheel.d.ts +18 -37
  55. package/dist/DateInput/Wheel.d.ts.map +1 -1
  56. package/dist/DateInput/Wheel.js +84 -113
  57. package/dist/DateInput/useOwnScrollGesture.d.ts +10 -0
  58. package/dist/DateInput/useOwnScrollGesture.d.ts.map +1 -1
  59. package/dist/DateInput/useOwnScrollGesture.js +16 -3
  60. package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -1
  61. package/dist/DateInput/usePointerDragScroll.js +2 -0
  62. package/dist/DateInput/useScrollSettle.d.ts.map +1 -1
  63. package/dist/DateInput/useScrollSettle.js +3 -0
  64. package/dist/DateInput/useWheelListbox.d.ts +59 -0
  65. package/dist/DateInput/useWheelListbox.d.ts.map +1 -0
  66. package/dist/DateInput/useWheelListbox.js +88 -0
  67. package/dist/DateInput/wheelOptions.d.ts +74 -0
  68. package/dist/DateInput/wheelOptions.d.ts.map +1 -0
  69. package/dist/DateInput/wheelOptions.js +98 -0
  70. package/dist/DateInput/wheelPhysics.d.ts +127 -0
  71. package/dist/DateInput/wheelPhysics.d.ts.map +1 -0
  72. package/dist/DateInput/wheelPhysics.js +341 -0
  73. package/dist/DateInput/wheelStrip.d.ts +92 -0
  74. package/dist/DateInput/wheelStrip.d.ts.map +1 -0
  75. package/dist/DateInput/wheelStrip.js +258 -0
  76. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  77. package/dist/DateTimeInput/TouchDateTimeField.js +2 -0
  78. package/dist/Dialog/Dialog.d.ts.map +1 -1
  79. package/dist/Dialog/Dialog.js +9 -32
  80. package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
  81. package/dist/Drawer/useDrawerDialogPresence.js +3 -0
  82. package/dist/DropdownMenu/useMenuOverflow.d.ts.map +1 -1
  83. package/dist/DropdownMenu/useMenuOverflow.js +5 -0
  84. package/dist/Field/Field.js +2 -2
  85. package/dist/FieldStatus/useFieldStatusAnnouncement.d.ts.map +1 -1
  86. package/dist/FieldStatus/useFieldStatusAnnouncement.js +1 -0
  87. package/dist/FormLayout/FormLayout.d.ts +5 -1
  88. package/dist/FormLayout/FormLayout.d.ts.map +1 -1
  89. package/dist/HoverCard/HoverCard.d.ts +6 -4
  90. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  91. package/dist/HoverCard/HoverCard.js +48 -3
  92. package/dist/HoverCard/useHoverCard.d.ts +5 -4
  93. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  94. package/dist/HoverCard/useHoverCard.js +20 -33
  95. package/dist/Icon/Icon.d.ts +5 -1
  96. package/dist/Icon/Icon.d.ts.map +1 -1
  97. package/dist/Icon/Icon.js +5 -2
  98. package/dist/Item/useSwipeAction.d.ts.map +1 -1
  99. package/dist/Item/useSwipeAction.js +3 -0
  100. package/dist/Layer/modalOutlet.d.ts.map +1 -1
  101. package/dist/Layer/modalOutlet.js +2 -0
  102. package/dist/Layer/outsidePress.d.ts.map +1 -1
  103. package/dist/Layer/outsidePress.js +1 -0
  104. package/dist/Layer/useLayer.d.ts.map +1 -1
  105. package/dist/Layer/useLayer.js +3 -0
  106. package/dist/Layer/useLayerDismissal.d.ts.map +1 -1
  107. package/dist/Layer/useLayerDismissal.js +3 -0
  108. package/dist/Layer/usePressPin.d.ts +17 -5
  109. package/dist/Layer/usePressPin.d.ts.map +1 -1
  110. package/dist/Layer/usePressPin.js +62 -12
  111. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  112. package/dist/Layer/useTouchTrigger.js +3 -0
  113. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  114. package/dist/Lightbox/Lightbox.js +19 -0
  115. package/dist/MobileNav/MobileNav.d.ts +3 -2
  116. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  117. package/dist/MobileNav/MobileNav.js +9 -25
  118. package/dist/Outline/useOutlineFromDOM.d.ts.map +1 -1
  119. package/dist/Outline/useOutlineFromDOM.js +3 -0
  120. package/dist/Outline/useScrollSpy.d.ts.map +1 -1
  121. package/dist/Outline/useScrollSpy.js +3 -0
  122. package/dist/OverflowList/OverflowList.d.ts.map +1 -1
  123. package/dist/OverflowList/OverflowList.js +3 -0
  124. package/dist/Popover/Popover.d.ts.map +1 -1
  125. package/dist/Popover/Popover.js +6 -0
  126. package/dist/PowerSearch/PowerSearch.d.ts +43 -4
  127. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  128. package/dist/PowerSearch/PowerSearch.js +445 -134
  129. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts +102 -0
  130. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -0
  131. package/dist/PowerSearch/PowerSearchBottomSheet.js +1919 -0
  132. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +35 -2
  133. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  134. package/dist/PowerSearch/PowerSearchEditPopover.js +25 -6
  135. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts +1 -1
  136. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts.map +1 -1
  137. package/dist/PowerSearch/PowerSearchFilterEditor.js +4 -2
  138. package/dist/PowerSearch/PowerSearchToken.d.ts +1 -1
  139. package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
  140. package/dist/PowerSearch/PowerSearchToken.js +7 -2
  141. package/dist/PowerSearch/PowerSearchValueEditor.d.ts +38 -3
  142. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  143. package/dist/PowerSearch/PowerSearchValueEditor.js +193 -83
  144. package/dist/PowerSearch/formatFilterValue.d.ts +18 -6
  145. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  146. package/dist/PowerSearch/formatFilterValue.js +33 -12
  147. package/dist/PowerSearch/formatTokenValue.d.ts +28 -0
  148. package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -0
  149. package/dist/PowerSearch/formatTokenValue.js +162 -0
  150. package/dist/PowerSearch/powerSearchDateZone.d.ts +21 -0
  151. package/dist/PowerSearch/powerSearchDateZone.d.ts.map +1 -0
  152. package/dist/PowerSearch/powerSearchDateZone.js +37 -0
  153. package/dist/PowerSearch/powerSearchSheetUtils.d.ts +65 -0
  154. package/dist/PowerSearch/powerSearchSheetUtils.d.ts.map +1 -0
  155. package/dist/PowerSearch/powerSearchSheetUtils.js +168 -0
  156. package/dist/PowerSearch/types.d.ts +2 -0
  157. package/dist/PowerSearch/types.d.ts.map +1 -1
  158. package/dist/ProgressBar/ProgressBarTouch.d.ts.map +1 -1
  159. package/dist/ProgressBar/ProgressBarTouch.js +2 -0
  160. package/dist/RadioList/RadioList.d.ts.map +1 -1
  161. package/dist/RadioList/RadioList.js +3 -2
  162. package/dist/RadioList/RadioListItem.d.ts +1 -1
  163. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  164. package/dist/RadioList/RadioListItem.js +5 -3
  165. package/dist/Resizable/ResizeHandle.d.ts +2 -1
  166. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  167. package/dist/Resizable/ResizeHandle.js +101 -77
  168. package/dist/Resizable/createResizable.d.ts +145 -0
  169. package/dist/Resizable/createResizable.d.ts.map +1 -0
  170. package/dist/Resizable/createResizable.js +575 -0
  171. package/dist/Resizable/useResizable.d.ts +3 -3
  172. package/dist/Resizable/useResizable.d.ts.map +1 -1
  173. package/dist/Resizable/useResizable.js +252 -459
  174. package/dist/SegmentedControl/useSegmentedSelectionMotion.d.ts.map +1 -1
  175. package/dist/SegmentedControl/useSegmentedSelectionMotion.js +3 -3
  176. package/dist/SelectableCard/SelectableCard.d.ts +2 -0
  177. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  178. package/dist/SelectableCard/SelectableCard.js +36 -11
  179. package/dist/SelectableCard/selectableCardInput.d.ts +12 -0
  180. package/dist/SelectableCard/selectableCardInput.d.ts.map +1 -0
  181. package/dist/SelectableCard/selectableCardInput.js +20 -0
  182. package/dist/Selector/Selector.d.ts.map +1 -1
  183. package/dist/Selector/Selector.js +5 -8
  184. package/dist/Slider/sliderTouchController.js +2 -2
  185. package/dist/Spinner/Spinner.d.ts +1 -1
  186. package/dist/Spinner/Spinner.d.ts.map +1 -1
  187. package/dist/Spinner/Spinner.js +60 -58
  188. package/dist/Switch/Switch.d.ts.map +1 -1
  189. package/dist/Switch/Switch.js +4 -10
  190. package/dist/Switch/useSwitchTouch.js +4 -4
  191. package/dist/Table/BaseTable.d.ts.map +1 -1
  192. package/dist/Table/BaseTable.js +29 -8
  193. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  194. package/dist/Table/plugins/columnResize/useTableColumnResize.js +3 -1
  195. package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
  196. package/dist/Table/plugins/filtering/useTableFiltering.js +2 -1
  197. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  198. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +4 -0
  199. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
  200. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +2 -0
  201. package/dist/TextInput/TextInput.d.ts +2 -2
  202. package/dist/TextInput/TextInput.d.ts.map +1 -1
  203. package/dist/TextInput/TextInput.js +10 -7
  204. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  205. package/dist/TimeInput/TimeInput.js +2 -0
  206. package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
  207. package/dist/TimeInput/TouchTimeField.js +2 -0
  208. package/dist/Timer/Timer.d.ts.map +1 -1
  209. package/dist/Timer/Timer.js +2 -0
  210. package/dist/Timestamp/Timestamp.js +1 -1
  211. package/dist/Toast/Toast.d.ts +11 -1
  212. package/dist/Toast/Toast.d.ts.map +1 -1
  213. package/dist/Toast/Toast.js +25 -15
  214. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  215. package/dist/Toast/ToastViewport.js +97 -34
  216. package/dist/Toast/types.d.ts +9 -3
  217. package/dist/Toast/types.d.ts.map +1 -1
  218. package/dist/Toast/useToast.d.ts.map +1 -1
  219. package/dist/Toast/useToast.js +1 -0
  220. package/dist/Tokenizer/Tokenizer.d.ts +49 -37
  221. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  222. package/dist/Tokenizer/Tokenizer.js +22 -19
  223. package/dist/Tokenizer/TokenizerBottomSheet.d.ts +1 -1
  224. package/dist/Tokenizer/TokenizerBottomSheet.js +1 -1
  225. package/dist/Tokenizer/index.d.ts +1 -1
  226. package/dist/Tokenizer/index.d.ts.map +1 -1
  227. package/dist/Tooltip/useTooltip.d.ts +19 -1
  228. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  229. package/dist/Tooltip/useTooltip.js +34 -53
  230. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  231. package/dist/Typeahead/BaseTypeahead.js +27 -18
  232. package/dist/Typeahead/TypeaheadItem.d.ts +2 -1
  233. package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
  234. package/dist/animator/createAnimator.d.ts +98 -0
  235. package/dist/animator/createAnimator.d.ts.map +1 -0
  236. package/dist/animator/createAnimator.js +259 -0
  237. package/dist/astryx.css +39 -6
  238. package/dist/gestures/GestureHost.d.ts +16 -1
  239. package/dist/gestures/GestureHost.d.ts.map +1 -1
  240. package/dist/gestures/GestureHost.js +1 -1
  241. package/dist/gestures/PressTracker.d.ts.map +1 -1
  242. package/dist/gestures/PressTracker.js +4 -3
  243. package/dist/hooks/ModalAnnounceProvider.d.ts.map +1 -1
  244. package/dist/hooks/ModalAnnounceProvider.js +1 -0
  245. package/dist/hooks/actionGroupTracker.d.ts +4 -1
  246. package/dist/hooks/actionGroupTracker.d.ts.map +1 -1
  247. package/dist/hooks/actionGroupTracker.js +13 -3
  248. package/dist/hooks/index.d.ts +1 -0
  249. package/dist/hooks/index.d.ts.map +1 -1
  250. package/dist/hooks/index.js +1 -0
  251. package/dist/hooks/longPressDetector.d.ts +66 -0
  252. package/dist/hooks/longPressDetector.d.ts.map +1 -0
  253. package/dist/hooks/longPressDetector.js +200 -0
  254. package/dist/hooks/pressGroupContext.d.ts +6 -0
  255. package/dist/hooks/pressGroupContext.d.ts.map +1 -0
  256. package/dist/hooks/pressGroupContext.js +20 -0
  257. package/dist/hooks/rootScrollStyles.d.ts +48 -0
  258. package/dist/hooks/rootScrollStyles.d.ts.map +1 -0
  259. package/dist/hooks/rootScrollStyles.js +207 -0
  260. package/dist/hooks/scrollLockTouchGuard.d.ts +13 -0
  261. package/dist/hooks/scrollLockTouchGuard.d.ts.map +1 -0
  262. package/dist/hooks/scrollLockTouchGuard.js +134 -0
  263. package/dist/hooks/scrollbarGutter.d.ts +4 -4
  264. package/dist/hooks/scrollbarGutter.d.ts.map +1 -1
  265. package/dist/hooks/scrollbarGutter.js +36 -23
  266. package/dist/hooks/useActionGroupTracking.d.ts +53 -0
  267. package/dist/hooks/useActionGroupTracking.d.ts.map +1 -0
  268. package/dist/hooks/useActionGroupTracking.js +174 -0
  269. package/dist/hooks/useAnimator.d.ts +41 -0
  270. package/dist/hooks/useAnimator.d.ts.map +1 -0
  271. package/dist/hooks/useAnimator.js +70 -0
  272. package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
  273. package/dist/hooks/useAnnounceRenderedText.js +1 -0
  274. package/dist/hooks/useAttachment.d.ts +1 -1
  275. package/dist/hooks/useAttachment.js +1 -1
  276. package/dist/hooks/useAutoMediaMode.d.ts.map +1 -1
  277. package/dist/hooks/useAutoMediaMode.js +1 -0
  278. package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
  279. package/dist/hooks/useBusyAnnouncement.js +2 -0
  280. package/dist/hooks/useDevWarning.d.ts.map +1 -1
  281. package/dist/hooks/useDevWarning.js +2 -0
  282. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  283. package/dist/hooks/useFocusTrap.js +2 -0
  284. package/dist/hooks/useGridFocus.d.ts +8 -5
  285. package/dist/hooks/useGridFocus.d.ts.map +1 -1
  286. package/dist/hooks/useGridFocus.js +4 -3
  287. package/dist/hooks/useHotkeys.d.ts.map +1 -1
  288. package/dist/hooks/useHotkeys.js +3 -0
  289. package/dist/hooks/useImageMode.d.ts.map +1 -1
  290. package/dist/hooks/useImageMode.js +3 -0
  291. package/dist/hooks/useInputStatusIcon.d.ts +1 -1
  292. package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
  293. package/dist/hooks/useInputStatusIcon.js +2 -2
  294. package/dist/hooks/useKeyboardHint.js +1 -1
  295. package/dist/hooks/useLongPress.d.ts +8 -9
  296. package/dist/hooks/useLongPress.d.ts.map +1 -1
  297. package/dist/hooks/useLongPress.js +23 -106
  298. package/dist/hooks/useMenuHover.d.ts.map +1 -1
  299. package/dist/hooks/useMenuHover.js +2 -0
  300. package/dist/hooks/useMenuPress.d.ts.map +1 -1
  301. package/dist/hooks/useMenuPress.js +3 -0
  302. package/dist/hooks/useOverflow.d.ts.map +1 -1
  303. package/dist/hooks/useOverflow.js +2 -1
  304. package/dist/hooks/usePressFeedback.d.ts.map +1 -1
  305. package/dist/hooks/usePressFeedback.js +1 -0
  306. package/dist/hooks/useResolvedRequired.d.ts +3 -0
  307. package/dist/hooks/useResolvedRequired.d.ts.map +1 -1
  308. package/dist/hooks/useResolvedRequired.js +3 -0
  309. package/dist/hooks/useScrollLock.d.ts +7 -9
  310. package/dist/hooks/useScrollLock.d.ts.map +1 -1
  311. package/dist/hooks/useScrollLock.js +55 -48
  312. package/dist/hooks/useScrollableArea.d.ts.map +1 -1
  313. package/dist/hooks/useScrollableArea.js +5 -0
  314. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  315. package/dist/hooks/useStreamingText.js +3 -0
  316. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts +8 -0
  317. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts.map +1 -0
  318. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.js +42 -0
  319. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.d.ts.map +1 -1
  320. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.js +6 -0
  321. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts +8 -0
  322. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts.map +1 -0
  323. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.js +14 -0
  324. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  325. package/dist/i18n/generated-locales/en.generated.js +30 -0
  326. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  327. package/dist/i18n/generated-locales/pseudo.generated.js +30 -0
  328. package/dist/index.d.ts +1 -0
  329. package/dist/index.d.ts.map +1 -1
  330. package/dist/index.js +4 -0
  331. package/dist/internal/indicatorPress.stylex.d.ts +20 -0
  332. package/dist/internal/indicatorPress.stylex.d.ts.map +1 -0
  333. package/dist/internal/indicatorPress.stylex.js +26 -0
  334. package/dist/internal/selectable-card.d.ts +21 -0
  335. package/dist/internal/selectable-card.d.ts.map +1 -0
  336. package/dist/internal/selectable-card.js +20 -0
  337. package/dist/internal/sheetDraft.d.ts +2 -2
  338. package/dist/internal/sheetDraft.js +2 -2
  339. package/dist/motion/animatedLayout.d.ts.map +1 -1
  340. package/dist/motion/animatedLayout.js +7 -7
  341. package/dist/motion/animator.d.ts +14 -14
  342. package/dist/motion/animator.d.ts.map +1 -1
  343. package/dist/motion/animator.js +45 -20
  344. package/dist/motion/progress.d.ts +88 -0
  345. package/dist/motion/progress.d.ts.map +1 -0
  346. package/dist/motion/progress.js +128 -0
  347. package/dist/motion/reducedMotion.d.ts.map +1 -1
  348. package/dist/motion/reducedMotion.js +3 -1
  349. package/dist/motion/uikit/alert.d.ts +41 -0
  350. package/dist/motion/uikit/alert.d.ts.map +1 -0
  351. package/dist/motion/uikit/alert.js +43 -0
  352. package/dist/motion/uikit/index.d.ts +4 -3
  353. package/dist/motion/uikit/index.d.ts.map +1 -1
  354. package/dist/motion/uikit/index.js +4 -3
  355. package/dist/motion/uikit/picker.d.ts +96 -0
  356. package/dist/motion/uikit/picker.d.ts.map +1 -0
  357. package/dist/motion/uikit/picker.js +117 -0
  358. package/dist/privateAttributes/pressGroupItem.stylex.d.ts +22 -0
  359. package/dist/privateAttributes/pressGroupItem.stylex.d.ts.map +1 -0
  360. package/dist/privateAttributes/pressGroupItem.stylex.js +36 -0
  361. package/dist/privateAttributes/reducedMotion.stylex.d.ts +23 -0
  362. package/dist/privateAttributes/reducedMotion.stylex.d.ts.map +1 -0
  363. package/dist/privateAttributes/reducedMotion.stylex.js +40 -0
  364. package/dist/theme/Theme.d.ts.map +1 -1
  365. package/dist/theme/Theme.js +29 -4
  366. package/dist/theme/motionKnobs.d.ts +4 -3
  367. package/dist/theme/motionKnobs.d.ts.map +1 -1
  368. package/dist/theme/motionKnobs.js +3 -2
  369. package/dist/theme/themeMotion.d.ts +6 -0
  370. package/dist/theme/themeMotion.d.ts.map +1 -1
  371. package/dist/theme/themeMotion.js +7 -0
  372. package/dist/utils/dateParser.d.ts.map +1 -1
  373. package/dist/utils/dateParser.js +12 -0
  374. package/dist/utils/focusReturn.d.ts +15 -0
  375. package/dist/utils/focusReturn.d.ts.map +1 -1
  376. package/dist/utils/focusReturn.js +28 -0
  377. package/dist/utils/interactionModality.d.ts.map +1 -1
  378. package/dist/utils/interactionModality.js +4 -0
  379. package/dist/utils/interactionOverlay.stylex.d.ts +3 -2
  380. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  381. package/dist/utils/interactionOverlay.stylex.js +3 -2
  382. package/dist/utils/plainDate.d.ts +8 -0
  383. package/dist/utils/plainDate.d.ts.map +1 -1
  384. package/dist/utils/plainDate.js +19 -0
  385. package/dist/utils/pressFeedback.d.ts.map +1 -1
  386. package/dist/utils/pressFeedback.js +20 -6
  387. package/dist/utils/triggerFocus.d.ts +36 -0
  388. package/dist/utils/triggerFocus.d.ts.map +1 -0
  389. package/dist/utils/triggerFocus.js +65 -0
  390. package/locales/en.json +120 -0
  391. package/locales/pseudo.json +90 -0
  392. package/package.json +14 -9
  393. package/src/AlertDialog/AlertDialog.doc.mjs +2 -2
  394. package/src/AlertDialog/AlertDialog.tsx +46 -5
  395. package/src/AppShell/AppShell.tsx +4 -0
  396. package/src/BottomSheet/BottomSheet.tsx +1 -0
  397. package/src/BottomSheet/BottomSheetPanel.tsx +39 -3
  398. package/src/BottomSheet/BottomSheetSwitcher.tsx +5 -0
  399. package/src/BottomSheet/useMobileKeyboard.ts +4 -0
  400. package/src/BottomSheet/useSheetGestures.ts +10 -1
  401. package/src/Button/Button.tsx +26 -4
  402. package/src/Calendar/Calendar.tsx +36 -25
  403. package/src/Carousel/Carousel.tsx +1 -0
  404. package/src/Chat/ChatComposerInput.tsx +2 -0
  405. package/src/Chat/ChatMessageList.tsx +2 -1
  406. package/src/Chat/useChatDictation.ts +1 -0
  407. package/src/Chat/useChatNewMessages.ts +1 -1
  408. package/src/Chat/useChatStreamScroll.ts +2 -0
  409. package/src/Chat/useSpeechRecognition.ts +2 -0
  410. package/src/Chat/useTriggerMenu.tsx +1 -1
  411. package/src/CheckboxInput/CheckboxInput.doc.mjs +18 -0
  412. package/src/CheckboxInput/CheckboxInput.tsx +38 -15
  413. package/src/CodeBlock/CodeBlock.doc.mjs +9 -1
  414. package/src/CodeBlock/CodeBlock.tsx +41 -4
  415. package/src/CommandPalette/CommandPalette.tsx +1 -0
  416. package/src/CommandPalette/CommandPaletteItem.tsx +1 -0
  417. package/src/ComplexSelector/ComplexSelector.tsx +20 -5
  418. package/src/ContextMenu/ContextMenu.tsx +2 -2
  419. package/src/DateInput/MonthScroller.tsx +8 -2
  420. package/src/DateInput/PickerWheel.tsx +765 -0
  421. package/src/DateInput/TouchDateField.tsx +1 -0
  422. package/src/DateInput/Wheel.tsx +94 -150
  423. package/src/DateInput/useOwnScrollGesture.ts +25 -3
  424. package/src/DateInput/usePointerDragScroll.ts +1 -0
  425. package/src/DateInput/useScrollSettle.ts +2 -0
  426. package/src/DateInput/useWheelListbox.ts +112 -0
  427. package/src/DateInput/wheelOptions.ts +155 -0
  428. package/src/DateInput/wheelPhysics.ts +406 -0
  429. package/src/DateInput/wheelStrip.ts +341 -0
  430. package/src/DateTimeInput/TouchDateTimeField.tsx +2 -0
  431. package/src/Dialog/Dialog.tsx +12 -32
  432. package/src/Drawer/useDrawerDialogPresence.ts +2 -0
  433. package/src/DropdownMenu/useMenuOverflow.ts +3 -0
  434. package/src/Field/Field.tsx +2 -2
  435. package/src/FieldStatus/useFieldStatusAnnouncement.ts +1 -0
  436. package/src/FormLayout/FormLayout.doc.mjs +181 -46
  437. package/src/FormLayout/FormLayout.tsx +5 -1
  438. package/src/HoverCard/HoverCard.doc.mjs +10 -8
  439. package/src/HoverCard/HoverCard.tsx +58 -6
  440. package/src/HoverCard/useHoverCard.doc.mjs +178 -36
  441. package/src/HoverCard/useHoverCard.tsx +49 -54
  442. package/src/Icon/Icon.doc.mjs +49 -8
  443. package/src/Icon/Icon.tsx +15 -7
  444. package/src/IconButton/IconButton.doc.mjs +141 -21
  445. package/src/Item/useSwipeAction.ts +2 -0
  446. package/src/Layer/modalOutlet.ts +2 -0
  447. package/src/Layer/outsidePress.ts +1 -0
  448. package/src/Layer/useLayer.tsx +2 -0
  449. package/src/Layer/useLayerDismissal.ts +2 -0
  450. package/src/Layer/usePressPin.ts +81 -15
  451. package/src/Layer/useTouchTrigger.ts +2 -0
  452. package/src/Lightbox/Lightbox.tsx +19 -0
  453. package/src/MobileNav/MobileNav.tsx +9 -30
  454. package/src/Outline/useOutlineFromDOM.ts +2 -0
  455. package/src/Outline/useScrollSpy.ts +2 -0
  456. package/src/OverflowList/OverflowList.tsx +2 -0
  457. package/src/Popover/Popover.tsx +4 -0
  458. package/src/PowerSearch/PowerSearch.doc.mjs +60 -8
  459. package/src/PowerSearch/PowerSearch.tsx +627 -157
  460. package/src/PowerSearch/PowerSearchBottomSheet.tsx +2525 -0
  461. package/src/PowerSearch/PowerSearchEditPopover.tsx +39 -6
  462. package/src/PowerSearch/PowerSearchFilterEditor.tsx +2 -0
  463. package/src/PowerSearch/PowerSearchToken.tsx +7 -0
  464. package/src/PowerSearch/PowerSearchValueEditor.tsx +244 -58
  465. package/src/PowerSearch/formatFilterValue.ts +55 -17
  466. package/src/PowerSearch/formatTokenValue.ts +222 -0
  467. package/src/PowerSearch/powerSearchDateZone.ts +64 -0
  468. package/src/PowerSearch/powerSearchSheetUtils.ts +224 -0
  469. package/src/PowerSearch/types.ts +2 -0
  470. package/src/ProgressBar/ProgressBarTouch.ts +2 -0
  471. package/src/RadioList/RadioList.tsx +3 -2
  472. package/src/RadioList/RadioListItem.tsx +5 -3
  473. package/src/Resizable/Resizable.doc.mjs +5 -4
  474. package/src/Resizable/ResizeHandle.tsx +169 -109
  475. package/src/Resizable/createResizable.ts +831 -0
  476. package/src/Resizable/useResizable.ts +292 -623
  477. package/src/SegmentedControl/useSegmentedSelectionMotion.ts +6 -3
  478. package/src/SelectableCard/SelectableCard.tsx +39 -10
  479. package/src/SelectableCard/selectableCardInput.ts +30 -0
  480. package/src/Selector/Selector.tsx +5 -12
  481. package/src/Slider/sliderTouchController.ts +2 -2
  482. package/src/Spinner/Spinner.tsx +77 -63
  483. package/src/Switch/Switch.tsx +2 -6
  484. package/src/Switch/useSwitchTouch.ts +4 -4
  485. package/src/Table/BaseTable.tsx +46 -12
  486. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +2 -1
  487. package/src/Table/plugins/filtering/useTableFiltering.tsx +1 -0
  488. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +4 -0
  489. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +2 -0
  490. package/src/TextInput/TextInput.tsx +11 -10
  491. package/src/TimeInput/TimeInput.tsx +2 -0
  492. package/src/TimeInput/TouchTimeField.tsx +2 -0
  493. package/src/Timer/Timer.tsx +1 -0
  494. package/src/Timestamp/Timestamp.tsx +1 -1
  495. package/src/Toast/Toast.doc.mjs +4 -3
  496. package/src/Toast/Toast.tsx +52 -32
  497. package/src/Toast/ToastViewport.tsx +123 -35
  498. package/src/Toast/types.ts +9 -3
  499. package/src/Toast/useToast.tsx +1 -0
  500. package/src/Tokenizer/Tokenizer.doc.mjs +19 -3
  501. package/src/Tokenizer/Tokenizer.tsx +73 -51
  502. package/src/Tokenizer/TokenizerBottomSheet.tsx +1 -1
  503. package/src/Tokenizer/index.ts +1 -0
  504. package/src/Tooltip/useTooltip.doc.mjs +24 -0
  505. package/src/Tooltip/useTooltip.tsx +61 -56
  506. package/src/Typeahead/BaseTypeahead.tsx +27 -17
  507. package/src/Typeahead/TypeaheadItem.doc.mjs +6 -3
  508. package/src/Typeahead/TypeaheadItem.tsx +2 -1
  509. package/src/animator/createAnimator.doc.mjs +153 -0
  510. package/src/animator/createAnimator.ts +324 -0
  511. package/src/gestures/GestureHost.ts +1 -1
  512. package/src/gestures/PressTracker.ts +4 -3
  513. package/src/gestures/README.md +10 -4
  514. package/src/hooks/ModalAnnounceProvider.tsx +1 -0
  515. package/src/hooks/actionGroupTracker.ts +20 -5
  516. package/src/hooks/index.ts +2 -0
  517. package/src/hooks/longPressDetector.ts +273 -0
  518. package/src/hooks/pressGroupContext.ts +21 -0
  519. package/src/hooks/rootScrollStyles.ts +247 -0
  520. package/src/hooks/scrollLockTouchGuard.ts +182 -0
  521. package/src/hooks/scrollbarGutter.ts +41 -26
  522. package/src/hooks/useActionGroupTracking.ts +224 -0
  523. package/src/hooks/useAnimator.doc.mjs +109 -0
  524. package/src/hooks/useAnimator.ts +67 -0
  525. package/src/hooks/useAnnounceRenderedText.ts +1 -0
  526. package/src/hooks/useAttachment.ts +1 -1
  527. package/src/hooks/useAutoMediaMode.ts +1 -0
  528. package/src/hooks/useBusyAnnouncement.ts +2 -0
  529. package/src/hooks/useDevWarning.ts +2 -0
  530. package/src/hooks/useFocusTrap.ts +2 -0
  531. package/src/hooks/useGridFocus.doc.mjs +6 -6
  532. package/src/hooks/useGridFocus.ts +10 -7
  533. package/src/hooks/useHotkeys.ts +2 -0
  534. package/src/hooks/useImageMode.ts +2 -0
  535. package/src/hooks/useInputStatusIcon.tsx +3 -2
  536. package/src/hooks/useKeyboardHint.tsx +1 -1
  537. package/src/hooks/useLongPress.doc.mjs +2 -2
  538. package/src/hooks/useLongPress.ts +32 -122
  539. package/src/hooks/useMenuHover.ts +1 -0
  540. package/src/hooks/useMenuPress.ts +2 -0
  541. package/src/hooks/useOverflow.ts +2 -1
  542. package/src/hooks/usePressFeedback.ts +1 -0
  543. package/src/hooks/useResolvedRequired.ts +3 -0
  544. package/src/hooks/useScrollLock.doc.mjs +51 -12
  545. package/src/hooks/useScrollLock.ts +57 -60
  546. package/src/hooks/useScrollableArea.ts +4 -0
  547. package/src/hooks/useStreamingText.ts +2 -0
  548. package/src/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.ts +43 -0
  549. package/src/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.ts +6 -0
  550. package/src/i18n/generated-english/PowerSearch/formatTokenValue.generated.ts +15 -0
  551. package/src/i18n/generated-locales/en.generated.ts +41 -0
  552. package/src/i18n/generated-locales/pseudo.generated.ts +42 -0
  553. package/src/index.ts +13 -0
  554. package/src/internal/indicatorPress.stylex.ts +24 -0
  555. package/src/internal/selectable-card.ts +21 -0
  556. package/src/internal/sheetDraft.ts +2 -2
  557. package/src/motion/MEASUREMENTS.md +18 -0
  558. package/src/motion/README.md +10 -5
  559. package/src/motion/animatedLayout.ts +10 -5
  560. package/src/motion/animator.ts +66 -31
  561. package/src/motion/progress.ts +155 -0
  562. package/src/motion/reducedMotion.ts +3 -1
  563. package/src/motion/uikit/alert.ts +43 -0
  564. package/src/motion/uikit/index.ts +4 -3
  565. package/src/motion/uikit/picker.ts +116 -0
  566. package/src/privateAttributes/pressGroupItem.stylex.ts +44 -0
  567. package/src/privateAttributes/reducedMotion.stylex.ts +45 -0
  568. package/src/theme/Theme.tsx +37 -3
  569. package/src/theme/motionKnobs.ts +4 -3
  570. package/src/theme/themeMotion.ts +7 -0
  571. package/src/utils/dateParser.ts +16 -0
  572. package/src/utils/focusReturn.ts +30 -0
  573. package/src/utils/interactionModality.ts +4 -0
  574. package/src/utils/interactionOverlay.stylex.ts +3 -2
  575. package/src/utils/plainDate.ts +21 -0
  576. package/src/utils/pressFeedback.ts +24 -6
  577. package/src/utils/triggerFocus.ts +80 -0
  578. package/dist/internal/touch-sheet.d.ts +0 -21
  579. package/dist/internal/touch-sheet.d.ts.map +0 -1
  580. package/dist/internal/touch-sheet.js +0 -19
  581. 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 experimental `presentation` option swaps the tokenizer
12
+ * field and editor 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/focusReturn.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
@@ -314,7 +296,8 @@ export function PowerSearch({
314
296
  xstyle,
315
297
  className,
316
298
  style,
317
- components: componentOverrides
299
+ components: componentOverrides,
300
+ experimental
318
301
  }) {
319
302
  const size = useSize(sizeProp, 'md');
320
303
  const config = useInternalConfig(configProp);
@@ -325,6 +308,87 @@ export function PowerSearch({
325
308
  const placeholder = placeholderFromProps ?? t('@astryx.powersearch.placeholder');
326
309
  const popoverSaveButtonLabel = popoverSaveButtonLabelFromProps ?? t('@astryx.powersearch.editor.apply');
327
310
  const tokenizerRef = useRef(null);
311
+
312
+ // Experimental presentation. `adaptive`
313
+ // resolves through the policy the selection controls share; an open flow
314
+ // keeps its presentation until it closes, so a resolution change mid-task
315
+ // cannot pull the surface out from under the person.
316
+ const presentation = experimental?.presentation ?? 'popover';
317
+ const resolvedPresentation = useAdaptivePresentation(presentation);
318
+ const [isSheetOpen, setIsSheetOpen] = useState(false);
319
+ // Latched for the flow's lifetime: the flow stays presented after it closes
320
+ // until the sheets have run their exit and handed focus back to the trigger.
321
+ // Without the latch, `adaptive` resolving to `popover` mid-session (a phone
322
+ // turned to landscape) would unmount the sheets and the trigger they return
323
+ // focus to in the same render, dropping focus to the page body.
324
+ const [isSheetPresented, setIsSheetPresented] = useState(false);
325
+ const isSheetPresentation = isSheetOpen || isSheetPresented || resolvedPresentation === 'bottom-sheet';
326
+ const triggerRef = useRef(null);
327
+ // `hasAutoFocus` applies only to the control the field first mounts. A
328
+ // presentation swap remounts the control (combobox input or trigger), and
329
+ // React's `autoFocus` on the new one would pull focus from wherever on the
330
+ // page it was; the roots' callback refs hand over the focus the field held
331
+ // instead. A field that never swaps keeps `autoFocus` on every render, so a
332
+ // Dialog that keeps it mounted still finds its `data-autofocus` on open.
333
+ const [autoFocusState, setAutoFocusState] = useState({
334
+ presentation: isSheetPresentation,
335
+ isFirstControl: true
336
+ });
337
+ if (autoFocusState.presentation !== isSheetPresentation) {
338
+ setAutoFocusState({
339
+ presentation: isSheetPresentation,
340
+ isFirstControl: false
341
+ });
342
+ }
343
+ const autoFocusOnMount = hasAutoFocus && autoFocusState.isFirstControl && autoFocusState.presentation === isSheetPresentation;
344
+ // A focus the swap moves continues the same visit to the field: the
345
+ // control that held focus is gone (no blur fires for a removed element), so
346
+ // the caller is told of neither a blur nor a new focus.
347
+ const isSwapFocusRef = useRef(false);
348
+ const focusAfterSwap = useCallback(control => {
349
+ if (control == null) {
350
+ return;
351
+ }
352
+ isSwapFocusRef.current = true;
353
+ try {
354
+ control.focus();
355
+ } finally {
356
+ isSwapFocusRef.current = false;
357
+ }
358
+ }, []);
359
+ const handleFieldFocus = useCallback(event => {
360
+ if (!isSwapFocusRef.current) {
361
+ onFocus?.(event);
362
+ }
363
+ }, [onFocus]);
364
+ const handleFieldBlur = useCallback(event => {
365
+ onBlur?.(event);
366
+ }, [onBlur]);
367
+ // While the flow is open, the sheet announces its own content from inside
368
+ // its dialog; this component announces only with the flow closed, and
369
+ // `useAnnounce` routes those messages by where the field is — into a Dialog
370
+ // or modal Drawer that holds it, or the shared channel when no modal does.
371
+ // A result count that changed during the flow's exit is spoken once the
372
+ // flow has fully closed and focus is back on the trigger: the closing
373
+ // dialog stays modal through its exit, so neither its region nor the
374
+ // page-body channel is heard before.
375
+ const afterCloseResultCountRef = useRef(null);
376
+ const triggerId = useId();
377
+ const triggerLabelId = useId();
378
+ const triggerContentId = useId();
379
+ const statusMessageId = useId();
380
+ // A field that becomes disabled cannot keep its flow open, and must not
381
+ // reopen it when re-enabled. Adjusted in the
382
+ // render that sees the change, not an effect, so no frame shows both.
383
+ const [wasDisabled, setWasDisabled] = useState(isDisabled);
384
+ if (isDisabled !== wasDisabled) {
385
+ setWasDisabled(isDisabled);
386
+ if (isDisabled && isSheetOpen) {
387
+ setIsSheetOpen(false);
388
+ }
389
+ }
390
+ useDevWarning('PowerSearch', '`menuWidth` has no surface in the bottom-sheet presentation: the sheet flow has no typeahead popover to size. Scope it to the popover presentation or leave it out.', isSheetPresentation && menuWidth != null);
391
+ useDevWarning('PowerSearch', '`tokenOverflowBehavior` has no surface in the bottom-sheet presentation: the trigger wraps its display-only tokens. Scope it to the popover presentation or leave it out.', isSheetPresentation && tokenOverflowBehavior != null);
328
392
  const [popoverState, setPopoverStateRaw] = useState({
329
393
  type: 'idle'
330
394
  });
@@ -338,21 +402,35 @@ export function PowerSearch({
338
402
  const fieldLabel = field?.label ?? '';
339
403
  const operatorLabel = operator ? resolveOperatorLabel(operator, t) : '';
340
404
  const label = `${fieldLabel}: ${operatorLabel}`.trim();
341
- const value = operator ? tokenValueText(operator.value, filter.value, Math.max(maxTokenLength - fieldLabel.length - operatorLabel.length, 10), locale) : null;
405
+ const value = operator ? formatTokenValueText(operator.value, filter.value, Math.max(maxTokenLength - fieldLabel.length - operatorLabel.length, 10), locale, undefined, undefined, timezoneID) : null;
342
406
  return {
343
407
  label,
344
408
  value,
345
409
  full: value != null ? `${label} ${value}` : label
346
410
  };
347
- }, [config, maxTokenLength, t, locale]);
411
+ }, [config, maxTokenLength, t, locale, timezoneID]);
348
412
  // The built-in token being edited. A token from a `components` override
349
413
  // names itself, so its editor keeps the plain popover.
350
414
  const editedFilter = popoverState.type === 'editing' ? filters[popoverState.filterIndex] : undefined;
351
415
  const editedOperator = editedFilter != null ? config.getOperator(editedFilter.field, editedFilter.operator) : undefined;
352
416
  const editedBuiltInFilter = editedOperator == null || componentOverrides?.[editedOperator.value.type]?.Token == null ? editedFilter : undefined;
417
+ // Whether the editor popover is open, for the hand-off below, which runs
418
+ // in the commit that swaps presentations.
419
+ const isPopoverOpenRef = useRef(false);
420
+ // When `adaptive` flips to the sheet while the editor popover is open (a
421
+ // phone rotated), the editing ends with the popover: its state returns to
422
+ // idle (through the raw setter, since the tokenizer input is gone), in the
423
+ // render that sees the swap, so a later switch back does not reopen a stale
424
+ // editor.
425
+ if (isSheetPresentation && popoverState.type !== 'idle') {
426
+ setPopoverStateRaw({
427
+ type: 'idle'
428
+ });
429
+ }
353
430
 
354
431
  // Layer for positioning the edit popover anchored to the tokenizer
355
432
  const handleLayerHide = useCallback(() => {
433
+ isPopoverOpenRef.current = false;
356
434
  setPopoverStateRaw({
357
435
  type: 'idle'
358
436
  });
@@ -371,8 +449,47 @@ export function PowerSearch({
371
449
  dialogLabel: editedBuiltInFilter != null ? tokenText(editedBuiltInFilter).full : undefined
372
450
  });
373
451
 
452
+ // A presentation swap removes the focused control, so the other
453
+ // presentation's primary control (the combobox input or the trigger) takes
454
+ // focus and focus never falls to the page body. Each presentation keys its
455
+ // root, so a swap mounts a new root. The detaching root notes that it held
456
+ // focus, which also covers an input focused by server-rendered `autofocus`
457
+ // before hydration. The editor popover is portaled outside the root, so an
458
+ // open editor counts as held focus. The attaching root gives focus to its
459
+ // primary control when focus has fallen to the page body; the sheet root
460
+ // also hides a popover layer left open.
461
+ const isFocusPendingHandOffRef = useRef(false);
462
+ const hidePopover = popover.hide;
463
+ const handOffFocusRef = useCallback(node => {
464
+ if (node == null) {
465
+ return;
466
+ }
467
+ const trigger = triggerRef.current;
468
+ const isSheetRoot = trigger != null && node.contains(trigger);
469
+ // The sheet presentation preloads the flow's chunk, so the first press
470
+ // opens without waiting for the network; nothing renders.
471
+ if (isSheetRoot) {
472
+ void loadPowerSearchBottomSheet();
473
+ }
474
+ if (isSheetRoot && isPopoverOpenRef.current) {
475
+ isPopoverOpenRef.current = false;
476
+ hidePopover();
477
+ }
478
+ const takesFocus = isFocusPendingHandOffRef.current;
479
+ isFocusPendingHandOffRef.current = false;
480
+ if (takesFocus && isFocusDetached(node.ownerDocument)) {
481
+ focusAfterSwap(isSheetRoot ? trigger : tokenizerRef.current);
482
+ }
483
+ return () => {
484
+ if (node.contains(node.ownerDocument.activeElement) || isPopoverOpenRef.current) {
485
+ isFocusPendingHandOffRef.current = true;
486
+ }
487
+ };
488
+ }, [focusAfterSwap, hidePopover]);
489
+
374
490
  // Wrapper that manages layer visibility and tokenizer focus alongside state
375
491
  const setPopoverState = useCallback(state => {
492
+ isPopoverOpenRef.current = state.type !== 'idle';
376
493
  setPopoverStateRaw(state);
377
494
  if (state.type !== 'idle') {
378
495
  // Schedule after the current frame so React can render the popover
@@ -387,13 +504,22 @@ export function PowerSearch({
387
504
  }
388
505
  }, [popover]);
389
506
 
390
- // Expose imperative handle
507
+ // Expose imperative handle; in the sheet presentation the trigger is the
508
+ // field's focusable control.
391
509
  useImperativeHandle(handleRef, () => ({
392
510
  focusTypeahead() {
393
- tokenizerRef.current?.focus();
511
+ if (isSheetPresentation) {
512
+ triggerRef.current?.focus();
513
+ } else {
514
+ tokenizerRef.current?.focus();
515
+ }
394
516
  },
395
517
  blurTypeahead() {
396
- tokenizerRef.current?.blur();
518
+ if (isSheetPresentation) {
519
+ triggerRef.current?.blur();
520
+ } else {
521
+ tokenizerRef.current?.blur();
522
+ }
397
523
  }
398
524
  }));
399
525
 
@@ -554,15 +680,17 @@ export function PowerSearch({
554
680
  });
555
681
  }, [setPopoverState]);
556
682
 
557
- // Custom token renderer
558
- // Custom token renderer
559
- const renderToken = useCallback((item, onRemove) => {
683
+ // Token renderer for both presentations. Given `onRemove`, the token is
684
+ // the tokenizer field's: click edits, × removes. Without it (the sheet
685
+ // presentation's trigger) the token is display-only; the field as a whole
686
+ // opens the flow.
687
+ const renderFilterToken = useCallback((item, onRemove) => {
560
688
  const auxData = item.auxiliaryData;
561
689
  const filterIndex = auxData?.filterIndex ?? -1;
562
690
  const filter = filterIndex >= 0 ? filters[filterIndex] : undefined;
563
691
  const field = auxData ? config.getField(auxData.fieldKey) : undefined;
564
692
  const operator = auxData?.operatorKey ? config.getOperator(auxData.fieldKey, auxData.operatorKey) : undefined;
565
- const canInteract = !isReadOnly && !isDisabled && !filter?.isReadOnly;
693
+ const canInteract = onRemove != null && !isReadOnly && !isDisabled && !filter?.isReadOnly;
566
694
  const handleClick = canInteract ? () => handleTokenClick(filterIndex) : undefined;
567
695
  const handleRemove = canInteract ? onRemove : undefined;
568
696
 
@@ -577,7 +705,8 @@ export function PowerSearch({
577
705
  maxLength: maxTokenLength,
578
706
  onClick: handleClick,
579
707
  onRemove: handleRemove,
580
- isDisabled: isDisabled
708
+ isDisabled: isDisabled,
709
+ timezoneID: timezoneID
581
710
  });
582
711
  }
583
712
 
@@ -635,7 +764,8 @@ export function PowerSearch({
635
764
  isDisabled: isDisabled
636
765
  })
637
766
  });
638
- }, [filters, config, configProp, maxTokenLength, size, isReadOnly, isDisabled, handleTokenClick, componentOverrides, t, popoverState, tokenText]);
767
+ }, [timezoneID, filters, config, configProp, maxTokenLength, size, isReadOnly, isDisabled, handleTokenClick, componentOverrides, t, popoverState, tokenText]);
768
+ const renderToken = useCallback((item, onRemove) => renderFilterToken(item, onRemove), [renderFilterToken]);
639
769
 
640
770
  // Custom typeahead item renderer — adds field icon and description
641
771
  const renderItem = useCallback(item => {
@@ -692,7 +822,8 @@ export function PowerSearch({
692
822
  onSave: handlePopoverSave,
693
823
  onCancel: handlePopoverCancel,
694
824
  saveButtonLabel: popoverSaveButtonLabel,
695
- isReadOnly: isReadOnly
825
+ isReadOnly: isReadOnly,
826
+ timezoneID: timezoneID
696
827
  }, popoverKey);
697
828
  }
698
829
  return /*#__PURE__*/_jsx(PowerSearchEditPopover, {
@@ -703,9 +834,10 @@ export function PowerSearch({
703
834
  onCancel: handlePopoverCancel,
704
835
  saveButtonLabel: popoverSaveButtonLabel,
705
836
  maxMenuItems: maxOperatorMenuItems,
706
- isReadOnly: isReadOnly
837
+ isReadOnly: isReadOnly,
838
+ timezoneID: timezoneID
707
839
  }, popoverKey);
708
- }, [popoverPartialFilter, popoverState, EditorOverride, configProp, config, handlePopoverSave, handlePopoverCancel, popoverSaveButtonLabel, maxOperatorMenuItems, isReadOnly]);
840
+ }, [timezoneID, popoverPartialFilter, popoverState, EditorOverride, configProp, config, handlePopoverSave, handlePopoverCancel, popoverSaveButtonLabel, maxOperatorMenuItems, isReadOnly]);
709
841
 
710
842
  // Plain-text form of the result count, shared by the visible label and the
711
843
  // screen-reader announcement so the two never drift. The ICU plural handles
@@ -723,28 +855,38 @@ export function PowerSearch({
723
855
  return resultCount;
724
856
  }, [resultCount, t]);
725
857
 
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.
858
+ // This Effect synchronizes a polite live region with the result count,
859
+ // mirroring the way Typeahead announces its dropdown result count: the count
860
+ // is otherwise only shown visually and stays silent to assistive tech. The
861
+ // region follows where the field is: the modal that holds the field (a
862
+ // Dialog, a modal Drawer), else the shared channel. While a sheet of the flow is open the sheet itself announces the
863
+ // count from inside its dialog, and this Effect stays quiet. Only a
864
+ // change after mount is spoken — the count present on mount is not
865
+ // announced unprompted — and the guard compares against the last announced
866
+ // text rather than a mounted flag, so StrictMode's effect replay announces
867
+ // nothing either. A change that lands while the flow is closing waits for
868
+ // the trigger focus, since the dialog is still modal through its exit. The
869
+ // announcement acquires no resource, so there is no cleanup.
733
870
  const announce = useAnnounce();
734
871
  // PowerSearch words its Clear all as its record does; the field announces
735
872
  // these words instead of Tokenizer's (component:Tokenizer AR7).
736
873
  const hasReadOnlyFilter = filters.some(filter => filter.isReadOnly);
737
874
  const clearAllMessage = useMemo(() => hasReadOnlyFilter ? t('@astryx.powersearch.editableFiltersRemoved') : t('@astryx.powersearch.allFiltersRemoved'), [hasReadOnlyFilter, t]);
738
875
  const announcedResultCountRef = useRef(resultCountText);
876
+ const isSheetExiting = isSheetPresented && !isSheetOpen;
739
877
  useEffect(() => {
740
878
  if (resultCountText === announcedResultCountRef.current) {
741
879
  return;
742
880
  }
743
881
  announcedResultCountRef.current = resultCountText;
744
882
  if (resultCountText != null) {
745
- announce(resultCountText);
883
+ if (isSheetExiting) {
884
+ afterCloseResultCountRef.current = resultCountText;
885
+ } else if (!isSheetOpen) {
886
+ announce(resultCountText);
887
+ }
746
888
  }
747
- }, [resultCountText, announce]);
889
+ }, [resultCountText, announce, isSheetExiting, isSheetOpen]);
748
890
 
749
891
  // Build combined endContent from resultCount + endContent props
750
892
  const combinedEndContent = useMemo(() => {
@@ -763,9 +905,177 @@ export function PowerSearch({
763
905
  }
764
906
  return resultCountNode || endContent || undefined;
765
907
  }, [resultCountText, endContent]);
908
+
909
+ // ------------------------------------------------------- sheet trigger --
910
+
911
+ // Disabled-reason tooltip for the sheet trigger. Disabled controls swallow
912
+ // pointer events, so the listeners attach to the field's control box; the
913
+ // trigger stays perceivable through aria-disabled.
914
+ const showsDisabledMessage = isDisabled && !!disabledMessage;
915
+ const disabledMessageTooltip = useTooltip({
916
+ placement: 'above',
917
+ focusTrigger: 'always',
918
+ isEnabled: isSheetPresentation && showsDisabledMessage
919
+ });
920
+ const rootRef = useMergedRefs(ref, popover.triggerRef, handOffFocusRef);
921
+ const openSheet = useCallback(() => {
922
+ if (isDisabled) {
923
+ return;
924
+ }
925
+ // The flow restores focus to the element that was active when it opened;
926
+ // make sure that is the trigger even for a tap on a token.
927
+ triggerRef.current?.focus({
928
+ preventScroll: true
929
+ });
930
+ setIsSheetPresented(true);
931
+ setIsSheetOpen(true);
932
+ }, [isDisabled]);
933
+
934
+ // The field's end lane — the result count and `endContent` — sits outside
935
+ // the trigger button: a caller's action button there keeps its own tab stop
936
+ // and taps, and an interactive control must not nest in a component
937
+ // button, so a tap on it must not open the flow.
938
+ const endLaneRef = useRef(null);
939
+ const handleTriggerWrapperClick = useCallback(event => {
940
+ // Tokens are display-only; a tap on them or the empty space around them
941
+ // opens the flow. The trigger button handles its own click, and the end
942
+ // lane handles its own.
943
+ if (event.target instanceof Node && (triggerRef.current?.contains(event.target) || endLaneRef.current?.contains(event.target))) {
944
+ return;
945
+ }
946
+ openSheet();
947
+ }, [openSheet]);
948
+ const handleTriggerFocusWithin = useCallback(event => {
949
+ // The flow focuses the trigger only after its exit completes; that focus
950
+ // is the signal that the retained sheets can leave. If the resolution
951
+ // moved to the popover meanwhile, the tokenizer input takes over the
952
+ // focus once it mounts (the hand-off above).
953
+ if (!isSheetOpen && isSheetPresented) {
954
+ setIsSheetPresented(false);
955
+ // The dialogs have closed: the page-body channel is exposed again.
956
+ const resultCount = afterCloseResultCountRef.current;
957
+ afterCloseResultCountRef.current = null;
958
+ if (resultCount != null) {
959
+ announce(resultCount);
960
+ }
961
+ }
962
+ if (!(event.relatedTarget instanceof Node) || !event.currentTarget.contains(event.relatedTarget)) {
963
+ handleFieldFocus(event);
964
+ }
965
+ }, [announce, handleFieldFocus, isSheetOpen, isSheetPresented]);
966
+ const handleTriggerBlurWithin = useCallback(event => {
967
+ if (!(event.relatedTarget instanceof Node) || !event.currentTarget.contains(event.relatedTarget)) {
968
+ handleFieldBlur(event);
969
+ }
970
+ }, [handleFieldBlur]);
971
+ if (isSheetPresentation) {
972
+ const triggerDescribedBy = [status?.message ? statusMessageId : null, showsDisabledMessage ? disabledMessageTooltip.describedBy : null].filter(Boolean).join(' ') || undefined;
973
+ return /*#__PURE__*/_jsxs("div", {
974
+ ref: rootRef,
975
+ ...themeProps('power-search'),
976
+ children: [/*#__PURE__*/_jsxs(Field, {
977
+ label: label,
978
+ isLabelHidden: isLabelHidden,
979
+ inputID: triggerId,
980
+ labelID: triggerLabelId,
981
+ isDisabled: isDisabled,
982
+ status: status ? {
983
+ type: status.type,
984
+ message: status.message,
985
+ messageID: status.message ? statusMessageId : undefined
986
+ } : undefined,
987
+ statusVariant: statusVariant,
988
+ xstyle: xstyle,
989
+ className: className,
990
+ style: style,
991
+ children: [/*#__PURE__*/_jsxs("div", {
992
+ ref: disabledMessageTooltip.ref,
993
+ onClick: handleTriggerWrapperClick,
994
+ onFocus: handleTriggerFocusWithin,
995
+ onBlur: handleTriggerBlurWithin,
996
+ "aria-disabled": isDisabled ? true : undefined,
997
+ ...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]),
998
+ children: [/*#__PURE__*/_jsxs("div", {
999
+ id: triggerContentId,
1000
+ ...{
1001
+ className: "x1n2onr6 xeuugli x1iyjqo2 x78zum5 x6s0dn4 x1a02dak x1lfs0n9 xajebq8"
1002
+ },
1003
+ children: [isRenderable(startIcon) && /*#__PURE__*/_jsx("span", {
1004
+ ...{
1005
+ 0: {},
1006
+ 1: {
1007
+ className: "x1xrm450"
1008
+ }
1009
+ }[!!(filters.length > 0) << 0],
1010
+ children: renderIconSlot(startIcon, {
1011
+ size: 'sm',
1012
+ color: 'secondary'
1013
+ })
1014
+ }), tokenizerValue.map(item => /*#__PURE__*/_jsx(React.Fragment, {
1015
+ children: renderFilterToken(item, undefined)
1016
+ }, item.id)), /*#__PURE__*/_jsx("button", {
1017
+ type: "button",
1018
+ id: triggerId,
1019
+ ref: triggerRef
1020
+ // The field's primary control: `data-testid` lands here, as it
1021
+ // lands on the combobox input in the popover presentation.
1022
+ ,
1023
+ "data-testid": testId,
1024
+ autoFocus: autoFocusOnMount,
1025
+ onClick: openSheet,
1026
+ "aria-disabled": isDisabled ? true : undefined,
1027
+ "aria-haspopup": "dialog",
1028
+ "aria-expanded": isSheetOpen,
1029
+ "aria-labelledby": `${triggerLabelId} ${triggerContentId}`,
1030
+ "aria-describedby": triggerDescribedBy,
1031
+ ...{
1032
+ 0: {
1033
+ className: "xjyslct xfoc8du x1fns5xo xkh2ocl x78zum5 x6s0dn4 xt970qd x7a5moj x1ghz6dp xc342km xng3xce xjbqb8w xv1l7n4 x9ynric xjm74w1 xw6l6zx x1yc453h xuxw1ft x1ypdohk xvivl9a x1a2a7pz"
1034
+ },
1035
+ 1: {
1036
+ 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"
1037
+ }
1038
+ }[!!(filters.length > 0) << 0],
1039
+ children: filters.length === 0 ? placeholder : null
1040
+ })]
1041
+ }), (endContent || isRenderable(resultCountText)) && /*#__PURE__*/_jsxs("div", {
1042
+ ref: endLaneRef,
1043
+ ...{
1044
+ className: "x78zum5 x6s0dn4 x1txdalj x2lah0s x1nryj5t"
1045
+ },
1046
+ children: [isRenderable(resultCountText) && /*#__PURE__*/_jsx("span", {
1047
+ ...{
1048
+ className: "x141an7d x1ltkj2j xv1l7n4 xuxw1ft"
1049
+ },
1050
+ children: resultCountText
1051
+ }), endContent]
1052
+ })]
1053
+ }), showsDisabledMessage && disabledMessageTooltip.renderTooltip(disabledMessage)]
1054
+ }), (isSheetOpen || isSheetPresented) && /*#__PURE__*/_jsx(PowerSearchSheetHost, {
1055
+ isOpen: isSheetOpen,
1056
+ onOpenChange: setIsSheetOpen,
1057
+ finalFocusRef: triggerRef,
1058
+ resultCountText: resultCountText,
1059
+ config: config,
1060
+ configProp: configProp,
1061
+ filters: filters,
1062
+ onChange: onChange,
1063
+ searchSource: searchSource,
1064
+ placeholder: placeholder,
1065
+ isReadOnly: isReadOnly,
1066
+ isDisabled: isDisabled,
1067
+ hasClear: hasClear,
1068
+ maxOperatorMenuItems: maxOperatorMenuItems,
1069
+ timezoneID: timezoneID,
1070
+ maxSearchResults: maxSearchResults,
1071
+ saveButtonLabel: popoverSaveButtonLabelFromProps,
1072
+ components: componentOverrides
1073
+ })]
1074
+ }, "sheet");
1075
+ }
766
1076
  return /*#__PURE__*/_jsxs(_Fragment, {
767
1077
  children: [/*#__PURE__*/_jsx("div", {
768
- ref: useMergedRefs(ref, popover.triggerRef),
1078
+ ref: rootRef,
769
1079
  ...themeProps('power-search'),
770
1080
  children: /*#__PURE__*/_jsx(TokenizerClearAllMessageContext, {
771
1081
  value: clearAllMessage,
@@ -783,7 +1093,7 @@ export function PowerSearch({
783
1093
  maxMenuItems: MAX_BROWSE_MENU_ITEMS,
784
1094
  menuWidth: menuWidth,
785
1095
  placeholder: filters.length === 0 ? placeholder : '',
786
- hasAutoFocus: hasAutoFocus,
1096
+ hasAutoFocus: autoFocusOnMount,
787
1097
  hasClear: hasClear && !isReadOnly,
788
1098
  startIcon: startIcon,
789
1099
  endContent: combinedEndContent,
@@ -795,16 +1105,17 @@ export function PowerSearch({
795
1105
  debounceMs: 0,
796
1106
  status: status,
797
1107
  statusVariant: statusVariant,
798
- onFocus: onFocus,
799
- onBlur: onBlur,
1108
+ onFocus: handleFieldFocus,
1109
+ onBlur: handleFieldBlur,
800
1110
  containerXstyle: xstyle,
801
1111
  containerClassName: className,
802
1112
  containerStyle: style,
803
- "data-testid": testId
1113
+ "data-testid": testId,
1114
+ presentation: "popover"
804
1115
  })
805
1116
  })
806
1117
  })
807
- }), popover.render(popoverContent, {
1118
+ }, "popover"), popover.render(popoverContent, {
808
1119
  placement: 'below',
809
1120
  alignment: 'start',
810
1121
  offset: spacingVars['--spacing-1'],