@astryxdesign/core 0.7.5 → 0.7.6-canary.0d71e8d

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 (912) hide show
  1. package/dist/AlertDialog/AlertDialog.d.ts +1 -1
  2. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  3. package/dist/AlertDialog/AlertDialog.js +5 -5
  4. package/dist/AppShell/AppShell.d.ts.map +1 -1
  5. package/dist/AppShell/AppShell.js +183 -5
  6. package/dist/AppShell/observeMainOverflow.d.ts +9 -0
  7. package/dist/AppShell/observeMainOverflow.d.ts.map +1 -0
  8. package/dist/AppShell/observeMainOverflow.js +125 -0
  9. package/dist/Avatar/Avatar.d.ts.map +1 -1
  10. package/dist/Avatar/Avatar.js +12 -3
  11. package/dist/Badge/Badge.d.ts.map +1 -1
  12. package/dist/Badge/Badge.js +7 -1
  13. package/dist/BottomSheet/BottomSheet.js +1 -1
  14. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  15. package/dist/BottomSheet/BottomSheetPanel.js +2 -1
  16. package/dist/BottomSheet/useSheetGestures.d.ts +12 -0
  17. package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
  18. package/dist/BottomSheet/useSheetGestures.js +30 -3
  19. package/dist/Button/Button.js +4 -4
  20. package/dist/Carousel/Carousel.d.ts +3 -1
  21. package/dist/Carousel/Carousel.d.ts.map +1 -1
  22. package/dist/Carousel/Carousel.js +12 -3
  23. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  24. package/dist/CheckboxInput/CheckboxInput.js +6 -5
  25. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  26. package/dist/ClickableCard/ClickableCard.js +37 -4
  27. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  28. package/dist/ComplexSelector/ComplexSelector.js +41 -4
  29. package/dist/DateInput/DateInput.d.ts.map +1 -1
  30. package/dist/DateInput/DateInput.js +12 -4
  31. package/dist/DateInput/MonthScroller.d.ts.map +1 -1
  32. package/dist/DateInput/MonthScroller.js +101 -15
  33. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  34. package/dist/DateInput/TouchDateField.js +8 -3
  35. package/dist/DateInput/Wheel.d.ts.map +1 -1
  36. package/dist/DateInput/Wheel.js +11 -7
  37. package/dist/DateInput/usePointerDragScroll.d.ts +10 -1
  38. package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -1
  39. package/dist/DateInput/usePointerDragScroll.js +25 -9
  40. package/dist/DateInput/useScrollSettle.d.ts +3 -1
  41. package/dist/DateInput/useScrollSettle.d.ts.map +1 -1
  42. package/dist/DateInput/useScrollSettle.js +37 -8
  43. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  44. package/dist/DateRangeInput/DateRangeInput.js +1 -1
  45. package/dist/DateTimeInput/DateTimeInput.d.ts +5 -2
  46. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  47. package/dist/DateTimeInput/DateTimeInput.js +23 -12
  48. package/dist/DateTimeInput/NativeTimeSegment.d.ts.map +1 -1
  49. package/dist/DateTimeInput/NativeTimeSegment.js +5 -4
  50. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  51. package/dist/DateTimeInput/TouchDateTimeField.js +4 -3
  52. package/dist/Dialog/Dialog.d.ts.map +1 -1
  53. package/dist/Dialog/Dialog.js +34 -9
  54. package/dist/Dialog/DialogHeader.d.ts.map +1 -1
  55. package/dist/Dialog/DialogHeader.js +5 -4
  56. package/dist/Divider/Divider.d.ts.map +1 -1
  57. package/dist/Divider/Divider.js +2 -1
  58. package/dist/Drawer/Drawer.d.ts +1 -0
  59. package/dist/Drawer/Drawer.d.ts.map +1 -1
  60. package/dist/Drawer/Drawer.js +7 -2
  61. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  62. package/dist/DropdownMenu/DropdownMenu.js +35 -22
  63. package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts.map +1 -1
  64. package/dist/DropdownMenu/MenuBottomSheetActionList.js +6 -5
  65. package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts +20 -2
  66. package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts.map +1 -1
  67. package/dist/DropdownMenu/lazyMenuBottomSheet.js +31 -3
  68. package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
  69. package/dist/DropdownMenu/renderDropdownItems.js +21 -16
  70. package/dist/EmptyState/EmptyState.d.ts.map +1 -1
  71. package/dist/EmptyState/EmptyState.js +2 -1
  72. package/dist/Field/FieldLabel.d.ts +1 -1
  73. package/dist/Field/FieldLabel.d.ts.map +1 -1
  74. package/dist/Field/FieldLabel.js +4 -4
  75. package/dist/Field/InputClearButton.js +3 -3
  76. package/dist/Field/PanelSearchInput.js +2 -2
  77. package/dist/FieldStatus/FieldStatus.d.ts +3 -0
  78. package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
  79. package/dist/FieldStatus/FieldStatus.js +3 -2
  80. package/dist/FileInput/FileInput.d.ts +3 -0
  81. package/dist/FileInput/FileInput.d.ts.map +1 -1
  82. package/dist/FileInput/FileInput.js +34 -13
  83. package/dist/Heading/Heading.js +1 -1
  84. package/dist/Icon/Icon.js +1 -1
  85. package/dist/Indicator/CheckIndicator.d.ts.map +1 -1
  86. package/dist/Indicator/CheckIndicator.js +2 -1
  87. package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
  88. package/dist/Indicator/CheckboxIndicator.js +3 -1
  89. package/dist/Indicator/RadioIndicator.d.ts.map +1 -1
  90. package/dist/Indicator/RadioIndicator.js +3 -1
  91. package/dist/Item/Item.d.ts.map +1 -1
  92. package/dist/Item/Item.js +21 -7
  93. package/dist/Item/ItemSwipeLayer.js +1 -1
  94. package/dist/Layer/popoverOperations.d.ts +27 -0
  95. package/dist/Layer/popoverOperations.d.ts.map +1 -0
  96. package/dist/Layer/popoverOperations.js +159 -0
  97. package/dist/Layer/useLayer.d.ts +1 -1
  98. package/dist/Layer/useLayer.d.ts.map +1 -1
  99. package/dist/Layer/useLayer.js +120 -65
  100. package/dist/Layout/Layout.js +1 -1
  101. package/dist/Layout/LayoutContent.js +1 -1
  102. package/dist/Layout/LayoutFooter.js +1 -1
  103. package/dist/Layout/LayoutHeader.js +1 -1
  104. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  105. package/dist/Lightbox/Lightbox.js +5 -0
  106. package/dist/Lightbox/LightboxViewport.a11y.browser.spec.js +5 -4
  107. package/dist/Link/Link.d.ts.map +1 -1
  108. package/dist/Link/Link.js +8 -3
  109. package/dist/List/List.js +1 -1
  110. package/dist/List/ListItem.js +3 -3
  111. package/dist/Markdown/plugins/headingLinks.a11y.chromium.spec.js +1 -1
  112. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  113. package/dist/MobileNav/MobileNav.js +7 -2
  114. package/dist/MultiSelector/CreateRow.a11y.chromium.spec.js +7 -6
  115. package/dist/MultiSelector/MultiSelector.d.ts +1 -1
  116. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  117. package/dist/MultiSelector/MultiSelector.js +26 -10
  118. package/dist/NavMenu/NavHeadingMenuItem.d.ts.map +1 -1
  119. package/dist/NavMenu/NavHeadingMenuItem.js +5 -29
  120. package/dist/NumberInput/NumberInput.d.ts +3 -1
  121. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  122. package/dist/NumberInput/NumberInput.js +26 -5
  123. package/dist/NumberInput/numberParser.d.ts +3 -0
  124. package/dist/NumberInput/numberParser.d.ts.map +1 -1
  125. package/dist/NumberInput/numberParser.js +7 -44
  126. package/dist/Outline/Outline.d.ts.map +1 -1
  127. package/dist/Outline/Outline.js +27 -0
  128. package/dist/Popover/Popover.d.ts.map +1 -1
  129. package/dist/Popover/Popover.js +32 -12
  130. package/dist/Popover/usePopover.d.ts.map +1 -1
  131. package/dist/Popover/usePopover.js +10 -3
  132. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  133. package/dist/PowerSearch/PowerSearch.js +37 -30
  134. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  135. package/dist/ProgressBar/ProgressBar.js +16 -12
  136. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  137. package/dist/RadioList/RadioListItem.js +11 -3
  138. package/dist/Resizable/useResizable.d.ts.map +1 -1
  139. package/dist/Resizable/useResizable.js +28 -2
  140. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  141. package/dist/SegmentedControl/SegmentedControlItem.js +4 -1
  142. package/dist/Selector/useSelectorPresentation.d.ts +8 -1
  143. package/dist/Selector/useSelectorPresentation.d.ts.map +1 -1
  144. package/dist/Selector/useSelectorPresentation.js +20 -4
  145. package/dist/SideNav/SideNavItem.d.ts +2 -2
  146. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  147. package/dist/SideNav/SideNavItem.js +18 -7
  148. package/dist/Skeleton/Skeleton.d.ts.map +1 -1
  149. package/dist/Skeleton/Skeleton.js +1 -1
  150. package/dist/Slider/Slider.d.ts.map +1 -1
  151. package/dist/Slider/Slider.js +10 -2
  152. package/dist/Spinner/Spinner.d.ts.map +1 -1
  153. package/dist/Spinner/Spinner.js +3 -3
  154. package/dist/Stack/Stack.js +1 -1
  155. package/dist/Stack/StackItem.js +1 -1
  156. package/dist/Stepper/Step.d.ts.map +1 -1
  157. package/dist/Stepper/Step.js +26 -6
  158. package/dist/Switch/Switch.d.ts.map +1 -1
  159. package/dist/Switch/Switch.js +10 -3
  160. package/dist/TabList/TabList.d.ts.map +1 -1
  161. package/dist/TabList/TabList.js +16 -1
  162. package/dist/Table/Table.d.ts.map +1 -1
  163. package/dist/Table/Table.js +36 -10
  164. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  165. package/dist/Table/plugins/columnResize/useTableColumnResize.js +9 -1
  166. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  167. package/dist/Table/plugins/sortable/useTableSortable.js +46 -58
  168. package/dist/Text/Text.js +1 -1
  169. package/dist/Text/useTruncation.d.ts.map +1 -1
  170. package/dist/Text/useTruncation.js +23 -5
  171. package/dist/TextArea/TextArea.d.ts +1 -1
  172. package/dist/TextArea/TextArea.d.ts.map +1 -1
  173. package/dist/TextArea/TextArea.js +13 -2
  174. package/dist/TextInput/TextInput.d.ts.map +1 -1
  175. package/dist/TextInput/TextInput.js +3 -3
  176. package/dist/TimeInput/TimeInput.d.ts +6 -2
  177. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  178. package/dist/TimeInput/TimeInput.js +21 -14
  179. package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
  180. package/dist/TimeInput/TouchTimeField.js +5 -4
  181. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  182. package/dist/Timestamp/Timestamp.js +2 -2
  183. package/dist/Timestamp/TimestampHoverCard.js +4 -4
  184. package/dist/Toast/Toast.d.ts.map +1 -1
  185. package/dist/Toast/Toast.js +60 -20
  186. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  187. package/dist/Toast/ToastViewport.js +101 -54
  188. package/dist/ToggleButton/ToggleButtonGroup.d.ts +7 -1
  189. package/dist/ToggleButton/ToggleButtonGroup.d.ts.map +1 -1
  190. package/dist/ToggleButton/ToggleButtonGroup.js +16 -2
  191. package/dist/Token/Token.d.ts +1 -1
  192. package/dist/Token/Token.d.ts.map +1 -1
  193. package/dist/Token/Token.js +52 -5
  194. package/dist/Token/TokenLink.d.ts.map +1 -1
  195. package/dist/Token/TokenLink.js +14 -2
  196. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  197. package/dist/Tokenizer/Tokenizer.js +44 -7
  198. package/dist/Tokenizer/TokenizerBottomSheet.js +3 -3
  199. package/dist/Tokenizer/TokenizerClearAllMessageContext.d.ts +2 -0
  200. package/dist/Tokenizer/TokenizerClearAllMessageContext.d.ts.map +1 -0
  201. package/dist/Tokenizer/TokenizerClearAllMessageContext.js +17 -0
  202. package/dist/Toolbar/Toolbar.d.ts.map +1 -1
  203. package/dist/Toolbar/Toolbar.js +2 -1
  204. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  205. package/dist/TopNav/TopNavMegaMenu.js +3 -0
  206. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  207. package/dist/TopNav/TopNavMenu.js +1 -0
  208. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  209. package/dist/TreeList/TreeListItem.js +27 -4
  210. package/dist/Typeahead/BaseTypeahead.d.ts +4 -4
  211. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  212. package/dist/Typeahead/BaseTypeahead.js +43 -7
  213. package/dist/Typeahead/Typeahead.d.ts +1 -1
  214. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  215. package/dist/Typeahead/Typeahead.js +43 -9
  216. package/dist/astryx.css +25 -4
  217. package/dist/gestures/GestureArena.d.ts +32 -1
  218. package/dist/gestures/GestureArena.d.ts.map +1 -1
  219. package/dist/gestures/GestureArena.js +110 -9
  220. package/dist/gestures/GestureHost.d.ts +351 -0
  221. package/dist/gestures/GestureHost.d.ts.map +1 -0
  222. package/dist/gestures/GestureHost.js +1773 -0
  223. package/dist/gestures/GestureRecognizer.d.ts +13 -1
  224. package/dist/gestures/GestureRecognizer.d.ts.map +1 -1
  225. package/dist/gestures/GestureRecognizer.js +19 -1
  226. package/dist/gestures/LongPressGestureRecognizer.d.ts +1 -0
  227. package/dist/gestures/LongPressGestureRecognizer.d.ts.map +1 -1
  228. package/dist/gestures/LongPressGestureRecognizer.js +3 -0
  229. package/dist/gestures/PanGestureRecognizer.d.ts +1 -0
  230. package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -1
  231. package/dist/gestures/PanGestureRecognizer.js +3 -0
  232. package/dist/gestures/PinchGestureRecognizer.d.ts +31 -0
  233. package/dist/gestures/PinchGestureRecognizer.d.ts.map +1 -0
  234. package/dist/gestures/PinchGestureRecognizer.js +128 -0
  235. package/dist/gestures/PressTracker.d.ts +112 -0
  236. package/dist/gestures/PressTracker.d.ts.map +1 -0
  237. package/dist/gestures/PressTracker.js +267 -0
  238. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts +71 -0
  239. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -0
  240. package/dist/gestures/ScreenEdgePanGestureRecognizer.js +223 -0
  241. package/dist/gestures/SwipeGestureRecognizer.d.ts +37 -0
  242. package/dist/gestures/SwipeGestureRecognizer.d.ts.map +1 -0
  243. package/dist/gestures/SwipeGestureRecognizer.js +148 -0
  244. package/dist/gestures/TapGestureRecognizer.d.ts +1 -0
  245. package/dist/gestures/TapGestureRecognizer.d.ts.map +1 -1
  246. package/dist/gestures/TapGestureRecognizer.js +3 -0
  247. package/dist/gestures/VelocityTracker.d.ts +6 -2
  248. package/dist/gestures/VelocityTracker.d.ts.map +1 -1
  249. package/dist/gestures/VelocityTracker.js +7 -3
  250. package/dist/gestures/haptics.d.ts +65 -0
  251. package/dist/gestures/haptics.d.ts.map +1 -0
  252. package/dist/gestures/haptics.js +182 -0
  253. package/dist/gestures/index.d.ts +37 -0
  254. package/dist/gestures/index.d.ts.map +1 -0
  255. package/dist/gestures/index.js +25 -0
  256. package/dist/gestures/nativeScroll.d.ts +42 -0
  257. package/dist/gestures/nativeScroll.d.ts.map +1 -0
  258. package/dist/gestures/nativeScroll.js +228 -0
  259. package/dist/gestures/touchAction.d.ts +60 -0
  260. package/dist/gestures/touchAction.d.ts.map +1 -0
  261. package/dist/gestures/touchAction.js +157 -0
  262. package/dist/gestures/touchActionRule.d.ts +34 -0
  263. package/dist/gestures/touchActionRule.d.ts.map +1 -0
  264. package/dist/gestures/touchActionRule.js +140 -0
  265. package/dist/gestures/types.d.ts +18 -7
  266. package/dist/gestures/types.d.ts.map +1 -1
  267. package/dist/gestures/types.js +22 -2
  268. package/dist/gestures/useGestureRecognizer.d.ts +56 -0
  269. package/dist/gestures/useGestureRecognizer.d.ts.map +1 -0
  270. package/dist/gestures/useGestureRecognizer.js +226 -0
  271. package/dist/hooks/index.d.ts +1 -1
  272. package/dist/hooks/index.d.ts.map +1 -1
  273. package/dist/hooks/modalAnnounce.d.ts.map +1 -1
  274. package/dist/hooks/modalAnnounce.js +107 -61
  275. package/dist/hooks/scrollKeyboardDelegation.d.ts.map +1 -1
  276. package/dist/hooks/scrollKeyboardDelegation.js +7 -3
  277. package/dist/hooks/useAdaptivePresentation.d.ts.map +1 -1
  278. package/dist/hooks/useAdaptivePresentation.js +4 -1
  279. package/dist/hooks/useAnnounce.d.ts +101 -42
  280. package/dist/hooks/useAnnounce.d.ts.map +1 -1
  281. package/dist/hooks/useAnnounce.js +161 -75
  282. package/dist/hooks/useAnnounceRenderedText.d.ts +11 -3
  283. package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
  284. package/dist/hooks/useAnnounceRenderedText.js +5 -3
  285. package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
  286. package/dist/hooks/useBusyAnnouncement.js +6 -12
  287. package/dist/hooks/useMenuHover.d.ts.map +1 -1
  288. package/dist/hooks/useMenuHover.js +12 -1
  289. package/dist/hooks/useScrollOverflow.d.ts +2 -1
  290. package/dist/hooks/useScrollOverflow.d.ts.map +1 -1
  291. package/dist/hooks/useScrollOverflow.js +56 -10
  292. package/dist/i18n/generated-locales/af-ZA.generated.d.ts.map +1 -1
  293. package/dist/i18n/generated-locales/af-ZA.generated.js +0 -5
  294. package/dist/i18n/generated-locales/ar-SA.generated.d.ts.map +1 -1
  295. package/dist/i18n/generated-locales/ar-SA.generated.js +0 -5
  296. package/dist/i18n/generated-locales/ca-ES.generated.d.ts.map +1 -1
  297. package/dist/i18n/generated-locales/ca-ES.generated.js +0 -5
  298. package/dist/i18n/generated-locales/cs-CZ.generated.d.ts.map +1 -1
  299. package/dist/i18n/generated-locales/cs-CZ.generated.js +0 -5
  300. package/dist/i18n/generated-locales/da-DK.generated.d.ts.map +1 -1
  301. package/dist/i18n/generated-locales/da-DK.generated.js +0 -5
  302. package/dist/i18n/generated-locales/de-DE.generated.d.ts.map +1 -1
  303. package/dist/i18n/generated-locales/de-DE.generated.js +0 -5
  304. package/dist/i18n/generated-locales/el-GR.generated.d.ts.map +1 -1
  305. package/dist/i18n/generated-locales/el-GR.generated.js +0 -5
  306. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  307. package/dist/i18n/generated-locales/en.generated.js +8 -5
  308. package/dist/i18n/generated-locales/es-ES.generated.d.ts.map +1 -1
  309. package/dist/i18n/generated-locales/es-ES.generated.js +0 -5
  310. package/dist/i18n/generated-locales/fi-FI.generated.d.ts.map +1 -1
  311. package/dist/i18n/generated-locales/fi-FI.generated.js +0 -5
  312. package/dist/i18n/generated-locales/fr-FR.generated.d.ts.map +1 -1
  313. package/dist/i18n/generated-locales/fr-FR.generated.js +0 -5
  314. package/dist/i18n/generated-locales/he-IL.generated.d.ts.map +1 -1
  315. package/dist/i18n/generated-locales/he-IL.generated.js +0 -5
  316. package/dist/i18n/generated-locales/hu-HU.generated.d.ts.map +1 -1
  317. package/dist/i18n/generated-locales/hu-HU.generated.js +0 -5
  318. package/dist/i18n/generated-locales/it-IT.generated.d.ts.map +1 -1
  319. package/dist/i18n/generated-locales/it-IT.generated.js +0 -5
  320. package/dist/i18n/generated-locales/ja-JP.generated.d.ts.map +1 -1
  321. package/dist/i18n/generated-locales/ja-JP.generated.js +0 -5
  322. package/dist/i18n/generated-locales/ko-KR.generated.d.ts.map +1 -1
  323. package/dist/i18n/generated-locales/ko-KR.generated.js +0 -5
  324. package/dist/i18n/generated-locales/nl-NL.generated.d.ts.map +1 -1
  325. package/dist/i18n/generated-locales/nl-NL.generated.js +0 -5
  326. package/dist/i18n/generated-locales/no-NO.generated.d.ts.map +1 -1
  327. package/dist/i18n/generated-locales/no-NO.generated.js +0 -5
  328. package/dist/i18n/generated-locales/pl-PL.generated.d.ts.map +1 -1
  329. package/dist/i18n/generated-locales/pl-PL.generated.js +0 -5
  330. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  331. package/dist/i18n/generated-locales/pseudo.generated.js +8 -5
  332. package/dist/i18n/generated-locales/pt-BR.generated.d.ts.map +1 -1
  333. package/dist/i18n/generated-locales/pt-BR.generated.js +0 -5
  334. package/dist/i18n/generated-locales/pt-PT.generated.d.ts.map +1 -1
  335. package/dist/i18n/generated-locales/pt-PT.generated.js +0 -5
  336. package/dist/i18n/generated-locales/ro-RO.generated.d.ts.map +1 -1
  337. package/dist/i18n/generated-locales/ro-RO.generated.js +0 -5
  338. package/dist/i18n/generated-locales/ru-RU.generated.d.ts.map +1 -1
  339. package/dist/i18n/generated-locales/ru-RU.generated.js +0 -5
  340. package/dist/i18n/generated-locales/sr-SP.generated.d.ts.map +1 -1
  341. package/dist/i18n/generated-locales/sr-SP.generated.js +0 -5
  342. package/dist/i18n/generated-locales/sv-SE.generated.d.ts.map +1 -1
  343. package/dist/i18n/generated-locales/sv-SE.generated.js +0 -5
  344. package/dist/i18n/generated-locales/tr-TR.generated.d.ts.map +1 -1
  345. package/dist/i18n/generated-locales/tr-TR.generated.js +0 -5
  346. package/dist/i18n/generated-locales/uk-UA.generated.d.ts.map +1 -1
  347. package/dist/i18n/generated-locales/uk-UA.generated.js +0 -5
  348. package/dist/i18n/generated-locales/vi-VN.generated.d.ts.map +1 -1
  349. package/dist/i18n/generated-locales/vi-VN.generated.js +0 -5
  350. package/dist/i18n/generated-locales/zh-CN.generated.d.ts.map +1 -1
  351. package/dist/i18n/generated-locales/zh-CN.generated.js +0 -5
  352. package/dist/i18n/generated-locales/zh-TW.generated.d.ts.map +1 -1
  353. package/dist/i18n/generated-locales/zh-TW.generated.js +0 -5
  354. package/dist/i18n/useListFormatter.d.ts +9 -0
  355. package/dist/i18n/useListFormatter.d.ts.map +1 -0
  356. package/dist/i18n/useListFormatter.js +41 -0
  357. package/dist/motion/animator.d.ts +83 -8
  358. package/dist/motion/animator.d.ts.map +1 -1
  359. package/dist/motion/animator.js +701 -119
  360. package/dist/motion/coast.d.ts +4 -1
  361. package/dist/motion/coast.d.ts.map +1 -1
  362. package/dist/motion/coast.js +4 -2
  363. package/dist/motion/reducedMotion.d.ts.map +1 -1
  364. package/dist/motion/reducedMotion.js +6 -2
  365. package/dist/motion/reducedMotionPlan.d.ts +7 -0
  366. package/dist/motion/reducedMotionPlan.d.ts.map +1 -1
  367. package/dist/motion/reducedMotionPlan.js +14 -1
  368. package/dist/motion/resolveMotion.d.ts +42 -0
  369. package/dist/motion/resolveMotion.d.ts.map +1 -0
  370. package/dist/motion/resolveMotion.js +43 -0
  371. package/dist/motion/roleValue.d.ts +2 -1
  372. package/dist/motion/roleValue.d.ts.map +1 -1
  373. package/dist/motion/roleValue.js +2 -1
  374. package/dist/motion/uikit/timing.d.ts +7 -1
  375. package/dist/motion/uikit/timing.d.ts.map +1 -1
  376. package/dist/motion/uikit/timing.js +19 -1
  377. package/dist/theme/defineTheme.d.ts +19 -5
  378. package/dist/theme/defineTheme.d.ts.map +1 -1
  379. package/dist/theme/defineTheme.js +64 -4
  380. package/dist/theme/domainTokens/domainTokenDefaults.d.ts +3 -0
  381. package/dist/theme/domainTokens/domainTokenDefaults.d.ts.map +1 -0
  382. package/dist/theme/domainTokens/domainTokenDefaults.js +19 -0
  383. package/dist/theme/domainTokens/index.d.ts +5 -4
  384. package/dist/theme/domainTokens/index.d.ts.map +1 -1
  385. package/dist/theme/domainTokens/index.js +5 -9
  386. package/dist/theme/index.d.ts +1 -0
  387. package/dist/theme/index.d.ts.map +1 -1
  388. package/dist/theme/motionKnobs.d.ts +56 -0
  389. package/dist/theme/motionKnobs.d.ts.map +1 -0
  390. package/dist/theme/motionKnobs.js +48 -0
  391. package/dist/theme/resolveThemeValues.d.ts +11 -4
  392. package/dist/theme/resolveThemeValues.d.ts.map +1 -1
  393. package/dist/theme/resolveThemeValues.js +40 -4
  394. package/dist/theme/themeAdaptations.d.ts +7 -3
  395. package/dist/theme/themeAdaptations.d.ts.map +1 -1
  396. package/dist/theme/themeAdaptations.js +36 -7
  397. package/dist/theme/themeMotion.d.ts +96 -0
  398. package/dist/theme/themeMotion.d.ts.map +1 -0
  399. package/dist/theme/themeMotion.js +177 -0
  400. package/dist/theme/tokenReferences.d.ts +31 -0
  401. package/dist/theme/tokenReferences.d.ts.map +1 -0
  402. package/dist/theme/tokenReferences.js +132 -0
  403. package/dist/theme/tokens.d.ts +1 -0
  404. package/dist/theme/tokens.d.ts.map +1 -1
  405. package/dist/theme/tokens.js +9 -129
  406. package/dist/theme/tokens.stylex.d.ts +12 -0
  407. package/dist/theme/tokens.stylex.d.ts.map +1 -1
  408. package/dist/theme/tokens.stylex.js +12 -0
  409. package/dist/utils/focusOutline.stylex.d.ts +6 -0
  410. package/dist/utils/focusOutline.stylex.d.ts.map +1 -1
  411. package/dist/utils/focusOutline.stylex.js +7 -0
  412. package/dist/utils/focusReturn.d.ts +17 -1
  413. package/dist/utils/focusReturn.d.ts.map +1 -1
  414. package/dist/utils/focusReturn.js +11 -4
  415. package/dist/utils/getNodeText.d.ts +8 -0
  416. package/dist/utils/getNodeText.d.ts.map +1 -0
  417. package/dist/utils/getNodeText.js +37 -0
  418. package/dist/utils/interactionModality.d.ts +11 -2
  419. package/dist/utils/interactionModality.d.ts.map +1 -1
  420. package/dist/utils/interactionModality.js +58 -5
  421. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  422. package/dist/utils/interactionOverlay.stylex.js +17 -8
  423. package/dist/utils/plainDate.d.ts +2 -0
  424. package/dist/utils/plainDate.d.ts.map +1 -1
  425. package/dist/utils/plainDate.js +46 -3
  426. package/dist/utils/presentation.d.ts +50 -0
  427. package/dist/utils/presentation.d.ts.map +1 -0
  428. package/dist/utils/presentation.js +125 -0
  429. package/dist/utils/pressFeedback.d.ts.map +1 -1
  430. package/dist/utils/pressFeedback.js +20 -1
  431. package/dist/utils/primaryClick.d.ts +11 -0
  432. package/dist/utils/primaryClick.d.ts.map +1 -0
  433. package/dist/utils/primaryClick.js +25 -0
  434. package/dist/utils/sharedMutationObserver.d.ts +19 -11
  435. package/dist/utils/sharedMutationObserver.d.ts.map +1 -1
  436. package/dist/utils/sharedMutationObserver.js +66 -26
  437. package/dist/utils/timeFormat.d.ts +47 -0
  438. package/dist/utils/timeFormat.d.ts.map +1 -0
  439. package/dist/utils/timeFormat.js +240 -0
  440. package/dist/utils/touchPresentation.d.ts +2 -2
  441. package/dist/utils/touchPresentation.d.ts.map +1 -1
  442. package/dist/utils/touchPresentation.js +13 -8
  443. package/dist/utils/touchPresentation.stylex.d.ts +15 -0
  444. package/dist/utils/touchPresentation.stylex.d.ts.map +1 -0
  445. package/dist/utils/touchPresentation.stylex.js +33 -0
  446. package/dist/utils/touchQueries.d.ts +13 -0
  447. package/dist/utils/touchQueries.d.ts.map +1 -0
  448. package/dist/utils/touchQueries.js +15 -0
  449. package/dist/utils/unicodeDigits.d.ts +20 -0
  450. package/dist/utils/unicodeDigits.d.ts.map +1 -0
  451. package/dist/utils/unicodeDigits.js +70 -0
  452. package/dist/utils/useFocusAcrossSwap.d.ts +19 -0
  453. package/dist/utils/useFocusAcrossSwap.d.ts.map +1 -0
  454. package/dist/utils/useFocusAcrossSwap.js +41 -0
  455. package/locales/af-ZA.json +0 -21
  456. package/locales/ar-SA.json +0 -21
  457. package/locales/ca-ES.json +0 -21
  458. package/locales/cs-CZ.json +0 -21
  459. package/locales/da-DK.json +0 -21
  460. package/locales/de-DE.json +0 -21
  461. package/locales/el-GR.json +0 -21
  462. package/locales/en.json +35 -23
  463. package/locales/es-ES.json +0 -21
  464. package/locales/fi-FI.json +0 -21
  465. package/locales/fr-FR.json +0 -21
  466. package/locales/he-IL.json +0 -21
  467. package/locales/hu-HU.json +0 -21
  468. package/locales/it-IT.json +0 -21
  469. package/locales/ja-JP.json +0 -21
  470. package/locales/ko-KR.json +0 -21
  471. package/locales/nl-NL.json +0 -21
  472. package/locales/no-NO.json +0 -21
  473. package/locales/pl-PL.json +0 -21
  474. package/locales/pseudo.json +23 -14
  475. package/locales/pt-BR.json +0 -21
  476. package/locales/pt-PT.json +0 -21
  477. package/locales/ro-RO.json +0 -21
  478. package/locales/ru-RU.json +0 -21
  479. package/locales/sr-SP.json +0 -21
  480. package/locales/sv-SE.json +0 -21
  481. package/locales/tr-TR.json +0 -21
  482. package/locales/uk-UA.json +0 -21
  483. package/locales/vi-VN.json +0 -21
  484. package/locales/zh-CN.json +0 -21
  485. package/locales/zh-TW.json +0 -21
  486. package/package.json +5 -4
  487. package/src/AlertDialog/AlertDialog.tsx +6 -5
  488. package/src/AlertDialog/__tests__/AlertDialog.a11y.chromium.spec.ts +18 -6
  489. package/src/AppShell/AppShell.doc.mjs +1 -1
  490. package/src/AppShell/AppShell.spec.md +9 -12
  491. package/src/AppShell/AppShell.test.tsx +164 -2
  492. package/src/AppShell/AppShell.tsx +225 -5
  493. package/src/AppShell/__tests__/AppShellMainKeyboard.a11y.browser.spec.ts +534 -0
  494. package/src/AppShell/observeMainOverflow.test.ts +173 -0
  495. package/src/AppShell/observeMainOverflow.ts +143 -0
  496. package/src/Avatar/Avatar.spec.md +22 -22
  497. package/src/Avatar/Avatar.tsx +18 -1
  498. package/src/Avatar/__tests__/AvatarForcedColors.a11y.chromium.spec.ts +126 -0
  499. package/src/Badge/Badge.doc.mjs +1 -1
  500. package/src/Badge/Badge.tsx +19 -2
  501. package/src/Badge/__tests__/BadgeLargerText.a11y.chromium.spec.ts +260 -0
  502. package/src/BottomSheet/BottomSheet.test.tsx +46 -0
  503. package/src/BottomSheet/BottomSheet.tsx +1 -1
  504. package/src/BottomSheet/BottomSheetPanel.tsx +2 -1
  505. package/src/BottomSheet/useSheetGestures.test.ts +52 -0
  506. package/src/BottomSheet/useSheetGestures.ts +37 -6
  507. package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.chromium.spec.ts +18 -6
  508. package/src/Button/Button.tsx +4 -4
  509. package/src/Calendar/Calendar.spec.md +87 -48
  510. package/src/Calendar/__tests__/Calendar.a11y.chromium.spec.ts +21 -7
  511. package/src/Carousel/Carousel.doc.mjs +1 -1
  512. package/src/Carousel/Carousel.spec.md +9 -9
  513. package/src/Carousel/Carousel.test.tsx +124 -3
  514. package/src/Carousel/Carousel.tsx +10 -2
  515. package/src/Carousel/__tests__/Carousel.a11y.chromium.spec.ts +21 -7
  516. package/src/Carousel/__tests__/Carousel.a11y.known-failures.ts +1 -16
  517. package/src/Chat/ChatComposer.spec.md +75 -59
  518. package/src/Chat/ChatComposerTokenElement.spec.md +45 -33
  519. package/src/Chat/ChatDictationButton.spec.md +126 -81
  520. package/src/Chat/ChatLayout.spec.md +41 -36
  521. package/src/Chat/ChatLayoutScrollButton.spec.md +87 -103
  522. package/src/Chat/ChatMessage.spec.md +64 -65
  523. package/src/Chat/ChatSendButton.spec.md +78 -67
  524. package/src/CheckboxInput/CheckboxInput.tsx +6 -5
  525. package/src/Citation/Citation.spec.md +60 -47
  526. package/src/ClickableCard/ClickableCard.test.tsx +96 -0
  527. package/src/ClickableCard/ClickableCard.tsx +48 -4
  528. package/src/CodeBlock/__tests__/CodeBlockCopyClearance.a11y.chromium.spec.ts +38 -3
  529. package/src/Collapsible/Collapsible.spec.md +2 -0
  530. package/src/Collapsible/CollapsibleGroup.spec.md +57 -29
  531. package/src/Collapsible/__tests__/Collapsible.a11y.chromium.spec.ts +18 -7
  532. package/src/Collapsible/__tests__/CollapsibleGroupAccordion.a11y.chromium.spec.ts +18 -6
  533. package/src/ComplexSelector/ComplexSelector.test.tsx +148 -0
  534. package/src/ComplexSelector/ComplexSelector.tsx +41 -4
  535. package/src/ContextMenu/ContextMenu.spec.md +84 -56
  536. package/src/ContextMenu/ContextMenu.test.tsx +35 -0
  537. package/src/ContextMenu/ContextMenuItem.spec.md +132 -0
  538. package/src/DateInput/DateInput.spec.md +74 -57
  539. package/src/DateInput/DateInput.test.tsx +115 -3
  540. package/src/DateInput/DateInput.tsx +29 -14
  541. package/src/DateInput/DateInputTouch.test.tsx +120 -0
  542. package/src/DateInput/MonthScroller.tsx +106 -20
  543. package/src/DateInput/MonthScrollerSettle.test.tsx +165 -0
  544. package/src/DateInput/TouchDateField.tsx +14 -3
  545. package/src/DateInput/Wheel.tsx +9 -6
  546. package/src/DateInput/__tests__/MonthScrollerSteps.interaction.browser.spec.ts +312 -0
  547. package/src/DateInput/usePointerDragScroll.ts +34 -10
  548. package/src/DateInput/useScrollSettle.ts +38 -7
  549. package/src/DateRangeInput/DateRangeInput.test.tsx +46 -3
  550. package/src/DateRangeInput/DateRangeInput.tsx +16 -12
  551. package/src/DateTimeInput/DateTimeInput.doc.mjs +10 -8
  552. package/src/DateTimeInput/DateTimeInput.spec.md +75 -51
  553. package/src/DateTimeInput/DateTimeInput.test.tsx +81 -0
  554. package/src/DateTimeInput/DateTimeInput.tsx +46 -24
  555. package/src/DateTimeInput/NativeTimeSegment.tsx +4 -6
  556. package/src/DateTimeInput/TouchDateTimeField.tsx +3 -7
  557. package/src/Dialog/Dialog.test.tsx +216 -2
  558. package/src/Dialog/Dialog.tsx +42 -9
  559. package/src/Dialog/DialogHeader.tsx +5 -4
  560. package/src/Dialog/__tests__/DialogSecondDocument.a11y.browser.spec.ts +202 -0
  561. package/src/Divider/Divider.tsx +2 -1
  562. package/src/Drawer/Drawer.spec.md +111 -80
  563. package/src/Drawer/Drawer.test.tsx +35 -0
  564. package/src/Drawer/Drawer.tsx +13 -2
  565. package/src/Drawer/DrawerHeader.spec.md +181 -0
  566. package/src/Drawer/__tests__/DrawerNonModalPageScroll.a11y.chromium.spec.ts +267 -0
  567. package/src/DropdownMenu/DropdownMenu.spec.md +198 -218
  568. package/src/DropdownMenu/DropdownMenu.test.tsx +158 -0
  569. package/src/DropdownMenu/DropdownMenu.tsx +43 -21
  570. package/src/DropdownMenu/DropdownMenuCheckboxItem.spec.md +192 -0
  571. package/src/DropdownMenu/DropdownMenuDivider.spec.md +25 -31
  572. package/src/DropdownMenu/DropdownMenuGroup.spec.md +145 -0
  573. package/src/DropdownMenu/DropdownMenuItem.spec.md +48 -42
  574. package/src/DropdownMenu/DropdownMenuRadioGroup.spec.md +34 -37
  575. package/src/DropdownMenu/DropdownMenuRadioItem.spec.md +54 -53
  576. package/src/DropdownMenu/DropdownMenuSubMenu.spec.md +47 -41
  577. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +34 -0
  578. package/src/DropdownMenu/MenuBottomSheetActionList.tsx +6 -5
  579. package/src/DropdownMenu/__tests__/Menu.a11y.chromium.spec.ts +19 -7
  580. package/src/DropdownMenu/__tests__/MenuButton.a11y.chromium.spec.ts +21 -9
  581. package/src/DropdownMenu/lazyMenuBottomSheet.test.ts +60 -0
  582. package/src/DropdownMenu/lazyMenuBottomSheet.ts +36 -7
  583. package/src/DropdownMenu/renderDropdownItems.tsx +24 -19
  584. package/src/EmptyState/EmptyState.spec.md +35 -29
  585. package/src/EmptyState/EmptyState.tsx +2 -1
  586. package/src/Field/FieldLabel.tsx +5 -4
  587. package/src/Field/InputClearButton.tsx +3 -3
  588. package/src/Field/PanelSearchInput.tsx +2 -2
  589. package/src/FieldStatus/FieldStatus.tsx +9 -2
  590. package/src/FieldStatus/__tests__/FieldStatusAudit.a11y.chromium.spec.ts +477 -0
  591. package/src/FileInput/FileInput.test.tsx +159 -0
  592. package/src/FileInput/FileInput.tsx +34 -6
  593. package/src/FileInput/__tests__/FileInputAudit.a11y.chromium.spec.ts +796 -0
  594. package/src/FormLayout/FormLayout.spec.md +11 -20
  595. package/src/Heading/Heading.tsx +1 -1
  596. package/src/Icon/Icon.tsx +1 -1
  597. package/src/Indicator/CheckIndicator.spec.md +47 -42
  598. package/src/Indicator/CheckIndicator.tsx +2 -1
  599. package/src/Indicator/CheckboxIndicator.spec.md +40 -37
  600. package/src/Indicator/CheckboxIndicator.tsx +3 -1
  601. package/src/Indicator/Indicator.spec.md +188 -0
  602. package/src/Indicator/RadioIndicator.tsx +3 -1
  603. package/src/Item/Item.test.tsx +60 -0
  604. package/src/Item/Item.tsx +16 -8
  605. package/src/Item/ItemSwipeLayer.tsx +1 -1
  606. package/src/Kbd/Kbd.spec.md +81 -38
  607. package/src/Layer/__tests__/LayerBrowserHide.a11y.chromium.spec.ts +126 -0
  608. package/src/Layer/popoverOperations.test.ts +205 -0
  609. package/src/Layer/popoverOperations.ts +172 -0
  610. package/src/Layer/useLayer.test.tsx +426 -4
  611. package/src/Layer/useLayer.tsx +145 -77
  612. package/src/Layout/Layout.spec.md +127 -131
  613. package/src/Layout/Layout.tsx +1 -1
  614. package/src/Layout/LayoutContent.spec.md +205 -0
  615. package/src/Layout/LayoutContent.tsx +1 -1
  616. package/src/Layout/LayoutFooter.spec.md +190 -0
  617. package/src/Layout/LayoutFooter.tsx +1 -1
  618. package/src/Layout/LayoutHeader.spec.md +193 -0
  619. package/src/Layout/LayoutHeader.tsx +1 -1
  620. package/src/Layout/LayoutPanel.spec.md +194 -0
  621. package/src/Layout/__tests__/Layout.a11y.chromium.spec.ts +18 -6
  622. package/src/Lightbox/Lightbox.test.tsx +18 -0
  623. package/src/Lightbox/Lightbox.tsx +5 -0
  624. package/src/Lightbox/LightboxViewport.a11y.browser.spec.ts +8 -4
  625. package/src/Link/Link.spec.md +3 -2
  626. package/src/Link/Link.tsx +11 -0
  627. package/src/Link/__tests__/Link.a11y.chromium.spec.ts +18 -8
  628. package/src/Link/__tests__/Link.truncation.a11y.chromium.spec.ts +58 -0
  629. package/src/List/List.tsx +1 -1
  630. package/src/List/ListItem.spec.md +205 -0
  631. package/src/List/ListItem.tsx +3 -3
  632. package/src/Markdown/plugins/headingLinks.a11y.chromium.spec.ts +1 -1
  633. package/src/MetadataList/MetadataList.spec.md +187 -0
  634. package/src/MetadataList/MetadataListItem.spec.md +165 -0
  635. package/src/MobileNav/MobileNav.test.tsx +15 -0
  636. package/src/MobileNav/MobileNav.tsx +9 -1
  637. package/src/MobileNav/__tests__/MobileNavHeader.a11y.chromium.spec.ts +89 -0
  638. package/src/MoreMenu/MoreMenu.test.tsx +11 -0
  639. package/src/MultiSelector/CreateRow.a11y.chromium.spec.ts +7 -8
  640. package/src/MultiSelector/MultiSelector.spec.md +7 -4
  641. package/src/MultiSelector/MultiSelector.test.tsx +270 -1
  642. package/src/MultiSelector/MultiSelector.tsx +25 -10
  643. package/src/MultiSelector/__tests__/MultiSelector.listbox.a11y.test.tsx +8 -1
  644. package/src/NavMenu/NavHeadingMenu.spec.md +1 -5
  645. package/src/NavMenu/NavHeadingMenuItem.tsx +5 -39
  646. package/src/NumberInput/NumberInput.doc.mjs +13 -7
  647. package/src/NumberInput/NumberInput.spec.md +59 -37
  648. package/src/NumberInput/NumberInput.test.tsx +68 -7
  649. package/src/NumberInput/NumberInput.tsx +44 -4
  650. package/src/NumberInput/__tests__/NumberInput.coarse-pointer.a11y.chromium.spec.ts +102 -0
  651. package/src/NumberInput/numberParser.ts +7 -45
  652. package/src/Outline/Outline.spec.md +165 -69
  653. package/src/Outline/Outline.test.tsx +67 -2
  654. package/src/Outline/Outline.tsx +23 -0
  655. package/src/Outline/modules/parseOutlineFromMarkdown.spec.md +3 -4
  656. package/src/OverflowList/OverflowList.spec.md +102 -55
  657. package/src/Pagination/Pagination.spec.md +158 -84
  658. package/src/Popover/Popover.test.tsx +84 -0
  659. package/src/Popover/Popover.tsx +34 -14
  660. package/src/Popover/__tests__/PopoverSecondDocument.a11y.chromium.spec.ts +70 -8
  661. package/src/Popover/usePopover.tsx +10 -3
  662. package/src/PowerSearch/PowerSearch.test.tsx +24 -0
  663. package/src/PowerSearch/PowerSearch.tsx +42 -31
  664. package/src/ProgressBar/ProgressBar.spec.md +143 -119
  665. package/src/ProgressBar/ProgressBar.test.tsx +108 -32
  666. package/src/ProgressBar/ProgressBar.tsx +58 -10
  667. package/src/ProgressBar/__tests__/ProgressBar.a11y.chromium.spec.ts +21 -9
  668. package/src/ProgressBar/__tests__/ProgressBarMotion.a11y.chromium.spec.ts +831 -0
  669. package/src/RadioList/RadioList.spec.md +1 -1
  670. package/src/RadioList/RadioList.test.tsx +84 -0
  671. package/src/RadioList/RadioListItem.tsx +11 -2
  672. package/src/Resizable/Resizable.spec.md +144 -124
  673. package/src/Resizable/__tests__/ResizeHandle.a11y.chromium.spec.ts +21 -14
  674. package/src/Resizable/useResizable.test.ts +43 -0
  675. package/src/Resizable/useResizable.ts +32 -9
  676. package/src/SegmentedControl/SegmentedControl.test.tsx +84 -0
  677. package/src/SegmentedControl/SegmentedControlItem.tsx +11 -5
  678. package/src/Selector/Selector.test.tsx +90 -1
  679. package/src/Selector/__tests__/Selector.combobox.a11y.test.tsx +8 -1
  680. package/src/Selector/__tests__/Selector.listbox.a11y.test.tsx +8 -1
  681. package/src/Selector/useSelectorPresentation.ts +31 -3
  682. package/src/SideNav/SideNav.test.tsx +151 -4
  683. package/src/SideNav/SideNavItem.spec.md +14 -24
  684. package/src/SideNav/SideNavItem.tsx +27 -10
  685. package/src/SideNav/__tests__/SideNavRailMotion.interaction.browser.spec.ts +176 -51
  686. package/src/Skeleton/Skeleton.tsx +3 -1
  687. package/src/Slider/Slider.test.tsx +31 -0
  688. package/src/Slider/Slider.tsx +8 -3
  689. package/src/Slider/__tests__/Slider.a11y.chromium.spec.ts +19 -7
  690. package/src/Spinner/Spinner.tsx +5 -3
  691. package/src/Stack/Stack.tsx +1 -1
  692. package/src/Stack/StackItem.tsx +1 -1
  693. package/src/Stepper/Step.spec.md +36 -42
  694. package/src/Stepper/Step.tsx +33 -6
  695. package/src/Stepper/Stepper.doc.mjs +1 -1
  696. package/src/Stepper/Stepper.test.tsx +69 -7
  697. package/src/Switch/Switch.spec.md +1 -1
  698. package/src/Switch/Switch.test.tsx +66 -1
  699. package/src/Switch/Switch.tsx +11 -3
  700. package/src/TabList/TabList.test.tsx +58 -4
  701. package/src/TabList/TabList.tsx +16 -1
  702. package/src/TabList/__tests__/TabPressPointer.interaction.browser.spec.ts +163 -0
  703. package/src/Table/Table.spec.md +1 -1
  704. package/src/Table/Table.test.tsx +32 -0
  705. package/src/Table/Table.tsx +43 -11
  706. package/src/Table/__tests__/Table.a11y.chromium.spec.ts +18 -6
  707. package/src/Table/__tests__/Table.a11y.states.ts +1 -5
  708. package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +22 -0
  709. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -4
  710. package/src/Table/plugins/sortable/useTableSortable.test.tsx +73 -144
  711. package/src/Table/plugins/sortable/useTableSortable.tsx +44 -73
  712. package/src/Table/plugins/sortable/useTableSortableState.test.tsx +9 -21
  713. package/src/Text/Text.tsx +1 -1
  714. package/src/Text/useTruncation.test.tsx +128 -1
  715. package/src/Text/useTruncation.ts +23 -5
  716. package/src/TextArea/TextArea.spec.md +10 -13
  717. package/src/TextArea/TextArea.test.tsx +60 -0
  718. package/src/TextArea/TextArea.tsx +15 -1
  719. package/src/TextInput/TextInput.test.tsx +21 -0
  720. package/src/TextInput/TextInput.tsx +3 -1
  721. package/src/TimeInput/NativeTimeInput.test.tsx +17 -0
  722. package/src/TimeInput/Presentation.test.tsx +21 -0
  723. package/src/TimeInput/TimeInput.doc.mjs +8 -8
  724. package/src/TimeInput/TimeInput.spec.md +58 -61
  725. package/src/TimeInput/TimeInput.test.tsx +76 -0
  726. package/src/TimeInput/TimeInput.tsx +36 -18
  727. package/src/TimeInput/TouchTimeField.tsx +4 -6
  728. package/src/Timestamp/Timestamp.spec.md +6 -12
  729. package/src/Timestamp/Timestamp.test.tsx +30 -5
  730. package/src/Timestamp/Timestamp.tsx +6 -2
  731. package/src/Timestamp/TimestampHoverCard.tsx +4 -4
  732. package/src/Toast/Toast.spec.md +15 -24
  733. package/src/Toast/Toast.tsx +104 -36
  734. package/src/Toast/ToastViewport.test.tsx +798 -1
  735. package/src/Toast/ToastViewport.tsx +121 -53
  736. package/src/ToggleButton/ToggleButton.test.tsx +27 -0
  737. package/src/ToggleButton/ToggleButtonGroup.tsx +20 -1
  738. package/src/Token/Token.doc.mjs +2 -2
  739. package/src/Token/Token.spec.md +52 -61
  740. package/src/Token/Token.test.tsx +104 -0
  741. package/src/Token/Token.tsx +75 -5
  742. package/src/Token/TokenLink.tsx +21 -7
  743. package/src/Tokenizer/Tokenizer.spec.md +18 -4
  744. package/src/Tokenizer/Tokenizer.test.tsx +176 -0
  745. package/src/Tokenizer/Tokenizer.tsx +48 -12
  746. package/src/Tokenizer/TokenizerBottomSheet.test.tsx +23 -4
  747. package/src/Tokenizer/TokenizerBottomSheet.tsx +3 -3
  748. package/src/Tokenizer/TokenizerClearAllMessageContext.ts +21 -0
  749. package/src/Toolbar/Toolbar.spec.md +5 -6
  750. package/src/Toolbar/Toolbar.test.tsx +30 -0
  751. package/src/Toolbar/Toolbar.tsx +2 -1
  752. package/src/Toolbar/__tests__/Toolbar.a11y.chromium.spec.ts +18 -6
  753. package/src/Tooltip/__tests__/Tooltip.a11y.chromium.spec.ts +18 -7
  754. package/src/TopNav/TopNav.test.tsx +27 -0
  755. package/src/TopNav/TopNavMegaMenu.test.tsx +21 -0
  756. package/src/TopNav/TopNavMegaMenu.tsx +4 -1
  757. package/src/TopNav/TopNavMenu.test.tsx +17 -0
  758. package/src/TopNav/TopNavMenu.tsx +1 -0
  759. package/src/TreeList/TreeList.test.tsx +26 -0
  760. package/src/TreeList/TreeListItem.tsx +26 -4
  761. package/src/Typeahead/BaseTypeahead.doc.mjs +3 -3
  762. package/src/Typeahead/BaseTypeahead.spec.md +45 -45
  763. package/src/Typeahead/BaseTypeahead.tsx +48 -9
  764. package/src/Typeahead/Typeahead.test.tsx +294 -11
  765. package/src/Typeahead/Typeahead.tsx +51 -9
  766. package/src/__tests__/internalModulesNotExperimental.test.ts +88 -0
  767. package/src/__tests__/pressState.ts +8 -4
  768. package/src/gestures/GestureArena.ts +111 -11
  769. package/src/gestures/GestureHost.ts +2064 -0
  770. package/src/gestures/GestureRecognizer.ts +21 -1
  771. package/src/gestures/LongPressGestureRecognizer.ts +4 -0
  772. package/src/gestures/PanGestureRecognizer.ts +4 -0
  773. package/src/gestures/PinchGestureRecognizer.ts +148 -0
  774. package/src/gestures/PressTracker.ts +386 -0
  775. package/src/gestures/README.md +420 -0
  776. package/src/gestures/ScreenEdgePanGestureRecognizer.ts +256 -0
  777. package/src/gestures/SwipeGestureRecognizer.ts +197 -0
  778. package/src/gestures/TapGestureRecognizer.ts +4 -0
  779. package/src/gestures/VelocityTracker.ts +10 -3
  780. package/src/gestures/__tests__/GestureHost.test.ts +2136 -0
  781. package/src/gestures/__tests__/PanGestureRecognizer.test.ts +4 -4
  782. package/src/gestures/__tests__/PinchGestureRecognizer.test.ts +74 -0
  783. package/src/gestures/__tests__/PressTracker.test.ts +275 -0
  784. package/src/gestures/__tests__/ScreenEdgePanGestureRecognizer.test.ts +498 -0
  785. package/src/gestures/__tests__/SwipeGestureRecognizer.test.ts +108 -0
  786. package/src/gestures/__tests__/arena.test.ts +40 -0
  787. package/src/gestures/__tests__/arenaPinchSwipeEdge.test.ts +193 -0
  788. package/src/gestures/__tests__/browser/build-fixture.mjs +46 -0
  789. package/src/gestures/__tests__/browser/fixture.ts +307 -0
  790. package/src/gestures/__tests__/browser/gestures.interaction.browser.spec.ts +1137 -0
  791. package/src/gestures/__tests__/browserNegotiation.test.ts +293 -0
  792. package/src/gestures/__tests__/haptics.test.ts +187 -0
  793. package/src/gestures/__tests__/harness.ts +52 -4
  794. package/src/gestures/__tests__/pressTrackerFactory.test.ts +59 -0
  795. package/src/gestures/__tests__/recognizerKind.test.ts +78 -0
  796. package/src/gestures/__tests__/touchActionRule.test.ts +54 -0
  797. package/src/gestures/__tests__/useGestureRecognizer.test.tsx +570 -0
  798. package/src/gestures/haptics.ts +203 -0
  799. package/src/gestures/index.ts +79 -0
  800. package/src/gestures/nativeScroll.ts +277 -0
  801. package/src/gestures/touchAction.ts +191 -0
  802. package/src/gestures/touchActionRule.ts +157 -0
  803. package/src/gestures/types.ts +30 -9
  804. package/src/gestures/useGestureRecognizer.ts +305 -0
  805. package/src/hooks/index.ts +5 -1
  806. package/src/hooks/modalAnnounce.ts +129 -72
  807. package/src/hooks/scrollKeyboardDelegation.test.ts +33 -0
  808. package/src/hooks/scrollKeyboardDelegation.ts +9 -3
  809. package/src/hooks/useAdaptivePresentation.ts +4 -1
  810. package/src/hooks/useAnnounce.doc.mjs +35 -3
  811. package/src/hooks/useAnnounce.replace.test.tsx +516 -0
  812. package/src/hooks/useAnnounce.ts +209 -102
  813. package/src/hooks/useAnnounceRenderedText.adopters.test.tsx +10 -1
  814. package/src/hooks/useAnnounceRenderedText.ts +17 -3
  815. package/src/hooks/useBusyAnnouncement.ts +7 -10
  816. package/src/hooks/useMenuHover.ts +15 -1
  817. package/src/hooks/useScrollOverflow.doc.mjs +1 -1
  818. package/src/hooks/useScrollOverflow.test.tsx +102 -1
  819. package/src/hooks/useScrollOverflow.ts +59 -10
  820. package/src/i18n/__tests__/useListFormatter.test.tsx +58 -0
  821. package/src/i18n/generated-locales/af-ZA.generated.ts +0 -7
  822. package/src/i18n/generated-locales/ar-SA.generated.ts +0 -6
  823. package/src/i18n/generated-locales/ca-ES.generated.ts +0 -7
  824. package/src/i18n/generated-locales/cs-CZ.generated.ts +0 -6
  825. package/src/i18n/generated-locales/da-DK.generated.ts +0 -6
  826. package/src/i18n/generated-locales/de-DE.generated.ts +0 -6
  827. package/src/i18n/generated-locales/el-GR.generated.ts +0 -7
  828. package/src/i18n/generated-locales/en.generated.ts +9 -6
  829. package/src/i18n/generated-locales/es-ES.generated.ts +0 -7
  830. package/src/i18n/generated-locales/fi-FI.generated.ts +0 -6
  831. package/src/i18n/generated-locales/fr-FR.generated.ts +0 -7
  832. package/src/i18n/generated-locales/he-IL.generated.ts +0 -6
  833. package/src/i18n/generated-locales/hu-HU.generated.ts +0 -6
  834. package/src/i18n/generated-locales/it-IT.generated.ts +0 -7
  835. package/src/i18n/generated-locales/ja-JP.generated.ts +0 -6
  836. package/src/i18n/generated-locales/ko-KR.generated.ts +0 -6
  837. package/src/i18n/generated-locales/nl-NL.generated.ts +0 -6
  838. package/src/i18n/generated-locales/no-NO.generated.ts +0 -6
  839. package/src/i18n/generated-locales/pl-PL.generated.ts +0 -7
  840. package/src/i18n/generated-locales/pseudo.generated.ts +9 -6
  841. package/src/i18n/generated-locales/pt-BR.generated.ts +0 -7
  842. package/src/i18n/generated-locales/pt-PT.generated.ts +0 -7
  843. package/src/i18n/generated-locales/ro-RO.generated.ts +0 -6
  844. package/src/i18n/generated-locales/ru-RU.generated.ts +0 -7
  845. package/src/i18n/generated-locales/sr-SP.generated.ts +0 -6
  846. package/src/i18n/generated-locales/sv-SE.generated.ts +0 -6
  847. package/src/i18n/generated-locales/tr-TR.generated.ts +0 -7
  848. package/src/i18n/generated-locales/uk-UA.generated.ts +0 -7
  849. package/src/i18n/generated-locales/vi-VN.generated.ts +0 -6
  850. package/src/i18n/generated-locales/zh-CN.generated.ts +0 -6
  851. package/src/i18n/generated-locales/zh-TW.generated.ts +0 -6
  852. package/src/i18n/useListFormatter.ts +42 -0
  853. package/src/motion/MEASUREMENTS.md +2 -1
  854. package/src/motion/README.md +113 -33
  855. package/src/motion/__tests__/animator.interaction.browser.spec.ts +843 -0
  856. package/src/motion/__tests__/motionBundle.ts +14 -0
  857. package/src/motion/animator.test.ts +1125 -32
  858. package/src/motion/animator.ts +932 -130
  859. package/src/motion/coast.ts +10 -3
  860. package/src/motion/reducedMotion.ts +12 -2
  861. package/src/motion/reducedMotionPlan.test.ts +26 -0
  862. package/src/motion/reducedMotionPlan.ts +20 -1
  863. package/src/motion/resolveMotion.test.ts +123 -0
  864. package/src/motion/resolveMotion.ts +68 -0
  865. package/src/motion/roleValue.ts +2 -1
  866. package/src/motion/roles.test.ts +21 -4
  867. package/src/motion/uikit/tableImports.test.ts +293 -0
  868. package/src/motion/uikit/timing.ts +15 -1
  869. package/src/motion/uikit/values.test.ts +23 -12
  870. package/src/theme/Theme.doc.mjs +1 -1
  871. package/src/theme/defineTheme.ts +117 -8
  872. package/src/theme/derivedVarRegistry.test.ts +4 -0
  873. package/src/theme/domainTokens/domainTokenDefaults.ts +19 -0
  874. package/src/theme/domainTokens/index.ts +6 -10
  875. package/src/theme/expandMotionScale.test.ts +1 -1
  876. package/src/theme/index.ts +5 -0
  877. package/src/theme/motionKnobs.ts +82 -0
  878. package/src/theme/resolveThemeValues.ts +68 -6
  879. package/src/theme/themeAdaptations.ts +52 -12
  880. package/src/theme/themeMotion.test.ts +620 -0
  881. package/src/theme/themeMotion.ts +221 -0
  882. package/src/theme/tokenReferences.ts +149 -0
  883. package/src/theme/tokens.stylex.ts +10 -0
  884. package/src/theme/tokens.ts +15 -158
  885. package/src/utils/focusOutline.stylex.ts +28 -0
  886. package/src/utils/focusReturn.ts +17 -6
  887. package/src/utils/getNodeText.test.ts +24 -0
  888. package/src/utils/getNodeText.ts +37 -0
  889. package/src/utils/interactionModality.test.ts +45 -1
  890. package/src/utils/interactionModality.ts +64 -5
  891. package/src/utils/interactionOverlay.stylex.ts +12 -3
  892. package/src/utils/plainDate.test.ts +90 -0
  893. package/src/utils/plainDate.ts +58 -3
  894. package/src/utils/presentation.test.ts +380 -0
  895. package/src/utils/presentation.ts +180 -0
  896. package/src/utils/pressFeedback.test.ts +138 -0
  897. package/src/utils/pressFeedback.ts +34 -11
  898. package/src/utils/pressGesture.test.ts +9 -0
  899. package/src/utils/pressPaintPriority.test.ts +80 -0
  900. package/src/utils/primaryClick.test.ts +38 -0
  901. package/src/utils/primaryClick.ts +28 -0
  902. package/src/utils/sharedMutationObserver.test.ts +54 -1
  903. package/src/utils/sharedMutationObserver.ts +87 -29
  904. package/src/utils/timeFormat.test.ts +204 -0
  905. package/src/utils/timeFormat.ts +314 -0
  906. package/src/utils/touchPresentation.stylex.ts +43 -0
  907. package/src/utils/touchPresentation.test.ts +140 -1
  908. package/src/utils/touchPresentation.ts +13 -8
  909. package/src/utils/touchQueries.ts +15 -0
  910. package/src/utils/unicodeDigits.test.ts +44 -0
  911. package/src/utils/unicodeDigits.ts +71 -0
  912. package/src/utils/useFocusAcrossSwap.ts +55 -0
@@ -0,0 +1,498 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file ScreenEdgePanGestureRecognizer.test.ts
5
+ * @input Synthetic touches with explicit timestamps through a GestureArena
6
+ * @output ScreenEdgePanGestureRecognizer's state machine (the edge band, RTL edges, inward movement) and its edge-zone touch-action
7
+ * @position Unit tests of packages/core/src/gestures/ScreenEdgePanGestureRecognizer.ts
8
+ */
9
+
10
+ import {describe, expect, it} from 'vitest';
11
+ import {UIKIT_SCREEN_EDGE_PAN} from '../../motion/uikit/gestures';
12
+ import {ALL_NATIVE_TOUCH} from '../GestureRecognizer';
13
+ import {ScreenEdgePanGestureRecognizer} from '../ScreenEdgePanGestureRecognizer';
14
+ import {createHarness} from './harness';
15
+
16
+ describe('ScreenEdgePanGestureRecognizer', () => {
17
+ it('begins from the leading band and fails elsewhere at touch-down', () => {
18
+ const h = createHarness();
19
+ const edge = new ScreenEdgePanGestureRecognizer({name: 'edge'});
20
+ h.finger(1)
21
+ .down(10, 300, 0, {recognizers: [edge]})
22
+ .drag(40, 4, 50);
23
+ expect(h.log[0]).toMatch(/^edge:began@/);
24
+ expect(edge.activeEdge).toBe('left');
25
+
26
+ const middle = createHarness();
27
+ const miss = new ScreenEdgePanGestureRecognizer({name: 'miss'});
28
+ middle.finger(1).down(60, 300, 0, {recognizers: [miss]});
29
+ expect(middle.log).toEqual(['miss:failed@0']);
30
+ });
31
+
32
+ it("is a finger's only: a mouse or a pen dragging from the band never begins it, even when the options list them (spec:AST-094 FR43)", () => {
33
+ for (const pointerType of ['mouse', 'pen'] as const) {
34
+ const h = createHarness();
35
+ const options = {
36
+ name: 'edge',
37
+ allowedPointerTypes: ['touch', 'mouse', 'pen'],
38
+ } as ConstructorParameters<typeof ScreenEdgePanGestureRecognizer>[0];
39
+ const edge = new ScreenEdgePanGestureRecognizer(options);
40
+ h.finger(1)
41
+ .down(10, 300, 0, {recognizers: [edge], pointerType})
42
+ .drag(40, 4, 50);
43
+ expect(edge.state).toBe('possible');
44
+ expect(h.log).toEqual([]);
45
+ }
46
+ const h = createHarness();
47
+ const edge = new ScreenEdgePanGestureRecognizer({name: 'edge'});
48
+ h.finger(1)
49
+ .down(10, 300, 0, {recognizers: [edge], pointerType: 'touch'})
50
+ .drag(40, 4, 50);
51
+ expect(h.log[0]).toMatch(/^edge:began@/);
52
+ });
53
+
54
+ it('forgets the edge a gesture started from once it ends', () => {
55
+ const h = createHarness();
56
+ const edge = new ScreenEdgePanGestureRecognizer({name: 'edge'});
57
+ h.finger(1)
58
+ .down(10, 300, 0, {recognizers: [edge]})
59
+ .drag(40, 4, 50);
60
+ expect(edge.activeEdge).toBe('left');
61
+ h.finger(1).up(80);
62
+ expect(edge.activeEdge).toBeNull();
63
+ });
64
+
65
+ it('resolves the leading edge under RTL and requires inward movement', () => {
66
+ const h = createHarness();
67
+ h.environment.rtl = true;
68
+ const edge = new ScreenEdgePanGestureRecognizer({name: 'edge'});
69
+ h.finger(1)
70
+ .down(385, 300, 0, {recognizers: [edge]})
71
+ .drag(-40, 2, 50);
72
+ expect(edge.activeEdge).toBe('right');
73
+ expect(h.log[0]).toMatch(/^edge:began@/);
74
+
75
+ const outward = createHarness();
76
+ const back = new ScreenEdgePanGestureRecognizer({name: 'back'});
77
+ outward
78
+ .finger(1)
79
+ .down(10, 300, 0, {recognizers: [back]})
80
+ .drag(-8, 30, 50);
81
+ expect(back.state).toBe('failed');
82
+ });
83
+
84
+ it('a drag 5 pt inward and then down the edge is the page\u2019s scroll: it fails and claims nothing (spec:AST-094 FR19)', () => {
85
+ const h = createHarness();
86
+ const edge = new ScreenEdgePanGestureRecognizer({name: 'edge'});
87
+ h.finger(1)
88
+ .down(10, 300, 0, {recognizers: [edge]})
89
+ .drag(5, 0, 30)
90
+ .drag(0, 20, 50);
91
+ expect(edge.state).toBe('failed');
92
+ expect(h.claims).toEqual([]);
93
+ });
94
+
95
+ it('leaves a view wider than the edge zone every touch behavior, so its scrolling is untouched (spec:AST-094 FR18)', () => {
96
+ expect(new ScreenEdgePanGestureRecognizer().nativeTouchBehavior).toEqual(
97
+ ALL_NATIVE_TOUCH,
98
+ );
99
+ const page = new ScreenEdgePanGestureRecognizer();
100
+ page.view = viewOfSize(390, 844);
101
+ expect(page.nativeTouchBehavior).toEqual(ALL_NATIVE_TOUCH);
102
+ // A pan from several edges too, off their zones.
103
+ expect(
104
+ new ScreenEdgePanGestureRecognizer({edges: ['leading', 'trailing']})
105
+ .nativeTouchBehavior,
106
+ ).toEqual(ALL_NATIVE_TOUCH);
107
+ });
108
+
109
+ it('takes the axis across its edge in the edge zone, a view no wider than the edge region (spec:AST-094 FR18)', () => {
110
+ const leading = new ScreenEdgePanGestureRecognizer();
111
+ leading.view = viewOfSize(leading.edgeRegion, 844);
112
+ expect(leading.nativeTouchBehavior).toEqual({
113
+ panX: false,
114
+ panY: true,
115
+ pinchZoom: true,
116
+ doubleTapZoom: false,
117
+ });
118
+ // One pixel wider than the band is not the edge zone.
119
+ const wide = new ScreenEdgePanGestureRecognizer();
120
+ wide.view = viewOfSize(wide.edgeRegion + 1, 844);
121
+ expect(wide.nativeTouchBehavior).toEqual(ALL_NATIVE_TOUCH);
122
+ });
123
+
124
+ it('takes a strip authored at the edge region as the edge zone though layout lays it out at 40.203 px', () => {
125
+ const strip = new ScreenEdgePanGestureRecognizer();
126
+ // 40.2 px snapped to layout's 1/64 px.
127
+ strip.view = viewOfSize(Math.ceil(strip.edgeRegion * 64) / 64, 844);
128
+ expect(strip.nativeTouchBehavior).toEqual({
129
+ panX: false,
130
+ panY: true,
131
+ pinchZoom: true,
132
+ doubleTapZoom: false,
133
+ });
134
+ const h = createHarness();
135
+ const edge = new ScreenEdgePanGestureRecognizer({name: 'edge'});
136
+ h.environment.view = {width: 40.203, height: 844};
137
+ const hysteresis = UIKIT_SCREEN_EDGE_PAN.hysteresis.value;
138
+ h.finger(1)
139
+ .down(10, 300, 0, {recognizers: [edge]})
140
+ .drag(hysteresis - 1, 0, 30);
141
+ expect(edge.state).toBe('possible');
142
+ h.finger(1).drag(2, 0, 50);
143
+ expect(h.log[0]).toMatch(/^edge:began@/);
144
+ });
145
+
146
+ it('in the edge zone, still decides at its hysteresis', () => {
147
+ const h = createHarness();
148
+ const edge = new ScreenEdgePanGestureRecognizer({name: 'edge'});
149
+ h.environment.view = {width: edge.edgeRegion, height: 844};
150
+ const hysteresis = UIKIT_SCREEN_EDGE_PAN.hysteresis.value;
151
+ h.finger(1)
152
+ .down(10, 300, 0, {recognizers: [edge]})
153
+ .drag(hysteresis - 1, 0, 30);
154
+ expect(edge.state).toBe('possible');
155
+ h.finger(1).drag(2, 0, 50);
156
+ expect(h.log[0]).toMatch(/^edge:began@/);
157
+ });
158
+ });
159
+
160
+ describe('where an in-band touch decides (spec:AST-094 FR18, DEC-22)', () => {
161
+ it('on an element that reaches beyond the band, at 10 px, before the browser commits to a scroll', () => {
162
+ const h = createHarness();
163
+ const edge = new ScreenEdgePanGestureRecognizer({name: 'edge'});
164
+ // A stack container: as wide as the screen, the touch 4 px from its edge.
165
+ h.environment.view = {width: 390, height: 844};
166
+ h.finger(1)
167
+ .down(4, 300, 0, {recognizers: [edge]})
168
+ .drag(9, 0, 30, 9);
169
+ expect(edge.state).toBe('possible');
170
+ h.finger(1).drag(1, 0, 10, 1);
171
+ expect(h.log[0]).toMatch(/^edge:began@/);
172
+ });
173
+
174
+ it('on an element within the band, at 15 px', () => {
175
+ const h = createHarness();
176
+ const edge = new ScreenEdgePanGestureRecognizer({name: 'edge'});
177
+ h.environment.view = {width: edge.edgeRegion, height: 844};
178
+ const hysteresis = UIKIT_SCREEN_EDGE_PAN.hysteresis.value;
179
+ h.finger(1)
180
+ .down(4, 300, 0, {recognizers: [edge]})
181
+ .drag(hysteresis - 1, 0, 30, 14);
182
+ expect(edge.state).toBe('possible');
183
+ h.finger(1).drag(1, 0, 10, 1);
184
+ expect(h.log[0]).toMatch(/^edge:began@/);
185
+ });
186
+
187
+ it('from several edges, at 10 px on an element beyond their bands', () => {
188
+ const h = createHarness();
189
+ const edge = new ScreenEdgePanGestureRecognizer({
190
+ name: 'edge',
191
+ edges: ['leading', 'trailing'],
192
+ });
193
+ h.environment.view = {width: 390, height: 844};
194
+ h.finger(1)
195
+ .down(4, 300, 0, {recognizers: [edge]})
196
+ .drag(9, 0, 30, 9);
197
+ expect(edge.state).toBe('possible');
198
+ h.finger(1).drag(1, 0, 10, 1);
199
+ expect(h.log[0]).toMatch(/^edge:began@/);
200
+ });
201
+ });
202
+
203
+ describe('a pan from both edges (spec:AST-094 FR18)', () => {
204
+ it('outside every edge zone leaves the browser every touch behavior', () => {
205
+ const edge = new ScreenEdgePanGestureRecognizer({
206
+ edges: ['leading', 'trailing'],
207
+ });
208
+ edge.view = viewOfSize(390, 844);
209
+ expect(edge.nativeTouchBehavior).toEqual(ALL_NATIVE_TOUCH);
210
+ });
211
+
212
+ it('inside either edge zone claims pan-x only', () => {
213
+ const leading = new ScreenEdgePanGestureRecognizer({
214
+ edges: ['leading', 'trailing'],
215
+ });
216
+ leading.view = viewOfSize(leading.edgeRegion, 844);
217
+ const trailing = new ScreenEdgePanGestureRecognizer({
218
+ edges: ['leading', 'trailing'],
219
+ });
220
+ trailing.view = viewAt(window.innerWidth - 20, 20, 844);
221
+ for (const edge of [leading, trailing]) {
222
+ expect(edge.nativeTouchBehavior).toEqual({
223
+ panX: false,
224
+ panY: true,
225
+ pinchZoom: true,
226
+ doubleTapZoom: false,
227
+ });
228
+ }
229
+ });
230
+ });
231
+
232
+ describe('the edge zone (spec:AST-094 FR18, FR19, DEC-22)', () => {
233
+ it('is a view that lies within the band at its edge, not merely a thin one', () => {
234
+ const claim = {
235
+ panX: false,
236
+ panY: true,
237
+ pinchZoom: true,
238
+ doubleTapZoom: false,
239
+ };
240
+ // Thin, but in the middle of the screen.
241
+ const middle = new ScreenEdgePanGestureRecognizer();
242
+ middle.view = viewAt(200, 20, 844);
243
+ expect(middle.nativeTouchBehavior).toEqual(ALL_NATIVE_TOUCH);
244
+ // Thin and at the leading edge.
245
+ const atLeading = new ScreenEdgePanGestureRecognizer();
246
+ atLeading.view = viewAt(0, 20, 844);
247
+ expect(atLeading.nativeTouchBehavior).toEqual(claim);
248
+ // At the trailing edge, for a trailing pan only.
249
+ const trailing = new ScreenEdgePanGestureRecognizer({edges: ['trailing']});
250
+ trailing.view = viewAt(window.innerWidth - 20, 20, 844);
251
+ expect(trailing.nativeTouchBehavior).toEqual(claim);
252
+ const wrongEdge = new ScreenEdgePanGestureRecognizer({edges: ['trailing']});
253
+ wrongEdge.view = viewAt(0, 20, 844);
254
+ expect(wrongEdge.nativeTouchBehavior).toEqual(ALL_NATIVE_TOUCH);
255
+ });
256
+
257
+ it('is measured once for both touch-action and the touch-down decision, and again on a layout change, which says so', () => {
258
+ const h = createHarness();
259
+ const edge = new ScreenEdgePanGestureRecognizer({name: 'edge'});
260
+ let changes = 0;
261
+ edge.onTouchBehaviorChange = () => {
262
+ changes += 1;
263
+ };
264
+ const hysteresis = UIKIT_SCREEN_EDGE_PAN.hysteresis.value;
265
+ h.environment.view = {left: 0, top: 0, width: edge.edgeRegion, height: 844};
266
+ h.finger(1)
267
+ .down(4, 300, 0, {recognizers: [edge]})
268
+ .drag(hysteresis - 1, 0, 30, hysteresis - 1);
269
+ expect(edge.state).toBe('possible');
270
+ h.finger(1).up(40);
271
+ expect(edge.nativeTouchBehavior.panX).toBe(false);
272
+ // The view grows with no layout change reported: touch-action and the
273
+ // next touch-down still share the answer in force.
274
+ h.environment.view = {left: 0, top: 0, width: 390, height: 844};
275
+ expect(edge.nativeTouchBehavior.panX).toBe(false);
276
+ h.finger(2)
277
+ .down(4, 300, 100, {recognizers: [edge]})
278
+ .drag(hysteresis - 1, 0, 30, hysteresis - 1);
279
+ expect(edge.state).toBe('possible');
280
+ h.finger(2).up(140);
281
+ expect(changes).toBe(0);
282
+ // Reported: measured again, the change is announced, and both follow.
283
+ edge.layoutChanged();
284
+ expect(changes).toBe(1);
285
+ expect(edge.nativeTouchBehavior).toEqual(ALL_NATIVE_TOUCH);
286
+ h.finger(3)
287
+ .down(4, 300, 200, {recognizers: [edge]})
288
+ .drag(9, 0, 30, 9);
289
+ expect(edge.state).toBe('possible');
290
+ h.finger(3).drag(1, 0, 10, 1);
291
+ expect(edge.state).toBe('began');
292
+ // A layout change that leaves the answer as it was says nothing.
293
+ edge.layoutChanged();
294
+ expect(changes).toBe(1);
295
+ });
296
+ });
297
+
298
+ describe('what the host watches for the edge zone (spec:AST-094 FR19, FR24)', () => {
299
+ it('needs the viewport only for a pan that watches the right side, whose band moves with it', () => {
300
+ const cases: [
301
+ ReadonlyArray<'leading' | 'trailing'>,
302
+ 'ltr' | 'rtl',
303
+ boolean,
304
+ ][] = [
305
+ [['leading'], 'ltr', false],
306
+ [['trailing'], 'ltr', true],
307
+ [['leading'], 'rtl', true],
308
+ [['trailing'], 'rtl', false],
309
+ [['leading', 'trailing'], 'ltr', true],
310
+ ];
311
+ for (const [edges, direction, expected] of cases) {
312
+ const pan = new ScreenEdgePanGestureRecognizer({edges});
313
+ pan.view = viewAt(0, 20, 844, direction);
314
+ expect([edges.join('+'), direction, pan.watchesViewport]).toEqual([
315
+ edges.join('+'),
316
+ direction,
317
+ expected,
318
+ ]);
319
+ }
320
+ });
321
+ });
322
+
323
+ describe('a writing direction switched in place (design:bidirectionality DR13)', () => {
324
+ it('measures its edges again at touch-down when the view turns RTL with no resize, and announces the change', () => {
325
+ const width = window.innerWidth;
326
+ const h = createHarness();
327
+ h.environment.width = width;
328
+ h.environment.view = {left: 0, top: 0, width, height: 844};
329
+ const pan = new ScreenEdgePanGestureRecognizer({
330
+ name: 'edge',
331
+ edges: ['leading'],
332
+ });
333
+ const view = viewAt(0, width, 844, 'ltr');
334
+ pan.view = view;
335
+ let announced = 0;
336
+ pan.onTouchBehaviorChange = () => {
337
+ announced += 1;
338
+ };
339
+ // Measured under LTR: the leading edge is the left one, so a touch in
340
+ // the right band fails at once.
341
+ expect(pan.nativeTouchBehavior).toEqual(ALL_NATIVE_TOUCH);
342
+ h.finger(1)
343
+ .down(width - 4, 300, 0, {recognizers: [pan]})
344
+ .drag(-20, 0, 40);
345
+ expect(h.log.some(line => line.startsWith('edge:began'))).toBe(false);
346
+ h.finger(1).up(60);
347
+ expect(announced).toBe(0);
348
+ // The page turns RTL in place: no resize, so no layout report.
349
+ view.style.direction = 'rtl';
350
+ h.environment.rtl = true;
351
+ const before = h.log.length;
352
+ h.finger(2)
353
+ .down(width - 4, 300, 200, {recognizers: [pan]})
354
+ .drag(-20, 0, 40);
355
+ expect(
356
+ h.log.slice(before).some(line => line.startsWith('edge:began')),
357
+ ).toBe(true);
358
+ expect(pan.activeEdge).toBe('right');
359
+ expect(announced).toBe(1);
360
+ h.finger(2).up(260);
361
+ });
362
+
363
+ it("decides the touch that measures again at FR19's 10 px when the touch-action in force left the browser the axis, and the next at UIKit's 15 px (spec:AST-094 FR19)", () => {
364
+ const width = window.innerWidth;
365
+ const h = createHarness();
366
+ h.environment.width = width;
367
+ const pan = new ScreenEdgePanGestureRecognizer({
368
+ name: 'edge',
369
+ edges: ['leading'],
370
+ });
371
+ const region = pan.edgeRegion;
372
+ // A strip at the right edge: under LTR the leading edge is the left one,
373
+ // so the strip is out of the zone and its touch-action leaves the
374
+ // browser pan-x.
375
+ const view = viewAt(width - region, region, 844, 'ltr');
376
+ pan.view = view;
377
+ h.environment.view = {
378
+ left: width - region,
379
+ top: 0,
380
+ width: region,
381
+ height: 844,
382
+ };
383
+ expect(pan.nativeTouchBehavior).toEqual(ALL_NATIVE_TOUCH);
384
+ // The page turns RTL in place: the strip is in the leading band now.
385
+ view.style.direction = 'rtl';
386
+ h.environment.rtl = true;
387
+ // This touch landed under the touch-action from before the switch, with
388
+ // pan-x the browser's: it decides at 10 px, before the browser commits.
389
+ h.finger(1)
390
+ .down(width - 4, 300, 0, {recognizers: [pan]})
391
+ .drag(-9, 0, 30, 9);
392
+ expect(pan.state).toBe('possible');
393
+ h.finger(1).drag(-1, 0, 10, 1);
394
+ expect(pan.state).toBe('began');
395
+ h.finger(1).up(60);
396
+ // The change was announced, so the next touch lands under pan-x
397
+ // claimed: UIKit's 15 px.
398
+ expect(pan.nativeTouchBehavior.panX).toBe(false);
399
+ const hysteresis = UIKIT_SCREEN_EDGE_PAN.hysteresis.value;
400
+ h.finger(2)
401
+ .down(width - 4, 300, 200, {recognizers: [pan]})
402
+ .drag(-(hysteresis - 1), 0, 30, hysteresis - 1);
403
+ expect(pan.state).toBe('possible');
404
+ h.finger(2).drag(-1, 0, 10, 1);
405
+ expect(pan.state).toBe('began');
406
+ h.finger(2).up(260);
407
+ });
408
+ });
409
+
410
+ describe('each writing direction and edge, before a touch, at touch-down and after a resize (spec:AST-094 FR18, FR19, DEC-13, DEC-22)', () => {
411
+ const claim = {
412
+ panX: false,
413
+ panY: true,
414
+ pinchZoom: true,
415
+ doubleTapZoom: false,
416
+ };
417
+ const hysteresis = UIKIT_SCREEN_EDGE_PAN.hysteresis.value;
418
+ for (const rtl of [false, true]) {
419
+ for (const edge of ['leading', 'trailing'] as const) {
420
+ const physical = (edge === 'leading') !== rtl ? 'left' : 'right';
421
+ it(`${rtl ? 'RTL' : 'LTR'} ${edge}, the ${physical} edge: touch-action and the touch-down decision agree`, () => {
422
+ const width = window.innerWidth;
423
+ const h = createHarness();
424
+ h.environment.rtl = rtl;
425
+ h.environment.width = width;
426
+ const left = physical === 'left' ? 0 : width - 20;
427
+ h.environment.view = {left, top: 0, width: 20, height: 844};
428
+ const pan = new ScreenEdgePanGestureRecognizer({
429
+ name: 'edge',
430
+ edges: [edge],
431
+ });
432
+ // The element a host gives it, laid out with its own direction.
433
+ pan.view = viewAt(left, 20, 844, rtl ? 'rtl' : 'ltr');
434
+ // Before any touch, as the host derives touch-action: pan-x is taken.
435
+ expect(pan.nativeTouchBehavior).toEqual(claim);
436
+ // At touch-down, a touch in that band decides at 15 px, as the claim
437
+ // allows.
438
+ const x = physical === 'left' ? 4 : width - 4;
439
+ const inward = physical === 'left' ? 1 : -1;
440
+ h.finger(1)
441
+ .down(x, 300, 0, {recognizers: [pan]})
442
+ .drag(inward * (hysteresis - 1), 0, 30, hysteresis - 1);
443
+ expect(pan.state).toBe('possible');
444
+ h.finger(1).drag(inward * 2, 0, 20, 2);
445
+ expect(['began', 'changed']).toContain(pan.state);
446
+ h.finger(1).up(80);
447
+ // After a resize past the band: no claim, and the next touch decides
448
+ // at 10 px.
449
+ h.environment.view = {left: 0, top: 0, width, height: 844};
450
+ pan.view = viewAt(0, width, 844, rtl ? 'rtl' : 'ltr');
451
+ pan.layoutChanged();
452
+ expect(pan.nativeTouchBehavior).toEqual(ALL_NATIVE_TOUCH);
453
+ h.finger(2)
454
+ .down(x, 300, 200, {recognizers: [pan]})
455
+ .drag(inward * 9, 0, 30, 9);
456
+ expect(pan.state).toBe('possible');
457
+ h.finger(2).drag(inward, 0, 10, 1);
458
+ expect(['began', 'changed']).toContain(pan.state);
459
+ h.finger(2).up(280);
460
+ });
461
+ }
462
+ }
463
+ });
464
+
465
+ /** An element whose box has `width` × `height`, as layout would give it. */
466
+ function viewOfSize(width: number, height: number): HTMLElement {
467
+ const view = document.createElement('div');
468
+ view.getBoundingClientRect = () =>
469
+ ({width, height, top: 0, left: 0, right: width, bottom: height}) as DOMRect;
470
+ return view;
471
+ }
472
+
473
+ /**
474
+ * An element whose box starts `left` px from the viewport's left edge, in
475
+ * the document with the writing direction given.
476
+ */
477
+ function viewAt(
478
+ left: number,
479
+ width: number,
480
+ height: number,
481
+ direction: 'ltr' | 'rtl' = 'ltr',
482
+ ): HTMLElement {
483
+ const view = document.createElement('div');
484
+ view.style.direction = direction;
485
+ document.body.append(view);
486
+ view.getBoundingClientRect = () =>
487
+ ({
488
+ width,
489
+ height,
490
+ top: 0,
491
+ left,
492
+ right: left + width,
493
+ bottom: height,
494
+ x: left,
495
+ y: 0,
496
+ }) as DOMRect;
497
+ return view;
498
+ }
@@ -0,0 +1,108 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file SwipeGestureRecognizer.test.ts
5
+ * @input Synthetic touches with explicit timestamps through a GestureArena
6
+ * @output SwipeGestureRecognizer's state machine: recognition during the motion, and failure when too slow, off-axis or the wrong way
7
+ * @position Unit tests of packages/core/src/gestures/SwipeGestureRecognizer.ts
8
+ */
9
+
10
+ import {describe, expect, it} from 'vitest';
11
+ import {SwipeGestureRecognizer} from '../SwipeGestureRecognizer';
12
+ import {createHarness} from './harness';
13
+
14
+ describe('SwipeGestureRecognizer', () => {
15
+ it('is recognized during the motion, once the distance is covered', () => {
16
+ const h = createHarness();
17
+ const swipe = new SwipeGestureRecognizer({name: 'swipe'});
18
+ const finger = h.finger(1).down(0, 0, 0, {recognizers: [swipe]});
19
+ finger.move(30, 2, 30);
20
+ expect(swipe.state).toBe('possible');
21
+ finger.move(50, 4, 50);
22
+ expect(swipe.recognizedDirection).toBe('right');
23
+ expect(h.log[0]).toBe('swipe:ended@50');
24
+ });
25
+
26
+ it('fails when too slow, off-axis, or the wrong way', () => {
27
+ const slow = createHarness();
28
+ const a = new SwipeGestureRecognizer({name: 'a'});
29
+ slow
30
+ .finger(1)
31
+ .down(0, 0, 0, {recognizers: [a]})
32
+ .move(30, 0, 400);
33
+ slow.advance(500);
34
+ expect(a.state).toBe('failed');
35
+
36
+ const diagonal = createHarness();
37
+ const b = new SwipeGestureRecognizer({name: 'b'});
38
+ diagonal
39
+ .finger(1)
40
+ .down(0, 0, 0, {recognizers: [b]})
41
+ .move(45, 55, 60);
42
+ // 55 px across is past the 50 px secondary allowance.
43
+ expect(b.state).toBe('failed');
44
+
45
+ const wrong = createHarness();
46
+ const c = new SwipeGestureRecognizer({name: 'c', direction: 'left'});
47
+ wrong
48
+ .finger(1)
49
+ .down(100, 0, 0, {recognizers: [c]})
50
+ .move(160, 0, 60);
51
+ expect(c.state).toBe('failed');
52
+ });
53
+
54
+ it('takes several directions and fingers', () => {
55
+ const h = createHarness();
56
+ const swipe = new SwipeGestureRecognizer({
57
+ name: 'swipe',
58
+ direction: ['up', 'down'],
59
+ numberOfTouchesRequired: 2,
60
+ });
61
+ h.finger(1).down(0, 200, 0, {recognizers: [swipe]});
62
+ h.finger(2).down(40, 200, 5, {recognizers: [swipe]});
63
+ h.finger(1).move(0, 140, 50);
64
+ h.finger(2).move(40, 140, 50);
65
+ expect(swipe.recognizedDirection).toBe('up');
66
+ });
67
+
68
+ it('gives the same verdict for the same path however its events are spaced', () => {
69
+ // A straight drag to (55, 40): along 55 past the 50 px distance, 40 px
70
+ // across within the 50 px allowance.
71
+ const sparse = createHarness();
72
+ const a = new SwipeGestureRecognizer({name: 'a'});
73
+ sparse
74
+ .finger(1)
75
+ .down(0, 0, 0, {recognizers: [a]})
76
+ .move(55, 40, 40);
77
+ expect(a.state).toBe('ended');
78
+
79
+ const dense = createHarness();
80
+ const b = new SwipeGestureRecognizer({name: 'b'});
81
+ const finger = dense.finger(1).down(0, 0, 0, {recognizers: [b]});
82
+ for (let step = 1; step <= 10; step += 1) {
83
+ finger.move(5.5 * step, 4 * step, 4 * step);
84
+ }
85
+ expect(b.state).toBe('ended');
86
+ expect(b.recognizedDirection).toBe('right');
87
+ });
88
+
89
+ it('recognizes a 40\u00b0 swipe at 16 px per event as at small steps', () => {
90
+ // At 40\u00b0 the travel along reaches 50 px with 42 px across, inside
91
+ // the 50 px allowance; at 16 px per event the next event is already 51 px
92
+ // across, so the verdict must come from the path between the events.
93
+ const angle = (40 * Math.PI) / 180;
94
+ for (const step of [2, 16]) {
95
+ const h = createHarness();
96
+ const swipe = new SwipeGestureRecognizer({name: 'swipe'});
97
+ const finger = h.finger(1).down(0, 0, 0, {recognizers: [swipe]});
98
+ for (let d = step, t = 4; d <= 96; d += step, t += 4) {
99
+ finger.move(d * Math.cos(angle), d * Math.sin(angle), t);
100
+ if (swipe.state !== 'possible') {
101
+ break;
102
+ }
103
+ }
104
+ expect(swipe.state).toBe('ended');
105
+ expect(swipe.recognizedDirection).toBe('right');
106
+ }
107
+ });
108
+ });
@@ -39,6 +39,11 @@ interface Script {
39
39
  * gesture ends with its last touch and a possible one fails.
40
40
  */
41
41
  class Scripted extends GestureRecognizer {
42
+ // A discrete one decides at the lift, as a tap does.
43
+ override get kind(): GestureRecognizer['kind'] {
44
+ return this.discrete ? 'tap' : 'pan';
45
+ }
46
+
42
47
  /** Expects more input after its touches lifted (a multi-tap between taps). */
43
48
  isWaiting = false;
44
49
  private readonly discrete: boolean;
@@ -75,6 +80,11 @@ class Scripted extends GestureRecognizer {
75
80
  this.setState('failed');
76
81
  }
77
82
 
83
+ /** Cancel itself, as a recognizer that gives up mid-gesture does. */
84
+ cancelSelf(): void {
85
+ this.setState('cancelled');
86
+ }
87
+
78
88
  /** Recognize at `deadline` on the event clock, unless the touch lifts. */
79
89
  recognizeAt(deadline: number): void {
80
90
  this.setTimer(deadline, () => this.recognize());
@@ -517,6 +527,36 @@ describe('arena: claims', () => {
517
527
  first.up(80);
518
528
  second.up(80);
519
529
  });
530
+
531
+ it('keeps a moving finger claimed until it lifts when its gesture cancels itself on that move, so the drag never turns into the page scroll midway (FR14)', () => {
532
+ const h = createHarness();
533
+ // A long press's shape: it begins while the finger rests, then cancels
534
+ // itself on the first move past its tolerance.
535
+ const press = new Scripted('press', {
536
+ began: (self, event) => self.recognizeAt(event.time + 500),
537
+ moved: (self, event) => {
538
+ const touch = event.allTouches[0];
539
+ if (
540
+ touch != null &&
541
+ Math.abs(touch.y - touch.startY) > 10 &&
542
+ isActive(self.state)
543
+ ) {
544
+ self.cancelSelf();
545
+ }
546
+ },
547
+ });
548
+ const finger = h.finger(1).down(0, 0, 0, {recognizers: [press]});
549
+ h.advance(600);
550
+ expect(press.state).toBe('began');
551
+ expect(h.arena.isClaimed(1)).toBe(true);
552
+ finger.move(0, -11, 616);
553
+ expect(press.state).toBe('cancelled');
554
+ expect(h.arena.isClaimed(1)).toBe(true);
555
+ finger.move(0, -60, 632);
556
+ expect(h.arena.isClaimed(1)).toBe(true);
557
+ finger.up(700);
558
+ expect(h.arena.isClaimed(1)).toBe(false);
559
+ });
520
560
  });
521
561
 
522
562
  /** Records the touches that began off its hit path. */