@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
@@ -73,6 +73,8 @@ export function useImageMode(
73
73
  mode: 'dark' | 'light' | null;
74
74
  } | null>(null);
75
75
 
76
+ // Syncs the mode with the image at `src`. It fetches and decodes the image,
77
+ // then samples its pixels.
76
78
  useEffect(() => {
77
79
  if (!src) {
78
80
  return;
@@ -15,9 +15,10 @@
15
15
  import {useCallback, useEffect, useState} from 'react';
16
16
  import type {ReactNode} from 'react';
17
17
  import * as stylex from '@stylexjs/stylex';
18
- import {Icon, type IconName, type IconSize} from '../Icon';
18
+ import {Icon, type IconSize} from '../Icon/Icon';
19
+ import type {IconName} from '../Icon/globalIconRegistry';
19
20
  import type {InputStatus, InputStatusType} from '../Field/types';
20
- import {useTooltip} from '../Tooltip';
21
+ import {useTooltip} from '../Tooltip/useTooltip';
21
22
  import {radiusVars} from '../theme/tokens.stylex';
22
23
  import {themeProps} from '../utils/themeProps';
23
24
  import {focusOutlineStyles} from '../utils/focusOutline.stylex';
@@ -244,7 +244,7 @@ export function useKeyboardHint(
244
244
  [clearDismissTimeout, dismiss, dismissAfterMs, isEnabled, layer],
245
245
  );
246
246
 
247
- // Cleanup on unmount
247
+ // Releases the dismiss timer and the layer anchor on unmount.
248
248
  useEffect(
249
249
  () => () => {
250
250
  clearDismissTimeout();
@@ -59,7 +59,7 @@ export const docs = {
59
59
  ],
60
60
  usage: {
61
61
  description:
62
- 'Detects a single-finger press-and-hold and reports where it happened, so touch users can reach affordances that a pointer gets from right-click. iOS Safari never synthesizes a contextmenu event on long-press, which makes this the only touch route into a cursor-positioned surface such as ContextMenu. The press cancels on movement, lift, multi-touch or unmount.',
62
+ 'Detects a single-finger press-and-hold and reports where it happened, so touch users can reach affordances that a pointer gets from right-click. iOS Safari never synthesizes a contextmenu event on long-press, which makes this the only touch route into a cursor-positioned surface such as ContextMenu. The press cancels on movement, lift, multi-touch or unmount. The hold is timed on the touch events\u2019 own timestamps: when a busy page handles the lift late, a finger held for the full delay still reports its long press, before the lift acts.',
63
63
  bestPractices: [
64
64
  {
65
65
  guidance: true,
@@ -102,7 +102,7 @@ export const docsDense = {
102
102
  },
103
103
  usage: {
104
104
  description:
105
- 'Touch press-and-hold for affordances a pointer reaches by right-click (e.g. ContextMenu). Reports the point so the surface opens under the finger.',
105
+ "Touch press-and-hold for affordances a pointer reaches by right-click (e.g. ContextMenu). Reports the point so the surface opens under the finger. Timed on the touch events' timestamps: a busy page delays the report, never drops it.",
106
106
  bestPractices: [
107
107
  {
108
108
  guidance: true,
@@ -11,6 +11,7 @@
11
11
  * `useMenuPress` for the held-finger menu open
12
12
  *
13
13
  * SYNC: When modified, update the hooks barrel /packages/core/src/hooks/index.ts
14
+ * and the detector it wraps, /packages/core/src/hooks/longPressDetector.ts
14
15
  */
15
16
 
16
17
  // iOS Safari sends no `contextmenu` event on a long press. So a long press is
@@ -18,24 +19,24 @@
18
19
  //
19
20
  // A caller can spread the touch handlers, or call `start`, `moveTo` and
20
21
  // `cancel` from its own pointer events, as `useMenuPress` does. Both ways use
21
- // this hook's hold time, movement tolerance and timer, so a long press means
22
- // the same thing on a context menu and on a menu trigger.
22
+ // the hold time, movement tolerance and timer of createLongPressDetector. So a
23
+ // long press means the same thing on a context menu and on a menu trigger.
23
24
  //
24
25
  // The defaults come from the long-press recognizer. The recognizer measures
25
26
  // its tolerance as a distance, as UIKit does. This hook measures it on each
26
27
  // axis. The context menu's own movement allowance is a guess and is not
27
28
  // measured yet (AST-094).
29
+ //
30
+ // The hold is a deadline on the touch events' own clock (longPressDetector.ts).
28
31
 
29
- import {useCallback, useEffect, useRef} from 'react';
32
+ import {useCallback, useEffect, useState} from 'react';
30
33
  import {
31
- LONG_PRESS_ALLOWABLE_MOVEMENT_PX,
32
- LONG_PRESS_DURATION_MS,
33
- } from '../motion/uikit/longPress';
34
+ createLongPressDetector,
35
+ type LongPressTolerance,
36
+ } from './longPressDetector';
37
+ import {useIsomorphicLayoutEffect} from './useIsomorphicLayoutEffect';
34
38
 
35
- // The long-press numbers have one source, shared with the gesture
36
- // recognizers (motion/uikit/longPress.ts).
37
- const DEFAULT_DELAY_MS = LONG_PRESS_DURATION_MS;
38
- const DEFAULT_MOVE_CANCEL_PX = LONG_PRESS_ALLOWABLE_MOVEMENT_PX;
39
+ export type {LongPressTolerance};
39
40
 
40
41
  export interface UseLongPressOptions {
41
42
  /** Fired with the touch start point once the press is held for `delayMs`. */
@@ -48,19 +49,15 @@ export interface UseLongPressOptions {
48
49
  moveCancelPx?: number;
49
50
  }
50
51
 
51
- /**
52
- * @internal A press's own movement tolerance, for a core caller that decides
53
- * it as the press starts (useMenuPress's trigger). Not in the hooks entry.
54
- */
55
- export interface LongPressTolerance {
56
- moveCancelPx?: number;
57
- }
58
-
59
52
  export interface UseLongPressHandlers {
60
53
  onTouchStart: (e: React.TouchEvent) => void;
61
54
  onTouchMove: (e: React.TouchEvent) => void;
62
- onTouchEnd: () => void;
63
- onTouchCancel: () => void;
55
+ /**
56
+ * The lift. Pass the event, so a press it is stamped past (its timer held
57
+ * back by a busy page) still reports first. Spreading the handlers does.
58
+ */
59
+ onTouchEnd: (e?: React.TouchEvent) => void;
60
+ onTouchCancel: (e?: React.TouchEvent) => void;
64
61
  /**
65
62
  * Begin detection at a point, for a caller driving this from its own
66
63
  * pointer events rather than the touch handlers above.
@@ -109,109 +106,22 @@ export function useLongPress(
109
106
  export function useLongPressDetector(
110
107
  options: UseLongPressOptions,
111
108
  ): LongPressDetectorHandlers {
112
- const {
113
- onLongPress,
114
- disabled = false,
115
- delayMs = DEFAULT_DELAY_MS,
116
- moveCancelPx = DEFAULT_MOVE_CANCEL_PX,
117
- } = options;
118
-
119
- const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
120
- const startRef = useRef<{x: number; y: number} | null>(null);
121
- // The press in progress's tolerance, when its caller chose one at start.
122
- const pressToleranceRef = useRef<LongPressTolerance | null>(null);
123
- // Keep the latest callback without re-creating handlers on every render.
124
- const onLongPressRef = useRef(onLongPress);
125
- onLongPressRef.current = onLongPress;
126
-
127
- const clear = useCallback(() => {
128
- if (timerRef.current != null) {
129
- clearTimeout(timerRef.current);
130
- timerRef.current = null;
131
- }
132
- startRef.current = null;
133
- }, []);
134
-
135
- const start = useCallback(
136
- (point: {x: number; y: number}, tolerance?: LongPressTolerance) => {
137
- if (disabled) {
138
- return;
139
- }
140
- // Clear a stale timer first, then record the start point. The clear
141
- // also sets startRef to null.
142
- clear();
143
- startRef.current = {x: point.x, y: point.y};
144
- pressToleranceRef.current = tolerance ?? null;
145
- timerRef.current = setTimeout(() => {
146
- const from = startRef.current;
147
- if (from == null) {
148
- return;
149
- }
150
- onLongPressRef.current({x: from.x, y: from.y});
151
- }, delayMs);
152
- },
153
- [disabled, delayMs, clear],
154
- );
155
-
156
- const moveTo = useCallback(
157
- (point: {x: number; y: number}): boolean => {
158
- const from = startRef.current;
159
- if (from == null) {
160
- return false;
161
- }
162
- // This press's own tolerance when its caller chose one, on either axis.
163
- const limit = pressToleranceRef.current?.moveCancelPx ?? moveCancelPx;
164
- if (
165
- Math.abs(point.x - from.x) > limit ||
166
- Math.abs(point.y - from.y) > limit
167
- ) {
168
- clear();
169
- return false;
170
- }
171
- return true;
172
- },
173
- [moveCancelPx, clear],
174
- );
175
-
176
- const onTouchStart = useCallback(
177
- (e: React.TouchEvent) => {
178
- if (disabled) {
179
- return;
180
- }
181
- if (e.touches.length !== 1) {
182
- clear();
183
- return;
184
- }
185
- const touch = e.touches[0];
186
- start({x: touch.clientX, y: touch.clientY});
187
- },
188
- [disabled, clear, start],
189
- );
190
-
191
- const onTouchMove = useCallback(
192
- (e: React.TouchEvent) => {
193
- if (startRef.current == null) {
194
- return;
195
- }
196
- if (e.touches.length !== 1) {
197
- clear();
198
- return;
199
- }
200
- const touch = e.touches[0];
201
- moveTo({x: touch.clientX, y: touch.clientY});
202
- },
203
- [clear, moveTo],
204
- );
205
-
206
- useEffect(() => clear, [clear]);
109
+ const [detector] = useState(() => createLongPressDetector(options));
110
+ // The detector reads only committed options. A render that React discards
111
+ // never reaches it.
112
+ useIsomorphicLayoutEffect(() => {
113
+ detector.setOptions(options);
114
+ });
115
+ // The detector's pending timer ends with the component.
116
+ useEffect(() => detector.cancel, [detector]);
207
117
 
208
118
  return {
209
- onTouchStart,
210
- onTouchMove,
211
- onTouchEnd: clear,
212
- onTouchCancel: clear,
213
- start,
214
- moveTo,
215
- cancel: clear,
119
+ onTouchStart: detector.touchStart,
120
+ onTouchMove: detector.touchMove,
121
+ onTouchEnd: detector.touchEnd,
122
+ onTouchCancel: detector.touchEnd,
123
+ start: detector.start,
124
+ moveTo: detector.moveTo,
125
+ cancel: detector.cancel,
216
126
  };
217
127
  }
@@ -297,6 +297,7 @@ export function useMenuHover<T extends HTMLElement = HTMLElement>(
297
297
  };
298
298
  }, [clearTimeouts, hideAndRestoreFocus]);
299
299
 
300
+ // Releases the hover timers on unmount.
300
301
  useEffect(() => {
301
302
  return () => clearTimeouts();
302
303
  }, [clearTimeouts]);
@@ -831,6 +831,8 @@ export function useMenuPress(options: UseMenuPressOptions): UseMenuPressReturn {
831
831
  endGesture();
832
832
  }, [endGesture, step]);
833
833
 
834
+ // Syncs the document listeners of the menu gesture counter with this mount.
835
+ // Unmount ends the gesture.
834
836
  useEffect(() => {
835
837
  // Install the gesture counter's listeners before the first press.
836
838
  currentGesture();
@@ -251,7 +251,8 @@ export function useOverflow(
251
251
  [calculate],
252
252
  );
253
253
 
254
- // Recalculate when itemCount changes
254
+ // Syncs the visible count with the rendered layout. It measures again after
255
+ // the items change.
255
256
  useIsomorphicLayoutEffect(() => {
256
257
  calculate();
257
258
  }, [calculate]);
@@ -50,6 +50,7 @@ import {installPressFeedback, pressableProps} from '../utils/pressFeedback';
50
50
  * ```
51
51
  */
52
52
  export function usePressFeedback(): typeof pressableProps {
53
+ // Syncs the shared document listener for press feedback with this mount.
53
54
  useEffect(() => installPressFeedback(), []);
54
55
  return pressableProps;
55
56
  }
@@ -29,6 +29,9 @@ import {FormLayoutContext} from '../FormLayout/FormLayoutContext';
29
29
  * Semantics only: this drives `aria-required`, never the native `required`
30
30
  * attribute, so a layout-level default can't silently switch on browser
31
31
  * validation bubbles. `isOptional` takes precedence, matching `FieldLabel`.
32
+ *
33
+ * CheckboxInput and Switch do not use this hook: an unchecked box or an off
34
+ * switch is an answer, so a form default gives them no required state.
32
35
  */
33
36
  export function useResolvedRequired({
34
37
  isRequired = false,
@@ -4,23 +4,50 @@
4
4
  export const docs = {
5
5
  name: 'useScrollLock',
6
6
  displayName: 'useScrollLock',
7
- keywords: ['scroll', 'lock', 'modal', 'dialog', 'body', 'prevent', 'background', 'ios', 'safari', 'fixed', 'scrollbar', 'gutter', 'layout shift', 'reflow'],
7
+ keywords: [
8
+ 'scroll',
9
+ 'lock',
10
+ 'modal',
11
+ 'dialog',
12
+ 'page',
13
+ 'prevent',
14
+ 'background',
15
+ 'ios',
16
+ 'safari',
17
+ 'touch',
18
+ 'scrollbar',
19
+ 'gutter',
20
+ 'layout shift',
21
+ 'reflow',
22
+ ],
8
23
  params: [
9
24
  {
10
25
  name: 'isLocked',
11
26
  type: 'boolean',
12
- description: 'whether body scroll should be locked.',
27
+ description: 'whether page scroll should be locked.',
13
28
  required: true,
14
29
  },
15
30
  ],
16
31
  returns: [],
17
32
  usage: {
18
33
  description:
19
- 'Locks body scroll when active by pinning the body with position: fixed. This prevents background scrolling behind modals and dialogs, which is necessary for iOS Safari where overscroll-behavior: contain does not work. Restores the original scroll position when unlocked. Pinning hides the document scrollbar, so where that scrollbar takes layout space (desktop) the hook holds its gutter open with scrollbar-gutter: stable for the duration of the lock. The page, including any position: fixed chrome, does not shift sideways.',
34
+ 'Locks page scroll while active and keeps the page where it is. The page gets overflow: hidden (on the root, or on body when its own overflow is the one the viewport uses), which stops wheel, keyboard and scrollbar scrolling, and overscroll-behavior-y: none on the root and body, which stops the overscroll bounce while the lock holds. Where the primary pointer is coarse (phones and tablets), a one-finger pan that would scroll the page is cancelled, because iOS Safari scrolls an overflow: hidden page under a finger; pans that a scroller inside the overlay can take, drags on a native range input, pinch-zoom, and one-finger drags on a pinch-zoomed page (which pan the zoomed view) still work. The scroll offset never changes, so nothing jumps when the lock starts or ends, and iOS Safari keeps its toolbar as it was. Where the hidden scrollbar takes layout space (desktop), the hook holds its gutter open with scrollbar-gutter: stable, so the page, including any position: fixed chrome, does not shift sideways.',
20
35
  bestPractices: [
21
- { guidance: true, description: 'Use when opening full-screen modals or dialogs to prevent background content from scrolling.' },
22
- { guidance: true, description: 'Pass the same boolean that controls dialog visibility (e.g., isOpen) as the isLocked parameter.' },
23
- { guidance: false, description: 'Use for non-modal overlays like popovers or tooltips; users should be able to scroll away from those.' },
36
+ {
37
+ guidance: true,
38
+ description:
39
+ 'Use when opening full-screen modals or dialogs to prevent background content from scrolling.',
40
+ },
41
+ {
42
+ guidance: true,
43
+ description:
44
+ 'Pass the same boolean that controls dialog visibility (e.g., isOpen) as the isLocked parameter.',
45
+ },
46
+ {
47
+ guidance: false,
48
+ description:
49
+ 'Use for non-modal overlays like popovers or tooltips; users should be able to scroll away from those.',
50
+ },
24
51
  ],
25
52
  },
26
53
  relatedComponents: ['Dialog'],
@@ -32,17 +59,29 @@ export const docs = {
32
59
  /** @type {import('@astryxdesign/cli/authoring').HookTranslationDoc} */
33
60
  export const docsDense = {
34
61
  description:
35
- 'Locks body scroll when active by pinning body w/ position: fixed. Prevents background scrolling behind modals + dialogs, necessary for iOS Safari where overscroll-behavior: contain does not work. Restores original scroll position when unlocked. Holds the hidden scrollbar\'s gutter open (scrollbar-gutter: stable) so the page (incl. position: fixed chrome) does not shift sideways.',
62
+ "Locks page scroll while active, page stays where it is: overflow: hidden on the root, or on body when its own overflow propagates (wheel, keyboard, scrollbar) + overscroll-behavior-y: none on root and body (no overscroll bounce while locked) + cancels 1-finger pans that would scroll the page (iOS Safari scrolls overflow: hidden pages under a finger); overlay scrollers, range inputs, pinch-zoom + drags on a zoomed page still work. Offset never changes: no jump, iOS toolbar unchanged. Holds the hidden scrollbar's gutter open (scrollbar-gutter: stable) so the page (incl. position: fixed chrome) does not shift sideways.",
36
63
  paramDescriptions: {
37
- isLocked: 'whether body scroll should be locked.',
64
+ isLocked: 'whether page scroll should be locked.',
38
65
  },
39
66
  usage: {
40
67
  description:
41
- 'Locks body scroll when active by pinning body w/ position: fixed. Prevents background scrolling behind modals + dialogs, necessary for iOS Safari where overscroll-behavior: contain does not work. Restores original scroll position when unlocked. Holds the hidden scrollbar\'s gutter open (scrollbar-gutter: stable) so the page (incl. position: fixed chrome) does not shift sideways.',
68
+ "Locks page scroll while active, page stays where it is: overflow: hidden on the root, or on body when its own overflow propagates (wheel, keyboard, scrollbar) + overscroll-behavior-y: none on root and body (no overscroll bounce while locked) + cancels 1-finger pans that would scroll the page (iOS Safari scrolls overflow: hidden pages under a finger); overlay scrollers, range inputs, pinch-zoom + drags on a zoomed page still work. Offset never changes: no jump, iOS toolbar unchanged. Holds the hidden scrollbar's gutter open (scrollbar-gutter: stable) so the page (incl. position: fixed chrome) does not shift sideways.",
42
69
  bestPractices: [
43
- { guidance: true, description: 'Use when opening full-screen modals / dialogs to prevent background content from scrolling.' },
44
- { guidance: true, description: 'Pass same boolean that controls dialog visibility (e.g. isOpen) as isLocked parameter.' },
45
- { guidance: false, description: 'Use for non-modal overlays like popovers / tooltips; users should be able to scroll away from those.' },
70
+ {
71
+ guidance: true,
72
+ description:
73
+ 'Use when opening full-screen modals / dialogs to prevent background content from scrolling.',
74
+ },
75
+ {
76
+ guidance: true,
77
+ description:
78
+ 'Pass same boolean that controls dialog visibility (e.g. isOpen) as isLocked parameter.',
79
+ },
80
+ {
81
+ guidance: false,
82
+ description:
83
+ 'Use for non-modal overlays like popovers / tooltips; users should be able to scroll away from those.',
84
+ },
46
85
  ],
47
86
  },
48
87
  };
@@ -4,46 +4,45 @@
4
4
 
5
5
  /**
6
6
  * @file useScrollLock.ts
7
- * @input Uses React useEffect
8
- * @output Exports useScrollLock hook for locking body scroll
9
- * @position Core hook; used by Dialog to prevent background scrolling
10
- *
11
- * Locks body scroll when active by pinning the body with position:fixed.
12
- * This is needed because overscroll-behavior:contain doesn't work on iOS Safari.
7
+ * @input React useEffect, rootScrollStyles, gestures/pageHold with the pan
8
+ * decision, and the scrollbar gutter hold
9
+ * @output useScrollLock, which locks page scroll behind a modal
10
+ * @position Core hook; used by Dialog, BottomSheet, Drawer, Lightbox and
11
+ * MobileNav
13
12
  *
14
13
  * SYNC: When modified, update:
15
14
  * - /packages/core/src/hooks/index.ts
16
15
  * - /packages/core/src/hooks/scrollbarGutter.ts
16
+ * - /packages/core/src/hooks/rootScrollStyles.ts
17
+ * - /packages/core/src/gestures/pageHold.ts (holdPageScroll)
18
+ * - /packages/core/src/hooks/useScrollLockImports.test.ts
17
19
  */
18
20
 
19
21
  import {useEffect} from 'react';
22
+ import {claimRootScrollStyle, reportScrollLock} from './rootScrollStyles';
23
+ import {holdPageScroll} from '../gestures/pageHold';
24
+ import {isPageZoomedIn, isPanAbsorbedBeforePage} from './scrollLockTouchGuard';
20
25
  import {holdScrollbarGutter, type ScrollbarGutterHold} from './scrollbarGutter';
21
26
 
22
- interface ScrollLockSnapshot {
23
- scrollX: number;
24
- scrollY: number;
25
- overflow: string;
26
- position: string;
27
- top: string;
28
- left: string;
29
- right: string;
27
+ interface ActiveLock {
28
+ releaseRootStyle: () => void;
29
+ releasePageHold: () => void;
30
30
  gutter: ScrollbarGutterHold;
31
31
  }
32
32
 
33
33
  let lockCount = 0;
34
- let originalBodyState: ScrollLockSnapshot | null = null;
34
+ let activeLock: ActiveLock | null = null;
35
35
 
36
36
  /**
37
- * Locks body scroll when `isLocked` is true.
38
- *
39
- * Pins the body with `position: fixed` to prevent background scrolling,
40
- * which is necessary for iOS Safari where `overscroll-behavior: contain`
41
- * does not prevent body scroll behind modals. Restores scroll position
42
- * on unlock.
37
+ * Locks page scroll while `isLocked` is true.
43
38
  *
44
- * Pinning also hides the document's scrollbar, so the gutter that scrollbar
45
- * occupied is held open for the duration of the lock — without it the page
46
- * reflows sideways by ~15px the moment an overlay opens.
39
+ * The page keeps its scroll offset, so nothing jumps on lock or unlock. iOS
40
+ * Safari scrolls an `overflow: hidden` page under a finger. So where the
41
+ * primary pointer is coarse (phones and tablets), the lock cancels a
42
+ * one-finger pan that would reach the page.
43
+ * Pans that a scroller in the overlay takes, and two-finger zoom, go through.
44
+ * The gutter of a classic scrollbar stays open, so the page does not shift
45
+ * sideways.
47
46
  *
48
47
  * @example
49
48
  * ```
@@ -51,59 +50,53 @@ let originalBodyState: ScrollLockSnapshot | null = null;
51
50
  * ```
52
51
  */
53
52
  export function useScrollLock(isLocked: boolean): void {
53
+ // Syncs the document's scroll lock with `isLocked`. A count of holders keeps
54
+ // the page locked until the last one releases.
54
55
  useEffect(() => {
55
56
  if (!isLocked) {
56
57
  return;
57
58
  }
58
59
 
59
- const {body} = document;
60
-
61
60
  if (lockCount === 0) {
62
- const scrollX = window.scrollX;
63
- const scrollY = window.scrollY;
64
-
65
- // Taken before the pinning styles below hide the scrollbar.
66
- const gutter = holdScrollbarGutter(body);
67
-
68
- originalBodyState = {
69
- scrollX,
70
- scrollY,
71
- overflow: body.style.overflow,
72
- position: body.style.position,
73
- top: body.style.top,
74
- left: body.style.left,
75
- right: body.style.right,
76
- gutter,
77
- };
78
-
79
- body.style.overflow = 'hidden';
80
- body.style.position = 'fixed';
81
- body.style.top = `-${scrollY}px`;
82
- body.style.left = '0';
83
- body.style.right = '0';
84
-
61
+ // The hold measures before the lock writes a style, so the lock forces no
62
+ // layout of its own. `settle` writes the gutter with the styles below.
63
+ const gutter = holdScrollbarGutter(document.documentElement);
64
+ // `overscroll-behavior-y: none` also keeps the browser's own
65
+ // pull-to-refresh (Chrome on Android) from reloading the page behind
66
+ // the overlay.
67
+ const releaseRootStyle = claimRootScrollStyle({
68
+ overflow: 'hidden',
69
+ overscrollBehaviorY: 'none',
70
+ });
71
+ // The hold asks the gesture host only if one exists, so the lock does
72
+ // not bring the host into every overlay's import.
73
+ const releasePageHold = holdPageScroll(
74
+ document,
75
+ // A drag on a pinch-zoomed page pans the zoomed view: it goes
76
+ // through, so a zoomed-in reader can move around the overlay.
77
+ (origin, dx, dy) =>
78
+ !isPageZoomedIn(document) && !isPanAbsorbedBeforePage(origin, dx, dy),
79
+ );
85
80
  gutter.settle();
81
+ activeLock = {releaseRootStyle, releasePageHold, gutter};
86
82
  }
87
83
 
88
84
  lockCount += 1;
85
+ reportScrollLock(1);
89
86
 
90
87
  return () => {
91
88
  lockCount -= 1;
89
+ reportScrollLock(-1);
92
90
 
93
- if (lockCount !== 0 || originalBodyState == null) {
91
+ if (lockCount !== 0 || activeLock == null) {
94
92
  return;
95
93
  }
96
94
 
97
- const state = originalBodyState;
98
- originalBodyState = null;
99
-
100
- body.style.overflow = state.overflow;
101
- body.style.position = state.position;
102
- body.style.top = state.top;
103
- body.style.left = state.left;
104
- body.style.right = state.right;
105
- state.gutter.release();
106
- window.scrollTo(state.scrollX, state.scrollY);
95
+ const lock = activeLock;
96
+ activeLock = null;
97
+ lock.releasePageHold();
98
+ lock.releaseRootStyle();
99
+ lock.gutter.release();
107
100
  };
108
101
  }, [isLocked]);
109
102
  }
@@ -216,6 +216,8 @@ export function useScrollableArea({
216
216
  const getComposedViewportRef = useStableComposedRef(viewportRef);
217
217
  const getComposedContentRef = useStableComposedRef(contentRef);
218
218
 
219
+ // Syncs the scroll geometry with the viewport and content nodes. It measures
220
+ // them, then follows resize, scroll, transition and font events.
219
221
  useIsomorphicLayoutEffect(() => {
220
222
  if (viewport == null || content == null) {
221
223
  return;
@@ -430,6 +432,8 @@ export function useScrollableArea({
430
432
  // commit. A loss waits for the next frame.
431
433
  const previousOverflowRef = useRef<LogicalOverflowGeometry>(INITIAL_OVERFLOW);
432
434
  const previousMappingRef = useRef<LogicalAxisMapping>(INITIAL_MAPPING);
435
+ // Measures the layout again when overflow starts or the writing-mode mapping
436
+ // changes. A new scrollbar gutter changes the geometry.
433
437
  useIsomorphicLayoutEffect(() => {
434
438
  const previous = previousOverflowRef.current;
435
439
  const hasGainedOverflow =
@@ -178,6 +178,8 @@ export function useStreamingText(
178
178
  '(prefers-reduced-motion: reduce)',
179
179
  );
180
180
 
181
+ // Syncs the revealed text with an animation-frame clock while the text
182
+ // streams.
181
183
  useEffect(() => {
182
184
  if (!isStreaming || speed === 'instant' || prefersReducedMotion) {
183
185
  return;
@@ -0,0 +1,43 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @generated by scripts/generate-i18n-runtime.mjs from packages/core/locales/en.json,
5
+ * holding the English for the catalog keys named in packages/core/src/PowerSearch/PowerSearchBottomSheet.tsx.
6
+ * Do not edit by hand. Run `pnpm generate:i18n-runtime` instead.
7
+ */
8
+
9
+ const english: Readonly<Record<string, string>> = {
10
+ "@astryx.powersearch.allFiltersRemoved": "All filters removed",
11
+ "@astryx.powersearch.editableFiltersRemoved": "Editable filters removed",
12
+ "@astryx.powersearch.editor.apply": "Apply",
13
+ "@astryx.powersearch.editor.cancel": "Cancel",
14
+ "@astryx.powersearch.editor.operator": "Operator",
15
+ "@astryx.powersearch.sheet.addFilter": "Add filter",
16
+ "@astryx.powersearch.sheet.clearAll": "Clear all",
17
+ "@astryx.powersearch.sheet.clearAllCancel": "Keep filters",
18
+ "@astryx.powersearch.sheet.clearAllConfirm": "Clear filters",
19
+ "@astryx.powersearch.sheet.clearAllDescription": "This removes all editable filters from this search.",
20
+ "@astryx.powersearch.sheet.clearAllTitle": "Clear all filters?",
21
+ "@astryx.powersearch.sheet.done": "Done",
22
+ "@astryx.powersearch.sheet.editableFiltersClearedWithCount": "Editable filters removed. {resultCount}",
23
+ "@astryx.powersearch.sheet.fieldOperator": "{field} {operator}",
24
+ "@astryx.powersearch.sheet.filterUnavailable": "This filter is no longer available",
25
+ "@astryx.powersearch.sheet.filtersClearedWithCount": "All filters removed. {resultCount}",
26
+ "@astryx.powersearch.sheet.filtersTitle": "Filters",
27
+ "@astryx.powersearch.sheet.labelValue": "{label} {value}",
28
+ "@astryx.powersearch.sheet.noFilters": "No filters applied",
29
+ "@astryx.powersearch.sheet.noFiltersDescription": "Add a filter to narrow your results and find what you need faster.",
30
+ "@astryx.powersearch.sheet.noMatchingFields": "No filters match your search",
31
+ "@astryx.powersearch.sheet.noResults": "No results found",
32
+ "@astryx.powersearch.sheet.removeFilter": "Remove {field} filter",
33
+ "@astryx.powersearch.sheet.search": "Search",
34
+ "@astryx.powersearch.sheet.searchFields": "Search filters",
35
+ "@astryx.powersearch.sheet.searchFieldsPlaceholder": "Search filters…",
36
+ "@astryx.powersearch.sheet.searchResults": "Search results",
37
+ "@astryx.powersearch.sheet.tryDifferentSearch": "Try a different search.",
38
+ "@astryx.powersearch.sheet.ungroupedFields": "General",
39
+ "@astryx.tokenizer.tokenAdded": "Added {label}",
40
+ "@astryx.tokenizer.tokenRemoved": "Removed {label}"
41
+ };
42
+
43
+ export default english;
@@ -7,6 +7,12 @@
7
7
  */
8
8
 
9
9
  const english: Readonly<Record<string, string>> = {
10
+ "@astryx.powersearch.sheet.relativeDaysAgo": "{count, number} {count, plural, one {day} other {days}} ago",
11
+ "@astryx.powersearch.sheet.relativeDaysFromNow": "{count, number} {count, plural, one {day} other {days}} from now",
12
+ "@astryx.powersearch.sheet.relativeMonthsAgo": "{count, number} {count, plural, one {month} other {months}} ago",
13
+ "@astryx.powersearch.sheet.relativeMonthsFromNow": "{count, number} {count, plural, one {month} other {months}} from now",
14
+ "@astryx.powersearch.sheet.relativeWeeksAgo": "{count, number} {count, plural, one {week} other {weeks}} ago",
15
+ "@astryx.powersearch.sheet.relativeWeeksFromNow": "{count, number} {count, plural, one {week} other {weeks}} from now",
10
16
  "@astryx.powersearch.valueEditor.addValuesPlaceholder": "Add values…",
11
17
  "@astryx.powersearch.valueEditor.date": "Date",
12
18
  "@astryx.powersearch.valueEditor.dateRange": "date range",