@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
@@ -29,15 +29,19 @@
29
29
 
30
30
  import {SETTLE_THRESHOLD, type Animator, type MotionCurve} from './animator';
31
31
  import {solveDecay} from './decay';
32
+ import {resolveMotion} from './resolveMotion';
32
33
  import {solveSpring, toSpring, type SpringDescription} from './spring';
33
- import {scroll} from './uikit/scroll';
34
+ import {registerScrollTable, scroll} from './uikit/scroll';
34
35
 
35
36
  export interface CoastOptions {
36
37
  /** Per-millisecond velocity factor; UIScrollView's normal rate by default. */
37
38
  rate?: number;
38
39
  /** Edges: a coast crossing one hands its velocity to `bounce`. */
39
40
  bounds?: Partial<Record<'x' | 'y', {min: number; max: number}>>;
40
- /** The edge spring; `scroll.bounce` by default. */
41
+ /**
42
+ * The edge spring; `scroll.bounce` by default, which plays its table value
43
+ * (it is not a motion role: `spec:AST-094` FR4 lists no scroll spring).
44
+ */
41
45
  bounce?: SpringDescription;
42
46
  /**
43
47
  * The release time on the document timeline (ms, `performance.now()`
@@ -85,7 +89,10 @@ export function coast(
85
89
  }
86
90
  }
87
91
  const rate = options.rate ?? scroll.decelerationRate.normal;
88
- const bounce = toSpring(options.bounce ?? scroll.bounce);
92
+ registerScrollTable();
93
+ const bounce = toSpring(
94
+ resolveMotion(animator.element, options.bounce ?? scroll.bounce),
95
+ );
89
96
  const curves: Partial<Record<'x' | 'y', MotionCurve>> = {};
90
97
  for (const [key, v0] of Object.entries(velocities) as ['x' | 'y', number][]) {
91
98
  const from = animator.get(key, options.at);
@@ -45,7 +45,11 @@
45
45
  */
46
46
 
47
47
  import {defaultIsCoarsePointer, defaultPrefersReducedMotion} from './animator';
48
- import {reducedMotionCrossFade} from './uikit/timing';
48
+ import {resolveMotion} from './resolveMotion';
49
+ import {
50
+ reducedMotionCrossFade,
51
+ registerReducedMotionCrossFade,
52
+ } from './uikit/timing';
49
53
 
50
54
  /** Reduce Motion on a coarse primary pointer: an opacity-only cross-fade. */
51
55
  export const REDUCED_MOTION_FADE_QUERY =
@@ -86,7 +90,13 @@ export function reducedMotionFade(
86
90
  if (!fades) {
87
91
  return {duration: 0, easing: 'linear'};
88
92
  }
89
- const curve = reducedMotionCrossFade.curve;
93
+ if (element != null) {
94
+ registerReducedMotionCrossFade();
95
+ }
96
+ const curve =
97
+ element != null
98
+ ? resolveMotion(element, reducedMotionCrossFade.curve)
99
+ : reducedMotionCrossFade.curve;
90
100
  return {
91
101
  duration: reducedMotionCrossFade.durationMs,
92
102
  easing: `cubic-bezier(${curve.join(', ')})`,
@@ -26,11 +26,37 @@ function view(overrides: Partial<ReducedMotionView> = {}): ReducedMotionView {
26
26
  hasOpacityCurve: false,
27
27
  restingOpacity: 1,
28
28
  hasPendingLanding: false,
29
+ hasWaitingDip: false,
29
30
  ...overrides,
30
31
  };
31
32
  }
32
33
 
33
34
  describe('planReducedMotion', () => {
35
+ it('a call naming the opacity a waiting dip returns to, with no travel, joins that dip', () => {
36
+ const plan = planReducedMotion(
37
+ view({hasPendingLanding: true, hasWaitingDip: true}),
38
+ 0,
39
+ {opacity: 1},
40
+ ['opacity'],
41
+ true,
42
+ );
43
+ expect(plan.joins).toBe(true);
44
+ expect(plan.atOnce).toEqual([]);
45
+ expect(plan.opacityFade).toBeNull();
46
+ expect(plan.landing).toBeNull();
47
+ });
48
+
49
+ it('a call naming travel, or another opacity, while a dip waits does not join it', () => {
50
+ const waiting = view({hasPendingLanding: true, hasWaitingDip: true});
51
+ expect(
52
+ planReducedMotion(waiting, 0, {opacity: 1, x: 0}, ['opacity', 'x'], true)
53
+ .joins,
54
+ ).toBeUndefined();
55
+ expect(
56
+ planReducedMotion(waiting, 0, {opacity: 0.5}, ['opacity'], true).joins,
57
+ ).toBeUndefined();
58
+ });
59
+
34
60
  it('without a fade (a fine primary pointer), writes everything at once (DR3)', () => {
35
61
  const plan = planReducedMotion(
36
62
  view(),
@@ -80,6 +80,8 @@ export interface ReducedMotionView {
80
80
  readonly restingOpacity: number;
81
81
  /** Whether a move of an earlier call still waits to land. */
82
82
  readonly hasPendingLanding: boolean;
83
+ /** Whether an earlier dip's fade back in still waits on its landing. */
84
+ readonly hasWaitingDip: boolean;
83
85
  }
84
86
 
85
87
  /** What Reduce Motion makes of a call. */
@@ -93,6 +95,11 @@ export interface ReducedMotionPlan {
93
95
  readonly landing: PlannedLanding | null;
94
96
  /** The stylesheet opacity a dip borrowed (no call owns opacity). */
95
97
  readonly borrowed?: number | null;
98
+ /**
99
+ * The call joins the waiting dip: it names the opacity the dip returns to
100
+ * and moves nothing, so the fade goes on as it was.
101
+ */
102
+ readonly joins?: boolean;
96
103
  }
97
104
 
98
105
  /** The opacity no call has changed. */
@@ -162,7 +169,7 @@ export function planReducedMotion(
162
169
  // A move still waiting to land (an earlier dip's) lands at this call's
163
170
  // invisible moment, never while the element shows.
164
171
  const pending = view.hasPendingLanding;
165
- // Not a theme role: no theme lengthens it (design:reduced-motion DR4).
172
+ // Not a role: nothing lengthens it (design:reduced-motion DR4).
166
173
  const ms = reducedMotionCrossFade.durationMs;
167
174
  const landsLater = (
168
175
  at: number,
@@ -183,6 +190,18 @@ export function planReducedMotion(
183
190
  : {}),
184
191
  };
185
192
  };
193
+ // A call that names the opacity a waiting dip returns to, and names no
194
+ // travel, joins that dip: the fade goes on as it was and the call settles
195
+ // when the dip ends. A second dip, opened from where the first had got
196
+ // to, would fade the element out twice.
197
+ if (
198
+ named &&
199
+ view.hasWaitingDip &&
200
+ !properties.some(property => TRAVEL_PROPERTIES.includes(property)) &&
201
+ Math.abs(opacityTo - view.opacityHeading()) < 1e-6
202
+ ) {
203
+ return {atOnce: [], opacityFade: null, holds, landing: null, joins: true};
204
+ }
186
205
  // Travel lands only while the element is transparent (DR1, DR2): an
187
206
  // entrance that starts visible, or an exit that ends visible, dips instead
188
207
  // when it has travel or a waiting landing to carry.
@@ -0,0 +1,123 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file resolveMotion.test.ts
5
+ * @input resolveMotion.ts, the shared UIKit tables, a stubbed computed style
6
+ * @output Proof that, with the per-role tables internal (spec:AST-094
7
+ * DEC-15), a role plays its table value whatever a scope's CSS variable
8
+ * says, reads no style, and leaves values that are not roles alone; and
9
+ * that the animator plays the table's spring
10
+ * @position Testing for /packages/core/src/motion/resolveMotion.ts (the
11
+ * browser proof: animator.interaction.browser.spec.ts)
12
+ */
13
+
14
+ import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest';
15
+ import {createAnimator} from './animator';
16
+ import {coast} from './coast';
17
+ import {resolveMotion} from './resolveMotion';
18
+ import {solveSpring, toSpring} from './spring';
19
+ import {
20
+ registerSpringsTable,
21
+ registerTimingTable,
22
+ scroll,
23
+ springs,
24
+ timing,
25
+ } from './uikit';
26
+
27
+ // Like a touch module: register the tables these motions resolve from.
28
+ registerSpringsTable();
29
+ registerTimingTable();
30
+
31
+ let reads: number;
32
+
33
+ beforeEach(() => {
34
+ reads = 0;
35
+ vi.spyOn(window, 'getComputedStyle').mockImplementation(
36
+ () =>
37
+ ({
38
+ getPropertyValue: () => {
39
+ reads += 1;
40
+ return '';
41
+ },
42
+ }) as unknown as CSSStyleDeclaration,
43
+ );
44
+ });
45
+
46
+ afterEach(() => {
47
+ vi.restoreAllMocks();
48
+ document.body.innerHTML = '';
49
+ });
50
+
51
+ /** A scope that sets role variables, as a page's own style could. */
52
+ function scoped(values: Record<string, string>) {
53
+ const scope = document.createElement('div');
54
+ scope.setAttribute('data-astryx-theme', 'soft');
55
+ for (const [name, value] of Object.entries(values)) {
56
+ scope.style.setProperty(name, value);
57
+ }
58
+ const child = document.createElement('div');
59
+ scope.append(child);
60
+ document.body.append(scope);
61
+ return child;
62
+ }
63
+
64
+ describe('resolveMotion while the per-role tables stay internal (DEC-15)', () => {
65
+ it('plays the table value for a spring, a curve and a duration, whatever a scope sets', () => {
66
+ const child = scoped({
67
+ '--motion-springs-settle': '0.8s 0.3',
68
+ '--motion-timing-curves-move': 'cubic-bezier(0.4, 0, 0.2, 1)',
69
+ '--motion-timing-state-change-ms': '300ms',
70
+ });
71
+ expect(resolveMotion(child, springs.settle)).toBe(springs.settle);
72
+ expect(resolveMotion(child, timing.curves.move)).toBe(timing.curves.move);
73
+ expect(resolveMotion(child, timing, 'stateChangeMs')).toBe(
74
+ timing.stateChangeMs,
75
+ );
76
+ expect(resolveMotion(null, springs.settle)).toBe(springs.settle);
77
+ // No style is read to resolve a role.
78
+ expect(reads).toBe(0);
79
+ });
80
+
81
+ it('leaves values that are not roles alone', () => {
82
+ const inline = {response: 0.4, dampingRatio: 0.9};
83
+ expect(resolveMotion(document.body, inline)).toBe(inline);
84
+ expect(resolveMotion(document.body, springs.sheetPresent)).toBe(
85
+ springs.sheetPresent,
86
+ );
87
+ expect(resolveMotion(document.body, timing.press, 'scrollBrakeMs')).toBe(
88
+ timing.press.scrollBrakeMs,
89
+ );
90
+ });
91
+ });
92
+
93
+ describe('the animator', () => {
94
+ it("plays the table's spring even where a scope sets the role's variable", () => {
95
+ const child = scoped({'--motion-springs-settle': '0.8s 0.3'});
96
+ const animator = createAnimator(child, {now: () => 0});
97
+ animator.set({y: 300});
98
+ animator.animate({y: 0}, {spring: springs.settle}, {at: 0});
99
+ const table = solveSpring(toSpring(springs.settle), {from: 300, to: 0});
100
+ for (const ms of [50, 150, 400]) {
101
+ expect(animator.get('y', ms)).toBeCloseTo(table.value(ms / 1000), 3);
102
+ }
103
+ animator.dispose();
104
+ });
105
+ it('a coast plays the table edge spring whatever a scope sets: scroll.bounce is no role', () => {
106
+ const child = scoped({'--motion-scroll-bounce': '0.8s 0.3'});
107
+ const animator = createAnimator(child, {now: () => 0});
108
+ animator.set({x: 60});
109
+ // Released past the edge: straight back on the edge spring.
110
+ animator.decay(
111
+ coast(animator, {x: 0}, {bounds: {x: {min: -500, max: 0}}, at: 0}),
112
+ {at: 0},
113
+ );
114
+ const expected = solveSpring(toSpring(scroll.bounce), {
115
+ from: 60,
116
+ to: 0,
117
+ });
118
+ for (const ms of [50, 150, 400]) {
119
+ expect(animator.get('x', ms)).toBeCloseTo(expected.value(ms / 1000), 3);
120
+ }
121
+ animator.dispose();
122
+ });
123
+ });
@@ -0,0 +1,68 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file resolveMotion.ts
5
+ * @input A motion role: a spring or curve of a registered motion table, or a
6
+ * table group and the key of one of its values
7
+ * @output resolveMotion: the role's value
8
+ * @position Motion foundation; the animator resolves every spring and curve
9
+ * it is handed with it, and components resolve the durations they time
10
+ * with it
11
+ *
12
+ * Every touch motion passes through here, so the role a value plays is named
13
+ * in one place. A role plays its table value: the per-role tables stay
14
+ * internal (`spec:AST-094` DEC-15), so nothing reads a role's CSS variable
15
+ * and no page or theme style sets a role. Nothing here reads style or
16
+ * layout, listens or observes, imports a table, or runs on import or on the
17
+ * server.
18
+ *
19
+ * SYNC: When modified, update:
20
+ * - /packages/core/src/motion/resolveMotion.test.ts
21
+ * - /packages/core/src/motion/animator.ts (resolves each role it plays)
22
+ */
23
+
24
+ import type {MotionCurvePoints} from './roles';
25
+ import type {SpringDescription} from './spring';
26
+
27
+ /**
28
+ * A motion role's value: its table value, as the per-role tables stay
29
+ * internal (`spec:AST-094` DEC-15). Hand it a spring or curve of a motion
30
+ * table, or a table group and a key (the way to name a duration, which is a
31
+ * bare number):
32
+ *
33
+ * @example
34
+ * ```
35
+ * const spring = resolveMotion(sheet, springs.settle);
36
+ * const fadeMs = resolveMotion(row, timing, 'stateChangeMs');
37
+ * ```
38
+ *
39
+ * The element names where the motion plays; anything that is not a role
40
+ * comes back unchanged too, so a spring
41
+ * written inline at a call site keeps working.
42
+ */
43
+ export function resolveMotion<T extends SpringDescription>(
44
+ element: Element | null | undefined,
45
+ spring: T,
46
+ ): T | SpringDescription;
47
+ export function resolveMotion(
48
+ element: Element | null | undefined,
49
+ curve: MotionCurvePoints,
50
+ ): MotionCurvePoints;
51
+ export function resolveMotion<G extends object, K extends keyof G & string>(
52
+ element: Element | null | undefined,
53
+ group: G,
54
+ key: K,
55
+ ): G[K] extends number
56
+ ? number
57
+ : G[K] extends MotionCurvePoints
58
+ ? MotionCurvePoints
59
+ : G[K] | SpringDescription;
60
+ export function resolveMotion(
61
+ _element: Element | null | undefined,
62
+ leafOrGroup: object,
63
+ key?: string,
64
+ ): unknown {
65
+ return key === undefined
66
+ ? leafOrGroup
67
+ : (leafOrGroup as Record<string, unknown>)[key];
68
+ }
@@ -69,7 +69,8 @@ export function short(n: number): string {
69
69
  * spring: mass folds into the duration, overdamping into a negative bounce);
70
70
  * - duration: `250ms`;
71
71
  * - curve: `cubic-bezier(0.42, 0, 0.58, 1)`, usable as is in CSS.
72
- * Throws on a value that is not a valid value of its kind.
72
+ * Throws on a value that is not a valid value of its kind, a spring that
73
+ * never settles included.
73
74
  */
74
75
  export function formatMotionRoleValue(
75
76
  kind: MotionRoleKind,
@@ -2,10 +2,11 @@
2
2
 
3
3
  /**
4
4
  * @file roles.test.ts
5
- * @input roles.ts and the shared UIKit tables (registered on import)
6
- * @output Proof that each spring, duration and curve of a registered table is
7
- * a role named by its path, that non-motion values are not, and that a
8
- * role's CSS value reads back as the same motion
5
+ * @input roles.ts and the shared UIKit tables (registered by this test)
6
+ * @output Proof that the registered roles are exactly the ones spec:AST-094
7
+ * FR4 names, each by its table path; that every other table value, a
8
+ * component's measured spring included, is no role; and that a role's CSS
9
+ * value reads back as the same motion
9
10
  * @position Testing for /packages/core/src/motion/roles.ts
10
11
  */
11
12
 
@@ -175,6 +176,10 @@ describe('motion roles', () => {
175
176
  // thresholds and the arbitration timings are not motion roles either.
176
177
  expect(motionRoleIn(timing, 'reducedMotionCrossFadeMs')).toBeUndefined();
177
178
  expect(motionRoleOf(springs.menuReducedMotion)).toBeUndefined();
179
+ // Nor is the keyboard's motion: it rides the keyboard's own spring and
180
+ // notification duration, not a role (spec:AST-094 FR4).
181
+ expect(motionRoleIn(springs, 'keyboard')).toBeUndefined();
182
+ expect(motionRoleIn(timing, 'keyboardNotificationMs')).toBeUndefined();
178
183
  expect(motionRoleIn(timing.press, 'scrollBrakeMs')).toBeUndefined();
179
184
  expect(motionRoleIn(scroll, 'delaysContentTouchesMs')).toBeUndefined();
180
185
  expect(motionRoleIn(navigation, 'parallax')).toBeUndefined();
@@ -244,6 +249,18 @@ describe('motion roles', () => {
244
249
  expect(() => formatMotionRoleValue('spring', {response: 0.5})).toThrow(
245
250
  /spring is/,
246
251
  );
252
+ // A spring with no damping never settles.
253
+ for (const never of [
254
+ {duration: 0.5, bounce: 1},
255
+ {duration: 0.5, bounce: 1.5},
256
+ {response: 0.5, dampingRatio: 0},
257
+ {mass: 1, stiffness: 100, damping: 0},
258
+ ]) {
259
+ expect(() => formatMotionRoleValue('spring', never)).toThrow(
260
+ /must settle/,
261
+ );
262
+ }
263
+ expect(parseMotionRoleValue('spring', '0.5s 1')).toBeNull();
247
264
  expect(parseMotionRoleValue('spring', '')).toBeNull();
248
265
  expect(parseMotionRoleValue('spring', 'fast')).toBeNull();
249
266
  expect(parseMotionRoleValue('spring', '0.4s 0.2')).toEqual({
@@ -0,0 +1,293 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file tableImports.test.ts
5
+ * @input Core's source files and their relative runtime imports
6
+ * @output Fails when a component's import graph reaches a motion table it
7
+ * only reaches through a barrel or a namespace object, when anything imports
8
+ * a table as a namespace object, or when a shared module imports a table
9
+ * that belongs to one component
10
+ * @position Keeps a page to the motion tables it animates with: a namespace
11
+ * object (`export * as uikit`) keeps every table, every register function
12
+ * and the role registry in the bundle of anything that reads one table.
13
+ */
14
+
15
+ import {existsSync, readdirSync, readFileSync, statSync} from 'node:fs';
16
+ import {dirname, join, relative, resolve} from 'node:path';
17
+ import {describe, expect, it} from 'vitest';
18
+
19
+ /** The tables every touch module may share: the animator and gestures read them. */
20
+ const SHARED_TABLES = new Set([
21
+ 'motion/uikit/gestures.ts',
22
+ 'motion/uikit/navigation.ts',
23
+ 'motion/uikit/scroll.ts',
24
+ 'motion/uikit/springs.ts',
25
+ 'motion/uikit/timing.ts',
26
+ ]);
27
+
28
+ const BARREL = 'motion/uikit/index.ts';
29
+
30
+ /** A source file of the package, not a test, story or fixture. */
31
+ function isSource(path: string): boolean {
32
+ return (
33
+ /\.(ts|tsx)$/.test(path) &&
34
+ !path.endsWith('.d.ts') &&
35
+ !/(\.test|\.spec|\.stories|\.test-violations)\.tsx?$/.test(path) &&
36
+ !/(^|\/)__tests__\//.test(path)
37
+ );
38
+ }
39
+
40
+ /** A table: a data module directly under motion/uikit, not the barrel. */
41
+ function isTable(path: string): boolean {
42
+ return (
43
+ /^motion\/uikit\/[^/]+\.ts$/.test(path) &&
44
+ path !== BARREL &&
45
+ isSource(path) &&
46
+ !path.endsWith('.generated.ts')
47
+ );
48
+ }
49
+
50
+ /** The component a file belongs to (a PascalCase top-level directory), or null. */
51
+ function componentOf(path: string): string | null {
52
+ const top = path.split('/')[0] ?? '';
53
+ return path.includes('/') && /^[A-Z]/.test(top) ? top : null;
54
+ }
55
+
56
+ interface Edge {
57
+ readonly to: string;
58
+ readonly namespace: boolean;
59
+ }
60
+
61
+ const IMPORT =
62
+ /(?:^|[\s;])(import|export)\s+(type\s+)?([^'";]*?)\s*from\s*['"](\.{1,2}\/[^'"]+)['"]/g;
63
+ const DYNAMIC = /import\(\s*['"](\.{1,2}\/[^'"]+)['"]\s*\)/g;
64
+ const BARE = /(?:^|[\s;])import\s*['"](\.{1,2}\/[^'"]+)['"]/g;
65
+
66
+ /** The runtime edges of one file; type-only imports load nothing. */
67
+ function edgesOf(
68
+ path: string,
69
+ source: string,
70
+ resolveSpecifier: (from: string, specifier: string) => string | null,
71
+ ): Edge[] {
72
+ const edges: Edge[] = [];
73
+ const text = source.replace(/\/\*[\s\S]*?\*\//g, '').replace(/\/\/.*$/gm, '');
74
+ for (const match of text.matchAll(IMPORT)) {
75
+ const [, , typeOnly, clause = '', specifier = ''] = match;
76
+ if (typeOnly != null) {
77
+ continue;
78
+ }
79
+ const named = /^\{([\s\S]*)\}$/.exec(clause.trim());
80
+ if (
81
+ named != null &&
82
+ (named[1] ?? '')
83
+ .split(',')
84
+ .map(part => part.trim())
85
+ .filter(Boolean)
86
+ .every(part => part.startsWith('type '))
87
+ ) {
88
+ continue;
89
+ }
90
+ const to = resolveSpecifier(path, specifier);
91
+ if (to != null) {
92
+ edges.push({to, namespace: /\*\s+as\s+\w+/.test(clause)});
93
+ }
94
+ }
95
+ for (const pattern of [DYNAMIC, BARE]) {
96
+ for (const match of text.matchAll(pattern)) {
97
+ const to = resolveSpecifier(path, match[1] ?? '');
98
+ if (to != null) {
99
+ edges.push({to, namespace: false});
100
+ }
101
+ }
102
+ }
103
+ return edges;
104
+ }
105
+
106
+ /**
107
+ * Every leak in a package, given its source files by path (relative to the
108
+ * package's src directory). Pure, so the rule can be checked on a made-up
109
+ * package too.
110
+ */
111
+ function findTableLeaks(files: ReadonlyMap<string, string>): string[] {
112
+ const resolveSpecifier = (from: string, specifier: string): string | null => {
113
+ const base = join(dirname(from), specifier).replace(/\\/g, '/');
114
+ const stem = base.replace(/\.js$/, '');
115
+ for (const candidate of [
116
+ base,
117
+ `${stem}.ts`,
118
+ `${stem}.tsx`,
119
+ `${stem}/index.ts`,
120
+ `${stem}/index.tsx`,
121
+ ]) {
122
+ if (files.has(candidate)) {
123
+ return candidate;
124
+ }
125
+ }
126
+ return null;
127
+ };
128
+ const graph = new Map<string, Edge[]>();
129
+ for (const [path, source] of files) {
130
+ if (isSource(path)) {
131
+ graph.set(path, edgesOf(path, source, resolveSpecifier));
132
+ }
133
+ }
134
+
135
+ const leaks: string[] = [];
136
+ for (const [path, edges] of graph) {
137
+ for (const edge of edges) {
138
+ if (edge.namespace && (isTable(edge.to) || edge.to === BARREL)) {
139
+ leaks.push(
140
+ `${path} imports ${edge.to} as a namespace object, which keeps every table it reaches; import the tables by name`,
141
+ );
142
+ }
143
+ if (
144
+ isTable(edge.to) &&
145
+ !SHARED_TABLES.has(edge.to) &&
146
+ componentOf(path) == null &&
147
+ path !== BARREL
148
+ ) {
149
+ leaks.push(
150
+ `${path} (shared code) imports ${edge.to}, a component's table; import it in that component's touch module`,
151
+ );
152
+ }
153
+ }
154
+ }
155
+
156
+ const entries = [...graph.keys()].filter(path =>
157
+ /^[A-Z][^/]*\/index\.tsx?$/.test(path),
158
+ );
159
+ for (const entry of entries) {
160
+ const reached = new Set<string>([entry]);
161
+ const queue = [entry];
162
+ while (queue.length > 0) {
163
+ const file = queue.pop() as string;
164
+ for (const edge of graph.get(file) ?? []) {
165
+ if (!reached.has(edge.to)) {
166
+ reached.add(edge.to);
167
+ queue.push(edge.to);
168
+ }
169
+ }
170
+ }
171
+ for (const table of reached) {
172
+ if (!isTable(table) || SHARED_TABLES.has(table)) {
173
+ continue;
174
+ }
175
+ // Reached the way a page needs it: some component file this entry
176
+ // loads imports the table itself.
177
+ const direct = [...reached].some(
178
+ file =>
179
+ componentOf(file) != null &&
180
+ (graph.get(file) ?? []).some(edge => edge.to === table),
181
+ );
182
+ if (!direct) {
183
+ leaks.push(
184
+ `${entry} reaches ${table} only through a barrel or shared module; a component's table must be imported by the component that animates with it`,
185
+ );
186
+ }
187
+ }
188
+ }
189
+ return leaks;
190
+ }
191
+
192
+ function readPackage(root: string): Map<string, string> {
193
+ const files = new Map<string, string>();
194
+ const walk = (dir: string) => {
195
+ for (const name of readdirSync(dir)) {
196
+ if (name === 'node_modules' || name.startsWith('.')) {
197
+ continue;
198
+ }
199
+ const full = join(dir, name);
200
+ if (statSync(full).isDirectory()) {
201
+ walk(full);
202
+ } else if (/\.(ts|tsx)$/.test(name)) {
203
+ files.set(
204
+ relative(root, full).replace(/\\/g, '/'),
205
+ readFileSync(full, 'utf8'),
206
+ );
207
+ }
208
+ }
209
+ };
210
+ walk(root);
211
+ return files;
212
+ }
213
+
214
+ describe('motion table imports', () => {
215
+ const src = resolve(__dirname, '../..');
216
+
217
+ it('core imports each motion table by name, from the component that animates with it', () => {
218
+ expect(existsSync(join(src, BARREL))).toBe(true);
219
+ expect(findTableLeaks(readPackage(src))).toEqual([]);
220
+ });
221
+
222
+ it('catches a table reached through the barrel, a namespace object or shared code', () => {
223
+ const files = new Map([
224
+ [
225
+ 'motion/uikit/index.ts',
226
+ "export {springs} from './springs';\nexport {refresh} from './refresh';\n",
227
+ ],
228
+ ['motion/uikit/springs.ts', 'export const springs = {};\n'],
229
+ ['motion/uikit/refresh.ts', 'export const refresh = {};\n'],
230
+ ['motion/uikit/wheel.ts', 'export const wheel = {};\n'],
231
+ [
232
+ 'Refresh/index.ts',
233
+ "import {refresh} from '../motion/uikit/refresh';\nexport {refresh};\n",
234
+ ],
235
+ [
236
+ 'Button/index.ts',
237
+ "import {springs} from '../motion/uikit';\nexport {springs};\n",
238
+ ],
239
+ [
240
+ 'Picker/index.ts',
241
+ "import * as uikit from '../motion/uikit';\nimport type {Wheel} from '../motion/uikit/wheel';\nexport const p = uikit;\n",
242
+ ],
243
+ [
244
+ 'motion/animator.ts',
245
+ "import {wheel} from './uikit/wheel';\nexport {wheel};\n",
246
+ ],
247
+ [
248
+ 'Sheet/index.ts',
249
+ "import {wheel} from '../motion/animator';\nexport {wheel};\n",
250
+ ],
251
+ ]);
252
+ const leaks = findTableLeaks(files);
253
+ // The barrel re-exports a component's table, so Button reaches it.
254
+ expect(
255
+ leaks.some(leak =>
256
+ leak.startsWith('Button/index.ts reaches motion/uikit/refresh.ts'),
257
+ ),
258
+ ).toBe(true);
259
+ // A namespace object, and everything it keeps.
260
+ expect(
261
+ leaks.some(leak =>
262
+ leak.startsWith(
263
+ 'Picker/index.ts imports motion/uikit/index.ts as a namespace object',
264
+ ),
265
+ ),
266
+ ).toBe(true);
267
+ expect(
268
+ leaks.some(leak =>
269
+ leak.startsWith('Picker/index.ts reaches motion/uikit/refresh.ts'),
270
+ ),
271
+ ).toBe(true);
272
+ // Shared code importing one component's table, and what that leaks.
273
+ expect(
274
+ leaks.some(leak =>
275
+ leak.startsWith(
276
+ 'motion/animator.ts (shared code) imports motion/uikit/wheel.ts',
277
+ ),
278
+ ),
279
+ ).toBe(true);
280
+ expect(
281
+ leaks.some(leak =>
282
+ leak.startsWith('Sheet/index.ts reaches motion/uikit/wheel.ts'),
283
+ ),
284
+ ).toBe(true);
285
+ // The owner reaching its own table directly is fine; a type import loads nothing.
286
+ expect(leaks.some(leak => leak.startsWith('Refresh/index.ts'))).toBe(false);
287
+ expect(
288
+ leaks.some(leak =>
289
+ leak.includes('Picker/index.ts reaches motion/uikit/wheel.ts'),
290
+ ),
291
+ ).toBe(false);
292
+ });
293
+ });