@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
@@ -1 +1 @@
1
- {"version":3,"file":"formatFilterValue.d.ts","sourceRoot":"","sources":["../../src/PowerSearch/formatFilterValue.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAE,WAAW,EAAW,MAAM,SAAS,CAAC;AAClE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAC,MAAM,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AAwBlD,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAWR;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,MAAM,CAOR;AAcD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EACvB,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,CAAC,EAAE,YAAY,EACf,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAwHR"}
1
+ {"version":3,"file":"formatFilterValue.d.ts","sourceRoot":"","sources":["../../src/PowerSearch/formatFilterValue.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAE,WAAW,EAAW,MAAM,SAAS,CAAC;AAClE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAC,MAAM,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AAyBlD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,IAAI,CACZ,IAAI,CAAC,mBAAmB,EACxB,aAAa,GAAG,uBAAuB,CACxC,GACA,MAAM,CAER;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,UAAU,UAAO,GAChB,MAAM,CAmBR;AAcD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EACvB,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,CAAC,EAAE,YAAY,EACf,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CA8HR"}
@@ -13,6 +13,7 @@
13
13
  import { truncateCharacters } from "../utils/characters.js";
14
14
  import { registerEnglishFallback } from "../i18n/englishFallback.js";
15
15
  import english from "../i18n/generated-english/PowerSearch/formatFilterValue.generated.js";
16
+ import { resolveDateZone } from "./powerSearchDateZone.js";
16
17
  registerEnglishFallback(english);
17
18
  function truncate(str, maxLength) {
18
19
  return truncateCharacters(str, maxLength);
@@ -22,38 +23,45 @@ function formatEnumLabel(value, enumValues) {
22
23
  return item?.label ?? value;
23
24
  }
24
25
  function formatNumber(value, locale, units) {
25
- const formatted = new Intl.NumberFormat(locale).format(value);
26
+ const formatted = formatSharedNumber(value, locale);
26
27
  return units ? `${formatted} ${units}` : formatted;
27
28
  }
28
- export function formatDateAbsolute(unixSeconds, locale, timezoneID) {
29
- const options = {
30
- year: 'numeric',
31
- month: 'short',
32
- day: 'numeric',
33
- hour: 'numeric',
34
- minute: '2-digit',
35
- ...(timezoneID ? {
36
- timeZone: timezoneID
37
- } : {}),
38
- calendar: 'gregory'
39
- };
40
- return new Intl.DateTimeFormat(locale, options).format(unixSeconds * 1000);
29
+
30
+ /**
31
+ * A number in the provider locale's digits, decimal mark, and — unless the
32
+ * options say otherwise — grouping. The shared number helper for
33
+ * PowerSearch's own readings of a value — this module owns the raw `Intl`
34
+ * access.
35
+ */
36
+ export function formatSharedNumber(value, locale, options) {
37
+ return new Intl.NumberFormat(locale, options).format(value);
41
38
  }
42
39
 
43
40
  /**
44
- * Compact date-only rendering (no time-of-day) for the token pill's inline
45
- * value display, which has less room than the editor's full summary. Kept
46
- * separate from {@link formatDateAbsolute} rather than reusing it with
47
- * different options threaded through a param, since the two callers want
48
- * genuinely different shapes, not a parameterization of the same one.
41
+ * The one reading of a calendar-day `date_absolute` value: its day in the
42
+ * zone `resolveDateZone` names. The token text and the accessible label share
43
+ * it; the editors read the same zone through `resolveDateZone`, so a value
44
+ * never reads as two days in one field. A value whose operator sets
45
+ * `isDateOnly: false` is an instant: its date and time in `timezoneID`,
46
+ * else the viewer's zone, the time its editor reads and writes.
49
47
  */
50
- export function formatDateAbsoluteCompact(unixSeconds, locale) {
51
- return new Intl.DateTimeFormat(locale, {
48
+ export function formatDateAbsolute(unixSeconds, locale, timezoneID, isDateOnly = true) {
49
+ const options = isDateOnly ? {
52
50
  year: 'numeric',
53
51
  month: 'short',
54
52
  day: 'numeric',
53
+ timeZone: resolveDateZone(timezoneID, true),
55
54
  calendar: 'gregory'
56
- }).format(unixSeconds * 1000);
55
+ } : {
56
+ year: 'numeric',
57
+ month: 'short',
58
+ day: 'numeric',
59
+ hour: 'numeric',
60
+ minute: '2-digit',
61
+ timeZone: resolveDateZone(timezoneID, false),
62
+ calendar: 'gregory'
63
+ };
64
+ return new Intl.DateTimeFormat(locale, options).format(unixSeconds * 1000);
57
65
  }
58
66
  function formatRelativeDate(value) {
59
67
  // value is stored as a descriptive string like "7d" or "1w"
@@ -140,7 +148,7 @@ export function formatFilterValue(_config, operatorValue, filterValue, maxLength
140
148
  case 'time':
141
149
  return filterValue.value;
142
150
  case 'date_absolute':
143
- return truncate(formatDateAbsolute(filterValue.unixSeconds, locale, timezoneID), maxLength);
151
+ return truncate(formatDateAbsolute(filterValue.unixSeconds, locale, timezoneID, operatorValue.type !== 'date_absolute' || operatorValue.isDateOnly !== false), maxLength);
144
152
  case 'date_relative':
145
153
  return formatRelativeDate(filterValue.value);
146
154
  case 'date_range':
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @fileoverview The text a PowerSearch filter token shows for a value.
3
+ *
4
+ * @input `OperatorValue`, `FilterValue`, a width budget, and the locale.
5
+ * @output `formatTokenValueText` — one string, or null for an empty value.
6
+ * @position Shared by the token itself (`PowerSearch.tsx`) and the sheet
7
+ * presentation's Filters rows and removal announcement
8
+ * (`PowerSearchBottomSheet.tsx`), so every reading of a value on the field
9
+ * uses the same words and the same zone handling.
10
+ */
11
+ import type { OperatorValue, FilterValue } from './types.js';
12
+ import type { Locale, TranslatorFn } from '../i18n/index.js';
13
+ type ListFormatFn = (items: ReadonlyArray<string>) => string;
14
+ /**
15
+ * The text a filter token shows for a value: the one place that decides how
16
+ * a value reads on the field, so every other reading of the same value —
17
+ * the sheet presentation's Filters rows and its removal announcement — can
18
+ * use the same words and the same zone handling. `maxLength` is the token's
19
+ * width budget; pass `Number.MAX_SAFE_INTEGER` for the untruncated text.
20
+ * With `t`, the list, date-range and nested summaries resolve through the
21
+ * catalog (`@astryx.powersearch.valueEditor.*`); without it they are the
22
+ * token's own literals. With `formatList` (the provider's list formatter),
23
+ * several labels join as a list in the locale; without it they join with
24
+ * the token's literal ", ".
25
+ */
26
+ export declare function formatTokenValueText(operatorValue: OperatorValue, filterValue: FilterValue, maxLength: number, locale: Locale, t?: TranslatorFn, formatList?: ListFormatFn, timezoneID?: string): string | null;
27
+ export {};
28
+ //# sourceMappingURL=formatTokenValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatTokenValue.d.ts","sourceRoot":"","sources":["../../src/PowerSearch/formatTokenValue.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAE,WAAW,EAAW,MAAM,SAAS,CAAC;AAClE,OAAO,KAAK,EAAC,MAAM,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AAQlD,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;AA6E7D;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,CAAC,CAAC,EAAE,YAAY,EAChB,UAAU,CAAC,EAAE,YAAY,EACzB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAoGf"}
@@ -0,0 +1,161 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @fileoverview The text a PowerSearch filter token shows for a value.
5
+ *
6
+ * @input `OperatorValue`, `FilterValue`, a width budget, and the locale.
7
+ * @output `formatTokenValueText` — one string, or null for an empty value.
8
+ * @position Shared by the token itself (`PowerSearch.tsx`) and the sheet
9
+ * presentation's Filters rows and removal announcement
10
+ * (`PowerSearchBottomSheet.tsx`), so every reading of a value on the field
11
+ * uses the same words and the same zone handling.
12
+ */
13
+
14
+ import { truncateCharacters } from "../utils/characters.js";
15
+ import { formatDateAbsolute, formatSharedNumber } from "./formatFilterValue.js";
16
+ import { registerEnglishFallback } from "../i18n/englishFallback.js";
17
+ import english from "../i18n/generated-english/PowerSearch/formatTokenValue.generated.js";
18
+ registerEnglishFallback(english);
19
+ function truncateString(value, limit) {
20
+ // Same semantics as before — strings within limit + 3 pass through, longer
21
+ // ones cut to limit + '...' — but counted in characters, not code units.
22
+ return truncateCharacters(value, limit + 3, '...');
23
+ }
24
+ function getEnumLabel(values, value) {
25
+ return values.find(v => v.value === value)?.label ?? value;
26
+ }
27
+
28
+ // Intl's maximum fraction cap: no number the row formats is rounded.
29
+ const MAX_FRACTION_DIGITS = 100;
30
+
31
+ // Whether a locale writes a number with the token's own numerals: Latin
32
+ // digits and a `.` decimal mark, so `String(value)` is already the locale's
33
+ // reading. Probed once per locale through the shared number helper.
34
+ const tokenNumeralLocales = new Map();
35
+ function usesTokenNumerals(locale) {
36
+ let uses = tokenNumeralLocales.get(locale);
37
+ if (uses == null) {
38
+ uses = formatSharedNumber(1234567.5, locale, {
39
+ useGrouping: false,
40
+ maximumFractionDigits: MAX_FRACTION_DIGITS
41
+ }) === '1234567.5';
42
+ tokenNumeralLocales.set(locale, uses);
43
+ }
44
+ return uses;
45
+ }
46
+
47
+ // A number as the token reads it. Where the locale writes Latin digits and a
48
+ // `.` decimal mark, use the token's own text, `String(value)`. Elsewhere, use
49
+ // the locale's digits and decimal mark, with no grouping and no rounding: the
50
+ // fraction cap is Intl's maximum, so `1e-21` keeps its digits.
51
+ function formatNumberAsToken(value, locale) {
52
+ return usesTokenNumerals(locale) ? String(value) : formatSharedNumber(value, locale, {
53
+ useGrouping: false,
54
+ maximumFractionDigits: MAX_FRACTION_DIGITS
55
+ });
56
+ }
57
+
58
+ // The summaries, lists, and numbers the token writes as English literals, and
59
+ // the locale-aware readings of the same: with a translator (the sheet
60
+ // presentation's rows and announcements) the summaries resolve through the
61
+ // catalog, lists through the provider locale's list format, and numbers
62
+ // through its number format; without one they stay the token's own literals,
63
+ // the released popover token's text. In English the two read identically.
64
+ function itemsSummary(count, t) {
65
+ return t ? t('@astryx.powersearch.valueEditor.itemsCount', {
66
+ count
67
+ }) :
68
+ // eslint-disable-next-line @astryx/no-hardcoded-i18n-string -- the popover token's released English text; translating it is a separate stable change
69
+ `${count} items`;
70
+ }
71
+ function formatListText(labels, maxLength, t, formatList) {
72
+ if (labels.length === 0) {
73
+ return null;
74
+ }
75
+ if (labels.length === 1) {
76
+ return truncateString(labels[0], maxLength);
77
+ }
78
+ const totalLength = labels.reduce((sum, s) => sum + s.length, 0);
79
+ if (totalLength > maxLength) {
80
+ return itemsSummary(labels.length, t);
81
+ }
82
+ return formatList ? formatList(labels) : labels.join(', ');
83
+ }
84
+
85
+ /**
86
+ * The text a filter token shows for a value: the one place that decides how
87
+ * a value reads on the field, so every other reading of the same value —
88
+ * the sheet presentation's Filters rows and its removal announcement — can
89
+ * use the same words and the same zone handling. `maxLength` is the token's
90
+ * width budget; pass `Number.MAX_SAFE_INTEGER` for the untruncated text.
91
+ * With `t`, the list, date-range and nested summaries resolve through the
92
+ * catalog (`@astryx.powersearch.valueEditor.*`); without it they are the
93
+ * token's own literals. With `formatList` (the provider's list formatter),
94
+ * several labels join as a list in the locale; without it they join with
95
+ * the token's literal ", ".
96
+ */
97
+ export function formatTokenValueText(operatorValue, filterValue, maxLength, locale, t, formatList, timezoneID) {
98
+ switch (filterValue.type) {
99
+ case 'empty':
100
+ return null;
101
+ case 'string':
102
+ return truncateString(filterValue.value, maxLength);
103
+ case 'integer':
104
+ case 'float':
105
+ return t ? formatNumberAsToken(filterValue.value, locale) : String(filterValue.value);
106
+ case 'enum':
107
+ if (operatorValue.type === 'enum') {
108
+ return truncateString(getEnumLabel(operatorValue.values, filterValue.value), maxLength);
109
+ }
110
+ return truncateString(filterValue.value, maxLength);
111
+ case 'string_list':
112
+ return formatListText(filterValue.value, maxLength, t, formatList);
113
+ case 'enum_list':
114
+ {
115
+ const items = filterValue.value;
116
+ if (items.length === 0) {
117
+ return null;
118
+ }
119
+ if (operatorValue.type === 'enum_list') {
120
+ return formatListText(items.map(v => getEnumLabel(operatorValue.values, v)), maxLength, t, formatList);
121
+ }
122
+ if (items.length === 1) {
123
+ return truncateString(items[0], maxLength);
124
+ }
125
+ return itemsSummary(items.length, t);
126
+ }
127
+ case 'entity_list':
128
+ return formatListText(filterValue.value.map(e => e.label), maxLength, t, formatList);
129
+ case 'time':
130
+ return filterValue.value;
131
+ case 'date_absolute':
132
+ // The token reads a value in the zone its editor uses.
133
+ return truncateString(formatDateAbsolute(filterValue.unixSeconds, locale, timezoneID, operatorValue.type !== 'date_absolute' || operatorValue.isDateOnly !== false), maxLength);
134
+ case 'date_relative':
135
+ return truncateString(filterValue.value, maxLength);
136
+ case 'date_range':
137
+ if (t) {
138
+ return t('@astryx.powersearch.valueEditor.dateRange');
139
+ }
140
+ // eslint-disable-next-line @astryx/no-hardcoded-i18n-string -- the popover token's released English text; translating it is a separate stable change
141
+ return 'date range';
142
+ case 'custom':
143
+ if (operatorValue.type === 'custom') {
144
+ return truncateString(operatorValue.getString(filterValue.value), maxLength);
145
+ }
146
+ return filterValue.value;
147
+ case 'nested':
148
+ {
149
+ const count = filterValue.value.length;
150
+ if (t) {
151
+ return t('@astryx.powersearch.valueEditor.filtersCount', {
152
+ count
153
+ });
154
+ }
155
+ // eslint-disable-next-line @astryx/no-hardcoded-i18n-string -- the popover token's released English text; translating it is a separate stable change
156
+ return count === 1 ? '1 filter' : `${count} filters`;
157
+ }
158
+ default:
159
+ return null;
160
+ }
161
+ }
@@ -7,7 +7,7 @@
7
7
  * SYNC: When adding new PowerSearch files, update exports here
8
8
  */
9
9
  export { PowerSearch } from './PowerSearch.js';
10
- export type { PowerSearchProps, PowerSearchSize } from './PowerSearch.js';
10
+ export type { PowerSearchPresentation, PowerSearchProps, PowerSearchSize, } from './PowerSearch.js';
11
11
  export { PowerSearchToken } from './PowerSearchToken.js';
12
12
  export { PowerSearchFilterEditor } from './PowerSearchFilterEditor.js';
13
13
  export { resolveOperatorLabel } from './resolveOperatorLabel.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/PowerSearch/index.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAC,gBAAgB,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAErE,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EACL,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAC,eAAe,EAAE,SAAS,EAAC,MAAM,wBAAwB,CAAC;AAEvE,YAAY,EAEV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,4BAA4B,EAC5B,8BAA8B,EAG9B,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EAGnB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAGjB,iBAAiB,EACjB,aAAa,EAGb,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EAGjB,qBAAqB,EACrB,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/PowerSearch/index.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,YAAY,EACV,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EACL,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAC,eAAe,EAAE,SAAS,EAAC,MAAM,wBAAwB,CAAC;AAEvE,YAAY,EAEV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,4BAA4B,EAC5B,8BAA8B,EAG9B,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EAGnB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAGjB,iBAAiB,EACjB,aAAa,EAGb,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EAGjB,qBAAqB,EACrB,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @file powerSearchDateZone.ts
3
+ * @input A `date_absolute` or range part's `unixSeconds`, the operator's
4
+ * `isDateOnly`, and the PowerSearch `timezoneID`
5
+ * @output The one zone every reading of such a value uses, and the
6
+ * conversions between an instant and the calendar day or wall-clock time
7
+ * shown in that zone
8
+ * @position Shared by the token text, the accessible label, and the value
9
+ * editors, so a value reads as the same day everywhere in one field
10
+ */
11
+ import type { ISODateString } from '../utils/dateTypes.js';
12
+ import type { ISODateTimeString } from '../DateTimeInput/DateTimeInput.js';
13
+ /**
14
+ * The zone a date value is read and written in. A calendar day is stored as
15
+ * midnight in `timezoneID`. With no `timezoneID` the day is the UTC day, so
16
+ * a value written before a zone was given keeps its day. A value with a time
17
+ * of day shows in `timezoneID`, else in the viewer's zone. `undefined` names
18
+ * the viewer's zone, because `Intl` and `Date` default to it.
19
+ */
20
+ export declare function resolveDateZone(timezoneID: string | undefined, isDateOnly: boolean): string | undefined;
21
+ export declare function unixSecondsToISODate(unixSeconds: number, zone: string | undefined): ISODateString;
22
+ export declare function isoDateToUnixSeconds(date: ISODateString, zone: string | undefined): number;
23
+ export declare function unixSecondsToISODateTime(unixSeconds: number, zone: string | undefined): ISODateTimeString;
24
+ export declare function isoDateTimeToUnixSeconds(value: ISODateTimeString, zone: string | undefined): number;
25
+ //# sourceMappingURL=powerSearchDateZone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"powerSearchDateZone.d.ts","sourceRoot":"","sources":["../../src/PowerSearch/powerSearchDateZone.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,gCAAgC,CAAC;AAWtE;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,UAAU,EAAE,OAAO,GAClB,MAAM,GAAG,SAAS,CAMpB;AAID,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,aAAa,CAQf;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,MAAM,CAOR;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,iBAAiB,CAGnB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,MAAM,CAaR"}
@@ -0,0 +1,57 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file powerSearchDateZone.ts
5
+ * @input A `date_absolute` or range part's `unixSeconds`, the operator's
6
+ * `isDateOnly`, and the PowerSearch `timezoneID`
7
+ * @output The one zone every reading of such a value uses, and the
8
+ * conversions between an instant and the calendar day or wall-clock time
9
+ * shown in that zone
10
+ * @position Shared by the token text, the accessible label, and the value
11
+ * editors, so a value reads as the same day everywhere in one field
12
+ */
13
+
14
+ import { getWallClock, plainDateFromDate, plainDateFromInstant, plainDateFromISO, plainDateToDate, plainDateToInstant, plainDateToISO } from "../utils/plainDate.js";
15
+
16
+ /**
17
+ * The zone a date value is read and written in. A calendar day is stored as
18
+ * midnight in `timezoneID`. With no `timezoneID` the day is the UTC day, so
19
+ * a value written before a zone was given keeps its day. A value with a time
20
+ * of day shows in `timezoneID`, else in the viewer's zone. `undefined` names
21
+ * the viewer's zone, because `Intl` and `Date` default to it.
22
+ */
23
+ export function resolveDateZone(timezoneID, isDateOnly) {
24
+ // An empty string is no zone, as the formatter always read it.
25
+ if (timezoneID) {
26
+ return timezoneID;
27
+ }
28
+ return isDateOnly ? 'UTC' : undefined;
29
+ }
30
+ const pad = (n, width = 2) => String(n).padStart(width, '0');
31
+ export function unixSecondsToISODate(unixSeconds, zone) {
32
+ const instant = unixSeconds * 1000;
33
+ return plainDateToISO(zone == null ? plainDateFromDate(new Date(instant)) : plainDateFromInstant(instant, zone));
34
+ }
35
+ export function isoDateToUnixSeconds(date, zone) {
36
+ const plain = plainDateFromISO(date);
37
+ const instant = zone == null ? plainDateToDate(plain).getTime() : plainDateToInstant(plain, zone);
38
+ return Math.floor(instant / 1000);
39
+ }
40
+ export function unixSecondsToISODateTime(unixSeconds, zone) {
41
+ const w = getWallClock(new Date(unixSeconds * 1000), zone);
42
+ return `${pad(w.year, 4)}-${pad(w.month)}-${pad(w.day)}T${pad(w.hour)}:${pad(w.minute)}`;
43
+ }
44
+ export function isoDateTimeToUnixSeconds(value, zone) {
45
+ const [datePart, timePart = '00:00'] = value.split('T');
46
+ const [hour = 0, minute = 0] = timePart.split(':').map(Number);
47
+ const plain = plainDateFromISO(datePart);
48
+ let instant;
49
+ if (zone == null) {
50
+ const d = plainDateToDate(plain);
51
+ d.setHours(hour, minute, 0, 0);
52
+ instant = d.getTime();
53
+ } else {
54
+ instant = plainDateToInstant(plain, zone, hour, minute);
55
+ }
56
+ return Math.floor(instant / 1000);
57
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @file powerSearchSheetUtils.ts
3
+ * @input PowerSearch config/filter types and the field typeahead source
4
+ * @output Pure helpers for the sheet presentation: which operators the
5
+ * sheet's own controls edit, field matching, filter identity tracking
6
+ * across controlled re-renders, the focus target after a removal, and the
7
+ * content search's suggestion source over the field typeahead
8
+ * @position Helper module; consumed by PowerSearchBottomSheet.tsx and its
9
+ * tests
10
+ */
11
+ import type { SearchSource } from '../Typeahead/types.js';
12
+ import type { InternalConfig } from './useInternalConfig.js';
13
+ import type { PowerSearchField, PowerSearchFilter, PowerSearchItem, PowerSearchOperator } from './types.js';
14
+ /**
15
+ * Whether the value step edits an operator's value with a sheet-native
16
+ * control (choice rows, or the popover's editor in its sheet presentation).
17
+ * A `nested` value is the exception: it is edited by the popover's built-in
18
+ * NestedEditor, rendered in the step's body,
19
+ * so every operator opens an editable step and no field is left out.
20
+ */
21
+ export declare function isSupportedOperator(operator: PowerSearchOperator): boolean;
22
+ export declare function fieldMatchesQuery(field: PowerSearchField, normalizedQuery: string): boolean;
23
+ /** Synchronous suggestion source; the sheet renders results inline. */
24
+ export interface SheetSuggestionSource {
25
+ search(query: string): PowerSearchItem[];
26
+ bootstrap(): PowerSearchItem[];
27
+ }
28
+ /**
29
+ * The field typeahead source as the content search's rows: the popover
30
+ * presentation's own suggestions, minus any whose field the config no longer
31
+ * knows. That source resolves synchronously from the config; a promise (none
32
+ * today) yields no rows rather than a stale list.
33
+ */
34
+ export declare function createSheetSuggestionSource(config: InternalConfig, source: SearchSource<PowerSearchItem>): SheetSuggestionSource;
35
+ /**
36
+ * Stable identities for the Filters rows across controlled updates, so a row
37
+ * keeps its element — and its focus — when the parent reorders the filters or
38
+ * removes one above it. A filter object seen before keeps its
39
+ * id; a new object takes the id of a filter from the previous update with the
40
+ * same signature that no present object claims (a parent that clones its
41
+ * values on every change); anything else mints a new id. Two equal filters
42
+ * are told apart by order. Call `next` once per render with the current list.
43
+ */
44
+ export declare function createFilterIdentities(): {
45
+ next: (filters: ReadonlyArray<PowerSearchFilter>) => number[];
46
+ };
47
+ /** Structural snapshot of a filter, for parents that clone their values. */
48
+ export declare function filterSignature(filter: PowerSearchFilter): string;
49
+ /**
50
+ * Finds the filter a step was opened on after the controlled parent may have
51
+ * reordered, cloned, or removed it: object identity first, then the original
52
+ * slot when it still holds a structurally equal filter, then a unique
53
+ * structural match anywhere. Returns null when the target is gone or
54
+ * ambiguous, so an edit never lands on a different filter.
55
+ */
56
+ export declare function resolveFilterIdentityIndex(filters: ReadonlyArray<PowerSearchFilter>, sourceFilter: PowerSearchFilter, sourceSignature: string, preferredIndex: number): number | null;
57
+ /**
58
+ * After removing the filter at `removedIndex`, focus should land on the
59
+ * nearest remaining row that is a button, preferring the one after it.
60
+ * `isRowButton` is the Filters sheet's own rule for which rows are buttons:
61
+ * the field interactive and the filter not read-only (a `nested` or stale
62
+ * filter's row is a button too).
63
+ */
64
+ export declare function nearestEditableIndex(nextFilters: ReadonlyArray<PowerSearchFilter>, removedIndex: number, isRowButton?: (filter: PowerSearchFilter) => boolean): number | undefined;
65
+ //# sourceMappingURL=powerSearchSheetUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"powerSearchSheetUtils.d.ts","sourceRoot":"","sources":["../../src/PowerSearch/powerSearchSheetUtils.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAMjB;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAE1E;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,EACvB,eAAe,EAAE,MAAM,GACtB,OAAO,CAYT;AAED,uEAAuE;AACvE,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,EAAE,CAAC;IACzC,SAAS,IAAI,eAAe,EAAE,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,YAAY,CAAC,eAAe,CAAC,GACpC,qBAAqB,CAevB;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,IAAI;IACxC,IAAI,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,KAAK,MAAM,EAAE,CAAC;CAC/D,CAkCA;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAOjE;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACzC,YAAY,EAAE,iBAAiB,EAC/B,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,GACrB,MAAM,GAAG,IAAI,CAef;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,aAAa,CAAC,iBAAiB,CAAC,EAC7C,YAAY,EAAE,MAAM,EACpB,WAAW,GAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OACxB,GACnB,MAAM,GAAG,SAAS,CAsBpB"}
@@ -0,0 +1,168 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file powerSearchSheetUtils.ts
5
+ * @input PowerSearch config/filter types and the field typeahead source
6
+ * @output Pure helpers for the sheet presentation: which operators the
7
+ * sheet's own controls edit, field matching, filter identity tracking
8
+ * across controlled re-renders, the focus target after a removal, and the
9
+ * content search's suggestion source over the field typeahead
10
+ * @position Helper module; consumed by PowerSearchBottomSheet.tsx and its
11
+ * tests
12
+ */
13
+
14
+ // =============================================================================
15
+ // Operators and fields
16
+ // =============================================================================
17
+
18
+ /**
19
+ * Whether the value step edits an operator's value with a sheet-native
20
+ * control (choice rows, or the popover's editor in its sheet presentation).
21
+ * A `nested` value is the exception: it is edited by the popover's built-in
22
+ * NestedEditor, rendered in the step's body,
23
+ * so every operator opens an editable step and no field is left out.
24
+ */
25
+ export function isSupportedOperator(operator) {
26
+ return operator.value.type !== 'nested';
27
+ }
28
+ export function fieldMatchesQuery(field, normalizedQuery) {
29
+ if (normalizedQuery === '') {
30
+ return true;
31
+ }
32
+ if (field.label.toLowerCase().includes(normalizedQuery)) {
33
+ return true;
34
+ }
35
+ return field.typeaheadAliases?.some(alias => alias.toLowerCase().includes(normalizedQuery)) ?? false;
36
+ }
37
+
38
+ /** Synchronous suggestion source; the sheet renders results inline. */
39
+
40
+ /**
41
+ * The field typeahead source as the content search's rows: the popover
42
+ * presentation's own suggestions, minus any whose field the config no longer
43
+ * knows. That source resolves synchronously from the config; a promise (none
44
+ * today) yields no rows rather than a stale list.
45
+ */
46
+ export function createSheetSuggestionSource(config, source) {
47
+ // Every suggestion whose field the config knows is offered: the value step
48
+ // edits every operator, `nested` included.
49
+ const isEditable = item => {
50
+ const aux = item.auxiliaryData;
51
+ return aux != null && config.getField(aux.fieldKey) != null;
52
+ };
53
+ const settle = results => Array.isArray(results) ? results.filter(isEditable) : [];
54
+ return {
55
+ search: query => settle(source.search(query)),
56
+ bootstrap: () => settle(source.bootstrap())
57
+ };
58
+ }
59
+
60
+ // =============================================================================
61
+ // Filter identity across controlled updates
62
+ // =============================================================================
63
+
64
+ function stableSerialize(value) {
65
+ if (Array.isArray(value)) {
66
+ return `[${value.map(stableSerialize).join(',')}]`;
67
+ }
68
+ if (value != null && typeof value === 'object') {
69
+ return `{${Object.entries(value).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([key, entry]) => `${JSON.stringify(key)}:${stableSerialize(entry)}`).join(',')}}`;
70
+ }
71
+ return JSON.stringify(value) ?? 'undefined';
72
+ }
73
+
74
+ /**
75
+ * Stable identities for the Filters rows across controlled updates, so a row
76
+ * keeps its element — and its focus — when the parent reorders the filters or
77
+ * removes one above it. A filter object seen before keeps its
78
+ * id; a new object takes the id of a filter from the previous update with the
79
+ * same signature that no present object claims (a parent that clones its
80
+ * values on every change); anything else mints a new id. Two equal filters
81
+ * are told apart by order. Call `next` once per render with the current list.
82
+ */
83
+ export function createFilterIdentities() {
84
+ const byObject = new WeakMap();
85
+ let previousBySignature = new Map();
86
+ let nextId = 0;
87
+ return {
88
+ next(filters) {
89
+ const used = new Set();
90
+ const ids = filters.map(filter => {
91
+ const known = byObject.get(filter);
92
+ if (known == null || used.has(known)) {
93
+ return null;
94
+ }
95
+ used.add(known);
96
+ return known;
97
+ });
98
+ const bySignature = new Map();
99
+ filters.forEach((filter, index) => {
100
+ const signature = filterSignature(filter);
101
+ let id = ids[index];
102
+ if (id == null) {
103
+ id = previousBySignature.get(signature)?.find(candidate => !used.has(candidate)) ?? nextId++;
104
+ used.add(id);
105
+ byObject.set(filter, id);
106
+ ids[index] = id;
107
+ }
108
+ bySignature.set(signature, [...(bySignature.get(signature) ?? []), id]);
109
+ });
110
+ previousBySignature = bySignature;
111
+ return ids;
112
+ }
113
+ };
114
+ }
115
+
116
+ /** Structural snapshot of a filter, for parents that clone their values. */
117
+ export function filterSignature(filter) {
118
+ return stableSerialize({
119
+ field: filter.field,
120
+ operator: filter.operator,
121
+ value: filter.value,
122
+ isReadOnly: filter.isReadOnly ?? false
123
+ });
124
+ }
125
+
126
+ /**
127
+ * Finds the filter a step was opened on after the controlled parent may have
128
+ * reordered, cloned, or removed it: object identity first, then the original
129
+ * slot when it still holds a structurally equal filter, then a unique
130
+ * structural match anywhere. Returns null when the target is gone or
131
+ * ambiguous, so an edit never lands on a different filter.
132
+ */
133
+ export function resolveFilterIdentityIndex(filters, sourceFilter, sourceSignature, preferredIndex) {
134
+ const identityIndex = filters.indexOf(sourceFilter);
135
+ if (identityIndex >= 0) {
136
+ return identityIndex;
137
+ }
138
+ if (filters[preferredIndex] != null && filterSignature(filters[preferredIndex]) === sourceSignature) {
139
+ return preferredIndex;
140
+ }
141
+ const matchingIndices = filters.flatMap((filter, index) => filterSignature(filter) === sourceSignature ? [index] : []);
142
+ return matchingIndices.length === 1 ? matchingIndices[0] : null;
143
+ }
144
+
145
+ /**
146
+ * After removing the filter at `removedIndex`, focus should land on the
147
+ * nearest remaining row that is a button, preferring the one after it.
148
+ * `isRowButton` is the Filters sheet's own rule for which rows are buttons:
149
+ * the field interactive and the filter not read-only (a `nested` or stale
150
+ * filter's row is a button too).
151
+ */
152
+ export function nearestEditableIndex(nextFilters, removedIndex, isRowButton = filter => !filter.isReadOnly) {
153
+ const editableIndices = nextFilters.flatMap((candidate, candidateIndex) => isRowButton(candidate) ? [candidateIndex] : []);
154
+ return editableIndices.reduce((nearest, candidate) => {
155
+ if (nearest == null) {
156
+ return candidate;
157
+ }
158
+ const candidateDistance = Math.abs(candidate - removedIndex);
159
+ const nearestDistance = Math.abs(nearest - removedIndex);
160
+ if (candidateDistance < nearestDistance) {
161
+ return candidate;
162
+ }
163
+ if (candidateDistance === nearestDistance && candidate >= removedIndex && nearest < removedIndex) {
164
+ return candidate;
165
+ }
166
+ return nearest;
167
+ }, undefined);
168
+ }
@@ -47,7 +47,12 @@ export interface TimeOperatorValue {
47
47
  }
48
48
  export interface DateAbsoluteOperatorValue {
49
49
  readonly type: 'date_absolute';
50
- /** If true, only show date picker without time. */
50
+ /**
51
+ * True or unset: the value is a calendar day, edited with a date picker.
52
+ * False: the value is an instant with a time of day, edited with a date
53
+ * picker and a time field and shown with its time in `timezoneID`, else
54
+ * the viewer's zone.
55
+ */
51
56
  readonly isDateOnly?: boolean;
52
57
  }
53
58
  export interface DateRelativeOperatorValue {
@@ -294,6 +299,8 @@ export interface PowerSearchTokenProps {
294
299
  readonly onClick?: () => void;
295
300
  readonly onRemove?: () => void;
296
301
  readonly isDisabled?: boolean;
302
+ /** The zone the field reads date values in; see PowerSearch `timezoneID`. */
303
+ readonly timezoneID?: string;
297
304
  }
298
305
  /**
299
306
  * Props for a custom Editor component.