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

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
@@ -0,0 +1,273 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file longPressDetector.ts
5
+ * @input The long-press numbers (motion/uikit/longPress.ts) and touch events
6
+ * @output createLongPressDetector(): one long press at a time, timed on the
7
+ * touch events' clock, with no React
8
+ * @position Internal; the core of useLongPress and useLongPressDetector
9
+ * (useLongPress.ts). Not in the hooks entry.
10
+ *
11
+ * SYNC: When modified, update /packages/core/src/hooks/useLongPress.ts
12
+ */
13
+
14
+ import {
15
+ LONG_PRESS_ALLOWABLE_MOVEMENT_PX,
16
+ LONG_PRESS_DURATION_MS,
17
+ } from '../motion/uikit/longPress';
18
+
19
+ // The hold is a deadline on the touch events' timestamps, on the clock of the
20
+ // touch's own window. A busy main thread can delay the timer past the
21
+ // deadline. A touch stamped after the deadline then reports the press before
22
+ // it acts. A press started by hand from a point has no stamp, so its page
23
+ // timer waits the full delay.
24
+
25
+ // The long-press numbers have one source, shared with the gesture
26
+ // recognizers (motion/uikit/longPress.ts).
27
+ const DEFAULT_DELAY_MS = LONG_PRESS_DURATION_MS;
28
+ const DEFAULT_MOVE_CANCEL_PX = LONG_PRESS_ALLOWABLE_MOVEMENT_PX;
29
+
30
+ /** @internal What a detector reads at each start, move and fire. */
31
+ export interface LongPressDetectorOptions {
32
+ /** Fired with the start point once the press is held for `delayMs`. */
33
+ onLongPress: (point: {x: number; y: number}) => void;
34
+ /** When true, a start does nothing. */
35
+ disabled?: boolean;
36
+ /** Hold duration before the press fires, in ms. Defaults to 500. */
37
+ delayMs?: number;
38
+ /** Movement past this distance (px, either axis) cancels the press. Defaults to 10. */
39
+ moveCancelPx?: number;
40
+ }
41
+
42
+ /**
43
+ * @internal A press's own movement tolerance, for a core caller that decides
44
+ * it as the press starts (useMenuPress's trigger).
45
+ */
46
+ export interface LongPressTolerance {
47
+ moveCancelPx?: number;
48
+ }
49
+
50
+ /**
51
+ * @internal The part of a touch event a detector reads, React's or the DOM's.
52
+ */
53
+ export interface LongPressTouchEvent {
54
+ readonly touches: {
55
+ readonly length: number;
56
+ readonly [index: number]: {
57
+ readonly clientX: number;
58
+ readonly clientY: number;
59
+ };
60
+ };
61
+ readonly timeStamp: number;
62
+ readonly view?: unknown;
63
+ }
64
+
65
+ /** @internal One detector: start a press, report its touches, or drop it. */
66
+ export interface LongPressDetector {
67
+ /** Begin detection at a point, dropping any press still pending. */
68
+ start: (
69
+ point: {x: number; y: number},
70
+ tolerance?: LongPressTolerance,
71
+ ) => void;
72
+ /** A touch started: one finger begins a press, a second one ends it. */
73
+ touchStart: (event: LongPressTouchEvent) => void;
74
+ /** A touch moved: past the tolerance the press is off. */
75
+ touchMove: (event: LongPressTouchEvent) => void;
76
+ /** The lift or the cancel. A press it is stamped past reports first. */
77
+ touchEnd: (event?: LongPressTouchEvent) => void;
78
+ /**
79
+ * Report the pointer's new position. Past the tolerance the press is off.
80
+ * Returns whether a press is still pending.
81
+ */
82
+ moveTo: (point: {x: number; y: number}) => boolean;
83
+ /** Drop any pending press (a lift, a cancel, or the gesture moving on). */
84
+ cancel: () => void;
85
+ /** Whether a press is in progress (started and not dropped). */
86
+ isPending: () => boolean;
87
+ /** The options the next start, move and fire read. */
88
+ setOptions: (options: LongPressDetectorOptions) => void;
89
+ }
90
+
91
+ /** The part of a window's performance timeline a press reads. */
92
+ type EventClock = Pick<Performance, 'now'>;
93
+
94
+ function clockOf(event: LongPressTouchEvent): EventClock | null {
95
+ const view = event.view as {performance?: EventClock} | null | undefined;
96
+ return (
97
+ view?.performance ??
98
+ (typeof performance === 'undefined' ? null : performance)
99
+ );
100
+ }
101
+
102
+ /**
103
+ * An event's time on its window's clock. jsdom stamps events with
104
+ * `Date.now()`. The detector reads the age of such a stamp on that clock, so a
105
+ * frozen system time keeps the hold's length. A stamp nearer `Date.now()` than
106
+ * the window's clock is that kind of stamp.
107
+ */
108
+ function timeOn(
109
+ clock: EventClock | null,
110
+ timeStamp: number | undefined,
111
+ ): number | undefined {
112
+ // A stamp of 0 means the event carries no time, so the hold falls back to
113
+ // the full delay on the page's timer.
114
+ if (timeStamp == null || !Number.isFinite(timeStamp) || timeStamp <= 0) {
115
+ return undefined;
116
+ }
117
+ if (
118
+ clock != null &&
119
+ Math.abs(Date.now() - timeStamp) < Math.abs(clock.now() - timeStamp)
120
+ ) {
121
+ return clock.now() - (Date.now() - timeStamp);
122
+ }
123
+ return timeStamp;
124
+ }
125
+
126
+ /** @internal A long-press detector with no React (see LongPressDetector). */
127
+ export function createLongPressDetector(
128
+ initial: LongPressDetectorOptions,
129
+ ): LongPressDetector {
130
+ let options = initial;
131
+ let timer: ReturnType<typeof setTimeout> | null = null;
132
+ let from: {x: number; y: number} | null = null;
133
+ // Null for a press started by hand. It has no stamp.
134
+ let deadline: number | null = null;
135
+ let clock: EventClock | null = null;
136
+ let pressTolerance: LongPressTolerance | null = null;
137
+
138
+ const cancel = () => {
139
+ if (timer != null) {
140
+ clearTimeout(timer);
141
+ timer = null;
142
+ }
143
+ from = null;
144
+ deadline = null;
145
+ clock = null;
146
+ };
147
+
148
+ const fire = () => {
149
+ const at = from;
150
+ if (at == null) {
151
+ return;
152
+ }
153
+ cancel();
154
+ options.onLongPress({x: at.x, y: at.y});
155
+ };
156
+
157
+ // A touch stamped at or past the deadline: the finger was down for the
158
+ // whole delay, so the press reports before the touch acts.
159
+ const fireIfDue = (event: LongPressTouchEvent | undefined) => {
160
+ const eventTime =
161
+ event == null ? undefined : timeOn(clock, event.timeStamp);
162
+ if (deadline != null && eventTime != null && eventTime >= deadline) {
163
+ fire();
164
+ }
165
+ };
166
+
167
+ const begin = (
168
+ point: {x: number; y: number},
169
+ tolerance: LongPressTolerance | undefined,
170
+ started: {at: number; clock: EventClock} | undefined,
171
+ ) => {
172
+ if (options.disabled === true) {
173
+ return;
174
+ }
175
+ cancel();
176
+ const delayMs = options.delayMs ?? DEFAULT_DELAY_MS;
177
+ from = {x: point.x, y: point.y};
178
+ pressTolerance = tolerance ?? null;
179
+ const pressClock = started?.clock ?? null;
180
+ const pressDeadline = started == null ? null : started.at + delayMs;
181
+ clock = pressClock;
182
+ deadline = pressDeadline;
183
+ // Wait only for the rest of the hold. A touch handled late then keeps its
184
+ // length, and the wait never passes the delay.
185
+ const remaining =
186
+ pressClock == null || pressDeadline == null
187
+ ? delayMs
188
+ : Math.min(delayMs, Math.max(0, pressDeadline - pressClock.now()));
189
+ // A late timer yields to queued input once, so a lift stamped before the
190
+ // deadline still cancels the press. The gesture arena does the same.
191
+ const run = (mayYield: boolean) => {
192
+ timer = null;
193
+ if (
194
+ mayYield &&
195
+ pressClock != null &&
196
+ pressDeadline != null &&
197
+ pressClock.now() > pressDeadline
198
+ ) {
199
+ timer = setTimeout(() => run(false), 0);
200
+ return;
201
+ }
202
+ fire();
203
+ };
204
+ timer = setTimeout(() => run(true), remaining);
205
+ };
206
+
207
+ const moveTo = (point: {x: number; y: number}): boolean => {
208
+ const at = from;
209
+ if (at == null) {
210
+ return false;
211
+ }
212
+ // This press's own tolerance when its caller chose one, on either axis.
213
+ const limit =
214
+ pressTolerance?.moveCancelPx ??
215
+ options.moveCancelPx ??
216
+ DEFAULT_MOVE_CANCEL_PX;
217
+ if (Math.abs(point.x - at.x) > limit || Math.abs(point.y - at.y) > limit) {
218
+ cancel();
219
+ return false;
220
+ }
221
+ return true;
222
+ };
223
+
224
+ return {
225
+ start(point, tolerance) {
226
+ begin(point, tolerance, undefined);
227
+ },
228
+ touchStart(event) {
229
+ if (options.disabled === true) {
230
+ return;
231
+ }
232
+ if (event.touches.length !== 1) {
233
+ // A second finger ends the press, unless the press was already due.
234
+ fireIfDue(event);
235
+ cancel();
236
+ return;
237
+ }
238
+ const touch = event.touches[0];
239
+ const touchClock = clockOf(event);
240
+ const at = timeOn(touchClock, event.timeStamp);
241
+ begin(
242
+ {x: touch.clientX, y: touch.clientY},
243
+ undefined,
244
+ touchClock == null || at == null ? undefined : {at, clock: touchClock},
245
+ );
246
+ },
247
+ touchMove(event) {
248
+ if (from == null) {
249
+ return;
250
+ }
251
+ fireIfDue(event);
252
+ if (from == null) {
253
+ return;
254
+ }
255
+ if (event.touches.length !== 1) {
256
+ cancel();
257
+ return;
258
+ }
259
+ const touch = event.touches[0];
260
+ moveTo({x: touch.clientX, y: touch.clientY});
261
+ },
262
+ touchEnd(event) {
263
+ fireIfDue(event);
264
+ cancel();
265
+ },
266
+ moveTo,
267
+ cancel,
268
+ isPending: () => from != null,
269
+ setOptions(next) {
270
+ options = next;
271
+ },
272
+ };
273
+ }
@@ -0,0 +1,21 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ /**
6
+ * @file pressGroupContext.ts
7
+ * @input Nothing
8
+ * @output PressGroupContext: true inside a group whose own tracker paints
9
+ * its actions' press
10
+ * @position Internal; not exported from the hooks entry. AlertDialog
11
+ * provides it around its tracked actions, and Button reads it.
12
+ */
13
+
14
+ import {createContext} from 'react';
15
+
16
+ /**
17
+ * True inside a group whose tracker paints a pointer's press on its actions.
18
+ * Those actions take no `:active` paint, so one press never lights two.
19
+ */
20
+ export const PressGroupContext = createContext(false);
21
+ PressGroupContext.displayName = 'PressGroupContext';
@@ -0,0 +1,247 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ /**
6
+ * @file rootScrollStyles.ts
7
+ * @input The inline styles of the root and `<body>`
8
+ * @output claimRootScrollStyle, which owns the page's `overflow`,
9
+ * `overscroll-behavior-y` and `scrollbar-gutter`; isScrollLockActive and
10
+ * subscribeScrollLock, which report whether a scroll lock holds the page
11
+ * @position Internal hook utility. Each caller that changes how the page
12
+ * scrolls claims these styles here, so no caller overwrites a value that
13
+ * another caller still needs.
14
+ *
15
+ * SYNC: When modified, update:
16
+ * - /packages/core/src/hooks/useScrollLock.ts
17
+ */
18
+
19
+ /** The root scroll styles a caller can hold. */
20
+ export interface RootScrollStyle {
21
+ /** `hidden` or `clip` stops wheel, keyboard and scrollbar scrolling of the page. */
22
+ overflow?: 'hidden' | 'clip';
23
+ /** `none` turns the page's own bounce off at both vertical edges. */
24
+ overscrollBehaviorY?: 'none' | 'contain';
25
+ /** `stable` keeps a classic scrollbar's space while the page cannot scroll. */
26
+ scrollbarGutter?: 'stable';
27
+ }
28
+
29
+ type RootScrollProperty = keyof RootScrollStyle;
30
+
31
+ const PROPERTIES: ReadonlyArray<RootScrollProperty> = [
32
+ 'overflow',
33
+ 'overscrollBehaviorY',
34
+ 'scrollbarGutter',
35
+ ];
36
+
37
+ interface Claim {
38
+ readonly id: number;
39
+ readonly value: string;
40
+ }
41
+
42
+ const claims: Record<RootScrollProperty, Claim[]> = {
43
+ overflow: [],
44
+ overscrollBehaviorY: [],
45
+ scrollbarGutter: [],
46
+ };
47
+
48
+ type SavedStyle =
49
+ | 'overflow'
50
+ | 'overflowX'
51
+ | 'overflowY'
52
+ | 'overscrollBehaviorY'
53
+ | 'scrollbarGutter';
54
+
55
+ /**
56
+ * The inline styles saved for each property, so a page's own value comes back
57
+ * exactly, including a one-axis `overflow-x` or `overflow-y`.
58
+ */
59
+ const SAVED: Record<RootScrollProperty, ReadonlyArray<SavedStyle>> = {
60
+ overflow: ['overflow', 'overflowX', 'overflowY'],
61
+ overscrollBehaviorY: ['overscrollBehaviorY'],
62
+ scrollbarGutter: ['scrollbarGutter'],
63
+ };
64
+
65
+ /**
66
+ * An element that holds a property's claims. It keeps the page's own inline
67
+ * values, saved at the first claim, and the value that the claims last wrote.
68
+ */
69
+ interface HeldTarget {
70
+ readonly element: HTMLElement;
71
+ readonly pageValues: Partial<Record<SavedStyle, string>>;
72
+ written: string;
73
+ }
74
+
75
+ const held = new Map<RootScrollProperty, HeldTarget[]>();
76
+
77
+ let nextClaimId = 0;
78
+
79
+ /**
80
+ * The element whose `overflow` the viewport uses. That is the root, unless the
81
+ * root's own is `visible` and `<body>` sets one, which then propagates to the
82
+ * viewport. A write to the root in that case stops the propagation. Then
83
+ * `<body>` becomes its own scroller at offset 0, and the page jumps to its top.
84
+ */
85
+ function overflowTarget(doc: Document): HTMLElement {
86
+ const root = doc.documentElement;
87
+ const {body} = doc;
88
+ const view = doc.defaultView;
89
+ if (body == null || view == null) {
90
+ return root;
91
+ }
92
+ const isVisible = (element: Element) => {
93
+ const style = view.getComputedStyle(element);
94
+ return (
95
+ (style.overflowX || 'visible') === 'visible' &&
96
+ (style.overflowY || 'visible') === 'visible'
97
+ );
98
+ };
99
+ return isVisible(root) && !isVisible(body) ? body : root;
100
+ }
101
+
102
+ /**
103
+ * Where a property's claims go. `overflow` goes to the element that the
104
+ * viewport takes it from. `overscroll-behavior-y` goes to the root and to
105
+ * `<body>`, because Chrome on Android reads `<body>`'s value for its
106
+ * pull-to-refresh. `scrollbar-gutter` goes to the root.
107
+ */
108
+ function claimTargets(
109
+ property: RootScrollProperty,
110
+ doc: Document,
111
+ ): HTMLElement[] {
112
+ if (property === 'overflow') {
113
+ return [overflowTarget(doc)];
114
+ }
115
+ if (property === 'scrollbarGutter') {
116
+ return [doc.documentElement];
117
+ }
118
+ return doc.body == null
119
+ ? [doc.documentElement]
120
+ : [doc.documentElement, doc.body];
121
+ }
122
+
123
+ function applyTopClaim(property: RootScrollProperty): void {
124
+ const targets = held.get(property);
125
+ if (targets == null) {
126
+ return;
127
+ }
128
+ const stack = claims[property];
129
+ const top = stack[stack.length - 1];
130
+ for (const target of targets) {
131
+ const {style} = target.element;
132
+ if (top != null) {
133
+ style[property] = top.value;
134
+ target.written = top.value;
135
+ continue;
136
+ }
137
+ // The last claim is gone, so the page gets its own values back. A value
138
+ // that an outside writer set meanwhile stays.
139
+ if (style[property] === target.written) {
140
+ style[property] = '';
141
+ for (const name of SAVED[property]) {
142
+ const value = target.pageValues[name];
143
+ if (value) {
144
+ style[name] = value;
145
+ }
146
+ }
147
+ }
148
+ }
149
+ if (top == null) {
150
+ held.delete(property);
151
+ }
152
+ }
153
+
154
+ /**
155
+ * Sets the page's `overflow`, `overscroll-behavior-y` or `scrollbar-gutter`
156
+ * until the returned release runs. Claims stack per property: the latest claim
157
+ * wins, and a release in any order restores the claim beneath it. The page's
158
+ * own inline value comes back after the last release, unless an outside writer
159
+ * changed that style meanwhile. A second release does nothing.
160
+ *
161
+ * @example
162
+ * ```
163
+ * const release = claimRootScrollStyle({overflow: 'hidden'});
164
+ * // later
165
+ * release();
166
+ * ```
167
+ */
168
+ export function claimRootScrollStyle(claim: RootScrollStyle): () => void {
169
+ if (typeof document === 'undefined') {
170
+ return () => {};
171
+ }
172
+ nextClaimId += 1;
173
+ const id = nextClaimId;
174
+ const claimed: RootScrollProperty[] = [];
175
+ for (const property of PROPERTIES) {
176
+ const value = claim[property];
177
+ if (value == null) {
178
+ continue;
179
+ }
180
+ if (claims[property].length === 0) {
181
+ held.set(
182
+ property,
183
+ claimTargets(property, document).map(element => {
184
+ const pageValues: Partial<Record<SavedStyle, string>> = {};
185
+ for (const name of SAVED[property]) {
186
+ pageValues[name] = element.style[name];
187
+ }
188
+ return {element, pageValues, written: ''};
189
+ }),
190
+ );
191
+ }
192
+ claims[property].push({id, value});
193
+ claimed.push(property);
194
+ applyTopClaim(property);
195
+ }
196
+
197
+ let released = false;
198
+ return () => {
199
+ if (released) {
200
+ return;
201
+ }
202
+ released = true;
203
+ for (const property of claimed) {
204
+ const stack = claims[property];
205
+ const index = stack.findIndex(entry => entry.id === id);
206
+ if (index !== -1) {
207
+ stack.splice(index, 1);
208
+ }
209
+ applyTopClaim(property);
210
+ }
211
+ };
212
+ }
213
+
214
+ let lockCount = 0;
215
+ const lockListeners = new Set<(isActive: boolean) => void>();
216
+
217
+ /** Whether a scroll lock (useScrollLock) currently holds the page. */
218
+ export function isScrollLockActive(): boolean {
219
+ return lockCount > 0;
220
+ }
221
+
222
+ /**
223
+ * Calls `listener` with the new state each time the page becomes locked or
224
+ * free. A second lock while one holds is no change. Returns the unsubscribe
225
+ * function.
226
+ */
227
+ export function subscribeScrollLock(
228
+ listener: (isActive: boolean) => void,
229
+ ): () => void {
230
+ lockListeners.add(listener);
231
+ return () => {
232
+ lockListeners.delete(listener);
233
+ };
234
+ }
235
+
236
+ /** For scroll locks: one lock taken (`1`) or released (`-1`). */
237
+ export function reportScrollLock(delta: 1 | -1): void {
238
+ const wasActive = lockCount > 0;
239
+ lockCount = Math.max(0, lockCount + delta);
240
+ const isActive = lockCount > 0;
241
+ if (isActive === wasActive) {
242
+ return;
243
+ }
244
+ for (const listener of [...lockListeners]) {
245
+ listener(isActive);
246
+ }
247
+ }
@@ -0,0 +1,149 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ /**
6
+ * @file scrollLockTouchGuard.ts
7
+ * @input The node under a finger and the pan's direction, while a scroll lock
8
+ * holds the page; the native-scroll probe's edge test (gestures/nativeScroll)
9
+ * @output isPanAbsorbedBeforePage and isPageZoomedIn, for the page hold
10
+ * @position Internal hook utility; gestures/pageHold calls it for
11
+ * useScrollLock.
12
+ */
13
+
14
+ // iOS Safari scrolls an `overflow: hidden` page under a finger.
15
+ // The page hold cancels each pan that would reach the page. This walk decides
16
+ // which pans those are. A scroller that can move in the pan's direction takes
17
+ // the pan. A scroller at its edge that contains its overscroll also takes it.
18
+ // The walk follows flat-tree parents. It ends at a top-layer or fixed-position
19
+ // element, whose containing block is the viewport, so its untaken pans go to
20
+ // the page.
21
+
22
+ import {canElementScroll} from '../gestures/nativeScroll';
23
+ import {parentAcrossShadow} from '../utils/flatTree';
24
+
25
+ /**
26
+ * Whether `element` itself takes a pan. It does when it can still scroll that
27
+ * way, or when its `overscroll-behavior` contains the overscroll at its edge.
28
+ */
29
+ function takesPan(
30
+ element: Element,
31
+ style: CSSStyleDeclaration,
32
+ isVertical: boolean,
33
+ dx: number,
34
+ dy: number,
35
+ ): boolean {
36
+ const x = isVertical ? 0 : dx;
37
+ const y = isVertical ? dy : 0;
38
+ if (canElementScroll(element, x, y)) {
39
+ return true;
40
+ }
41
+ // A scroller at its edge can still move the other way. A box that does not
42
+ // scroll, or whose content fits, cannot. Its pan goes on along the chain.
43
+ if (!canElementScroll(element, -x, -y)) {
44
+ return false;
45
+ }
46
+ const behavior = isVertical
47
+ ? style.overscrollBehaviorY
48
+ : style.overscrollBehaviorX;
49
+ return behavior === 'contain' || behavior === 'none';
50
+ }
51
+
52
+ /**
53
+ * Whether `element` is in the state that a pseudo-class names (`:modal`,
54
+ * `:popover-open`). An engine without the pseudo-class has no element in that
55
+ * state. Its `matches` throws on the selector, so the engine is not asked.
56
+ * Other errors surface.
57
+ */
58
+ function isInState(element: Element, pseudoClass: string): boolean {
59
+ const css = element.ownerDocument.defaultView?.CSS;
60
+ return (
61
+ typeof css?.supports === 'function' &&
62
+ css.supports(`selector(${pseudoClass})`) &&
63
+ element.matches(pseudoClass)
64
+ );
65
+ }
66
+
67
+ /**
68
+ * Whether a pan that `element` does not take goes to the viewport, not to its
69
+ * DOM parent. The browser chains scrolling along containing blocks. A
70
+ * top-layer element (an open modal dialog or popover) or a fixed-position one
71
+ * has the viewport as its containing block. So a Dialog inside a scrolling
72
+ * container gives an untaken pan to the page.
73
+ */
74
+ function chainsToViewport(
75
+ element: Element,
76
+ style: CSSStyleDeclaration,
77
+ ): boolean {
78
+ return (
79
+ style.position === 'fixed' ||
80
+ isInState(element, ':modal') ||
81
+ isInState(element, ':popover-open')
82
+ );
83
+ }
84
+
85
+ /**
86
+ * Whether the page is pinch-zoomed in (`visualViewport.scale > 1`). A
87
+ * one-finger drag then pans the zoomed view, which a zoomed-in reader needs
88
+ * around an open overlay. The value is read per touch, so a pinch during the
89
+ * lock counts from the next drag.
90
+ */
91
+ export function isPageZoomedIn(doc: Document): boolean {
92
+ return (doc.defaultView?.visualViewport?.scale ?? 1) > 1;
93
+ }
94
+
95
+ /**
96
+ * Whether `element` is a native control that takes a finger's drag itself. A
97
+ * range input moves its thumb, so the drag never reaches the page.
98
+ */
99
+ function takesDragItself(element: Element): boolean {
100
+ // `:disabled` also covers a slider inside a disabled fieldset.
101
+ return element.matches('input[type="range"]:not(:disabled)');
102
+ }
103
+
104
+ /**
105
+ * Whether a scroller in the scroll chain of `target` takes a pan of (`dx`,
106
+ * `dy`) before the page does.
107
+ */
108
+ export function isPanAbsorbedBeforePage(
109
+ target: EventTarget | null,
110
+ dx: number,
111
+ dy: number,
112
+ ): boolean {
113
+ if (!(target instanceof Node)) {
114
+ return false;
115
+ }
116
+ const doc = target.ownerDocument ?? document;
117
+ const view = doc.defaultView;
118
+ if (view == null) {
119
+ return false;
120
+ }
121
+ const isVertical = Math.abs(dy) >= Math.abs(dx);
122
+ for (
123
+ let node: Node | null = target;
124
+ node != null;
125
+ node = parentAcrossShadow(node)
126
+ ) {
127
+ if (!(node instanceof Element)) {
128
+ continue;
129
+ }
130
+ if (takesDragItself(node)) {
131
+ return true;
132
+ }
133
+ if (
134
+ node === doc.documentElement ||
135
+ node === doc.body ||
136
+ node === doc.scrollingElement
137
+ ) {
138
+ break;
139
+ }
140
+ const style = view.getComputedStyle(node);
141
+ if (takesPan(node, style, isVertical, dx, dy)) {
142
+ return true;
143
+ }
144
+ if (chainsToViewport(node, style)) {
145
+ break;
146
+ }
147
+ }
148
+ return false;
149
+ }