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

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 (1575) 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 +8 -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 +49 -6
  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 +108 -23
  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 +9 -5
  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/DropdownMenuGroup.d.ts.map +1 -1
  64. package/dist/DropdownMenu/DropdownMenuGroup.js +2 -1
  65. package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts.map +1 -1
  66. package/dist/DropdownMenu/MenuBottomSheetActionList.js +6 -5
  67. package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts +20 -2
  68. package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts.map +1 -1
  69. package/dist/DropdownMenu/lazyMenuBottomSheet.js +31 -3
  70. package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
  71. package/dist/DropdownMenu/renderDropdownItems.js +21 -16
  72. package/dist/EmptyState/EmptyState.d.ts.map +1 -1
  73. package/dist/EmptyState/EmptyState.js +2 -1
  74. package/dist/Field/FieldLabel.d.ts +1 -1
  75. package/dist/Field/FieldLabel.d.ts.map +1 -1
  76. package/dist/Field/FieldLabel.js +31 -6
  77. package/dist/Field/InputClearButton.js +3 -3
  78. package/dist/Field/PanelSearchInput.js +2 -2
  79. package/dist/FieldStatus/FieldStatus.d.ts +3 -0
  80. package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
  81. package/dist/FieldStatus/FieldStatus.js +3 -2
  82. package/dist/FileInput/FileInput.d.ts +3 -0
  83. package/dist/FileInput/FileInput.d.ts.map +1 -1
  84. package/dist/FileInput/FileInput.js +66 -34
  85. package/dist/Heading/Heading.js +1 -1
  86. package/dist/Icon/Icon.js +1 -1
  87. package/dist/Indicator/CheckIndicator.d.ts.map +1 -1
  88. package/dist/Indicator/CheckIndicator.js +2 -1
  89. package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
  90. package/dist/Indicator/CheckboxIndicator.js +3 -1
  91. package/dist/Indicator/RadioIndicator.d.ts.map +1 -1
  92. package/dist/Indicator/RadioIndicator.js +3 -1
  93. package/dist/Item/Item.d.ts.map +1 -1
  94. package/dist/Item/Item.js +21 -7
  95. package/dist/Item/ItemSwipeLayer.js +1 -1
  96. package/dist/Layer/popoverOperations.d.ts +27 -0
  97. package/dist/Layer/popoverOperations.d.ts.map +1 -0
  98. package/dist/Layer/popoverOperations.js +159 -0
  99. package/dist/Layer/useLayer.d.ts +1 -1
  100. package/dist/Layer/useLayer.d.ts.map +1 -1
  101. package/dist/Layer/useLayer.js +120 -65
  102. package/dist/Layer/useTouchTrigger.d.ts +9 -0
  103. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  104. package/dist/Layer/useTouchTrigger.js +1 -1
  105. package/dist/Layout/Layout.js +1 -1
  106. package/dist/Layout/LayoutContent.js +1 -1
  107. package/dist/Layout/LayoutFooter.js +1 -1
  108. package/dist/Layout/LayoutHeader.js +1 -1
  109. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  110. package/dist/Lightbox/Lightbox.js +5 -0
  111. package/dist/Link/Link.d.ts.map +1 -1
  112. package/dist/Link/Link.js +18 -4
  113. package/dist/List/List.js +1 -1
  114. package/dist/List/ListItem.js +3 -3
  115. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  116. package/dist/MobileNav/MobileNav.js +7 -2
  117. package/dist/MultiSelector/MultiSelector.d.ts +1 -1
  118. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  119. package/dist/MultiSelector/MultiSelector.js +45 -19
  120. package/dist/NavMenu/NavHeadingMenuItem.d.ts.map +1 -1
  121. package/dist/NavMenu/NavHeadingMenuItem.js +5 -29
  122. package/dist/NumberInput/NumberInput.d.ts +3 -1
  123. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  124. package/dist/NumberInput/NumberInput.js +21 -4
  125. package/dist/NumberInput/numberParser.d.ts +3 -0
  126. package/dist/NumberInput/numberParser.d.ts.map +1 -1
  127. package/dist/NumberInput/numberParser.js +7 -44
  128. package/dist/Outline/Outline.d.ts.map +1 -1
  129. package/dist/Outline/Outline.js +27 -0
  130. package/dist/Popover/Popover.d.ts.map +1 -1
  131. package/dist/Popover/Popover.js +32 -12
  132. package/dist/Popover/usePopover.d.ts.map +1 -1
  133. package/dist/Popover/usePopover.js +10 -3
  134. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  135. package/dist/PowerSearch/PowerSearch.js +37 -30
  136. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  137. package/dist/ProgressBar/ProgressBar.js +16 -12
  138. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  139. package/dist/RadioList/RadioListItem.js +11 -3
  140. package/dist/Resizable/useResizable.d.ts.map +1 -1
  141. package/dist/Resizable/useResizable.js +81 -12
  142. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  143. package/dist/SegmentedControl/SegmentedControlItem.js +4 -1
  144. package/dist/Selector/Selector.d.ts.map +1 -1
  145. package/dist/Selector/Selector.js +9 -6
  146. package/dist/Selector/hooks.js +2 -2
  147. package/dist/Selector/useSelectorPresentation.d.ts +8 -1
  148. package/dist/Selector/useSelectorPresentation.d.ts.map +1 -1
  149. package/dist/Selector/useSelectorPresentation.js +20 -4
  150. package/dist/SideNav/SideNavItem.d.ts +2 -2
  151. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  152. package/dist/SideNav/SideNavItem.js +18 -7
  153. package/dist/Skeleton/Skeleton.d.ts.map +1 -1
  154. package/dist/Skeleton/Skeleton.js +1 -1
  155. package/dist/Slider/Slider.d.ts.map +1 -1
  156. package/dist/Slider/Slider.js +100 -12
  157. package/dist/Spinner/Spinner.d.ts.map +1 -1
  158. package/dist/Spinner/Spinner.js +3 -3
  159. package/dist/Stack/Stack.js +1 -1
  160. package/dist/Stack/StackItem.js +1 -1
  161. package/dist/Stepper/Step.d.ts.map +1 -1
  162. package/dist/Stepper/Step.js +26 -6
  163. package/dist/Switch/Switch.d.ts.map +1 -1
  164. package/dist/Switch/Switch.js +10 -3
  165. package/dist/TabList/TabList.d.ts.map +1 -1
  166. package/dist/TabList/TabList.js +16 -1
  167. package/dist/Table/Table.d.ts.map +1 -1
  168. package/dist/Table/Table.js +36 -10
  169. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  170. package/dist/Table/plugins/columnResize/useTableColumnResize.js +9 -1
  171. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  172. package/dist/Table/plugins/sortable/useTableSortable.js +46 -58
  173. package/dist/Text/Text.js +1 -1
  174. package/dist/Text/useTruncation.d.ts.map +1 -1
  175. package/dist/Text/useTruncation.js +23 -5
  176. package/dist/TextArea/TextArea.d.ts +1 -1
  177. package/dist/TextArea/TextArea.d.ts.map +1 -1
  178. package/dist/TextArea/TextArea.js +13 -2
  179. package/dist/TextInput/TextInput.d.ts.map +1 -1
  180. package/dist/TextInput/TextInput.js +3 -3
  181. package/dist/TimeInput/TimeInput.d.ts +6 -2
  182. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  183. package/dist/TimeInput/TimeInput.js +21 -14
  184. package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
  185. package/dist/TimeInput/TouchTimeField.js +5 -4
  186. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  187. package/dist/Timestamp/Timestamp.js +2 -2
  188. package/dist/Timestamp/TimestampHoverCard.js +4 -4
  189. package/dist/Toast/Toast.d.ts.map +1 -1
  190. package/dist/Toast/Toast.js +60 -20
  191. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  192. package/dist/Toast/ToastViewport.js +101 -54
  193. package/dist/ToggleButton/ToggleButtonGroup.d.ts +7 -1
  194. package/dist/ToggleButton/ToggleButtonGroup.d.ts.map +1 -1
  195. package/dist/ToggleButton/ToggleButtonGroup.js +16 -2
  196. package/dist/Token/Token.d.ts +1 -1
  197. package/dist/Token/Token.d.ts.map +1 -1
  198. package/dist/Token/Token.js +52 -5
  199. package/dist/Token/TokenLink.d.ts.map +1 -1
  200. package/dist/Token/TokenLink.js +14 -2
  201. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  202. package/dist/Tokenizer/Tokenizer.js +95 -54
  203. package/dist/Tokenizer/TokenizerBottomSheet.d.ts.map +1 -1
  204. package/dist/Tokenizer/TokenizerBottomSheet.js +11 -17
  205. package/dist/Tokenizer/TokenizerClearAllMessageContext.d.ts +2 -0
  206. package/dist/Tokenizer/TokenizerClearAllMessageContext.d.ts.map +1 -0
  207. package/dist/Tokenizer/TokenizerClearAllMessageContext.js +17 -0
  208. package/dist/Toolbar/Toolbar.d.ts.map +1 -1
  209. package/dist/Toolbar/Toolbar.js +2 -1
  210. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  211. package/dist/TopNav/TopNavMegaMenu.js +3 -0
  212. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  213. package/dist/TopNav/TopNavMenu.js +1 -0
  214. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  215. package/dist/TreeList/TreeListItem.js +27 -4
  216. package/dist/Typeahead/BaseTypeahead.d.ts +4 -4
  217. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  218. package/dist/Typeahead/BaseTypeahead.js +52 -9
  219. package/dist/Typeahead/Typeahead.d.ts +1 -1
  220. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  221. package/dist/Typeahead/Typeahead.js +43 -9
  222. package/dist/astryx.css +26 -5
  223. package/dist/gestures/GestureArena.d.ts +32 -1
  224. package/dist/gestures/GestureArena.d.ts.map +1 -1
  225. package/dist/gestures/GestureArena.js +110 -9
  226. package/dist/gestures/GestureHost.d.ts +351 -0
  227. package/dist/gestures/GestureHost.d.ts.map +1 -0
  228. package/dist/gestures/GestureHost.js +1773 -0
  229. package/dist/gestures/GestureRecognizer.d.ts +13 -1
  230. package/dist/gestures/GestureRecognizer.d.ts.map +1 -1
  231. package/dist/gestures/GestureRecognizer.js +19 -1
  232. package/dist/gestures/LongPressGestureRecognizer.d.ts +1 -0
  233. package/dist/gestures/LongPressGestureRecognizer.d.ts.map +1 -1
  234. package/dist/gestures/LongPressGestureRecognizer.js +3 -0
  235. package/dist/gestures/PanGestureRecognizer.d.ts +1 -0
  236. package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -1
  237. package/dist/gestures/PanGestureRecognizer.js +3 -0
  238. package/dist/gestures/PinchGestureRecognizer.d.ts +31 -0
  239. package/dist/gestures/PinchGestureRecognizer.d.ts.map +1 -0
  240. package/dist/gestures/PinchGestureRecognizer.js +128 -0
  241. package/dist/gestures/PressTracker.d.ts +112 -0
  242. package/dist/gestures/PressTracker.d.ts.map +1 -0
  243. package/dist/gestures/PressTracker.js +267 -0
  244. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts +71 -0
  245. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -0
  246. package/dist/gestures/ScreenEdgePanGestureRecognizer.js +223 -0
  247. package/dist/gestures/SwipeGestureRecognizer.d.ts +37 -0
  248. package/dist/gestures/SwipeGestureRecognizer.d.ts.map +1 -0
  249. package/dist/gestures/SwipeGestureRecognizer.js +148 -0
  250. package/dist/gestures/TapGestureRecognizer.d.ts +1 -0
  251. package/dist/gestures/TapGestureRecognizer.d.ts.map +1 -1
  252. package/dist/gestures/TapGestureRecognizer.js +3 -0
  253. package/dist/gestures/VelocityTracker.d.ts +6 -2
  254. package/dist/gestures/VelocityTracker.d.ts.map +1 -1
  255. package/dist/gestures/VelocityTracker.js +7 -3
  256. package/dist/gestures/haptics.d.ts +65 -0
  257. package/dist/gestures/haptics.d.ts.map +1 -0
  258. package/dist/gestures/haptics.js +182 -0
  259. package/dist/gestures/index.d.ts +37 -0
  260. package/dist/gestures/index.d.ts.map +1 -0
  261. package/dist/gestures/index.js +25 -0
  262. package/dist/gestures/nativeScroll.d.ts +42 -0
  263. package/dist/gestures/nativeScroll.d.ts.map +1 -0
  264. package/dist/gestures/nativeScroll.js +228 -0
  265. package/dist/gestures/touchAction.d.ts +60 -0
  266. package/dist/gestures/touchAction.d.ts.map +1 -0
  267. package/dist/gestures/touchAction.js +157 -0
  268. package/dist/gestures/touchActionRule.d.ts +34 -0
  269. package/dist/gestures/touchActionRule.d.ts.map +1 -0
  270. package/dist/gestures/touchActionRule.js +140 -0
  271. package/dist/gestures/types.d.ts +18 -7
  272. package/dist/gestures/types.d.ts.map +1 -1
  273. package/dist/gestures/types.js +22 -2
  274. package/dist/gestures/useGestureRecognizer.d.ts +56 -0
  275. package/dist/gestures/useGestureRecognizer.d.ts.map +1 -0
  276. package/dist/gestures/useGestureRecognizer.js +226 -0
  277. package/dist/hooks/index.d.ts +1 -1
  278. package/dist/hooks/index.d.ts.map +1 -1
  279. package/dist/hooks/modalAnnounce.d.ts.map +1 -1
  280. package/dist/hooks/modalAnnounce.js +107 -61
  281. package/dist/hooks/scrollKeyboardDelegation.d.ts.map +1 -1
  282. package/dist/hooks/scrollKeyboardDelegation.js +7 -3
  283. package/dist/hooks/useAdaptivePresentation.d.ts.map +1 -1
  284. package/dist/hooks/useAdaptivePresentation.js +4 -1
  285. package/dist/hooks/useAnnounce.d.ts +101 -42
  286. package/dist/hooks/useAnnounce.d.ts.map +1 -1
  287. package/dist/hooks/useAnnounce.js +161 -75
  288. package/dist/hooks/useAnnounceRenderedText.d.ts +11 -3
  289. package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
  290. package/dist/hooks/useAnnounceRenderedText.js +5 -3
  291. package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
  292. package/dist/hooks/useBusyAnnouncement.js +6 -12
  293. package/dist/hooks/useMenuHover.d.ts.map +1 -1
  294. package/dist/hooks/useMenuHover.js +12 -1
  295. package/dist/hooks/useScrollOverflow.d.ts +2 -1
  296. package/dist/hooks/useScrollOverflow.d.ts.map +1 -1
  297. package/dist/hooks/useScrollOverflow.js +56 -10
  298. package/dist/i18n/generated-locales/af-ZA.generated.d.ts.map +1 -1
  299. package/dist/i18n/generated-locales/af-ZA.generated.js +0 -5
  300. package/dist/i18n/generated-locales/ar-SA.generated.d.ts.map +1 -1
  301. package/dist/i18n/generated-locales/ar-SA.generated.js +0 -5
  302. package/dist/i18n/generated-locales/ca-ES.generated.d.ts.map +1 -1
  303. package/dist/i18n/generated-locales/ca-ES.generated.js +0 -5
  304. package/dist/i18n/generated-locales/cs-CZ.generated.d.ts.map +1 -1
  305. package/dist/i18n/generated-locales/cs-CZ.generated.js +0 -5
  306. package/dist/i18n/generated-locales/da-DK.generated.d.ts.map +1 -1
  307. package/dist/i18n/generated-locales/da-DK.generated.js +0 -5
  308. package/dist/i18n/generated-locales/de-DE.generated.d.ts.map +1 -1
  309. package/dist/i18n/generated-locales/de-DE.generated.js +0 -5
  310. package/dist/i18n/generated-locales/el-GR.generated.d.ts.map +1 -1
  311. package/dist/i18n/generated-locales/el-GR.generated.js +0 -5
  312. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  313. package/dist/i18n/generated-locales/en.generated.js +8 -5
  314. package/dist/i18n/generated-locales/es-ES.generated.d.ts.map +1 -1
  315. package/dist/i18n/generated-locales/es-ES.generated.js +0 -5
  316. package/dist/i18n/generated-locales/fi-FI.generated.d.ts.map +1 -1
  317. package/dist/i18n/generated-locales/fi-FI.generated.js +0 -5
  318. package/dist/i18n/generated-locales/fr-FR.generated.d.ts.map +1 -1
  319. package/dist/i18n/generated-locales/fr-FR.generated.js +0 -5
  320. package/dist/i18n/generated-locales/he-IL.generated.d.ts.map +1 -1
  321. package/dist/i18n/generated-locales/he-IL.generated.js +0 -5
  322. package/dist/i18n/generated-locales/hu-HU.generated.d.ts.map +1 -1
  323. package/dist/i18n/generated-locales/hu-HU.generated.js +0 -5
  324. package/dist/i18n/generated-locales/it-IT.generated.d.ts.map +1 -1
  325. package/dist/i18n/generated-locales/it-IT.generated.js +0 -5
  326. package/dist/i18n/generated-locales/ja-JP.generated.d.ts.map +1 -1
  327. package/dist/i18n/generated-locales/ja-JP.generated.js +0 -5
  328. package/dist/i18n/generated-locales/ko-KR.generated.d.ts.map +1 -1
  329. package/dist/i18n/generated-locales/ko-KR.generated.js +0 -5
  330. package/dist/i18n/generated-locales/nl-NL.generated.d.ts.map +1 -1
  331. package/dist/i18n/generated-locales/nl-NL.generated.js +0 -5
  332. package/dist/i18n/generated-locales/no-NO.generated.d.ts.map +1 -1
  333. package/dist/i18n/generated-locales/no-NO.generated.js +0 -5
  334. package/dist/i18n/generated-locales/pl-PL.generated.d.ts.map +1 -1
  335. package/dist/i18n/generated-locales/pl-PL.generated.js +0 -5
  336. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  337. package/dist/i18n/generated-locales/pseudo.generated.js +8 -5
  338. package/dist/i18n/generated-locales/pt-BR.generated.d.ts.map +1 -1
  339. package/dist/i18n/generated-locales/pt-BR.generated.js +0 -5
  340. package/dist/i18n/generated-locales/pt-PT.generated.d.ts.map +1 -1
  341. package/dist/i18n/generated-locales/pt-PT.generated.js +0 -5
  342. package/dist/i18n/generated-locales/ro-RO.generated.d.ts.map +1 -1
  343. package/dist/i18n/generated-locales/ro-RO.generated.js +0 -5
  344. package/dist/i18n/generated-locales/ru-RU.generated.d.ts.map +1 -1
  345. package/dist/i18n/generated-locales/ru-RU.generated.js +0 -5
  346. package/dist/i18n/generated-locales/sr-SP.generated.d.ts.map +1 -1
  347. package/dist/i18n/generated-locales/sr-SP.generated.js +0 -5
  348. package/dist/i18n/generated-locales/sv-SE.generated.d.ts.map +1 -1
  349. package/dist/i18n/generated-locales/sv-SE.generated.js +0 -5
  350. package/dist/i18n/generated-locales/tr-TR.generated.d.ts.map +1 -1
  351. package/dist/i18n/generated-locales/tr-TR.generated.js +0 -5
  352. package/dist/i18n/generated-locales/uk-UA.generated.d.ts.map +1 -1
  353. package/dist/i18n/generated-locales/uk-UA.generated.js +0 -5
  354. package/dist/i18n/generated-locales/vi-VN.generated.d.ts.map +1 -1
  355. package/dist/i18n/generated-locales/vi-VN.generated.js +0 -5
  356. package/dist/i18n/generated-locales/zh-CN.generated.d.ts.map +1 -1
  357. package/dist/i18n/generated-locales/zh-CN.generated.js +0 -5
  358. package/dist/i18n/generated-locales/zh-TW.generated.d.ts.map +1 -1
  359. package/dist/i18n/generated-locales/zh-TW.generated.js +0 -5
  360. package/dist/i18n/useListFormatter.d.ts +9 -0
  361. package/dist/i18n/useListFormatter.d.ts.map +1 -0
  362. package/dist/i18n/useListFormatter.js +41 -0
  363. package/dist/motion/animator.d.ts +83 -8
  364. package/dist/motion/animator.d.ts.map +1 -1
  365. package/dist/motion/animator.js +701 -119
  366. package/dist/motion/coast.d.ts +4 -1
  367. package/dist/motion/coast.d.ts.map +1 -1
  368. package/dist/motion/coast.js +4 -2
  369. package/dist/motion/reducedMotion.d.ts.map +1 -1
  370. package/dist/motion/reducedMotion.js +6 -2
  371. package/dist/motion/reducedMotionPlan.d.ts +7 -0
  372. package/dist/motion/reducedMotionPlan.d.ts.map +1 -1
  373. package/dist/motion/reducedMotionPlan.js +14 -1
  374. package/dist/motion/resolveMotion.d.ts +42 -0
  375. package/dist/motion/resolveMotion.d.ts.map +1 -0
  376. package/dist/motion/resolveMotion.js +43 -0
  377. package/dist/motion/roleValue.d.ts +2 -1
  378. package/dist/motion/roleValue.d.ts.map +1 -1
  379. package/dist/motion/roleValue.js +2 -1
  380. package/dist/motion/uikit/timing.d.ts +7 -1
  381. package/dist/motion/uikit/timing.d.ts.map +1 -1
  382. package/dist/motion/uikit/timing.js +19 -1
  383. package/dist/theme/defineTheme.d.ts +19 -5
  384. package/dist/theme/defineTheme.d.ts.map +1 -1
  385. package/dist/theme/defineTheme.js +64 -4
  386. package/dist/theme/domainTokens/domainTokenDefaults.d.ts +3 -0
  387. package/dist/theme/domainTokens/domainTokenDefaults.d.ts.map +1 -0
  388. package/dist/theme/domainTokens/domainTokenDefaults.js +19 -0
  389. package/dist/theme/domainTokens/index.d.ts +5 -4
  390. package/dist/theme/domainTokens/index.d.ts.map +1 -1
  391. package/dist/theme/domainTokens/index.js +5 -9
  392. package/dist/theme/index.d.ts +1 -0
  393. package/dist/theme/index.d.ts.map +1 -1
  394. package/dist/theme/motionKnobs.d.ts +56 -0
  395. package/dist/theme/motionKnobs.d.ts.map +1 -0
  396. package/dist/theme/motionKnobs.js +48 -0
  397. package/dist/theme/resolveThemeValues.d.ts +11 -4
  398. package/dist/theme/resolveThemeValues.d.ts.map +1 -1
  399. package/dist/theme/resolveThemeValues.js +40 -4
  400. package/dist/theme/themeAdaptations.d.ts +7 -3
  401. package/dist/theme/themeAdaptations.d.ts.map +1 -1
  402. package/dist/theme/themeAdaptations.js +36 -7
  403. package/dist/theme/themeMotion.d.ts +96 -0
  404. package/dist/theme/themeMotion.d.ts.map +1 -0
  405. package/dist/theme/themeMotion.js +177 -0
  406. package/dist/theme/tokenReferences.d.ts +31 -0
  407. package/dist/theme/tokenReferences.d.ts.map +1 -0
  408. package/dist/theme/tokenReferences.js +132 -0
  409. package/dist/theme/tokens.d.ts +1 -0
  410. package/dist/theme/tokens.d.ts.map +1 -1
  411. package/dist/theme/tokens.js +9 -129
  412. package/dist/theme/tokens.stylex.d.ts +12 -0
  413. package/dist/theme/tokens.stylex.d.ts.map +1 -1
  414. package/dist/theme/tokens.stylex.js +12 -0
  415. package/dist/utils/focusOutline.stylex.d.ts +6 -0
  416. package/dist/utils/focusOutline.stylex.d.ts.map +1 -1
  417. package/dist/utils/focusOutline.stylex.js +7 -0
  418. package/dist/utils/focusReturn.d.ts +17 -1
  419. package/dist/utils/focusReturn.d.ts.map +1 -1
  420. package/dist/utils/focusReturn.js +11 -4
  421. package/dist/utils/getNodeText.d.ts +8 -0
  422. package/dist/utils/getNodeText.d.ts.map +1 -0
  423. package/dist/utils/getNodeText.js +37 -0
  424. package/dist/utils/interactionModality.d.ts +11 -2
  425. package/dist/utils/interactionModality.d.ts.map +1 -1
  426. package/dist/utils/interactionModality.js +58 -5
  427. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  428. package/dist/utils/interactionOverlay.stylex.js +17 -8
  429. package/dist/utils/plainDate.d.ts +2 -0
  430. package/dist/utils/plainDate.d.ts.map +1 -1
  431. package/dist/utils/plainDate.js +46 -3
  432. package/dist/utils/presentation.d.ts +50 -0
  433. package/dist/utils/presentation.d.ts.map +1 -0
  434. package/dist/utils/presentation.js +125 -0
  435. package/dist/utils/pressFeedback.d.ts.map +1 -1
  436. package/dist/utils/pressFeedback.js +20 -1
  437. package/dist/utils/primaryClick.d.ts +11 -0
  438. package/dist/utils/primaryClick.d.ts.map +1 -0
  439. package/dist/utils/primaryClick.js +25 -0
  440. package/dist/utils/sharedMutationObserver.d.ts +19 -11
  441. package/dist/utils/sharedMutationObserver.d.ts.map +1 -1
  442. package/dist/utils/sharedMutationObserver.js +66 -26
  443. package/dist/utils/timeFormat.d.ts +47 -0
  444. package/dist/utils/timeFormat.d.ts.map +1 -0
  445. package/dist/utils/timeFormat.js +240 -0
  446. package/dist/utils/touchPresentation.d.ts +2 -2
  447. package/dist/utils/touchPresentation.d.ts.map +1 -1
  448. package/dist/utils/touchPresentation.js +13 -8
  449. package/dist/utils/touchPresentation.stylex.d.ts +15 -0
  450. package/dist/utils/touchPresentation.stylex.d.ts.map +1 -0
  451. package/dist/utils/touchPresentation.stylex.js +33 -0
  452. package/dist/utils/touchQueries.d.ts +13 -0
  453. package/dist/utils/touchQueries.d.ts.map +1 -0
  454. package/dist/utils/touchQueries.js +15 -0
  455. package/dist/utils/unicodeDigits.d.ts +20 -0
  456. package/dist/utils/unicodeDigits.d.ts.map +1 -0
  457. package/dist/utils/unicodeDigits.js +70 -0
  458. package/dist/utils/useFocusAcrossSwap.d.ts +19 -0
  459. package/dist/utils/useFocusAcrossSwap.d.ts.map +1 -0
  460. package/dist/utils/useFocusAcrossSwap.js +41 -0
  461. package/locales/af-ZA.json +0 -21
  462. package/locales/ar-SA.json +0 -21
  463. package/locales/ca-ES.json +0 -21
  464. package/locales/cs-CZ.json +0 -21
  465. package/locales/da-DK.json +0 -21
  466. package/locales/de-DE.json +0 -21
  467. package/locales/el-GR.json +0 -21
  468. package/locales/en.json +35 -23
  469. package/locales/es-ES.json +0 -21
  470. package/locales/fi-FI.json +0 -21
  471. package/locales/fr-FR.json +0 -21
  472. package/locales/he-IL.json +0 -21
  473. package/locales/hu-HU.json +0 -21
  474. package/locales/it-IT.json +0 -21
  475. package/locales/ja-JP.json +0 -21
  476. package/locales/ko-KR.json +0 -21
  477. package/locales/nl-NL.json +0 -21
  478. package/locales/no-NO.json +0 -21
  479. package/locales/pl-PL.json +0 -21
  480. package/locales/pseudo.json +23 -14
  481. package/locales/pt-BR.json +0 -21
  482. package/locales/pt-PT.json +0 -21
  483. package/locales/ro-RO.json +0 -21
  484. package/locales/ru-RU.json +0 -21
  485. package/locales/sr-SP.json +0 -21
  486. package/locales/sv-SE.json +0 -21
  487. package/locales/tr-TR.json +0 -21
  488. package/locales/uk-UA.json +0 -21
  489. package/locales/vi-VN.json +0 -21
  490. package/locales/zh-CN.json +0 -21
  491. package/locales/zh-TW.json +0 -21
  492. package/package.json +19 -5
  493. package/src/AlertDialog/AlertDialog.tsx +6 -5
  494. package/src/AppShell/AppShell.doc.mjs +1 -1
  495. package/src/AppShell/AppShell.spec.md +9 -12
  496. package/src/AppShell/AppShell.tsx +225 -5
  497. package/src/AppShell/observeMainOverflow.ts +143 -0
  498. package/src/Avatar/Avatar.spec.md +22 -22
  499. package/src/Avatar/Avatar.tsx +18 -1
  500. package/src/Badge/Badge.doc.mjs +1 -1
  501. package/src/Badge/Badge.tsx +20 -2
  502. package/src/BottomSheet/BottomSheet.tsx +1 -1
  503. package/src/BottomSheet/BottomSheetPanel.tsx +2 -1
  504. package/src/BottomSheet/useSheetGestures.ts +37 -6
  505. package/src/Button/Button.tsx +4 -4
  506. package/src/Calendar/Calendar.spec.md +87 -48
  507. package/src/Carousel/Carousel.doc.mjs +1 -1
  508. package/src/Carousel/Carousel.spec.md +9 -9
  509. package/src/Carousel/Carousel.tsx +10 -2
  510. package/src/Chat/ChatComposer.spec.md +75 -59
  511. package/src/Chat/ChatComposerTokenElement.spec.md +45 -33
  512. package/src/Chat/ChatDictationButton.spec.md +126 -81
  513. package/src/Chat/ChatLayout.spec.md +41 -36
  514. package/src/Chat/ChatLayoutScrollButton.spec.md +87 -103
  515. package/src/Chat/ChatMessage.spec.md +64 -65
  516. package/src/Chat/ChatSendButton.spec.md +78 -67
  517. package/src/CheckboxInput/CheckboxInput.tsx +6 -5
  518. package/src/Citation/Citation.spec.md +60 -47
  519. package/src/ClickableCard/ClickableCard.tsx +48 -4
  520. package/src/Collapsible/Collapsible.spec.md +2 -0
  521. package/src/Collapsible/CollapsibleGroup.spec.md +57 -29
  522. package/src/ComplexSelector/ComplexSelector.tsx +60 -6
  523. package/src/ContextMenu/ContextMenu.spec.md +84 -56
  524. package/src/ContextMenu/ContextMenuItem.spec.md +132 -0
  525. package/src/DateInput/DateInput.spec.md +74 -57
  526. package/src/DateInput/DateInput.tsx +29 -14
  527. package/src/DateInput/MonthScroller.tsx +108 -24
  528. package/src/DateInput/TouchDateField.tsx +14 -3
  529. package/src/DateInput/Wheel.tsx +9 -6
  530. package/src/DateInput/usePointerDragScroll.ts +34 -10
  531. package/src/DateInput/useScrollSettle.ts +38 -7
  532. package/src/DateRangeInput/DateRangeInput.tsx +34 -15
  533. package/src/DateTimeInput/DateTimeInput.doc.mjs +10 -8
  534. package/src/DateTimeInput/DateTimeInput.spec.md +75 -51
  535. package/src/DateTimeInput/DateTimeInput.tsx +46 -24
  536. package/src/DateTimeInput/NativeTimeSegment.tsx +4 -6
  537. package/src/DateTimeInput/TouchDateTimeField.tsx +3 -7
  538. package/src/Dialog/Dialog.tsx +42 -9
  539. package/src/Dialog/DialogHeader.tsx +5 -4
  540. package/src/Divider/Divider.tsx +2 -1
  541. package/src/Drawer/Drawer.spec.md +111 -80
  542. package/src/Drawer/Drawer.tsx +13 -2
  543. package/src/Drawer/DrawerHeader.spec.md +181 -0
  544. package/src/DropdownMenu/DropdownMenu.spec.md +198 -218
  545. package/src/DropdownMenu/DropdownMenu.tsx +43 -21
  546. package/src/DropdownMenu/DropdownMenuCheckboxItem.spec.md +192 -0
  547. package/src/DropdownMenu/DropdownMenuDivider.spec.md +25 -31
  548. package/src/DropdownMenu/DropdownMenuGroup.spec.md +145 -0
  549. package/src/DropdownMenu/DropdownMenuGroup.tsx +2 -1
  550. package/src/DropdownMenu/DropdownMenuItem.spec.md +48 -42
  551. package/src/DropdownMenu/DropdownMenuRadioGroup.spec.md +34 -37
  552. package/src/DropdownMenu/DropdownMenuRadioItem.spec.md +54 -53
  553. package/src/DropdownMenu/DropdownMenuSubMenu.spec.md +47 -41
  554. package/src/DropdownMenu/MenuBottomSheetActionList.tsx +6 -5
  555. package/src/DropdownMenu/lazyMenuBottomSheet.ts +36 -7
  556. package/src/DropdownMenu/renderDropdownItems.tsx +24 -19
  557. package/src/EmptyState/EmptyState.spec.md +35 -29
  558. package/src/EmptyState/EmptyState.tsx +2 -1
  559. package/src/Field/Field.doc.mjs +2 -1
  560. package/src/Field/FieldLabel.doc.mjs +4 -2
  561. package/src/Field/FieldLabel.spec.md +30 -21
  562. package/src/Field/FieldLabel.tsx +42 -7
  563. package/src/Field/InputClearButton.tsx +3 -3
  564. package/src/Field/PanelSearchInput.tsx +2 -2
  565. package/src/FieldStatus/FieldStatus.tsx +9 -2
  566. package/src/FileInput/FileInput.tsx +73 -29
  567. package/src/FormLayout/FormLayout.spec.md +11 -20
  568. package/src/Heading/Heading.tsx +1 -1
  569. package/src/Icon/Icon.tsx +1 -1
  570. package/src/Indicator/CheckIndicator.spec.md +47 -42
  571. package/src/Indicator/CheckIndicator.tsx +2 -1
  572. package/src/Indicator/CheckboxIndicator.spec.md +40 -37
  573. package/src/Indicator/CheckboxIndicator.tsx +3 -1
  574. package/src/Indicator/Indicator.spec.md +188 -0
  575. package/src/Indicator/RadioIndicator.tsx +3 -1
  576. package/src/Item/Item.tsx +16 -8
  577. package/src/Item/ItemSwipeLayer.tsx +1 -1
  578. package/src/Kbd/Kbd.spec.md +81 -38
  579. package/src/Layer/popoverOperations.ts +172 -0
  580. package/src/Layer/useLayer.tsx +145 -77
  581. package/src/Layer/useTouchTrigger.ts +1 -1
  582. package/src/Layout/Layout.spec.md +127 -131
  583. package/src/Layout/Layout.tsx +1 -1
  584. package/src/Layout/LayoutContent.spec.md +205 -0
  585. package/src/Layout/LayoutContent.tsx +1 -1
  586. package/src/Layout/LayoutFooter.spec.md +190 -0
  587. package/src/Layout/LayoutFooter.tsx +1 -1
  588. package/src/Layout/LayoutHeader.spec.md +193 -0
  589. package/src/Layout/LayoutHeader.tsx +1 -1
  590. package/src/Layout/LayoutPanel.spec.md +194 -0
  591. package/src/Lightbox/Lightbox.spec.md +249 -61
  592. package/src/Lightbox/Lightbox.tsx +5 -0
  593. package/src/Link/Link.spec.md +3 -2
  594. package/src/Link/Link.tsx +20 -2
  595. package/src/List/List.tsx +1 -1
  596. package/src/List/ListItem.spec.md +205 -0
  597. package/src/List/ListItem.tsx +3 -3
  598. package/src/MetadataList/MetadataList.spec.md +187 -0
  599. package/src/MetadataList/MetadataListItem.spec.md +165 -0
  600. package/src/MobileNav/MobileNav.tsx +9 -1
  601. package/src/MultiSelector/MultiSelector.spec.md +124 -114
  602. package/src/MultiSelector/MultiSelector.tsx +44 -15
  603. package/src/NavMenu/NavHeadingMenu.spec.md +1 -5
  604. package/src/NavMenu/NavHeadingMenuItem.tsx +5 -39
  605. package/src/NumberInput/NumberInput.doc.mjs +13 -7
  606. package/src/NumberInput/NumberInput.spec.md +59 -37
  607. package/src/NumberInput/NumberInput.tsx +37 -4
  608. package/src/NumberInput/numberParser.ts +7 -45
  609. package/src/Outline/Outline.spec.md +165 -69
  610. package/src/Outline/Outline.tsx +23 -0
  611. package/src/Outline/modules/parseOutlineFromMarkdown.spec.md +3 -4
  612. package/src/OverflowList/OverflowList.spec.md +102 -55
  613. package/src/Pagination/Pagination.spec.md +158 -84
  614. package/src/Popover/Popover.tsx +34 -14
  615. package/src/Popover/usePopover.tsx +10 -3
  616. package/src/PowerSearch/PowerSearch.tsx +42 -31
  617. package/src/ProgressBar/ProgressBar.spec.md +143 -119
  618. package/src/ProgressBar/ProgressBar.tsx +58 -10
  619. package/src/RadioList/RadioList.spec.md +1 -1
  620. package/src/RadioList/RadioListItem.tsx +11 -2
  621. package/src/Resizable/Resizable.spec.md +144 -124
  622. package/src/Resizable/useResizable.ts +82 -16
  623. package/src/SegmentedControl/SegmentedControlItem.tsx +11 -5
  624. package/src/Selector/Selector.tsx +16 -6
  625. package/src/Selector/hooks.ts +2 -2
  626. package/src/Selector/useSelectorPresentation.ts +31 -3
  627. package/src/SideNav/SideNavItem.spec.md +14 -24
  628. package/src/SideNav/SideNavItem.tsx +27 -10
  629. package/src/Skeleton/Skeleton.tsx +3 -1
  630. package/src/Slider/Slider.spec.md +18 -16
  631. package/src/Slider/Slider.tsx +117 -12
  632. package/src/Spinner/Spinner.tsx +5 -3
  633. package/src/Stack/Stack.tsx +1 -1
  634. package/src/Stack/StackItem.tsx +1 -1
  635. package/src/Stepper/Step.spec.md +36 -42
  636. package/src/Stepper/Step.tsx +33 -6
  637. package/src/Stepper/Stepper.doc.mjs +1 -1
  638. package/src/Switch/Switch.spec.md +1 -1
  639. package/src/Switch/Switch.tsx +11 -3
  640. package/src/TabList/TabList.tsx +16 -1
  641. package/src/Table/Table.spec.md +1 -1
  642. package/src/Table/Table.tsx +43 -11
  643. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -4
  644. package/src/Table/plugins/sortable/useTableSortable.tsx +44 -73
  645. package/src/Text/Text.tsx +1 -1
  646. package/src/Text/useTruncation.ts +23 -5
  647. package/src/TextArea/TextArea.spec.md +10 -13
  648. package/src/TextArea/TextArea.tsx +15 -1
  649. package/src/TextInput/TextInput.tsx +3 -1
  650. package/src/TimeInput/TimeInput.doc.mjs +8 -8
  651. package/src/TimeInput/TimeInput.spec.md +58 -61
  652. package/src/TimeInput/TimeInput.tsx +36 -18
  653. package/src/TimeInput/TouchTimeField.tsx +4 -6
  654. package/src/Timestamp/Timestamp.spec.md +6 -12
  655. package/src/Timestamp/Timestamp.tsx +6 -2
  656. package/src/Timestamp/TimestampHoverCard.tsx +4 -4
  657. package/src/Toast/Toast.spec.md +15 -24
  658. package/src/Toast/Toast.tsx +104 -36
  659. package/src/Toast/ToastViewport.tsx +121 -53
  660. package/src/ToggleButton/ToggleButtonGroup.tsx +20 -1
  661. package/src/Token/Token.doc.mjs +2 -2
  662. package/src/Token/Token.spec.md +52 -61
  663. package/src/Token/Token.tsx +75 -5
  664. package/src/Token/TokenLink.tsx +21 -7
  665. package/src/Tokenizer/Tokenizer.spec.md +18 -4
  666. package/src/Tokenizer/Tokenizer.tsx +102 -60
  667. package/src/Tokenizer/TokenizerBottomSheet.tsx +11 -17
  668. package/src/Tokenizer/TokenizerClearAllMessageContext.ts +21 -0
  669. package/src/Toolbar/Toolbar.spec.md +5 -6
  670. package/src/Toolbar/Toolbar.tsx +2 -1
  671. package/src/TopNav/TopNavMegaMenu.tsx +4 -1
  672. package/src/TopNav/TopNavMenu.tsx +1 -0
  673. package/src/TreeList/TreeListItem.tsx +26 -4
  674. package/src/Typeahead/BaseTypeahead.doc.mjs +3 -3
  675. package/src/Typeahead/BaseTypeahead.spec.md +45 -45
  676. package/src/Typeahead/BaseTypeahead.tsx +66 -11
  677. package/src/Typeahead/Typeahead.tsx +51 -9
  678. package/src/gestures/GestureArena.ts +111 -11
  679. package/src/gestures/GestureHost.ts +2064 -0
  680. package/src/gestures/GestureRecognizer.ts +21 -1
  681. package/src/gestures/LongPressGestureRecognizer.ts +4 -0
  682. package/src/gestures/PanGestureRecognizer.ts +4 -0
  683. package/src/gestures/PinchGestureRecognizer.ts +148 -0
  684. package/src/gestures/PressTracker.ts +386 -0
  685. package/src/gestures/README.md +420 -0
  686. package/src/gestures/ScreenEdgePanGestureRecognizer.ts +256 -0
  687. package/src/gestures/SwipeGestureRecognizer.ts +197 -0
  688. package/src/gestures/TapGestureRecognizer.ts +4 -0
  689. package/src/gestures/VelocityTracker.ts +10 -3
  690. package/src/gestures/haptics.ts +203 -0
  691. package/src/gestures/index.ts +79 -0
  692. package/src/gestures/nativeScroll.ts +277 -0
  693. package/src/gestures/touchAction.ts +191 -0
  694. package/src/gestures/touchActionRule.ts +157 -0
  695. package/src/gestures/types.ts +30 -9
  696. package/src/gestures/useGestureRecognizer.ts +305 -0
  697. package/src/hooks/index.ts +5 -1
  698. package/src/hooks/modalAnnounce.ts +129 -72
  699. package/src/hooks/scrollKeyboardDelegation.ts +9 -3
  700. package/src/hooks/useAdaptivePresentation.ts +4 -1
  701. package/src/hooks/useAnnounce.doc.mjs +35 -3
  702. package/src/hooks/useAnnounce.ts +209 -102
  703. package/src/hooks/useAnnounceRenderedText.ts +17 -3
  704. package/src/hooks/useBusyAnnouncement.ts +7 -10
  705. package/src/hooks/useMenuHover.ts +15 -1
  706. package/src/hooks/useScrollOverflow.doc.mjs +1 -1
  707. package/src/hooks/useScrollOverflow.ts +59 -10
  708. package/src/i18n/generated-locales/af-ZA.generated.ts +0 -7
  709. package/src/i18n/generated-locales/ar-SA.generated.ts +0 -6
  710. package/src/i18n/generated-locales/ca-ES.generated.ts +0 -7
  711. package/src/i18n/generated-locales/cs-CZ.generated.ts +0 -6
  712. package/src/i18n/generated-locales/da-DK.generated.ts +0 -6
  713. package/src/i18n/generated-locales/de-DE.generated.ts +0 -6
  714. package/src/i18n/generated-locales/el-GR.generated.ts +0 -7
  715. package/src/i18n/generated-locales/en.generated.ts +9 -6
  716. package/src/i18n/generated-locales/es-ES.generated.ts +0 -7
  717. package/src/i18n/generated-locales/fi-FI.generated.ts +0 -6
  718. package/src/i18n/generated-locales/fr-FR.generated.ts +0 -7
  719. package/src/i18n/generated-locales/he-IL.generated.ts +0 -6
  720. package/src/i18n/generated-locales/hu-HU.generated.ts +0 -6
  721. package/src/i18n/generated-locales/it-IT.generated.ts +0 -7
  722. package/src/i18n/generated-locales/ja-JP.generated.ts +0 -6
  723. package/src/i18n/generated-locales/ko-KR.generated.ts +0 -6
  724. package/src/i18n/generated-locales/nl-NL.generated.ts +0 -6
  725. package/src/i18n/generated-locales/no-NO.generated.ts +0 -6
  726. package/src/i18n/generated-locales/pl-PL.generated.ts +0 -7
  727. package/src/i18n/generated-locales/pseudo.generated.ts +9 -6
  728. package/src/i18n/generated-locales/pt-BR.generated.ts +0 -7
  729. package/src/i18n/generated-locales/pt-PT.generated.ts +0 -7
  730. package/src/i18n/generated-locales/ro-RO.generated.ts +0 -6
  731. package/src/i18n/generated-locales/ru-RU.generated.ts +0 -7
  732. package/src/i18n/generated-locales/sr-SP.generated.ts +0 -6
  733. package/src/i18n/generated-locales/sv-SE.generated.ts +0 -6
  734. package/src/i18n/generated-locales/tr-TR.generated.ts +0 -7
  735. package/src/i18n/generated-locales/uk-UA.generated.ts +0 -7
  736. package/src/i18n/generated-locales/vi-VN.generated.ts +0 -6
  737. package/src/i18n/generated-locales/zh-CN.generated.ts +0 -6
  738. package/src/i18n/generated-locales/zh-TW.generated.ts +0 -6
  739. package/src/i18n/useListFormatter.ts +42 -0
  740. package/src/motion/MEASUREMENTS.md +2 -1
  741. package/src/motion/README.md +113 -33
  742. package/src/motion/animator.ts +932 -130
  743. package/src/motion/coast.ts +10 -3
  744. package/src/motion/reducedMotion.ts +12 -2
  745. package/src/motion/reducedMotionPlan.ts +20 -1
  746. package/src/motion/resolveMotion.ts +68 -0
  747. package/src/motion/roleValue.ts +2 -1
  748. package/src/motion/uikit/timing.ts +15 -1
  749. package/src/theme/Theme.doc.mjs +1 -1
  750. package/src/theme/defineTheme.ts +117 -8
  751. package/src/theme/domainTokens/domainTokenDefaults.ts +19 -0
  752. package/src/theme/domainTokens/index.ts +6 -10
  753. package/src/theme/index.ts +5 -0
  754. package/src/theme/motionKnobs.ts +82 -0
  755. package/src/theme/resolveThemeValues.ts +68 -6
  756. package/src/theme/themeAdaptations.ts +52 -12
  757. package/src/theme/themeMotion.ts +221 -0
  758. package/src/theme/tokenReferences.ts +149 -0
  759. package/src/theme/tokens.stylex.ts +10 -0
  760. package/src/theme/tokens.ts +15 -158
  761. package/src/utils/focusOutline.stylex.ts +28 -0
  762. package/src/utils/focusReturn.ts +17 -6
  763. package/src/utils/getNodeText.ts +37 -0
  764. package/src/utils/interactionModality.ts +64 -5
  765. package/src/utils/interactionOverlay.stylex.ts +12 -3
  766. package/src/utils/plainDate.ts +58 -3
  767. package/src/utils/presentation.ts +180 -0
  768. package/src/utils/pressFeedback.ts +34 -11
  769. package/src/utils/primaryClick.ts +28 -0
  770. package/src/utils/sharedMutationObserver.ts +87 -29
  771. package/src/utils/timeFormat.ts +314 -0
  772. package/src/utils/touchPresentation.stylex.ts +43 -0
  773. package/src/utils/touchPresentation.ts +13 -8
  774. package/src/utils/touchQueries.ts +15 -0
  775. package/src/utils/unicodeDigits.ts +71 -0
  776. package/src/utils/useFocusAcrossSwap.ts +55 -0
  777. package/dist/Item/ItemMarkerColumns.a11y.chromium.spec.d.ts +0 -2
  778. package/dist/Item/ItemMarkerColumns.a11y.chromium.spec.js +0 -132
  779. package/dist/Lightbox/LightboxKeyboard.a11y.browser.spec.d.ts +0 -2
  780. package/dist/Lightbox/LightboxKeyboard.a11y.browser.spec.js +0 -78
  781. package/dist/Lightbox/LightboxViewport.a11y.browser.spec.d.ts +0 -2
  782. package/dist/Lightbox/LightboxViewport.a11y.browser.spec.js +0 -65
  783. package/dist/List/ListMarkers.a11y.chromium.spec.d.ts +0 -2
  784. package/dist/List/ListMarkers.a11y.chromium.spec.js +0 -677
  785. package/dist/Markdown/Markdown.fr23.bench.d.ts +0 -2
  786. package/dist/Markdown/Markdown.fr23.bench.d.ts.map +0 -1
  787. package/dist/Markdown/Markdown.fr23.bench.js +0 -152
  788. package/dist/Markdown/MarkdownTable.a11y.chromium.spec.d.ts +0 -2
  789. package/dist/Markdown/MarkdownTable.a11y.chromium.spec.js +0 -590
  790. package/dist/Markdown/plugins/headingLinks.a11y.chromium.spec.d.ts +0 -2
  791. package/dist/Markdown/plugins/headingLinks.a11y.chromium.spec.js +0 -657
  792. package/dist/MobileNav/MobileNavPinchZoom.a11y.chromium.spec.d.ts +0 -2
  793. package/dist/MobileNav/MobileNavPinchZoom.a11y.chromium.spec.js +0 -153
  794. package/dist/MultiSelector/CreateRow.a11y.chromium.spec.d.ts +0 -2
  795. package/dist/MultiSelector/CreateRow.a11y.chromium.spec.js +0 -116
  796. package/dist/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.d.ts +0 -2
  797. package/dist/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.js +0 -49
  798. package/dist/MultiSelector/OptionActions.a11y.chromium.spec.d.ts +0 -2
  799. package/dist/MultiSelector/OptionActions.a11y.chromium.spec.js +0 -273
  800. package/dist/Outline/OutlineFocus.a11y.chromium.spec.d.ts +0 -2
  801. package/dist/Outline/OutlineFocus.a11y.chromium.spec.js +0 -421
  802. package/dist/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.d.ts +0 -2
  803. package/dist/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.js +0 -118
  804. package/dist/reset.a11y.chromium.spec.d.ts +0 -2
  805. package/dist/reset.a11y.chromium.spec.js +0 -231
  806. package/dist/reset.until-found.a11y.browser.spec.d.ts +0 -2
  807. package/dist/reset.until-found.a11y.browser.spec.js +0 -72
  808. package/src/AlertDialog/AlertDialog.test.tsx +0 -519
  809. package/src/AlertDialog/__tests__/AlertDialog.a11y.chromium.spec.ts +0 -116
  810. package/src/AlertDialog/__tests__/AlertDialog.a11y.renders.tsx +0 -52
  811. package/src/AlertDialog/__tests__/AlertDialog.a11y.states.ts +0 -68
  812. package/src/AlertDialog/__tests__/AlertDialog.a11y.test.tsx +0 -144
  813. package/src/AlertDialog/useImperativeAlertDialog.test.tsx +0 -163
  814. package/src/AppShell/AppShell.test.tsx +0 -1148
  815. package/src/AspectRatio/AspectRatio.test.tsx +0 -398
  816. package/src/AspectRatio/__tests__/AspectRatioFitLayers.a11y.browser.spec.ts +0 -158
  817. package/src/Avatar/Avatar.test.tsx +0 -867
  818. package/src/Avatar/AvatarStatusDot.test.tsx +0 -306
  819. package/src/AvatarGroup/AvatarGroup.test.tsx +0 -313
  820. package/src/AvatarGroup/AvatarGroupOverflow.test.tsx +0 -263
  821. package/src/Badge/Badge.test.tsx +0 -125
  822. package/src/Banner/Banner.test.tsx +0 -879
  823. package/src/Blockquote/Blockquote.test.tsx +0 -121
  824. package/src/BottomSheet/BottomSheet.test.tsx +0 -3108
  825. package/src/BottomSheet/BottomSheetEdgeTint.test.tsx +0 -248
  826. package/src/BottomSheet/BottomSheetKeyboard.test.tsx +0 -195
  827. package/src/BottomSheet/BottomSheetPanel.test.tsx +0 -549
  828. package/src/BottomSheet/BottomSheetReplace.test.tsx +0 -1638
  829. package/src/BottomSheet/BottomSheetStacking.announce.test.tsx +0 -246
  830. package/src/BottomSheet/BottomSheetStacking.test.tsx +0 -3184
  831. package/src/BottomSheet/BottomSheetSwitcher.test.tsx +0 -2010
  832. package/src/BottomSheet/__tests__/BottomSheetDrag.a11y.chromium.spec.ts +0 -129
  833. package/src/BottomSheet/__tests__/BottomSheetFocusReturn.a11y.browser.spec.ts +0 -97
  834. package/src/BottomSheet/__tests__/BottomSheetKeyboard.a11y.browser.spec.ts +0 -415
  835. package/src/BottomSheet/__tests__/BottomSheetNativeModal.a11y.browser.spec.ts +0 -462
  836. package/src/BottomSheet/__tests__/BottomSheetPinchZoom.a11y.chromium.spec.ts +0 -247
  837. package/src/BottomSheet/__tests__/BottomSheetToastOutlet.a11y.chromium.spec.ts +0 -83
  838. package/src/BottomSheet/snapOffsets.test.ts +0 -254
  839. package/src/BottomSheet/useSheetGestures.test.ts +0 -1638
  840. package/src/Breadcrumbs/Breadcrumbs.test.tsx +0 -921
  841. package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.chromium.spec.ts +0 -120
  842. package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.renders.tsx +0 -45
  843. package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.states.ts +0 -81
  844. package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.test.tsx +0 -125
  845. package/src/Button/Button.test.tsx +0 -864
  846. package/src/Button/__tests__/Button.a11y.chromium.spec.ts +0 -355
  847. package/src/Button/__tests__/Button.a11y.harnesses.tsx +0 -47
  848. package/src/Button/__tests__/Button.a11y.known-failures.ts +0 -25
  849. package/src/Button/__tests__/Button.a11y.renders.tsx +0 -139
  850. package/src/Button/__tests__/Button.a11y.states.ts +0 -317
  851. package/src/Button/__tests__/Button.a11y.test.tsx +0 -187
  852. package/src/ButtonGroup/ButtonGroup.test.tsx +0 -1025
  853. package/src/Calendar/Calendar.test.tsx +0 -2186
  854. package/src/Calendar/__tests__/Calendar.a11y.chromium.spec.ts +0 -127
  855. package/src/Calendar/__tests__/Calendar.a11y.known-failures.ts +0 -12
  856. package/src/Calendar/__tests__/Calendar.a11y.renders.tsx +0 -57
  857. package/src/Calendar/__tests__/Calendar.a11y.states.ts +0 -139
  858. package/src/Calendar/__tests__/Calendar.a11y.test.tsx +0 -137
  859. package/src/Calendar/dayCellUtils.test.ts +0 -520
  860. package/src/Calendar/getInitialFocusDate.test.ts +0 -94
  861. package/src/Calendar/getStandaloneShortWeekdayNames.test.ts +0 -54
  862. package/src/Calendar/hooks/useCalendarConstraints.test.ts +0 -153
  863. package/src/Calendar/hooks/useCalendarDays.test.ts +0 -265
  864. package/src/Calendar/hooks/useCalendarNavigation.test.ts +0 -252
  865. package/src/Card/Card.test.tsx +0 -202
  866. package/src/Carousel/Carousel.test.tsx +0 -915
  867. package/src/Carousel/__tests__/Carousel.a11y.chromium.spec.ts +0 -193
  868. package/src/Carousel/__tests__/Carousel.a11y.known-failures.ts +0 -27
  869. package/src/Carousel/__tests__/Carousel.a11y.renders.tsx +0 -39
  870. package/src/Carousel/__tests__/Carousel.a11y.states.ts +0 -139
  871. package/src/Carousel/__tests__/Carousel.a11y.test.tsx +0 -127
  872. package/src/Center/Center.test.tsx +0 -406
  873. package/src/Chat/ChatComposer.test.tsx +0 -364
  874. package/src/Chat/ChatComposerDrawer.test.tsx +0 -130
  875. package/src/Chat/ChatComposerInput.test.tsx +0 -2136
  876. package/src/Chat/ChatComposerTokenElement.test.tsx +0 -85
  877. package/src/Chat/ChatDictationButton.test.tsx +0 -108
  878. package/src/Chat/ChatLayout.test.tsx +0 -311
  879. package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -99
  880. package/src/Chat/ChatMessage.test.tsx +0 -344
  881. package/src/Chat/ChatMessageBubble.test.tsx +0 -294
  882. package/src/Chat/ChatMessageList.test.tsx +0 -198
  883. package/src/Chat/ChatMessageMetadata.test.tsx +0 -66
  884. package/src/Chat/ChatPastedTextToken.test.tsx +0 -71
  885. package/src/Chat/ChatSendButton.test.tsx +0 -309
  886. package/src/Chat/ChatSystemMessage.test.tsx +0 -189
  887. package/src/Chat/ChatTokenizedText.test.tsx +0 -163
  888. package/src/Chat/ChatToolCalls.test.tsx +0 -413
  889. package/src/Chat/__tests__/ChatLayoutScrollButton.a11y.chromium.spec.ts +0 -577
  890. package/src/Chat/__tests__/ChatLayoutScrollButtonSurface.a11y.chromium.spec.ts +0 -740
  891. package/src/Chat/__tests__/ChatMessageBubble.a11y.chromium.spec.ts +0 -457
  892. package/src/Chat/__tests__/ChatMessageBubble.auditProvenance.test.ts +0 -91
  893. package/src/Chat/__tests__/ChatMessageBubble.auditProvenance.ts +0 -91
  894. package/src/Chat/__tests__/ChatMessageList.a11y.chromium.spec.ts +0 -465
  895. package/src/Chat/__tests__/ChatMessageMetadata.a11y.chromium.spec.ts +0 -416
  896. package/src/Chat/__tests__/ChatSendButton.a11y.chromium.spec.ts +0 -1523
  897. package/src/Chat/__tests__/ChatSystemMessage.a11y.chromium.spec.ts +0 -1004
  898. package/src/Chat/__tests__/ChatTokenizedText.a11y.chromium.spec.ts +0 -574
  899. package/src/Chat/__tests__/useChatStreamScroll.a11y.chromium.spec.ts +0 -263
  900. package/src/Chat/__tests__/useChatStreamScroll.fixture.tsx +0 -61
  901. package/src/Chat/useChatDictation.test.tsx +0 -369
  902. package/src/Chat/useChatNewMessages.test.tsx +0 -209
  903. package/src/Chat/useChatPasteAsToken.test.ts +0 -191
  904. package/src/Chat/useChatStreamScroll.test.tsx +0 -381
  905. package/src/Chat/useTriggerMenu.test.tsx +0 -994
  906. package/src/CheckboxInput/CheckboxInput.test.tsx +0 -926
  907. package/src/CheckboxInput/__tests__/Checkbox.a11y.chromium.spec.ts +0 -354
  908. package/src/CheckboxInput/__tests__/Checkbox.a11y.known-failures.ts +0 -54
  909. package/src/CheckboxInput/__tests__/Checkbox.a11y.renders.tsx +0 -310
  910. package/src/CheckboxInput/__tests__/Checkbox.a11y.states.ts +0 -404
  911. package/src/CheckboxInput/__tests__/Checkbox.a11y.test.tsx +0 -128
  912. package/src/CheckboxList/CheckboxList.fr10.test.tsx +0 -51
  913. package/src/CheckboxList/CheckboxList.test.tsx +0 -1159
  914. package/src/CheckboxList/__tests__/CheckboxList.a11y.chromium.spec.ts +0 -1998
  915. package/src/Citation/Citation.test.tsx +0 -361
  916. package/src/ClickableCard/ClickableCard.test.tsx +0 -286
  917. package/src/Code/Code.test.tsx +0 -75
  918. package/src/CodeBlock/CodeBlock.highlightStyles.test.tsx +0 -87
  919. package/src/CodeBlock/CodeBlock.test.tsx +0 -752
  920. package/src/CodeBlock/CodeLanguage.test.tsx +0 -173
  921. package/src/CodeBlock/__tests__/CodeBlockCopyClearance.a11y.chromium.spec.ts +0 -290
  922. package/src/CodeBlock/__tests__/CodeBlockLanguages.a11y.chromium.spec.ts +0 -64
  923. package/src/CodeBlock/__tests__/CodeBlockOverflowStop.a11y.chromium.spec.ts +0 -126
  924. package/src/CodeBlock/__tests__/DiffRowPaint.a11y.chromium.spec.ts +0 -94
  925. package/src/CodeBlock/highlightRanges.test.ts +0 -253
  926. package/src/CodeBlock/languages.test.ts +0 -402
  927. package/src/CodeBlock/tokenizer.test.ts +0 -280
  928. package/src/CodeBlock/tokenizerBudget.test.ts +0 -112
  929. package/src/Collapsible/Collapsible.test.tsx +0 -620
  930. package/src/Collapsible/CollapsibleGroup.test.tsx +0 -656
  931. package/src/Collapsible/__tests__/Collapsible.a11y.chromium.spec.ts +0 -183
  932. package/src/Collapsible/__tests__/Collapsible.a11y.states.ts +0 -117
  933. package/src/Collapsible/__tests__/Collapsible.a11y.test.tsx +0 -140
  934. package/src/Collapsible/__tests__/CollapsibleGroup.a11y.chromium.spec.ts +0 -559
  935. package/src/Collapsible/__tests__/CollapsibleGroup.a11y.renders.tsx +0 -45
  936. package/src/Collapsible/__tests__/CollapsibleGroup.a11y.states.ts +0 -139
  937. package/src/Collapsible/__tests__/CollapsibleGroup.a11y.test.tsx +0 -135
  938. package/src/Collapsible/__tests__/CollapsibleGroupAccordion.a11y.chromium.spec.ts +0 -129
  939. package/src/Collapsible/useCollapsible.test.tsx +0 -236
  940. package/src/CommandPalette/CommandPalette.perf.test.ts +0 -100
  941. package/src/CommandPalette/CommandPalette.test.tsx +0 -750
  942. package/src/CommandPalette/CommandPaletteEmpty.test.tsx +0 -101
  943. package/src/CommandPalette/CommandPaletteFooter.test.tsx +0 -122
  944. package/src/CommandPalette/CommandPaletteGroup.test.tsx +0 -129
  945. package/src/CommandPalette/CommandPaletteInput.test.tsx +0 -539
  946. package/src/CommandPalette/CommandPaletteItem.test.tsx +0 -417
  947. package/src/CommandPalette/CommandPaletteList.test.tsx +0 -184
  948. package/src/CommandPalette/__tests__/CommandPalette.a11y.chromium.spec.ts +0 -600
  949. package/src/CommandPalette/__tests__/CommandPaletteEmptyAudit.a11y.chromium.spec.ts +0 -715
  950. package/src/CommandPalette/__tests__/CommandPaletteFooter.a11y.chromium.spec.ts +0 -582
  951. package/src/CommandPalette/__tests__/CommandPaletteInputAudit.a11y.chromium.spec.ts +0 -336
  952. package/src/CommandPalette/__tests__/CommandPaletteItemAudit.a11y.chromium.spec.ts +0 -523
  953. package/src/ComplexSelector/ComplexSelector.focusableDisabled.test.tsx +0 -76
  954. package/src/ComplexSelector/ComplexSelector.fr10.test.tsx +0 -262
  955. package/src/ComplexSelector/ComplexSelector.test.tsx +0 -1023
  956. package/src/ComplexSelector/__tests__/ComplexSelector.a11y.chromium.spec.ts +0 -965
  957. package/src/ContextMenu/ContextMenu.test.tsx +0 -1582
  958. package/src/ContextMenu/ContextMenu.triggerProps.test.tsx +0 -54
  959. package/src/ContextMenu/__tests__/ContextMenuAudit.a11y.chromium.spec.ts +0 -439
  960. package/src/ContextMenu/__tests__/ContextMenuCursorAnchor.a11y.browser.spec.ts +0 -154
  961. package/src/ContextMenu/__tests__/ContextMenuLongPress.a11y.chromium.spec.ts +0 -117
  962. package/src/DateInput/DateInput.fr10.test.tsx +0 -283
  963. package/src/DateInput/DateInput.test.tsx +0 -1459
  964. package/src/DateInput/DateInputTouch.test.tsx +0 -2828
  965. package/src/DateInput/NativeDateField.test.tsx +0 -741
  966. package/src/DateInput/Presentation.test.tsx +0 -121
  967. package/src/DateInput/__tests__/DateInputAudit.a11y.chromium.spec.ts +0 -577
  968. package/src/DateInput/__tests__/WheelPinchZoom.a11y.chromium.spec.ts +0 -171
  969. package/src/DateRangeInput/DateRangeInput.fr10.test.tsx +0 -165
  970. package/src/DateRangeInput/DateRangeInput.test.tsx +0 -1108
  971. package/src/DateTimeInput/DateTimeInput.fr10.test.tsx +0 -319
  972. package/src/DateTimeInput/DateTimeInput.test.tsx +0 -2575
  973. package/src/DateTimeInput/DateTimeInputTouch.test.tsx +0 -1071
  974. package/src/DateTimeInput/NativePickerSegments.test.tsx +0 -657
  975. package/src/DateTimeInput/Presentation.test.tsx +0 -89
  976. package/src/Dialog/Dialog.source-build.test.mjs +0 -43
  977. package/src/Dialog/Dialog.test.tsx +0 -1385
  978. package/src/Dialog/DialogHeader.test.tsx +0 -477
  979. package/src/Dialog/__tests__/Dialog.a11y.browser.spec.ts +0 -111
  980. package/src/Dialog/__tests__/Dialog.a11y.chromium.spec.ts +0 -218
  981. package/src/Dialog/__tests__/Dialog.a11y.known-failures.ts +0 -28
  982. package/src/Dialog/__tests__/Dialog.a11y.renders.tsx +0 -107
  983. package/src/Dialog/__tests__/Dialog.a11y.states.ts +0 -104
  984. package/src/Dialog/__tests__/Dialog.a11y.test.tsx +0 -102
  985. package/src/Dialog/__tests__/Dialog.reduced-motion.a11y.browser.spec.ts +0 -252
  986. package/src/Dialog/useImperativeDialog.test.tsx +0 -78
  987. package/src/Divider/Divider.test.tsx +0 -155
  988. package/src/Drawer/Drawer.test.tsx +0 -1300
  989. package/src/Drawer/DrawerDirection.test.tsx +0 -127
  990. package/src/Drawer/DrawerHeader.test.tsx +0 -102
  991. package/src/Drawer/__tests__/DrawerAudit.a11y.chromium.spec.ts +0 -402
  992. package/src/Drawer/__tests__/DrawerHeaderAudit.a11y.chromium.spec.ts +0 -298
  993. package/src/DropdownMenu/DropdownMenu.ssr.test.tsx +0 -93
  994. package/src/DropdownMenu/DropdownMenu.test.tsx +0 -4340
  995. package/src/DropdownMenu/DropdownMenuContext.public.test.ts +0 -22
  996. package/src/DropdownMenu/DropdownMenuLazySheet.test.tsx +0 -126
  997. package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +0 -635
  998. package/src/DropdownMenu/DropdownMenuSheetFirstOpen.test.tsx +0 -72
  999. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +0 -2408
  1000. package/src/DropdownMenu/__tests__/DropdownMenuDividerAudit.a11y.chromium.spec.ts +0 -281
  1001. package/src/DropdownMenu/__tests__/DropdownMenuDrillIn.a11y.chromium.spec.ts +0 -175
  1002. package/src/DropdownMenu/__tests__/DropdownMenuFocusReturn.a11y.browser.spec.ts +0 -74
  1003. package/src/DropdownMenu/__tests__/DropdownMenuGroupAudit.a11y.chromium.spec.ts +0 -335
  1004. package/src/DropdownMenu/__tests__/DropdownMenuItemAudit.a11y.chromium.spec.ts +0 -367
  1005. package/src/DropdownMenu/__tests__/DropdownMenuRadioGroupAudit.a11y.chromium.spec.ts +0 -328
  1006. package/src/DropdownMenu/__tests__/DropdownMenuRadioItemAudit.a11y.chromium.spec.ts +0 -540
  1007. package/src/DropdownMenu/__tests__/DropdownMenuSubMenuAudit.a11y.chromium.spec.ts +0 -671
  1008. package/src/DropdownMenu/__tests__/Menu.a11y.chromium.spec.ts +0 -146
  1009. package/src/DropdownMenu/__tests__/Menu.a11y.known-failures.ts +0 -26
  1010. package/src/DropdownMenu/__tests__/Menu.a11y.renders.tsx +0 -65
  1011. package/src/DropdownMenu/__tests__/Menu.a11y.states.ts +0 -138
  1012. package/src/DropdownMenu/__tests__/Menu.a11y.test.tsx +0 -136
  1013. package/src/DropdownMenu/__tests__/MenuButton.a11y.chromium.spec.ts +0 -137
  1014. package/src/DropdownMenu/__tests__/MenuButton.a11y.known-failures.ts +0 -12
  1015. package/src/DropdownMenu/__tests__/MenuButton.a11y.renders.tsx +0 -67
  1016. package/src/DropdownMenu/__tests__/MenuButton.a11y.states.ts +0 -141
  1017. package/src/DropdownMenu/__tests__/MenuButton.a11y.test.tsx +0 -138
  1018. package/src/DropdownMenu/__tests__/MenuHeaderFooter.a11y.chromium.spec.ts +0 -231
  1019. package/src/DropdownMenu/__tests__/MenuHoverFocus.a11y.chromium.spec.ts +0 -238
  1020. package/src/DropdownMenu/__tests__/MenuPinchZoom.a11y.chromium.spec.ts +0 -173
  1021. package/src/DropdownMenu/__tests__/MenuPress.a11y.chromium.spec.ts +0 -503
  1022. package/src/DropdownMenu/__tests__/SubMenuHeaderFooter.a11y.chromium.spec.ts +0 -268
  1023. package/src/DropdownMenu/__tests__/warmMenuBottomSheet.tsx +0 -43
  1024. package/src/EmptyState/EmptyState.announce.test.tsx +0 -227
  1025. package/src/EmptyState/EmptyState.test.tsx +0 -284
  1026. package/src/Field/Field.test.tsx +0 -800
  1027. package/src/Field/FieldLabel.test.tsx +0 -244
  1028. package/src/Field/InputClearButton.test.tsx +0 -395
  1029. package/src/Field/__tests__/FieldLabelAudit.a11y.chromium.spec.ts +0 -297
  1030. package/src/Field/fieldInputFamily.test.tsx +0 -160
  1031. package/src/FieldStatus/FieldStatus.test.tsx +0 -482
  1032. package/src/FieldStatus/__tests__/StatusMessage.a11y.chromium.spec.ts +0 -206
  1033. package/src/FieldStatus/__tests__/StatusMessage.a11y.known-failures.ts +0 -13
  1034. package/src/FieldStatus/__tests__/StatusMessage.a11y.renders.tsx +0 -287
  1035. package/src/FieldStatus/__tests__/StatusMessage.a11y.states.ts +0 -302
  1036. package/src/FieldStatus/__tests__/StatusMessage.a11y.test.tsx +0 -154
  1037. package/src/FileInput/FileInput.fr10.test.tsx +0 -21
  1038. package/src/FileInput/FileInput.test.tsx +0 -1270
  1039. package/src/FormLayout/FormLayout.test.tsx +0 -444
  1040. package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +0 -46
  1041. package/src/Grid/Grid.test.tsx +0 -509
  1042. package/src/HStack/HStack.test.tsx +0 -129
  1043. package/src/Heading/Heading.test.tsx +0 -328
  1044. package/src/HoverCard/HoverCard.test.tsx +0 -1339
  1045. package/src/Icon/Icon.test.tsx +0 -990
  1046. package/src/Icon/globalIconRegistry.test.tsx +0 -613
  1047. package/src/IconButton/IconButton.test.tsx +0 -156
  1048. package/src/Indicator/Indicator.test.tsx +0 -389
  1049. package/src/Indicator/indicatorRegistry.test.tsx +0 -106
  1050. package/src/InputGroup/InputGroup.test.tsx +0 -502
  1051. package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
  1052. package/src/Item/Item.source-build.test.mjs +0 -88
  1053. package/src/Item/Item.swipeLayer.test.tsx +0 -74
  1054. package/src/Item/Item.test.tsx +0 -1455
  1055. package/src/Item/ItemMarkerColumns.a11y.chromium.spec.ts +0 -211
  1056. package/src/Item/__tests__/ItemSwipeActions.a11y.chromium.spec.ts +0 -337
  1057. package/src/Item/__tests__/ItemSwipePinchZoom.a11y.chromium.spec.ts +0 -186
  1058. package/src/Kbd/Kbd.test.tsx +0 -299
  1059. package/src/Layer/LayerProvider.test.tsx +0 -143
  1060. package/src/Layer/__tests__/LayerReducedMotion.a11y.chromium.spec.ts +0 -176
  1061. package/src/Layer/__tests__/TouchTrigger.a11y.chromium.spec.ts +0 -200
  1062. package/src/Layer/anchorName.test.ts +0 -146
  1063. package/src/Layer/layerDismissalFamilies.test.tsx +0 -487
  1064. package/src/Layer/layerDismissalInvariants.test.tsx +0 -501
  1065. package/src/Layer/layerHost.test.ts +0 -117
  1066. package/src/Layer/layerScopedContext.test.tsx +0 -499
  1067. package/src/Layer/layerViewportInset.source-build.test.mjs +0 -90
  1068. package/src/Layer/layerViewportInset.test.ts +0 -120
  1069. package/src/Layer/useLayer.test.tsx +0 -2423
  1070. package/src/Layer/useLayerDismissal.test.tsx +0 -580
  1071. package/src/Layer/useTouchTrigger.test.ts +0 -70
  1072. package/src/Layout/Layout.test.tsx +0 -375
  1073. package/src/Layout/LayoutSlots.test.tsx +0 -376
  1074. package/src/Layout/__tests__/Layout.a11y.chromium.spec.ts +0 -122
  1075. package/src/Layout/__tests__/Layout.a11y.renders.tsx +0 -110
  1076. package/src/Layout/__tests__/Layout.a11y.states.ts +0 -93
  1077. package/src/Layout/__tests__/Layout.a11y.test.tsx +0 -142
  1078. package/src/Layout/__tests__/childrenAsContent.test.tsx +0 -59
  1079. package/src/Layout/__tests__/contentWidth.test.tsx +0 -303
  1080. package/src/Layout/__tests__/edgeCompensation.test.tsx +0 -191
  1081. package/src/Layout/__tests__/nestedPadding.test.tsx +0 -264
  1082. package/src/Layout/overlayPaddingReset.test.tsx +0 -224
  1083. package/src/Lightbox/Lightbox.test.tsx +0 -819
  1084. package/src/Lightbox/LightboxKeyboard.a11y.browser.spec.ts +0 -78
  1085. package/src/Lightbox/LightboxViewport.a11y.browser.spec.ts +0 -70
  1086. package/src/Lightbox/useLightbox.test.tsx +0 -263
  1087. package/src/Link/Link.test.tsx +0 -457
  1088. package/src/Link/__tests__/Link.a11y.chromium.spec.ts +0 -143
  1089. package/src/Link/__tests__/Link.a11y.renders.tsx +0 -97
  1090. package/src/Link/__tests__/Link.a11y.states.ts +0 -104
  1091. package/src/Link/__tests__/Link.a11y.test.tsx +0 -127
  1092. package/src/Link/__tests__/Link.navigation.a11y.chromium.spec.ts +0 -262
  1093. package/src/Link/useLinkComponent.test.tsx +0 -572
  1094. package/src/Link/useLinkify.test.tsx +0 -146
  1095. package/src/List/List.test.tsx +0 -1052
  1096. package/src/List/ListItem.source-build.test.mjs +0 -41
  1097. package/src/List/ListMarkers.a11y.chromium.spec.ts +0 -904
  1098. package/src/Markdown/Markdown.codeLanguages.test.tsx +0 -137
  1099. package/src/Markdown/Markdown.fr23.bench.ts +0 -176
  1100. package/src/Markdown/Markdown.fr23.perf.test.ts +0 -484
  1101. package/src/Markdown/Markdown.helpers.perf.test.ts +0 -495
  1102. package/src/Markdown/Markdown.public.test.ts +0 -309
  1103. package/src/Markdown/Markdown.renderBoundary.test.tsx +0 -72
  1104. package/src/Markdown/Markdown.rerender.test.tsx +0 -143
  1105. package/src/Markdown/Markdown.test.tsx +0 -1383
  1106. package/src/Markdown/MarkdownTable.a11y.chromium.spec.ts +0 -727
  1107. package/src/Markdown/__tests__/MarkdownNesting.a11y.chromium.spec.ts +0 -102
  1108. package/src/Markdown/angleDestinations.test.tsx +0 -104
  1109. package/src/Markdown/ast.test.ts +0 -374
  1110. package/src/Markdown/atxHeadingIndentation.test.tsx +0 -53
  1111. package/src/Markdown/blockNesting.test.tsx +0 -124
  1112. package/src/Markdown/blockquoteMarkers.test.tsx +0 -69
  1113. package/src/Markdown/characterReferences.test.ts +0 -47
  1114. package/src/Markdown/codeSpans.test.tsx +0 -65
  1115. package/src/Markdown/emphasis.test.tsx +0 -214
  1116. package/src/Markdown/fenceInfo.test.tsx +0 -47
  1117. package/src/Markdown/imageAlt.test.tsx +0 -84
  1118. package/src/Markdown/incremental.test.ts +0 -1198
  1119. package/src/Markdown/incrementalIndentation.test.tsx +0 -36
  1120. package/src/Markdown/indentedFences.test.tsx +0 -374
  1121. package/src/Markdown/indentedTables.test.tsx +0 -53
  1122. package/src/Markdown/linkBrackets.test.tsx +0 -116
  1123. package/src/Markdown/linkDestinationLinear.test.tsx +0 -54
  1124. package/src/Markdown/linkDestinations.test.tsx +0 -127
  1125. package/src/Markdown/linkTextCode.test.tsx +0 -65
  1126. package/src/Markdown/listBullets.test.tsx +0 -55
  1127. package/src/Markdown/listContinuation.test.tsx +0 -94
  1128. package/src/Markdown/listThematicBreak.test.tsx +0 -49
  1129. package/src/Markdown/longLinkLabels.test.tsx +0 -49
  1130. package/src/Markdown/openFenceFinalNewline.test.tsx +0 -85
  1131. package/src/Markdown/parser.perf.test.ts +0 -398
  1132. package/src/Markdown/parser.public.test.ts +0 -144
  1133. package/src/Markdown/parser.test.ts +0 -1925
  1134. package/src/Markdown/plugin-renderer/MarkdownPluginNodeRenderer.test.tsx +0 -300
  1135. package/src/Markdown/plugins/frontmatter.test.tsx +0 -150
  1136. package/src/Markdown/plugins/headingLinks.a11y.chromium.spec.ts +0 -856
  1137. package/src/Markdown/plugins/headingLinks.ssr.test.tsx +0 -143
  1138. package/src/Markdown/plugins/headingLinks.test.tsx +0 -637
  1139. package/src/Markdown/plugins/protocol.test.tsx +0 -1083
  1140. package/src/Markdown/plugins/semanticFence.test.tsx +0 -655
  1141. package/src/Markdown/plugins/softBreaks.test.tsx +0 -172
  1142. package/src/Markdown/plugins/sourceDecoration.test.tsx +0 -799
  1143. package/src/Markdown/plugins/sourceLines.test.tsx +0 -715
  1144. package/src/Markdown/plugins/textTransform.test.ts +0 -467
  1145. package/src/Markdown/remark.test.tsx +0 -1877
  1146. package/src/Markdown/streaming.test.ts +0 -148
  1147. package/src/Markdown/streamingListShapes.test.tsx +0 -93
  1148. package/src/Markdown/trailingSpaces.test.tsx +0 -45
  1149. package/src/MetadataList/MetadataList.test.tsx +0 -383
  1150. package/src/MobileNav/MobileNav.test.tsx +0 -281
  1151. package/src/MobileNav/MobileNavCloseEdgeCases.test.tsx +0 -584
  1152. package/src/MobileNav/MobileNavCloseTiming.test.ts +0 -58
  1153. package/src/MobileNav/MobileNavCloseVisibility.test.tsx +0 -172
  1154. package/src/MobileNav/MobileNavEntryAnimation.test.tsx +0 -212
  1155. package/src/MobileNav/MobileNavFocus.test.tsx +0 -553
  1156. package/src/MobileNav/MobileNavPinchZoom.a11y.chromium.spec.ts +0 -147
  1157. package/src/MobileNav/MobileNavReopen.test.tsx +0 -118
  1158. package/src/MobileNav/MobileNavScrollbarGutter.test.tsx +0 -109
  1159. package/src/MobileNav/MobileNavToggle.test.tsx +0 -179
  1160. package/src/MobileNav/__tests__/MobileNavWidth.a11y.chromium.spec.ts +0 -103
  1161. package/src/MoreMenu/MoreMenu.test.tsx +0 -356
  1162. package/src/MultiSelector/CreateRow.a11y.chromium.spec.ts +0 -149
  1163. package/src/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.ts +0 -72
  1164. package/src/MultiSelector/MultiSelector.focusableDisabled.test.tsx +0 -121
  1165. package/src/MultiSelector/MultiSelector.fr10.test.tsx +0 -221
  1166. package/src/MultiSelector/MultiSelector.test.tsx +0 -4702
  1167. package/src/MultiSelector/OptionActions.a11y.chromium.spec.ts +0 -310
  1168. package/src/MultiSelector/__tests__/MultiSelector.a11y.chromium.spec.ts +0 -46
  1169. package/src/MultiSelector/__tests__/MultiSelector.listbox.a11y.test.tsx +0 -128
  1170. package/src/NavIcon/NavIcon.test.tsx +0 -41
  1171. package/src/NavMenu/NavHeadingMenu.test.tsx +0 -714
  1172. package/src/NavMenu/__tests__/NavMenusSlideSelection.a11y.chromium.spec.ts +0 -137
  1173. package/src/NumberInput/NumberInput.fr10.test.tsx +0 -21
  1174. package/src/NumberInput/NumberInput.test.tsx +0 -2636
  1175. package/src/NumberInput/__tests__/NumberInput.a11y.chromium.spec.ts +0 -124
  1176. package/src/NumberInput/__tests__/NumberInput.a11y.known-failures.ts +0 -26
  1177. package/src/NumberInput/__tests__/NumberInput.a11y.renders.tsx +0 -77
  1178. package/src/NumberInput/__tests__/NumberInput.a11y.states.ts +0 -116
  1179. package/src/NumberInput/__tests__/NumberInput.a11y.test.tsx +0 -154
  1180. package/src/NumberInput/numberInputCommit.test.ts +0 -72
  1181. package/src/NumberInput/numberParser.docblock.test.ts +0 -234
  1182. package/src/NumberInput/numberParser.test.ts +0 -222
  1183. package/src/Outline/Outline.test.tsx +0 -1069
  1184. package/src/Outline/OutlineFocus.a11y.chromium.spec.ts +0 -551
  1185. package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -104
  1186. package/src/OverflowList/OverflowList.test.tsx +0 -1073
  1187. package/src/Overlay/Overlay.test.tsx +0 -424
  1188. package/src/Pagination/Pagination.test.tsx +0 -1754
  1189. package/src/Popover/Popover.test.tsx +0 -1424
  1190. package/src/Popover/PopoverPresentation.test.tsx +0 -952
  1191. package/src/Popover/__tests__/PopoverSecondDocument.a11y.chromium.spec.ts +0 -205
  1192. package/src/PowerSearch/PowerSearch.test.tsx +0 -1003
  1193. package/src/PowerSearch/PowerSearchEditPopover.test.tsx +0 -1190
  1194. package/src/PowerSearch/PowerSearchFilterEditor.test.tsx +0 -377
  1195. package/src/PowerSearch/PowerSearchToken.test.tsx +0 -230
  1196. package/src/PowerSearch/PowerSearchValueEditor.test.tsx +0 -754
  1197. package/src/PowerSearch/formatFilterValue.test.ts +0 -339
  1198. package/src/PowerSearch/resolveDateTimeRangePart.test.ts +0 -40
  1199. package/src/PowerSearch/usePowerSearchConfig.test.ts +0 -832
  1200. package/src/PowerSearch/usePowerSearchSource.test.ts +0 -621
  1201. package/src/ProgressBar/ProgressBar.test.tsx +0 -852
  1202. package/src/ProgressBar/__tests__/ProgressBar.a11y.chromium.spec.ts +0 -115
  1203. package/src/ProgressBar/__tests__/ProgressBar.a11y.known-failures.ts +0 -12
  1204. package/src/ProgressBar/__tests__/ProgressBar.a11y.renders.tsx +0 -38
  1205. package/src/ProgressBar/__tests__/ProgressBar.a11y.states.ts +0 -123
  1206. package/src/ProgressBar/__tests__/ProgressBar.a11y.test.tsx +0 -107
  1207. package/src/RadioList/RadioList.fr10.test.tsx +0 -67
  1208. package/src/RadioList/RadioList.test.tsx +0 -967
  1209. package/src/RadioList/RadioListItem.press.source-build.test.mjs +0 -80
  1210. package/src/RadioList/__tests__/RadioGroup.a11y.chromium.spec.ts +0 -274
  1211. package/src/RadioList/__tests__/RadioGroup.a11y.known-failures.ts +0 -12
  1212. package/src/RadioList/__tests__/RadioGroup.a11y.renders.tsx +0 -232
  1213. package/src/RadioList/__tests__/RadioGroup.a11y.states.ts +0 -503
  1214. package/src/RadioList/__tests__/RadioGroup.a11y.test.tsx +0 -217
  1215. package/src/Resizable/ResizeHandle.test.tsx +0 -1067
  1216. package/src/Resizable/__tests__/ResizeHandle.a11y.chromium.spec.ts +0 -120
  1217. package/src/Resizable/__tests__/ResizeHandle.a11y.known-failures.ts +0 -39
  1218. package/src/Resizable/__tests__/ResizeHandle.a11y.renders.tsx +0 -80
  1219. package/src/Resizable/__tests__/ResizeHandle.a11y.states.ts +0 -197
  1220. package/src/Resizable/__tests__/ResizeHandle.a11y.test.tsx +0 -123
  1221. package/src/Resizable/shippedDirections.test.ts +0 -462
  1222. package/src/Resizable/useResizable.test.ts +0 -1682
  1223. package/src/Resizable/utils.test.ts +0 -74
  1224. package/src/ScrollableArea/ScrollableArea.test.tsx +0 -304
  1225. package/src/Section/Section.test.tsx +0 -376
  1226. package/src/SegmentedControl/SegmentedControl.test.tsx +0 -897
  1227. package/src/SelectableCard/SelectableCard.test.tsx +0 -216
  1228. package/src/Selector/Selector.focusableDisabled.test.tsx +0 -127
  1229. package/src/Selector/Selector.fr10.test.tsx +0 -149
  1230. package/src/Selector/Selector.sheetActiveDescendant.test.tsx +0 -95
  1231. package/src/Selector/Selector.source-build.test.mjs +0 -79
  1232. package/src/Selector/Selector.test.tsx +0 -5028
  1233. package/src/Selector/__tests__/Combobox.a11y.known-failures.ts +0 -27
  1234. package/src/Selector/__tests__/Combobox.a11y.states.ts +0 -145
  1235. package/src/Selector/__tests__/ComboboxField.a11y.chromium.spec.ts +0 -458
  1236. package/src/Selector/__tests__/EmptyStateAnnouncement.a11y.chromium.spec.ts +0 -91
  1237. package/src/Selector/__tests__/Listbox.a11y.chromium.spec.ts +0 -131
  1238. package/src/Selector/__tests__/Listbox.a11y.dom.ts +0 -38
  1239. package/src/Selector/__tests__/Listbox.a11y.inventory.test.ts +0 -63
  1240. package/src/Selector/__tests__/Listbox.a11y.known-failures.ts +0 -12
  1241. package/src/Selector/__tests__/Listbox.a11y.states.ts +0 -232
  1242. package/src/Selector/__tests__/Selector.a11y.chromium.spec.ts +0 -46
  1243. package/src/Selector/__tests__/Selector.combobox.a11y.chromium.spec.ts +0 -109
  1244. package/src/Selector/__tests__/Selector.combobox.a11y.test.tsx +0 -126
  1245. package/src/Selector/__tests__/Selector.listbox.a11y.test.tsx +0 -121
  1246. package/src/Selector/useCombobox.public.test.tsx +0 -89
  1247. package/src/Selector/useCombobox.test.tsx +0 -444
  1248. package/src/SideNav/SideNav.test.tsx +0 -4128
  1249. package/src/SideNav/SideNavRailMotion.test.tsx +0 -620
  1250. package/src/SideNav/__tests__/SideNavRailMotion.interaction.browser.spec.ts +0 -417
  1251. package/src/SizeContext/SizeContext.test.tsx +0 -226
  1252. package/src/Skeleton/Skeleton.test.tsx +0 -148
  1253. package/src/Slider/Slider.fr10.test.tsx +0 -93
  1254. package/src/Slider/Slider.test.tsx +0 -1630
  1255. package/src/Slider/__tests__/Slider.a11y.chromium.spec.ts +0 -113
  1256. package/src/Slider/__tests__/Slider.a11y.known-failures.ts +0 -12
  1257. package/src/Slider/__tests__/Slider.a11y.renders.tsx +0 -42
  1258. package/src/Slider/__tests__/Slider.a11y.states.ts +0 -106
  1259. package/src/Slider/__tests__/Slider.a11y.test.tsx +0 -105
  1260. package/src/Spinner/Spinner.test.tsx +0 -484
  1261. package/src/Stack/Stack.test.tsx +0 -473
  1262. package/src/Stack/StackItem.test.tsx +0 -105
  1263. package/src/StatusDot/StatusDot.test.tsx +0 -213
  1264. package/src/Stepper/Stepper.public.test.ts +0 -91
  1265. package/src/Stepper/Stepper.test.tsx +0 -2068
  1266. package/src/Switch/Switch.focusRing.source-build.test.mjs +0 -81
  1267. package/src/Switch/Switch.test.tsx +0 -1071
  1268. package/src/Switch/__tests__/Switch.a11y.chromium.spec.ts +0 -211
  1269. package/src/Switch/__tests__/Switch.a11y.known-failures.ts +0 -28
  1270. package/src/Switch/__tests__/Switch.a11y.states.ts +0 -275
  1271. package/src/Switch/__tests__/Switch.a11y.test.tsx +0 -144
  1272. package/src/TabList/TabList.test.tsx +0 -1701
  1273. package/src/TabList/__tests__/TabListOverflow.interaction.browser.spec.ts +0 -99
  1274. package/src/TabList/__tests__/Tabs.a11y.chromium.spec.ts +0 -199
  1275. package/src/TabList/__tests__/Tabs.a11y.known-failures.ts +0 -12
  1276. package/src/TabList/__tests__/Tabs.a11y.renders.tsx +0 -92
  1277. package/src/TabList/__tests__/Tabs.a11y.states.ts +0 -247
  1278. package/src/TabList/__tests__/Tabs.a11y.test.tsx +0 -153
  1279. package/src/Table/Table.perf.test.tsx +0 -569
  1280. package/src/Table/Table.test.tsx +0 -1851
  1281. package/src/Table/TableHeaderCell.test.tsx +0 -291
  1282. package/src/Table/TableSelectionToolbar.test.tsx +0 -109
  1283. package/src/Table/__tests__/Table.a11y.chromium.spec.ts +0 -129
  1284. package/src/Table/__tests__/Table.a11y.contracts.ts +0 -35
  1285. package/src/Table/__tests__/Table.a11y.renders.tsx +0 -112
  1286. package/src/Table/__tests__/Table.a11y.states.ts +0 -140
  1287. package/src/Table/__tests__/Table.a11y.test.tsx +0 -198
  1288. package/src/Table/__tests__/TableMinWidth.a11y.chromium.spec.ts +0 -75
  1289. package/src/Table/__tests__/TableRowGlide.a11y.browser.spec.ts +0 -382
  1290. package/src/Table/__tests__/TableScroll.a11y.chromium.spec.ts +0 -138
  1291. package/src/Table/__tests__/TableStickyDividers.a11y.browser.spec.ts +0 -560
  1292. package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +0 -919
  1293. package/src/Table/plugins/columnSettings/useTableColumnSettings.test.tsx +0 -175
  1294. package/src/Table/plugins/columnSettings/useTableColumnSettingsState.test.tsx +0 -296
  1295. package/src/Table/plugins/filtering/useTableFilterState.test.tsx +0 -143
  1296. package/src/Table/plugins/filtering/useTableFiltering.test.tsx +0 -357
  1297. package/src/Table/plugins/groupedRows/useTableGroupedRows-perf.test.tsx +0 -112
  1298. package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +0 -409
  1299. package/src/Table/plugins/pagination/useTablePagination-perf.test.tsx +0 -232
  1300. package/src/Table/plugins/pagination/useTablePagination.test.tsx +0 -666
  1301. package/src/Table/plugins/rowExpansion/useTableRowExpansion.glide.test.tsx +0 -280
  1302. package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +0 -681
  1303. package/src/Table/plugins/rowIndex/useTableRowIndex.test.tsx +0 -132
  1304. package/src/Table/plugins/rowStatus/useTableRowStatus.public.test.ts +0 -92
  1305. package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +0 -519
  1306. package/src/Table/plugins/selection/useTableSelection-perf.test.tsx +0 -258
  1307. package/src/Table/plugins/selection/useTableSelection.test.tsx +0 -424
  1308. package/src/Table/plugins/selection/useTableSelectionState.test.tsx +0 -451
  1309. package/src/Table/plugins/sortable/__tests__/useTableSortable.a11y.test.tsx +0 -174
  1310. package/src/Table/plugins/sortable/__tests__/useTableSortable.a11y.ts +0 -86
  1311. package/src/Table/plugins/sortable/useTableSortable.test.tsx +0 -857
  1312. package/src/Table/plugins/sortable/useTableSortableState.test.tsx +0 -592
  1313. package/src/Table/plugins/stickyColumns/useTableStickyColumns.test.tsx +0 -334
  1314. package/src/Table/plugins/tree/useTableTreeData-perf.test.tsx +0 -163
  1315. package/src/Table/plugins/tree/useTableTreeData.test.tsx +0 -992
  1316. package/src/Table/plugins/tree/useTableTreeState.test.tsx +0 -740
  1317. package/src/Table/tableContextMenu.test.tsx +0 -208
  1318. package/src/Text/Text.test.tsx +0 -405
  1319. package/src/Text/useTruncation.test.tsx +0 -69
  1320. package/src/TextArea/TextArea.fr10.test.tsx +0 -21
  1321. package/src/TextArea/TextArea.test.tsx +0 -1257
  1322. package/src/TextInput/TextInput.fr10.test.tsx +0 -21
  1323. package/src/TextInput/TextInput.test.tsx +0 -1259
  1324. package/src/TextInput/__tests__/TextInput.a11y.chromium.spec.ts +0 -214
  1325. package/src/TextInput/__tests__/TextInput.a11y.known-failures.ts +0 -40
  1326. package/src/TextInput/__tests__/TextInput.a11y.renders.tsx +0 -202
  1327. package/src/TextInput/__tests__/TextInput.a11y.states.ts +0 -384
  1328. package/src/TextInput/__tests__/TextInput.a11y.test.tsx +0 -130
  1329. package/src/Thumbnail/Thumbnail.test.tsx +0 -384
  1330. package/src/TimeInput/NativeTimeInput.test.tsx +0 -326
  1331. package/src/TimeInput/Presentation.test.tsx +0 -171
  1332. package/src/TimeInput/TimeInput.fr10.test.tsx +0 -312
  1333. package/src/TimeInput/TimeInput.test.tsx +0 -831
  1334. package/src/Timer/Timer.test.tsx +0 -302
  1335. package/src/Timestamp/Timestamp.test.tsx +0 -1636
  1336. package/src/Timestamp/tooltipEntries.test.ts +0 -566
  1337. package/src/Toast/ToastViewport.modalHost.test.tsx +0 -891
  1338. package/src/Toast/ToastViewport.test.tsx +0 -2333
  1339. package/src/Toast/useToast.test.tsx +0 -258
  1340. package/src/ToggleButton/ToggleButton.test.tsx +0 -973
  1341. package/src/ToggleButton/__tests__/ToggleButton.a11y.chromium.spec.ts +0 -177
  1342. package/src/ToggleButton/__tests__/ToggleButton.a11y.renders.tsx +0 -133
  1343. package/src/ToggleButton/__tests__/ToggleButton.a11y.states.ts +0 -167
  1344. package/src/ToggleButton/__tests__/ToggleButton.a11y.test.tsx +0 -103
  1345. package/src/Token/Token.test.tsx +0 -640
  1346. package/src/Token/__tests__/TokenRemoveTarget.a11y.chromium.spec.ts +0 -87
  1347. package/src/Tokenizer/Tokenizer.fr10.test.tsx +0 -28
  1348. package/src/Tokenizer/Tokenizer.props-type.test.tsx +0 -126
  1349. package/src/Tokenizer/Tokenizer.ssr.test.tsx +0 -196
  1350. package/src/Tokenizer/Tokenizer.test.tsx +0 -2121
  1351. package/src/Tokenizer/TokenizerBottomSheet.test.tsx +0 -2719
  1352. package/src/Tokenizer/__tests__/TokenizerEndLane.a11y.chromium.spec.ts +0 -505
  1353. package/src/Toolbar/Toolbar.test.tsx +0 -570
  1354. package/src/Toolbar/__tests__/Toolbar.a11y.chromium.spec.ts +0 -164
  1355. package/src/Toolbar/__tests__/Toolbar.a11y.renders.tsx +0 -63
  1356. package/src/Toolbar/__tests__/Toolbar.a11y.states.ts +0 -142
  1357. package/src/Toolbar/__tests__/Toolbar.a11y.test.tsx +0 -126
  1358. package/src/Tooltip/Tooltip.test.tsx +0 -819
  1359. package/src/Tooltip/__tests__/Tooltip.a11y.chromium.spec.ts +0 -130
  1360. package/src/Tooltip/__tests__/Tooltip.a11y.renders.tsx +0 -86
  1361. package/src/Tooltip/__tests__/Tooltip.a11y.states.ts +0 -132
  1362. package/src/Tooltip/__tests__/Tooltip.a11y.test.tsx +0 -126
  1363. package/src/Tooltip/__tests__/TooltipFocusReturn.a11y.chromium.spec.ts +0 -130
  1364. package/src/Tooltip/__tests__/TooltipHoverBridge.a11y.chromium.spec.ts +0 -75
  1365. package/src/Tooltip/__tests__/TooltipTallContent.a11y.browser.spec.ts +0 -673
  1366. package/src/Tooltip/__tests__/TooltipTallContentTracking.a11y.browser.spec.ts +0 -1162
  1367. package/src/Tooltip/useTooltip.test.tsx +0 -483
  1368. package/src/TopNav/TopNav.test.tsx +0 -836
  1369. package/src/TopNav/TopNavMegaMenu.reduced-motion.source-build.test.mjs +0 -83
  1370. package/src/TopNav/TopNavMegaMenu.test.tsx +0 -1132
  1371. package/src/TopNav/TopNavMenu.test.tsx +0 -485
  1372. package/src/TopNav/__tests__/TopNavMobileLongHeading.a11y.chromium.spec.ts +0 -75
  1373. package/src/TreeList/TreeList.test.tsx +0 -1711
  1374. package/src/TreeList/__tests__/TreeList.a11y.chromium.spec.ts +0 -138
  1375. package/src/TreeList/__tests__/TreeList.a11y.renders.tsx +0 -44
  1376. package/src/TreeList/__tests__/TreeList.a11y.states.ts +0 -164
  1377. package/src/TreeList/__tests__/TreeList.a11y.test.tsx +0 -138
  1378. package/src/TreeList/__tests__/TreeListGuideAlignment.interaction.browser.spec.ts +0 -127
  1379. package/src/TreeList/__tests__/TreeListRowNames.a11y.chromium.spec.ts +0 -83
  1380. package/src/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.ts +0 -138
  1381. package/src/Typeahead/BaseTypeahead.test.tsx +0 -553
  1382. package/src/Typeahead/Typeahead.fr10.test.tsx +0 -28
  1383. package/src/Typeahead/Typeahead.test.tsx +0 -2824
  1384. package/src/Typeahead/TypeaheadItem.test.tsx +0 -134
  1385. package/src/VStack/VStack.test.tsx +0 -128
  1386. package/src/VisuallyHidden/VisuallyHidden.test.tsx +0 -115
  1387. package/src/__tests__/BusyOwnerAnnouncement.test.tsx +0 -853
  1388. package/src/__tests__/CardPress.a11y.chromium.spec.ts +0 -353
  1389. package/src/__tests__/DisabledTriggerFocus.a11y.chromium.spec.ts +0 -87
  1390. package/src/__tests__/PressModality.a11y.chromium.spec.ts +0 -392
  1391. package/src/__tests__/PressedState.a11y.chromium.spec.ts +0 -814
  1392. package/src/__tests__/TestIcon.tsx +0 -26
  1393. package/src/__tests__/babelPluginAddExtensions.test.ts +0 -190
  1394. package/src/__tests__/fastRoleQueries.ts +0 -66
  1395. package/src/__tests__/forcedColors.ts +0 -60
  1396. package/src/__tests__/pressState.ts +0 -212
  1397. package/src/__tests__/stubMatchMedia.test.ts +0 -79
  1398. package/src/__tests__/stubMatchMedia.ts +0 -95
  1399. package/src/__tests__/stylexDeclarations.ts +0 -51
  1400. package/src/__tests__/unthemedLength.ts +0 -34
  1401. package/src/docPropLiterals.test.ts +0 -964
  1402. package/src/docPropReferences.test.ts +0 -178
  1403. package/src/docs-script.test.mjs +0 -55
  1404. package/src/gestures/__tests__/LongPressGestureRecognizer.test.ts +0 -141
  1405. package/src/gestures/__tests__/PanGestureRecognizer.test.ts +0 -327
  1406. package/src/gestures/__tests__/TapGestureRecognizer.test.ts +0 -154
  1407. package/src/gestures/__tests__/VelocityTracker.streams.test.ts +0 -243
  1408. package/src/gestures/__tests__/VelocityTracker.test.ts +0 -261
  1409. package/src/gestures/__tests__/arena.test.ts +0 -824
  1410. package/src/gestures/__tests__/arenaContinuous.test.ts +0 -207
  1411. package/src/gestures/__tests__/arenaTapLongPress.test.ts +0 -211
  1412. package/src/gestures/__tests__/fixtures/pointer-streams/README.md +0 -82
  1413. package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-fling.json +0 -130
  1414. package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-slow.json +0 -860
  1415. package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-stop-release.json +0 -357
  1416. package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-fling.json +0 -66
  1417. package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-slow.json +0 -268
  1418. package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-stop-release.json +0 -128
  1419. package/src/gestures/__tests__/fixtures/pointer-streams/capture.html +0 -123
  1420. package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-fling.json +0 -64
  1421. package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-slow.json +0 -268
  1422. package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-stop-release.json +0 -124
  1423. package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-fling.json +0 -64
  1424. package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-slow.json +0 -268
  1425. package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-stop-release.json +0 -124
  1426. package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-fling.json +0 -84
  1427. package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-slow.json +0 -381
  1428. package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-stop-release.json +0 -171
  1429. package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-fling.json +0 -45
  1430. package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-slow.json +0 -101
  1431. package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-stop-release.json +0 -130
  1432. package/src/gestures/__tests__/harness.ts +0 -204
  1433. package/src/hooks/__tests__/MenuPressShadowRoot.a11y.chromium.spec.ts +0 -144
  1434. package/src/hooks/__tests__/menuLinkClicks.ts +0 -71
  1435. package/src/hooks/actionGroupTracker.exports.test.ts +0 -28
  1436. package/src/hooks/actionGroupTracker.test.ts +0 -510
  1437. package/src/hooks/computeOverflow.test.ts +0 -422
  1438. package/src/hooks/deprecatedApis.public.test.ts +0 -33
  1439. package/src/hooks/menuPressGesture.test.ts +0 -253
  1440. package/src/hooks/scrollKeyboardDelegation.test.ts +0 -155
  1441. package/src/hooks/scrollbarGutter.test.ts +0 -167
  1442. package/src/hooks/useAnnounce.modal.test.tsx +0 -1291
  1443. package/src/hooks/useAnnounce.test.tsx +0 -293
  1444. package/src/hooks/useAnnounceRenderedText.adopters.test.tsx +0 -226
  1445. package/src/hooks/useAutoMediaMode.test.ts +0 -109
  1446. package/src/hooks/useBusyAnnouncement.adopters.test.tsx +0 -69
  1447. package/src/hooks/useBusyAnnouncement.test.tsx +0 -112
  1448. package/src/hooks/useClickableContainer.test.tsx +0 -236
  1449. package/src/hooks/useClipboard.test.tsx +0 -151
  1450. package/src/hooks/useContainerReveal.test.tsx +0 -163
  1451. package/src/hooks/useDevWarning.test.tsx +0 -45
  1452. package/src/hooks/useEntryAnimation.ssr.test.tsx +0 -143
  1453. package/src/hooks/useFocusTrap.test.tsx +0 -635
  1454. package/src/hooks/useFocusTrapEscapeShim.test.tsx +0 -166
  1455. package/src/hooks/useGridFocus.test.tsx +0 -165
  1456. package/src/hooks/useHotkeys.test.ts +0 -265
  1457. package/src/hooks/useImageMode.test.ts +0 -133
  1458. package/src/hooks/useInputContainer.test.tsx +0 -180
  1459. package/src/hooks/useInputStatusIcon.test.tsx +0 -240
  1460. package/src/hooks/useIsHydrating.test.tsx +0 -70
  1461. package/src/hooks/useKeyboardHint.test.tsx +0 -92
  1462. package/src/hooks/useListFocus.test.tsx +0 -664
  1463. package/src/hooks/useLongPress.test.tsx +0 -152
  1464. package/src/hooks/useMediaQuery.test.ts +0 -165
  1465. package/src/hooks/useMenuHover.test.tsx +0 -536
  1466. package/src/hooks/useMenuPress.test.tsx +0 -565
  1467. package/src/hooks/useMergedRefs.test.tsx +0 -62
  1468. package/src/hooks/useOverflow.test.ts +0 -504
  1469. package/src/hooks/useRenamedProp.test.tsx +0 -95
  1470. package/src/hooks/useScrollLock.test.ts +0 -248
  1471. package/src/hooks/useScrollOverflow.test.tsx +0 -222
  1472. package/src/hooks/useScrollableArea.test.tsx +0 -836
  1473. package/src/hooks/useStreamingText.test.ts +0 -237
  1474. package/src/hooks/useTreeFocus.test.tsx +0 -351
  1475. package/src/hooks/useTypeahead.test.tsx +0 -351
  1476. package/src/i18n/__tests__/InternationalizationProvider.test.tsx +0 -128
  1477. package/src/i18n/__tests__/e2e-pagination.test.tsx +0 -172
  1478. package/src/i18n/__tests__/e2e-powersearch.test.tsx +0 -166
  1479. package/src/i18n/__tests__/getLocaleDirection.test.ts +0 -40
  1480. package/src/i18n/__tests__/resolve.test.ts +0 -325
  1481. package/src/i18n/__tests__/useCollator.test.tsx +0 -115
  1482. package/src/i18n/__tests__/useDirection.test.tsx +0 -66
  1483. package/src/i18n/__tests__/useLocale.test.tsx +0 -52
  1484. package/src/i18n/useTranslator.test.tsx +0 -267
  1485. package/src/inputFontFloor.test.ts +0 -106
  1486. package/src/internal/tokenizer-presentation.test.ts +0 -29
  1487. package/src/internal/touch.test.ts +0 -44
  1488. package/src/motion/__tests__/animatedLayout.interaction.browser.spec.ts +0 -1613
  1489. package/src/motion/__tests__/animatedLayoutAdopters.interaction.browser.spec.ts +0 -217
  1490. package/src/motion/__tests__/animatedLayoutBundle.ts +0 -17
  1491. package/src/motion/animatedLayout.boundary.test.ts +0 -155
  1492. package/src/motion/animatedLayout.swap.test.ts +0 -827
  1493. package/src/motion/animatedLayout.test.ts +0 -1154
  1494. package/src/motion/animatedLayoutAdopters.test.tsx +0 -500
  1495. package/src/motion/animator.test.ts +0 -2653
  1496. package/src/motion/bezier.test.ts +0 -52
  1497. package/src/motion/coast.test.ts +0 -99
  1498. package/src/motion/decay.test.ts +0 -120
  1499. package/src/motion/projection.test.ts +0 -107
  1500. package/src/motion/reducedMotion.test.ts +0 -129
  1501. package/src/motion/reducedMotionPlan.test.ts +0 -182
  1502. package/src/motion/resolveSnapPoint.test.ts +0 -189
  1503. package/src/motion/roles.test.ts +0 -256
  1504. package/src/motion/rubberBand.test.ts +0 -88
  1505. package/src/motion/selectPage.test.ts +0 -31
  1506. package/src/motion/spring.test.ts +0 -650
  1507. package/src/motion/uikit/gestures.test.ts +0 -89
  1508. package/src/motion/uikit/springRows.test.ts +0 -71
  1509. package/src/motion/uikit/uikit.test.ts +0 -364
  1510. package/src/motion/uikit/values.test.ts +0 -110
  1511. package/src/naming.test.ts +0 -44
  1512. package/src/postinstall.test.mjs +0 -216
  1513. package/src/reset.a11y.chromium.spec.ts +0 -238
  1514. package/src/reset.test.ts +0 -205
  1515. package/src/reset.until-found.a11y.browser.spec.ts +0 -76
  1516. package/src/reset.until-found.test.ts +0 -32
  1517. package/src/serverSafeComponents.test.ts +0 -675
  1518. package/src/stylexValidation.source-build.test.mjs +0 -42
  1519. package/src/tailwind-theme.test.ts +0 -153
  1520. package/src/theme/MediaTheme.dom.test.tsx +0 -97
  1521. package/src/theme/Theme.test.tsx +0 -337
  1522. package/src/theme/__tests__/SpacingRootFontSize.a11y.chromium.spec.ts +0 -199
  1523. package/src/theme/contrast.test.ts +0 -94
  1524. package/src/theme/declarationBoundary.test.ts +0 -126
  1525. package/src/theme/defineTheme.test.ts +0 -2028
  1526. package/src/theme/derivedVarRegistry.test.ts +0 -588
  1527. package/src/theme/expandColorScale.test.ts +0 -651
  1528. package/src/theme/expandMotionScale.test.ts +0 -145
  1529. package/src/theme/expandRadiusScale.test.ts +0 -59
  1530. package/src/theme/expandTypeScale.test.ts +0 -351
  1531. package/src/theme/extensibleAxes.test.ts +0 -432
  1532. package/src/theme/generateThemeRules.test.ts +0 -1870
  1533. package/src/theme/hct.test.ts +0 -93
  1534. package/src/theme/onMediaTokens.test.ts +0 -431
  1535. package/src/theme/publicThemeHelperContract.test.ts +0 -67
  1536. package/src/theme/syntax/defineSyntaxTheme.diff.test.ts +0 -91
  1537. package/src/theme/syntax/serverSafeSyntax.test.ts +0 -68
  1538. package/src/theme/syntax/useSyntaxTheme.diff.test.tsx +0 -40
  1539. package/src/theme/themeAdaptations.test.ts +0 -1795
  1540. package/src/theme/themeRegistry.test.ts +0 -59
  1541. package/src/theme/themingTargets.test.ts +0 -589
  1542. package/src/theme/tokenValueCompat.test.ts +0 -204
  1543. package/src/theme/tokens.test.ts +0 -441
  1544. package/src/theme/useTheme.test.tsx +0 -322
  1545. package/src/unicodePropertyEscapes.source-build.test.mjs +0 -69
  1546. package/src/utils/chainEventHandlers.test.ts +0 -39
  1547. package/src/utils/characters.test.ts +0 -141
  1548. package/src/utils/color.test.ts +0 -233
  1549. package/src/utils/composeEventHandlers.test.ts +0 -71
  1550. package/src/utils/customPropertyArmLayering.test.ts +0 -131
  1551. package/src/utils/dateParser.test.ts +0 -402
  1552. package/src/utils/dateTypes.test.ts +0 -40
  1553. package/src/utils/devWarning.test.ts +0 -56
  1554. package/src/utils/edgeAutoscroll.test.ts +0 -192
  1555. package/src/utils/focusReturn.test.ts +0 -119
  1556. package/src/utils/getKey.test.ts +0 -25
  1557. package/src/utils/hitArea.test.ts +0 -628
  1558. package/src/utils/ime.test.ts +0 -32
  1559. package/src/utils/inputAria.test.ts +0 -39
  1560. package/src/utils/interactionModality.test.ts +0 -100
  1561. package/src/utils/isApplePlatform.test.ts +0 -61
  1562. package/src/utils/mergeProps.test.ts +0 -166
  1563. package/src/utils/mergeRefs.test.ts +0 -48
  1564. package/src/utils/parseStyleKey.test.ts +0 -56
  1565. package/src/utils/plainDate.test.ts +0 -848
  1566. package/src/utils/pressFeedback.test.ts +0 -874
  1567. package/src/utils/pressGesture.test.ts +0 -323
  1568. package/src/utils/pressPaintSource.test.ts +0 -65
  1569. package/src/utils/pressableCoverage.test.ts +0 -192
  1570. package/src/utils/safeUrl.test.ts +0 -101
  1571. package/src/utils/sharedMutationObserver.test.ts +0 -53
  1572. package/src/utils/sharedResizeObserver.test.ts +0 -283
  1573. package/src/utils/themeProps.test.ts +0 -62
  1574. package/src/utils/timeParser.test.ts +0 -295
  1575. package/src/utils/touchPresentation.test.ts +0 -323
@@ -42,14 +42,16 @@
42
42
  * current value with the current velocity (`spec:AST-094` FR6). A gesture's release velocity
43
43
  * can be handed in explicitly instead.
44
44
  *
45
- * End state without a flicker frame: the element's inline style always holds
46
- * the values the animations END on, and the keyframes hold that end state for
47
- * a while after the curve ends (END_HOLD_MS). The main thread drops a finished
48
- * animation as soon as it runs after the curve's end; the inline style already
49
- * shows the same values, so nothing moves. The hold matters when the curve
50
- * ends during a main-thread block: WebKit's compositor ends an animation by
51
- * falling back to the value its main thread last committed, which is
52
- * mid-flight.
45
+ * No frame shows a value the element is not at. While a curve runs, the
46
+ * element's inline style holds the value the curve starts from (the value on
47
+ * screen when it was built), so a frame painted before the compositor has the
48
+ * curve (WebKit can receive a new curve a few updates late) shows the element
49
+ * where it is, never where it is going. The keyframes hold the end state for a
50
+ * while after the curve ends (END_HOLD_MS); the main thread retires a finished
51
+ * animation as soon as it runs after the curve's end, writing the end values
52
+ * inline in the same task that cancels it, so nothing moves. The hold matters
53
+ * when the curve ends during a main-thread block: WebKit's compositor ends an
54
+ * animation by falling back to the value its main thread last committed.
53
55
  *
54
56
  * Start time: a call that starts from rest (nothing on its channels moving,
55
57
  * no `options.at`) gets no start time, so the browser starts it when it
@@ -62,20 +64,40 @@
62
64
  * `options.at` to line several animators up, so the new curve continues
63
65
  * from the frame on screen. Keyframes are sampled from the call's start, so
64
66
  * a value that keeps moving through a rebuild stays on its curve to the
65
- * frame.
67
+ * frame. `options.start` changes that per call: `'commit'` dates a retarget
68
+ * by the browser's commit as well, and `'presented'` creates the animations
69
+ * of a call from rest two frames later, once its element at rest has been
70
+ * presented (a UI process that applies commits late); a retarget still starts
71
+ * now, from the value and velocity on screen.
72
+ * `handle.curve(property)` hands out the curve a call plays, so a
73
+ * companion can follow it on the same clock.
74
+ * `options.additive` retargets as UIKit does: the old curve keeps going and a
75
+ * curve of the change between the targets is added on top, baked into one
76
+ * animation (two animations on one property leave the compositor in both
77
+ * engines), so the retarget keeps the velocity on screen.
66
78
  *
67
- * WebKit starts an animation created just before a block at its last frame
68
- * time before the block, so there the motion still skips into its curve;
69
- * Chromium starts it after the block.
79
+ * WebKit dates an animation created just before a block at its last frame
80
+ * time before the block, where the first frame after it would show the
81
+ * motion skipped into its curve; when the call's own task ran on more than
82
+ * two frames, the call's first read of that start moves it to that read, so
83
+ * WebKit delays the motion as Chromium's commit does (startAfterBlock). Every
84
+ * call of that task moves together, and a shorter task or a read that other
85
+ * tasks delay keeps the browser's start, so a sequence chained on a call's
86
+ * end (a Reduce Motion cross-fade's second half) keeps its clock.
70
87
  *
71
88
  * Promotion: Mobile Safari runs an animation whose start time is set from
72
- * script on its compositor at its first commit only if the element already
73
- * has a compositing layer; without one, a block right after that commit
74
- * freezes it (iOS 26.2 simulator: 2 of 7 runs kept moving). Every animation
75
- * the animator creates, and every `set`, therefore promotes its channels in
76
- * the same task: inline `will-change` on the element, merged with the
77
- * element's own. That is enough (5 of 5, and 4 of 4 through the animator);
78
- * promotion ends PROMOTION_LINGER_MS after the last motion.
89
+ * script on its compositor at its first commit only if the element (or the
90
+ * pseudo-element) already has a compositing layer; without one, a block
91
+ * right after that commit freezes it (iOS 26.2 simulator: 2 of 7 runs kept
92
+ * moving, 0 of 5 on a ::before). Every animation the animator creates, and
93
+ * every `set` (unless it passes `{promote: false}`), therefore promotes its
94
+ * channels in the same task: inline
95
+ * `will-change` on the element, merged with the element's own, or the custom
96
+ * property `--astryx-motion-will-change-<pseudo>` on the host for a
97
+ * pseudo-element, whose style opts in with
98
+ * `will-change: var(--astryx-motion-will-change-before, auto)`. That is
99
+ * enough (5 of 5, and 4 of 4 through the animator); promotion ends
100
+ * PROMOTION_LINGER_MS after the last motion.
79
101
  *
80
102
  * Known limits, iOS Safari (measured on the iOS 26.2 simulator):
81
103
  * - a block in the task that starts a motion delays it: it starts when the
@@ -112,8 +134,8 @@
112
134
  * call that lands too carries a landing still waiting (two calls in one
113
135
  * frame land together), and a later opacity change lands it at once;
114
136
  * - on any other primary pointer (DR3) it completes at once.
115
- * No call option and no theme value lengthens the fade or keeps travel (DR4):
116
- * the fade's length is not a theme role.
137
+ * No call option and no role value lengthens the fade or keeps travel (DR4):
138
+ * the fade's length is not a role.
117
139
  *
118
140
  * Momentum under Reduce Motion (`design:reduced-motion` DR2, DEC-2): a
119
141
  * decay's momentum continues the velocity a finger handed it on release
@@ -125,18 +147,41 @@
125
147
  * Motion policy above, a cross-fade on a coarse pointer or after a touch
126
148
  * release (`touchRelease`) and at once elsewhere (DR2, DR3).
127
149
  *
150
+ * Roles: every spring and curve the animator plays passes through
151
+ * resolveMotion.ts, which names the motion role it plays (`springs.settle`
152
+ * once `registerSpringsTable()` has run, the Reduce Motion fade's curve,
153
+ * which the animator registers alone). The per-role tables stay internal
154
+ * (`spec:AST-094` DEC-15), so a role plays its table value: nothing reads a
155
+ * CSS variable or the element's style for it. A spring written inline at the call
156
+ * site, and a table never registered, play as given; the fade's length is not
157
+ * a role.
158
+ *
159
+ * A pseudo-element (`options.pseudoElement`, a dialog's `::backdrop`) has no
160
+ * inline style: its end value is held by a static filling animation (after a
161
+ * curve ends, and after `set`) until the next animation replaces it, and for
162
+ * as long as the pseudo-element exists. The browser makes a `::backdrop`
163
+ * again each time its dialog opens, without the hold, so a presentation
164
+ * calls `set` with its starting value right after `showModal()`, in the same
165
+ * task: a `set` before it lands on the backdrop the open replaces.
166
+ *
128
167
  * SSR-safe: nothing touches `window` or `document` at module scope, and an
129
168
  * animator created without an element only keeps state until one is attached.
130
169
  *
131
170
  * SYNC: When modified, update:
132
171
  * - /packages/core/src/motion/animator.test.ts
133
172
  * - /packages/core/src/motion/reducedMotionPlan.ts (the Reduce Motion plan)
173
+ * - /packages/core/src/motion/__tests__/animator.interaction.browser.spec.ts
174
+ * - /packages/core/src/motion/resolveMotion.ts (the roles it resolves)
134
175
  * - /packages/core/src/motion/README.md
135
176
  */
136
177
 
137
178
  import {cubicBezier} from './bezier';
138
179
  import {solveSpring, toSpring, type SpringDescription} from './spring';
139
- import {reducedMotionCrossFade} from './uikit/timing';
180
+ import {resolveMotion} from './resolveMotion';
181
+ import {
182
+ reducedMotionCrossFade,
183
+ registerReducedMotionCrossFade,
184
+ } from './uikit/timing';
140
185
  import {planReducedMotion, type ReducedMotionView} from './reducedMotionPlan';
141
186
 
142
187
  /**
@@ -192,6 +237,36 @@ export interface AnimateOptions {
192
237
  * changes nothing.
193
238
  */
194
239
  crossfadeAs?: 'entrance' | 'exit';
240
+ /**
241
+ * When the call's animations start. By default a call from rest starts
242
+ * when the browser commits it, and a call that continues motion on screen
243
+ * (a retarget) starts now, from the value on screen. Ignored with `at`.
244
+ * - `'commit'`: a call that continues motion also starts when the browser
245
+ * commits it, dated by the browser rather than by the main thread, as a
246
+ * call from rest is.
247
+ * - `'presented'`: a call from rest leaves its element at rest and creates
248
+ * its animations two frames later, once the frame that carries the
249
+ * element at rest has been presented; they then start at their commit. A
250
+ * busy UI process delays the motion instead of skipping into it, for two
251
+ * frames more before an idle start. Any other change to the animator
252
+ * before then creates the animations first, in call order. A call that
253
+ * continues motion on screen (a retarget) starts now, as by default.
254
+ */
255
+ start?: 'commit' | 'presented';
256
+ /**
257
+ * A call that retargets a curve on screen adds to it instead of replacing
258
+ * it, as UIKit's animations do: the old curve keeps going (past its end, at
259
+ * its target) and a spring of the difference between the two targets runs
260
+ * from 0 on top, in the same animation. Its value and velocity at the call
261
+ * are the old curve's, so whichever frame first shows it (WebKit can apply
262
+ * a new curve tens of ms late), nothing steps back. Ignored for a property
263
+ * at rest or still waiting for the browser's start, for a property given a
264
+ * velocity, and under Reduced Motion. Use it for a played curve that starts
265
+ * at rest (an eased reversal) while the property moves; a spring retarget
266
+ * on the same spring moves the same either way, and a curve that already
267
+ * continues the velocity on screen must not add to it.
268
+ */
269
+ additive?: boolean;
195
270
  }
196
271
 
197
272
  /**
@@ -219,7 +294,28 @@ export interface MotionCurve {
219
294
  /**
220
295
  * Options of `createAnimator`.
221
296
  */
297
+ /** How `set` puts values in place. */
298
+ export interface SetOptions {
299
+ /**
300
+ * Whether the write promotes its channels to a compositing layer, as a
301
+ * drag's per-frame writes need so each is a composite only (default
302
+ * true). `false` writes the values and nothing else: a one-off switch that
303
+ * must not give its element a layer, such as a veil under a sticky header
304
+ * switched during a programmatic scroll (on iOS 26.2, a layer there blanks
305
+ * the header's painted items for about two frames). A channel another
306
+ * motion keeps promoted stays promoted, and a channel with other motion
307
+ * still running gets its animation's layer as usual.
308
+ */
309
+ promote?: boolean;
310
+ }
311
+
222
312
  export interface AnimatorOptions {
313
+ /**
314
+ * Animates a pseudo-element of the element instead (`'::backdrop'` of a
315
+ * native dialog). A pseudo-element has no inline style, so a static filling
316
+ * animation holds its value after a curve ends and after `set`.
317
+ */
318
+ pseudoElement?: string;
223
319
  /** Starting values; identity by default. Never read from the DOM. */
224
320
  initial?: MotionValues;
225
321
  /** Clock in ms on the document timeline's time base. */
@@ -252,6 +348,14 @@ export interface MotionHandle {
252
348
  value(property: MotionProperty, time?: number): number;
253
349
  /** Presentation velocity of a property at `time`, units/s. */
254
350
  velocity(property: MotionProperty, time?: number): number;
351
+ /**
352
+ * The curve this call started on `property` (`scale` reads `scaleX`),
353
+ * in seconds from the call's start: what the keyframes play. Null for a
354
+ * property the call does not move, or moves without travel (Reduced
355
+ * Motion). Map it onto a companion property with `mapProgress`, and play
356
+ * that on the same clock.
357
+ */
358
+ curve(property: MotionProperty | 'scale'): MotionCurve | null;
255
359
  /** New targets for this call's properties, keeping their velocity. */
256
360
  retarget(
257
361
  to: MotionValues,
@@ -292,7 +396,7 @@ export interface Animator {
292
396
  * of a drag (one style write per channel, no animation when nothing else
293
397
  * on the channel is moving).
294
398
  */
295
- set(values: MotionValues): void;
399
+ set(values: MotionValues, options?: SetOptions): void;
296
400
  /** Springs to `to` from the presentation values. */
297
401
  animate(
298
402
  to: MotionValues,
@@ -386,10 +490,22 @@ interface Segment {
386
490
  */
387
491
  interface StartGroup {
388
492
  readonly provisional: number;
493
+ /**
494
+ * Its animations were created in the running task: the browser cannot have
495
+ * started them yet, so nothing reads their start time until it ends.
496
+ */
497
+ fresh: boolean;
389
498
  readonly segments: Segment[];
390
499
  readonly animations: Animation[];
391
500
  readonly channels: Set<Channel>;
392
501
  resolved: boolean;
502
+ /**
503
+ * The first frame after the call has run: a start read later is the
504
+ * browser's, whatever it says (startAfterBlock).
505
+ */
506
+ framed?: boolean;
507
+ /** The task it was made in, with every call made in that task. */
508
+ task?: TaskMark;
393
509
  /** A later call in the same task that took over its curves. */
394
510
  adoptedBy?: StartGroup;
395
511
  readonly resolve: (start: number) => void;
@@ -414,7 +530,12 @@ interface HandleState {
414
530
  * dip, the fade back in.
415
531
  */
416
532
  interface Landing {
417
- readonly owner: HandleState;
533
+ /**
534
+ * The call that settles when the landing (and its fade back in) ends; a
535
+ * call that joins the dip takes it over, and the call it replaces is
536
+ * carried.
537
+ */
538
+ owner: HandleState;
418
539
  /** ms after the call's start. */
419
540
  readonly at: number;
420
541
  readonly values: Map<MotionProperty, number>;
@@ -454,6 +575,8 @@ interface ReducedPlan {
454
575
  > | null;
455
576
  /** The stylesheet opacity a dip borrowed (no call owns opacity). */
456
577
  readonly borrowed?: number | null;
578
+ /** The call joins the waiting dip (see the planner's `joins`). */
579
+ readonly joins?: boolean;
457
580
  }
458
581
 
459
582
  const PROPERTIES: ReadonlyArray<MotionProperty> = [
@@ -491,32 +614,106 @@ export const SETTLE_THRESHOLD: Record<MotionProperty, number> = {
491
614
  opacity: 0.001,
492
615
  };
493
616
 
494
- /** Keyframes are added until linear interpolation is within this. */
617
+ /**
618
+ * Keyframes are added until linear interpolation is within this: a quarter of
619
+ * a device pixel (this quarter of a CSS pixel, divided by the device pixel
620
+ * ratio where it is above 1), a twentieth of a degree, a 2000th of the size,
621
+ * about one step of an 8-bit alpha. Every one is below what a moving element
622
+ * can show.
623
+ */
495
624
  const SAMPLE_TOLERANCE: Record<MotionProperty, number> = {
496
- x: 0.05,
497
- y: 0.05,
498
- rotate: 0.02,
499
- scaleX: 0.0002,
500
- scaleY: 0.0002,
501
- opacity: 0.002,
625
+ x: 0.25,
626
+ y: 0.25,
627
+ rotate: 0.05,
628
+ scaleX: 0.0005,
629
+ scaleY: 0.0005,
630
+ opacity: 0.004,
502
631
  };
503
632
 
633
+ /** Keyframes start on this grid (ms) and are split where the curve needs it. */
634
+ const SAMPLE_GRID_MS = 1000 / 30;
635
+
504
636
  /** A curve that has not settled by then (an undamped spring) snaps. */
505
637
  const MAX_DURATION_MS = 30_000;
638
+
639
+ /**
640
+ * How long a task must run on past its first call from rest before that
641
+ * counts as a block (WebKit; startAfterBlock): two frames at 60 Hz.
642
+ */
643
+ // Browser start times are frame times and a task's end a live clock, so only a block longer than a frame plus the task's own length can be told apart from that quantization.
644
+ const LATE_START_MS = 34;
645
+
646
+ /**
647
+ * The task calls from rest are made in, shared by every call made in it
648
+ * (every animator's), so one motion's parts that are separate calls start
649
+ * together (startAfterBlock).
650
+ */
651
+ interface TaskMark {
652
+ /**
653
+ * When its first call from rest created animations: the call itself, or a
654
+ * presented call's second frame.
655
+ */
656
+ readonly first: number;
657
+ /** When the task ended, at its first microtask. */
658
+ ended?: number;
659
+ /** The start every call of a blocked task moves to, set by its first read. */
660
+ at?: number;
661
+ }
662
+
663
+ /** The task the current calls from rest are made in, until it ends. */
664
+ let openTask: TaskMark | null = null;
665
+
666
+ /** The mark of the running task, opened by its first call from rest. */
667
+ function markTask(time: number, clock: () => number): TaskMark {
668
+ if (openTask == null) {
669
+ const task: TaskMark = {first: time};
670
+ openTask = task;
671
+ queueMicrotask(() => {
672
+ task.ended = clock();
673
+ openTask = null;
674
+ });
675
+ }
676
+ return openTask;
677
+ }
678
+
506
679
  /** Above this many keyframes the tolerance is relaxed. */
507
680
  const MAX_KEYFRAMES = 1200;
508
681
  /**
509
682
  * The keyframes hold the end state this long after a curve ends. An engine
510
683
  * whose compositor ends an animation while the main thread is blocked falls
511
- * back to the value its main thread last committed, mid-flight (WebKit); the
512
- * hold keeps the end state on screen through such a block. The main thread
513
- * drops the animation as soon as it runs after the curve's end.
684
+ * back to the value its main thread last committed, the curve's start
685
+ * (WebKit on Linux); the hold keeps the end state on screen through any such
686
+ * block. It only stretches the last keyframe. The main thread retires the
687
+ * animation as soon as it runs after the curve's end.
688
+ *
689
+ * Why a tail inside the curve's own animation, with a bound (measured Oct 24
690
+ * 2026; do not replace it without these proofs):
691
+ * - WebKit on Linux (WebKitGTK and WPE) ignores `fill` on its compositor:
692
+ * a 400 ms move that ends during a 1 s main-thread block snaps back to the
693
+ * block-start position 13 ms after its end, with `fill: forwards` or with
694
+ * no fill, and holds with this tail. iOS 26.2 Mobile Safari holds the end
695
+ * in all three forms, so there the tail is unneeded but harmless (measured
696
+ * Oct 25 2026). The browser proof "a spring that ends inside the block
697
+ * keeps showing its end state" catches it.
698
+ * - A separate static animation of the end state under the curve would hold
699
+ * it without a bound, but two animations on one property push Chromium to
700
+ * run the curve on the main thread: the 1 s block proof moved in 0 of 57
701
+ * frames, the start-before-a-block proof failed, and seeking the curve
702
+ * broke.
514
703
  */
515
- export const END_HOLD_MS = 5000;
704
+ export const END_HOLD_MS = 60_000;
516
705
 
517
706
  /** How often a paused animation is looked at again for retiring, ms. */
518
707
  const RETIRE_RECHECK_MS = 100;
519
708
 
709
+ /**
710
+ * The soonest a running animation's end is looked for again, ms: a frame at
711
+ * 60 Hz. WebKit moves an animation's currentTime once per frame, so a look
712
+ * within a frame reads the frame's time, a fraction of a ms short of the end,
713
+ * and a timer for that fraction would fire again before anything moved.
714
+ */
715
+ const END_RECHECK_MS = 1000 / 60;
716
+
520
717
  /** How long an element stays promoted after its last motion, ms. */
521
718
  export const PROMOTION_LINGER_MS = 500;
522
719
 
@@ -558,10 +755,10 @@ function format(
558
755
  }
559
756
  }
560
757
 
561
- const shared = new WeakMap<HTMLElement, Animator>();
758
+ const shared = new WeakMap<HTMLElement, Map<string, Animator>>();
562
759
 
563
760
  /**
564
- * The one animator for `element`, created on
761
+ * The one animator for `element` (and `options.pseudoElement`), created on
565
762
  * first use. Code that animates one element from several places (a swipe on
566
763
  * x, a removal on y) shares it, so their curves compose in one `translate`
567
764
  * track and retargeting one axis leaves the other on its curve; two
@@ -573,10 +770,16 @@ export function animatorFor(
573
770
  element: HTMLElement,
574
771
  options: AnimatorOptions = {},
575
772
  ): Animator {
576
- let animator = shared.get(element);
773
+ let byPseudo = shared.get(element);
774
+ if (byPseudo == null) {
775
+ byPseudo = new Map();
776
+ shared.set(element, byPseudo);
777
+ }
778
+ const key = options.pseudoElement ?? '';
779
+ let animator = byPseudo.get(key);
577
780
  if (animator == null) {
578
781
  animator = createAnimator(element, options);
579
- shared.set(element, animator);
782
+ byPseudo.set(key, animator);
580
783
  }
581
784
  return animator;
582
785
  }
@@ -693,8 +896,9 @@ const REDUCED_TRANSITION: SpringTransition = {
693
896
  * @example
694
897
  * ```
695
898
  * const animator = createAnimator(sheet);
696
- * // finger lifts at 1200 px/s heading for the detent at 0:
697
- * animator.animate({y: 0}, {spring: springs.sheetDetent, velocity: {y: 1200}});
899
+ * // finger lifts at 1200 px/s heading for the detent at 0 (a component
900
+ * // passes the spring of its motion role):
901
+ * animator.animate({y: 0}, {spring: {response: 0.45, dampingRatio: 0.9}, velocity: {y: 1200}});
698
902
  * // the finger lands again: where is it right now?
699
903
  * const y = animator.get('y', event.timeStamp);
700
904
  * animator.stop(['y']);
@@ -712,6 +916,7 @@ export function createAnimator(
712
916
  requestAnimationFrame(() => callback());
713
917
  }
714
918
  : null);
919
+ const pseudoElement = options.pseudoElement;
715
920
  // Reduced Motion reads the person's settings and nothing else: no option
716
921
  // overrides them (design:reduced-motion DR4).
717
922
  const prefersReducedMotion = defaultPrefersReducedMotion;
@@ -761,7 +966,21 @@ export function createAnimator(
761
966
  let ownWillChange: string | null = null;
762
967
  /** The stylesheet's will-change when there is no inline value. */
763
968
  let sheetWillChange = '';
969
+ /**
970
+ * Whether sheetWillChange holds a read of the element's current style: it
971
+ * is read in the task after the element is attached, and again after each
972
+ * demotion, so a promotion (a drag's first move) reads no style in its
973
+ * own task.
974
+ */
975
+ let sheetWillChangeRead = false;
976
+ /** The pending read of sheetWillChange, cancelled with its element. */
977
+ let sheetReadTimer: ReturnType<typeof setTimeout> | null = null;
764
978
  let demoteTimer: ReturnType<typeof setTimeout> | null = null;
979
+ /** A pseudo-element is promoted through a custom property on its host. */
980
+ const promotionProperty =
981
+ pseudoElement == null
982
+ ? null
983
+ : `--astryx-motion-will-change-${pseudoElement.replace(/^:+/, '')}`;
765
984
  /** Channels whose identity the last node held inline (see `attach`). */
766
985
  let heldIdentity = new Set<Channel>();
767
986
 
@@ -842,18 +1061,22 @@ export function createAnimator(
842
1061
  const writeInline = (
843
1062
  channel: Channel,
844
1063
  value: (property: MotionProperty) => number,
1064
+ release = true,
845
1065
  ) => {
846
- if (target == null) {
1066
+ if (target == null || pseudoElement != null) {
847
1067
  return;
848
1068
  }
849
1069
  touched.add(channel);
850
1070
  const text = inlineText(channel, value);
851
- if (text === IDENTITY_TEXT[channel]) {
852
- // Identity leaves the element when nothing else would move it.
1071
+ // An unchanged value is not written: a style write invalidates the
1072
+ // element, and WebKit can repaint sticky content stale when that lands in
1073
+ // the frame a scroll commits.
1074
+ if (target.style.getPropertyValue(channel) !== text) {
853
1075
  target.style.setProperty(channel, text);
1076
+ }
1077
+ if (release && text === IDENTITY_TEXT[channel]) {
1078
+ // Identity leaves the element when nothing else would move it.
854
1079
  releaseIdentity(channel);
855
- } else {
856
- target.style.setProperty(channel, text);
857
1080
  }
858
1081
  };
859
1082
 
@@ -881,9 +1104,9 @@ export function createAnimator(
881
1104
  for (let e = 0; e + 1 < edges.length; e++) {
882
1105
  const a = edges[e];
883
1106
  const b = edges[e + 1];
884
- // A 120 Hz grid, each interval split until the chord is within the
1107
+ // A 30 Hz grid, each interval split until the chord is within the
885
1108
  // tolerance at its quarter points.
886
- const steps = Math.max(1, Math.ceil((b - a) / (1000 / 120)));
1109
+ const steps = Math.max(1, Math.ceil((b - a) / SAMPLE_GRID_MS));
887
1110
  const split = (t0: number, t1: number, depth: number) => {
888
1111
  const v0 = value(t0);
889
1112
  const v1 =
@@ -908,14 +1131,33 @@ export function createAnimator(
908
1131
  return times;
909
1132
  };
910
1133
 
1134
+ /** A pseudo-element's resting value, held by a static filling animation. */
1135
+ const hold = (channel: Channel, time: number) => {
1136
+ if (target == null) {
1137
+ return;
1138
+ }
1139
+ const value = format(channel, finalValue);
1140
+ const animation = target.animate([{[channel]: value}, {[channel]: value}], {
1141
+ duration: 1,
1142
+ fill: 'both',
1143
+ pseudoElement,
1144
+ });
1145
+ animation.startTime = time;
1146
+ running.set(channel, animation);
1147
+ };
1148
+
911
1149
  const rebuild = (channel: Channel, time: number) => {
912
1150
  const previous = running.get(channel);
913
1151
  running.delete(channel);
914
1152
  clearTimeout(retireTimers.get(channel));
915
1153
  retireTimers.delete(channel);
916
- // The element's inline style holds the end state, so its old animation
917
- // can go first.
918
- previous?.cancel();
1154
+ // An element's inline style takes the value on screen below, so its old
1155
+ // animation can go first. A pseudo-element has none: its old animation
1156
+ // keeps holding the value until the new one exists (same task, no frame in
1157
+ // between).
1158
+ if (pseudoElement == null) {
1159
+ previous?.cancel();
1160
+ }
919
1161
  const properties = CHANNELS[channel];
920
1162
  // Settled curves become resting values.
921
1163
  for (const property of properties) {
@@ -925,13 +1167,27 @@ export function createAnimator(
925
1167
  segments.delete(property);
926
1168
  }
927
1169
  }
928
- writeInline(channel, finalValue);
929
1170
  const moving = properties.filter(p => segments.has(p));
1171
+ if (
1172
+ moving.length === 0 ||
1173
+ target == null ||
1174
+ typeof target.animate !== 'function'
1175
+ ) {
1176
+ writeInline(channel, finalValue);
1177
+ } else {
1178
+ // The value on screen as the curve starts: what a frame painted before
1179
+ // the compositor has the curve shows. The end is written at retire.
1180
+ writeInline(channel, p => valueAt(p, time));
1181
+ }
930
1182
  if (target == null || typeof target.animate !== 'function') {
931
1183
  previous?.cancel();
932
1184
  return;
933
1185
  }
934
1186
  if (moving.length === 0) {
1187
+ if (pseudoElement != null) {
1188
+ hold(channel, time);
1189
+ }
1190
+ previous?.cancel();
935
1191
  return;
936
1192
  }
937
1193
  // A channel rebuilt by an explicit call (set, rebase, a retarget of
@@ -958,6 +1214,10 @@ export function createAnimator(
958
1214
  ),
959
1215
  );
960
1216
  if (end <= from) {
1217
+ if (pseudoElement != null) {
1218
+ hold(channel, time);
1219
+ }
1220
+ previous?.cancel();
961
1221
  return;
962
1222
  }
963
1223
  if (callGroup != null) {
@@ -980,15 +1240,17 @@ export function createAnimator(
980
1240
  }
981
1241
  }
982
1242
  }
1243
+ // Read where the keyframes are baked: a page moved to another screen
1244
+ // bakes its next motion for that screen.
1245
+ const devicePixel = 1 / Math.max(1, globalThis.devicePixelRatio || 1);
983
1246
  const collect = (scale: number) => {
984
1247
  const times = new Set<number>([from, end]);
985
1248
  for (const property of moving) {
986
- for (const t of sampleTimes(
987
- property,
988
- from,
989
- end,
990
- SAMPLE_TOLERANCE[property] * scale,
991
- )) {
1249
+ const tolerance =
1250
+ SAMPLE_TOLERANCE[property] *
1251
+ scale *
1252
+ (property === 'x' || property === 'y' ? devicePixel : 1);
1253
+ for (const t of sampleTimes(property, from, end, tolerance)) {
992
1254
  times.add(t);
993
1255
  }
994
1256
  }
@@ -1037,10 +1299,11 @@ export function createAnimator(
1037
1299
  duration: span,
1038
1300
  // The last keyframes hold the end state (END_HOLD_MS); filling both
1039
1301
  // ways also keeps it where an engine honors the fill on its compositor.
1040
- // The main thread drops the animation once it runs after the end; the
1041
- // inline style already holds the same values, so that changes no pixel.
1302
+ // The main thread retires the animation once it runs after the end,
1303
+ // writing the end inline in that task, so that changes no pixel.
1042
1304
  fill: 'both',
1043
1305
  easing: 'linear',
1306
+ ...(pseudoElement != null ? {pseudoElement} : {}),
1044
1307
  });
1045
1308
  if (waiting != null) {
1046
1309
  // From rest: no start time, so the browser starts the animation when
@@ -1061,7 +1324,16 @@ export function createAnimator(
1061
1324
 
1062
1325
  /**
1063
1326
  * Once the main thread runs after the curve's end, the animation leaves the
1064
- * running state: the element's inline style already shows the end values.
1327
+ * running state: an element's end values are written inline in the task
1328
+ * that cancels it; a pseudo-element's end value moves to a static holding
1329
+ * animation, created before the long one goes.
1330
+ *
1331
+ * Why a timer at the curve's end: no browser event reports that an
1332
+ * animation's time has reached a point inside its effect, and its
1333
+ * `finished` comes only after the END_HOLD_MS tail, which would keep the
1334
+ * element promoted and the animation alive for a minute. The timer is set
1335
+ * on the curve's own clock and re-armed while a sampler pauses or seeks the
1336
+ * animation, so it never retires a held one.
1065
1337
  */
1066
1338
  const scheduleRetire = (
1067
1339
  channel: Channel,
@@ -1082,13 +1354,43 @@ export function createAnimator(
1082
1354
  channel,
1083
1355
  setTimeout(
1084
1356
  retire,
1085
- animation.playState === 'paused' ? RETIRE_RECHECK_MS : remaining,
1357
+ animation.playState === 'paused'
1358
+ ? RETIRE_RECHECK_MS
1359
+ : Math.max(remaining, END_RECHECK_MS),
1086
1360
  ),
1087
1361
  );
1088
1362
  return;
1089
1363
  }
1090
1364
  running.delete(channel);
1365
+ // A pseudo-element holds its resting value, unless the stylesheet
1366
+ // takes it back now (a borrowed dip that has ended).
1367
+ const handsBack =
1368
+ channel === 'opacity' &&
1369
+ borrowedOpacity != null &&
1370
+ ![...landings].some(landing => landing.fadeIn?.isBorrowed === true);
1371
+ if (pseudoElement != null && !handsBack) {
1372
+ hold(channel, now());
1373
+ } else {
1374
+ // The end goes inline in the task that cancels the animation. Whether
1375
+ // an identity end may leave the element is judged after the cancel:
1376
+ // until then the end-state tail still holds the end, so the computed
1377
+ // style would hide a stylesheet value (an opacity 0) under it.
1378
+ writeInline(channel, finalValue, false);
1379
+ }
1380
+ // A call from rest the browser never started (finished from outside
1381
+ // before its first frame, a sampler's finish()): read its start from the
1382
+ // animation before the cancel takes it, and with nothing left to wait
1383
+ // on the call keeps its own clock, so its landing is still armed.
1384
+ const waiting = [...pendingGroups].filter(group =>
1385
+ group.animations.includes(animation),
1386
+ );
1387
+ for (const group of waiting) {
1388
+ syncGroup(group);
1389
+ }
1091
1390
  animation.cancel();
1391
+ for (const group of waiting) {
1392
+ resolveGroup(group, group.provisional);
1393
+ }
1092
1394
  releaseIdentity(channel);
1093
1395
  flushReleases();
1094
1396
  };
@@ -1102,22 +1404,36 @@ export function createAnimator(
1102
1404
  target == null
1103
1405
  ? NaN
1104
1406
  : Number.parseFloat(
1105
- view?.getComputedStyle(target).getPropertyValue('opacity') ?? '',
1407
+ view
1408
+ ?.getComputedStyle(target, pseudoElement ?? null)
1409
+ .getPropertyValue('opacity') ?? '',
1106
1410
  );
1107
1411
  return Number.isFinite(value) ? Math.min(1, Math.max(0, value)) : 1;
1108
1412
  };
1109
1413
 
1110
1414
  /**
1111
1415
  * Whether the animator holds an opacity of its own on the element: an inline
1112
- * value it wrote (a `set` over a stylesheet that hides or dims it). A dip
1113
- * returns to that value.
1416
+ * value it wrote, or a pseudo-element's holding animation (a `set` over a
1417
+ * stylesheet that hides or dims it). A dip returns to that value.
1114
1418
  */
1115
1419
  const writesOwnOpacity = (): boolean =>
1116
- (target?.style.getPropertyValue('opacity') ?? '') !== '';
1420
+ pseudoElement == null
1421
+ ? (target?.style.getPropertyValue('opacity') ?? '') !== ''
1422
+ : running.has('opacity');
1117
1423
 
1118
- /** Gives the element's opacity back to its stylesheet: its inline value goes. */
1424
+ /**
1425
+ * Gives the element's opacity back to its stylesheet: an element's inline
1426
+ * value goes; a pseudo-element, which has no inline style, loses the
1427
+ * animation holding its value.
1428
+ */
1119
1429
  const releaseOwnOpacity = () => {
1120
- target?.style.removeProperty('opacity');
1430
+ if (pseudoElement == null) {
1431
+ target?.style.removeProperty('opacity');
1432
+ return;
1433
+ }
1434
+ const held = running.get('opacity');
1435
+ running.delete('opacity');
1436
+ held?.cancel();
1121
1437
  };
1122
1438
 
1123
1439
  /**
@@ -1202,6 +1518,9 @@ export function createAnimator(
1202
1518
  releaseOwnOpacity();
1203
1519
  return;
1204
1520
  }
1521
+ if (pseudoElement != null) {
1522
+ return;
1523
+ }
1205
1524
  if (target.style.getPropertyValue(channel) !== IDENTITY_TEXT[channel]) {
1206
1525
  return;
1207
1526
  }
@@ -1265,9 +1584,17 @@ export function createAnimator(
1265
1584
 
1266
1585
  // -- promotion -------------------------------------------------------------
1267
1586
 
1268
- /** Writes the promoted channels as will-change. */
1587
+ /** Writes the promoted channels as will-change (or the pseudo's property). */
1269
1588
  const writePromotion = (element: HTMLElement) => {
1270
1589
  const list = [...promoted].join(', ');
1590
+ if (promotionProperty != null) {
1591
+ if (list === '') {
1592
+ element.style.removeProperty(promotionProperty);
1593
+ } else {
1594
+ element.style.setProperty(promotionProperty, list);
1595
+ }
1596
+ return;
1597
+ }
1271
1598
  if (list === '') {
1272
1599
  element.style.willChange = ownWillChange ?? '';
1273
1600
  ownWillChange = null;
@@ -1276,13 +1603,12 @@ export function createAnimator(
1276
1603
  if (ownWillChange == null) {
1277
1604
  ownWillChange = element.style.willChange;
1278
1605
  // Without an inline value, the stylesheet's reasons stay alongside the
1279
- // promotion's (read once, as the promotion starts).
1280
- sheetWillChange =
1281
- ownWillChange === ''
1282
- ? (element.ownerDocument.defaultView
1283
- ?.getComputedStyle(element)
1284
- .getPropertyValue('will-change') ?? '')
1285
- : '';
1606
+ // promotion's. They were read in the task after the element was
1607
+ // attached; a promotion that comes first (an element attached in this
1608
+ // task that moves at once) reads them now.
1609
+ if (ownWillChange === '' && !sheetWillChangeRead) {
1610
+ readSheetWillChange(element);
1611
+ }
1286
1612
  }
1287
1613
  const base = ownWillChange !== '' ? ownWillChange : sheetWillChange;
1288
1614
  const own = base === 'auto' ? '' : base;
@@ -1293,8 +1619,50 @@ export function createAnimator(
1293
1619
  element.style.willChange = [...reasons, ...promoted].join(', ');
1294
1620
  };
1295
1621
 
1622
+ /** Reads the element's own will-change while no promotion of ours is written. */
1623
+ const readSheetWillChange = (element: HTMLElement) => {
1624
+ sheetWillChange =
1625
+ element.ownerDocument.defaultView
1626
+ ?.getComputedStyle(element)
1627
+ .getPropertyValue('will-change') ?? '';
1628
+ sheetWillChangeRead = true;
1629
+ };
1630
+
1296
1631
  /**
1297
- * Gives the element a compositing layer for
1632
+ * Reads sheetWillChange in a task of its own, so a later promotion reads no
1633
+ * style in its own task. Skipped while a promotion of ours is written,
1634
+ * which the read would see (demote asks again), and for a node out of the
1635
+ * document. A pseudo-element's promotion is its own property, with
1636
+ * nothing to read.
1637
+ */
1638
+ const readSheetWillChangeLater = () => {
1639
+ cancelSheetWillChangeRead();
1640
+ sheetWillChangeRead = false;
1641
+ if (target == null || promotionProperty != null) {
1642
+ return;
1643
+ }
1644
+ const element = target;
1645
+ sheetReadTimer = setTimeout(() => {
1646
+ sheetReadTimer = null;
1647
+ // A node out of the document has no style to read, and reading one
1648
+ // still costs a style pass: a shared animator (animatorFor) is never
1649
+ // detached, so its node can leave with this read waiting. Skipped, the
1650
+ // read waits for a promotion that needs it.
1651
+ if (target === element && promoted.size === 0 && element.isConnected) {
1652
+ readSheetWillChange(element);
1653
+ }
1654
+ }, 0);
1655
+ };
1656
+
1657
+ const cancelSheetWillChangeRead = () => {
1658
+ if (sheetReadTimer != null) {
1659
+ clearTimeout(sheetReadTimer);
1660
+ sheetReadTimer = null;
1661
+ }
1662
+ };
1663
+
1664
+ /**
1665
+ * Gives the element (or its pseudo-element) a compositing layer for
1298
1666
  * `channel` from the task that starts the motion: Mobile Safari runs an
1299
1667
  * animation whose start time is set from script on its compositor at its
1300
1668
  * first commit only if the element already has a layer.
@@ -1347,6 +1715,8 @@ export function createAnimator(
1347
1715
  promoted.clear();
1348
1716
  if (target != null) {
1349
1717
  writePromotion(target);
1718
+ // Its stylesheet may have changed its will-change since.
1719
+ readSheetWillChangeLater();
1350
1720
  }
1351
1721
  };
1352
1722
 
@@ -1362,6 +1732,7 @@ export function createAnimator(
1362
1732
  time: number,
1363
1733
  properties: Iterable<MotionProperty>,
1364
1734
  at: number | undefined,
1735
+ start?: AnimateOptions['start'],
1365
1736
  ): StartGroup | null => {
1366
1737
  if (target == null || typeof target.animate !== 'function') {
1367
1738
  return null;
@@ -1389,7 +1760,11 @@ export function createAnimator(
1389
1760
  }
1390
1761
  return null;
1391
1762
  }
1392
- for (const channel of channels) {
1763
+ // A call that continues motion starts now unless it asks for the
1764
+ // browser's start (`commit`). `presented` asks only for a call from rest:
1765
+ // an element still moving is not at rest, so a retarget starts now, from
1766
+ // the value and velocity on screen (spec:AST-094 FR6).
1767
+ for (const channel of start === 'commit' ? [] : channels) {
1393
1768
  for (const property of CHANNELS[channel]) {
1394
1769
  const segment = segments.get(property);
1395
1770
  if (
@@ -1407,6 +1782,7 @@ export function createAnimator(
1407
1782
  });
1408
1783
  return {
1409
1784
  provisional: time,
1785
+ fresh: false,
1410
1786
  segments: [],
1411
1787
  animations: [],
1412
1788
  channels: new Set(),
@@ -1422,6 +1798,7 @@ export function createAnimator(
1422
1798
  owner: HandleState,
1423
1799
  changed: MotionProperty[],
1424
1800
  time: number,
1801
+ presented = false,
1425
1802
  ) => {
1426
1803
  if (group != null) {
1427
1804
  for (const property of changed) {
@@ -1432,6 +1809,99 @@ export function createAnimator(
1432
1809
  }
1433
1810
  }
1434
1811
  }
1812
+ if (presented && group != null && requestFrame != null) {
1813
+ // At rest until then: the animations, and the layer they promote, come
1814
+ // two frames later. Promoting now, a layer at rest for two frames, left
1815
+ // a stale paint of the element's rest in WebKit on iOS 26.2 (a title in
1816
+ // a scroller inside a clipped card) after the motion ended.
1817
+ // Each call waits its own two frames: one queued after another change
1818
+ // flushed the queue, or after an earlier call's first frame, still
1819
+ // waits its two.
1820
+ const call = {group, changed};
1821
+ deferredCalls.push(call);
1822
+ requestFrame(() => requestFrame(() => flushDeferredThrough(call)));
1823
+ return;
1824
+ }
1825
+ startCall(group, changed, time);
1826
+ };
1827
+
1828
+ /** Calls with `start: 'presented'` waiting for their second frame. */
1829
+ const deferredCalls: {group: StartGroup; changed: MotionProperty[]}[] = [];
1830
+
1831
+ /** Creates the animations of the given waiting calls, in call order. */
1832
+ const startDeferred = (
1833
+ calls: {group: StartGroup; changed: MotionProperty[]}[],
1834
+ ) => {
1835
+ for (const {group, changed} of calls) {
1836
+ // Not a channel that holds the curve of a later call still waiting: a
1837
+ // later presented call that took a property over starts that channel
1838
+ // with its own two frames. Every other property starts here, whatever
1839
+ // its segment's group: a value Reduce Motion writes at once, or lands
1840
+ // under a dip, has no curve of this call's.
1841
+ const own: MotionProperty[] = [];
1842
+ let handedTo: StartGroup | null = null;
1843
+ for (const property of changed) {
1844
+ const holder = CHANNELS[CHANNEL_OF[property]]
1845
+ .map(other => segments.get(other)?.group)
1846
+ .find(
1847
+ waiting =>
1848
+ waiting != null &&
1849
+ waiting !== group &&
1850
+ deferredCalls.some(call => call.group === waiting),
1851
+ );
1852
+ if (holder == null) {
1853
+ own.push(property);
1854
+ continue;
1855
+ }
1856
+ // A curve of this call's in that channel never ran: the element held
1857
+ // it at its start. It starts with the later call, which creates the
1858
+ // channel, dated from that call's start, so the model reads what the
1859
+ // screen shows.
1860
+ const segment = segments.get(property);
1861
+ if (segment != null && segment.group === group) {
1862
+ segment.start += holder.provisional - group.provisional;
1863
+ segment.group = holder;
1864
+ holder.segments.push(segment);
1865
+ group.segments.splice(group.segments.indexOf(segment), 1);
1866
+ handedTo = holder;
1867
+ }
1868
+ }
1869
+ if (own.length === 0 && handedTo != null) {
1870
+ // Everything this call still plays starts with the later call.
1871
+ const adopter = handedTo;
1872
+ group.adoptedBy = adopter;
1873
+ void adopter.started.then(start => resolveGroup(group, start));
1874
+ continue;
1875
+ }
1876
+ // From the call's own time: the curve starts at the browser's commit.
1877
+ startCall(group, own, group.provisional);
1878
+ }
1879
+ };
1880
+
1881
+ /** Creates the animations of every waiting call, in call order. */
1882
+ const flushDeferred = () => {
1883
+ startDeferred(deferredCalls.splice(0));
1884
+ };
1885
+
1886
+ /**
1887
+ * A call's second frame: it starts, with every call queued before it (in
1888
+ * call order), unless another change created it already.
1889
+ */
1890
+ const flushDeferredThrough = (call: {
1891
+ group: StartGroup;
1892
+ changed: MotionProperty[];
1893
+ }) => {
1894
+ const index = deferredCalls.indexOf(call);
1895
+ if (index >= 0) {
1896
+ startDeferred(deferredCalls.splice(0, index + 1));
1897
+ }
1898
+ };
1899
+
1900
+ const startCall = (
1901
+ group: StartGroup | null,
1902
+ changed: MotionProperty[],
1903
+ time: number,
1904
+ ) => {
1435
1905
  callGroup = group;
1436
1906
  try {
1437
1907
  commit(changed, time);
@@ -1446,6 +1916,14 @@ export function createAnimator(
1446
1916
  return;
1447
1917
  }
1448
1918
  pendingGroups.add(group);
1919
+ group.fresh = true;
1920
+ // The task that creates the animations, not the call's: a presented
1921
+ // call's is its second frame's callback, wherever in its frame the call
1922
+ // was made.
1923
+ group.task = markTask(now(), now);
1924
+ queueMicrotask(() => {
1925
+ group.fresh = false;
1926
+ });
1449
1927
  for (const animation of group.animations) {
1450
1928
  // A cancel before the first frame rejects each one's ready promise.
1451
1929
  (animation as Partial<Animation>).ready?.catch(() => {});
@@ -1459,7 +1937,10 @@ export function createAnimator(
1459
1937
  // or when its compositor starts them (Chromium). Read it in that first
1460
1938
  // frame, ahead of anything that might pause or seek the animations, and
1461
1939
  // when `ready` settles.
1462
- requestFrame?.(() => syncGroup(group));
1940
+ requestFrame?.(() => {
1941
+ syncGroup(group);
1942
+ group.framed = true;
1943
+ });
1463
1944
  ready.then(
1464
1945
  () => syncGroup(group),
1465
1946
  () => settleCancelled(group),
@@ -1516,7 +1997,10 @@ export function createAnimator(
1516
1997
  }
1517
1998
  for (const animation of group.animations) {
1518
1999
  if (animation.startTime != null) {
1519
- resolveGroup(group, Number(animation.startTime));
2000
+ resolveGroup(
2001
+ group,
2002
+ startAfterBlock(group, Number(animation.startTime)),
2003
+ );
1520
2004
  return;
1521
2005
  }
1522
2006
  }
@@ -1549,10 +2033,16 @@ export function createAnimator(
1549
2033
  }
1550
2034
  };
1551
2035
 
1552
- /** Reads the start of every call whose first frame has been committed. */
2036
+ /**
2037
+ * Reads the start of every call whose first frame may have been committed:
2038
+ * not those created in the running task, whose start the browser cannot
2039
+ * have set (reading it there can cost a style update per call).
2040
+ */
1553
2041
  const syncPending = () => {
1554
2042
  for (const group of pendingGroups) {
1555
- syncGroup(group);
2043
+ if (!group.fresh) {
2044
+ syncGroup(group);
2045
+ }
1556
2046
  }
1557
2047
  syncFinished();
1558
2048
  };
@@ -1580,6 +2070,55 @@ export function createAnimator(
1580
2070
  }
1581
2071
  };
1582
2072
 
2073
+ /**
2074
+ * The start of a call from rest, on the frame that commits it. Chromium,
2075
+ * like Core Animation, starts a pending animation when it commits it, so a
2076
+ * main-thread block later in the call's task delays the motion; WebKit
2077
+ * dates it at its last frame time before that task, so the first frame
2078
+ * after the block would show it skipped into its curve. When the task ran
2079
+ * on more than LATE_START_MS past its first call, a start the browser put
2080
+ * by the task's first animations (a presented call's second frame, not the
2081
+ * call) and more than LATE_START_MS before the call's first read (its
2082
+ * `ready`, once the task has ended, or the first frame after it) moves to
2083
+ * that read, with every animation of the call, and every call of the task
2084
+ * moves to the same read. A shorter task, or a read other tasks delay,
2085
+ * keeps the browser's start.
2086
+ */
2087
+ const startAfterBlock = (group: StartGroup, start: number): number => {
2088
+ const timeline =
2089
+ typeof document === 'undefined'
2090
+ ? null
2091
+ : (document.timeline?.currentTime as number | null | undefined);
2092
+ // A start well after the animations were created is the browser's
2093
+ // commit of them.
2094
+ if (
2095
+ timeline == null ||
2096
+ group.framed === true ||
2097
+ start > (group.task?.first ?? group.provisional) + LATE_START_MS
2098
+ ) {
2099
+ return start;
2100
+ }
2101
+ const {task} = group;
2102
+ // A read in the task's first microtasks comes after its end too.
2103
+ const ended = task?.ended ?? now();
2104
+ if (task == null || ended - task.first <= LATE_START_MS) {
2105
+ return start;
2106
+ }
2107
+ // Read once the task has ended (its `ready`) or in the first frame after
2108
+ // it, both after the block; the task's other calls take the same read.
2109
+ const at = task.at ?? Math.max(now(), timeline);
2110
+ if (at - start <= LATE_START_MS) {
2111
+ return start;
2112
+ }
2113
+ task.at = at;
2114
+ for (const animation of group.animations) {
2115
+ if (animation.playState !== 'idle') {
2116
+ animation.startTime = at;
2117
+ }
2118
+ }
2119
+ return at;
2120
+ };
2121
+
1583
2122
  /** Moves a call from rest onto the time the browser started it. */
1584
2123
  const resolveGroup = (group: StartGroup, start: number) => {
1585
2124
  if (group.resolved) {
@@ -1621,10 +2160,7 @@ export function createAnimator(
1621
2160
  .filter(segment => segment.owner === owner)
1622
2161
  .map(segment => segment.start + segment.duration);
1623
2162
  owner.timer = setTimeout(
1624
- () => {
1625
- owner.timer = null;
1626
- settle(owner, true);
1627
- },
2163
+ () => settleAtEnd(owner),
1628
2164
  Math.max(0, Math.max(start, ...ends) - now()),
1629
2165
  );
1630
2166
  }
@@ -1662,12 +2198,48 @@ export function createAnimator(
1662
2198
  owner.resolve(finished);
1663
2199
  };
1664
2200
 
2201
+ /**
2202
+ * A handle whose curves have reached their end on the wall clock finishes,
2203
+ * unless a sampler holds one of its animations (paused, or sought back):
2204
+ * then it waits on that animation's own time, as retiring does
2205
+ * (scheduleRetire), so `finished` never resolves under motion still on
2206
+ * screen.
2207
+ */
2208
+ const settleAtEnd = (owner: HandleState) => {
2209
+ owner.timer = null;
2210
+ let wait = 0;
2211
+ for (const [channel, animation] of running) {
2212
+ if (
2213
+ !CHANNELS[channel].some(
2214
+ property => segments.get(property)?.owner === owner,
2215
+ )
2216
+ ) {
2217
+ continue;
2218
+ }
2219
+ const remaining = remainingCurve(animation);
2220
+ if (remaining != null && remaining > 0) {
2221
+ wait = Math.max(
2222
+ wait,
2223
+ animation.playState === 'paused'
2224
+ ? RETIRE_RECHECK_MS
2225
+ : Math.max(remaining, END_RECHECK_MS),
2226
+ );
2227
+ }
2228
+ }
2229
+ if (wait > 0) {
2230
+ owner.timer = setTimeout(() => settleAtEnd(owner), wait);
2231
+ return;
2232
+ }
2233
+ settle(owner, true);
2234
+ };
2235
+
1665
2236
  const makeHandle = (
1666
2237
  owner: HandleState,
1667
2238
  properties: MotionProperty[],
1668
2239
  finished: Promise<boolean>,
1669
2240
  time: number,
1670
2241
  group: StartGroup | null = null,
2242
+ settlesWithLanding = false,
1671
2243
  ): MotionHandle => {
1672
2244
  const ends = properties.map(p => {
1673
2245
  const segment = segments.get(p);
@@ -1676,23 +2248,45 @@ export function createAnimator(
1676
2248
  : time;
1677
2249
  });
1678
2250
  const end = Math.max(time, ...ends);
1679
- if (properties.length === 0 || end <= time) {
2251
+ if (settlesWithLanding) {
2252
+ // The landing it joined settles it.
2253
+ } else if (properties.length === 0 || end <= time) {
1680
2254
  settle(owner, true);
1681
2255
  } else {
1682
2256
  // Interruptions settle false as they happen (interrupt); reaching the
1683
2257
  // end untouched is completion.
1684
2258
  owner.timer = setTimeout(
1685
- () => {
1686
- owner.timer = null;
1687
- settle(owner, true);
1688
- },
2259
+ () => settleAtEnd(owner),
1689
2260
  Math.max(0, end - now()),
1690
2261
  );
1691
2262
  }
2263
+ // The call's own curves, as it started them.
2264
+ const curves = new Map<MotionProperty, Segment>();
2265
+ for (const property of properties) {
2266
+ const segment = segments.get(property);
2267
+ if (segment != null && segment.owner === owner) {
2268
+ curves.set(property, segment);
2269
+ }
2270
+ }
1692
2271
  const handle: MotionHandle = {
1693
2272
  properties,
1694
2273
  finished,
1695
2274
  started: group?.started ?? Promise.resolve(time),
2275
+ curve: property => {
2276
+ const segment = curves.get(property === 'scale' ? 'scaleX' : property);
2277
+ if (segment == null) {
2278
+ return null;
2279
+ }
2280
+ return {
2281
+ duration: segment.duration / 1000,
2282
+ at: t =>
2283
+ t * 1000 >= segment.duration
2284
+ ? segment.target
2285
+ : segment.at(Math.max(0, t * 1000)),
2286
+ velocity: t =>
2287
+ t * 1000 >= segment.duration ? 0 : segment.speed(t * 1000),
2288
+ };
2289
+ },
1696
2290
  value: (property, at = now()) => {
1697
2291
  syncPending();
1698
2292
  return valueAt(property, at);
@@ -1751,7 +2345,9 @@ export function createAnimator(
1751
2345
  if (from === to && velocity === 0) {
1752
2346
  return null;
1753
2347
  }
1754
- const curve = solveSpring(toSpring(spring), {from, to, velocity});
2348
+ // The motion role it plays: its table value (DEC-15).
2349
+ const resolved = resolveMotion(target, spring);
2350
+ const curve = solveSpring(toSpring(resolved), {from, to, velocity});
1755
2351
  const duration = Math.min(
1756
2352
  MAX_DURATION_MS,
1757
2353
  curve.settleTime(SETTLE_THRESHOLD[property]) * 1000,
@@ -1764,7 +2360,81 @@ export function createAnimator(
1764
2360
  speed: t => curve.velocity(t / 1000),
1765
2361
  jumps: [],
1766
2362
  owner,
1767
- spring,
2363
+ spring: resolved,
2364
+ };
2365
+ };
2366
+
2367
+ /** The retarget of `additive`: the old curve plus a spring of the difference. */
2368
+ const additiveSegment = (
2369
+ owner: HandleState,
2370
+ property: MotionProperty,
2371
+ start: number,
2372
+ to: number,
2373
+ spring: SpringDescription,
2374
+ old: Segment,
2375
+ ): Segment => {
2376
+ const oldEnd = old.start + old.duration;
2377
+ const resolved = resolveMotion(target, spring);
2378
+ const delta = solveSpring(toSpring(resolved), {
2379
+ from: 0,
2380
+ to: to - old.target,
2381
+ velocity: 0,
2382
+ });
2383
+ const deltaMs = Math.min(
2384
+ MAX_DURATION_MS,
2385
+ delta.settleTime(SETTLE_THRESHOLD[property]) * 1000,
2386
+ );
2387
+ const ownAt = (t: number) =>
2388
+ t >= deltaMs ? to - old.target : delta.value(t / 1000);
2389
+ const oldAt = (time: number) =>
2390
+ time >= oldEnd ? old.target : old.at(Math.max(0, time - old.start));
2391
+ return {
2392
+ start,
2393
+ duration: Math.min(MAX_DURATION_MS, Math.max(oldEnd - start, deltaMs)),
2394
+ target: to,
2395
+ at: t => oldAt(start + t) + ownAt(t),
2396
+ speed: t =>
2397
+ (start + t >= oldEnd ? 0 : old.speed(start + t - old.start)) +
2398
+ (t >= deltaMs ? 0 : delta.velocity(t / 1000)),
2399
+ jumps: old.jumps
2400
+ .map(jump => old.start + jump - start)
2401
+ .filter(jump => jump > 0),
2402
+ owner,
2403
+ spring: resolved,
2404
+ };
2405
+ };
2406
+
2407
+ /**
2408
+ * `additive` for a played curve: the old curve plus the new curve's shape,
2409
+ * scaled to the difference between the two targets.
2410
+ */
2411
+ const additiveCurveSegment = (
2412
+ owner: HandleState,
2413
+ start: number,
2414
+ curve: MotionCurve,
2415
+ old: Segment,
2416
+ ): Segment => {
2417
+ const from = curve.at(0);
2418
+ const to = curve.at(curve.duration);
2419
+ const scale = (to - old.target) / (to - from);
2420
+ const ms = Math.min(MAX_DURATION_MS, curve.duration * 1000);
2421
+ const oldEnd = old.start + old.duration;
2422
+ const oldAt = (time: number) =>
2423
+ time >= oldEnd ? old.target : old.at(Math.max(0, time - old.start));
2424
+ return {
2425
+ start,
2426
+ duration: Math.min(MAX_DURATION_MS, Math.max(oldEnd - start, ms)),
2427
+ target: to,
2428
+ at: t =>
2429
+ oldAt(start + t) +
2430
+ (t >= ms ? to - old.target : (curve.at(t / 1000) - from) * scale),
2431
+ speed: t =>
2432
+ (start + t >= oldEnd ? 0 : old.speed(start + t - old.start)) +
2433
+ (t >= ms ? 0 : curve.velocity(t / 1000) * scale),
2434
+ jumps: old.jumps
2435
+ .map(jump => old.start + jump - start)
2436
+ .filter(jump => jump > 0),
2437
+ owner,
1768
2438
  };
1769
2439
  };
1770
2440
 
@@ -1774,7 +2444,10 @@ export function createAnimator(
1774
2444
  stops: ReadonlyArray<{at: number; value: number}>,
1775
2445
  jumps: ReadonlyArray<number> = [],
1776
2446
  ): Segment => {
1777
- const ease = cubicBezier(reducedMotionCrossFade.curve);
2447
+ registerReducedMotionCrossFade();
2448
+ const ease = cubicBezier(
2449
+ resolveMotion(target, reducedMotionCrossFade.curve),
2450
+ );
1778
2451
  const duration = stops[stops.length - 1].at;
1779
2452
  const at = (t: number) => {
1780
2453
  for (let i = 0; i + 1 < stops.length; i++) {
@@ -1897,6 +2570,27 @@ export function createAnimator(
1897
2570
  return {carried, owners};
1898
2571
  };
1899
2572
 
2573
+ /**
2574
+ * A call joins the newest waiting dip: it takes the landing over and
2575
+ * settles when the dip ends, and the call it replaces lands with it. Each
2576
+ * value keeps the call whose move it is.
2577
+ */
2578
+ const joinWaitingDip = (owner: HandleState) => {
2579
+ const dip = [...landings].reverse().find(landing => landing.fadeIn != null);
2580
+ if (dip == null) {
2581
+ settle(owner, true);
2582
+ return;
2583
+ }
2584
+ for (const property of dip.values.keys()) {
2585
+ if (!dip.owners.has(property)) {
2586
+ dip.owners.set(property, dip.owner);
2587
+ }
2588
+ }
2589
+ dip.carried.push(dip.owner);
2590
+ carriedOwners.add(dip.owner);
2591
+ dip.owner = owner;
2592
+ };
2593
+
1900
2594
  /** Where opacity is heading: past a waiting landing's fade back in. */
1901
2595
  const opacityHeading = (): number => {
1902
2596
  let to = finalValue('opacity');
@@ -1959,8 +2653,9 @@ export function createAnimator(
1959
2653
  * never an animation (DR2: opacity only), so it is never shown in the wrong
1960
2654
  * place. In a dip the fade back in starts from here and takes what is left
1961
2655
  * of the cross-fade, so the dip ends when it was due even when a busy main
1962
- * thread runs this timer late; past the whole fade back in (over 100 ms
1963
- * late) the element appears at once where it landed.
2656
+ * thread runs this timer late; past the whole fade back in (100 ms late or
2657
+ * more) the element appears at once where it landed, with no animation,
2658
+ * and the call settles then.
1964
2659
  */
1965
2660
  const land = (landing: Landing) => {
1966
2661
  landings.delete(landing);
@@ -1973,13 +2668,16 @@ export function createAnimator(
1973
2668
  changed.push(property);
1974
2669
  }
1975
2670
  let end = time;
1976
- if (landing.fadeIn != null) {
1977
- // The fade back in takes what is left of the cross-fade: a timer that
1978
- // a busy main thread runs late shortens it, so the dip still ends
1979
- // when it was due (design:reduced-motion DR2, 200 ms or less), and the
1980
- // element is never shown before it lands.
1981
- const late = landing.due == null ? 0 : Math.max(0, time - landing.due);
1982
- const ms = Math.max(1, landing.fadeIn.ms - late);
2671
+ // The fade back in takes what is left of the cross-fade: a timer that a
2672
+ // busy main thread runs late shortens it, so the dip still ends when it
2673
+ // was due (design:reduced-motion DR2, 200 ms or less), and the element is
2674
+ // never shown before it lands. Past the whole fade back in nothing is
2675
+ // left: the element appears at once, a plain write with no fade for the
2676
+ // browser to start a frame later, so the call settles showing it.
2677
+ const late = landing.due == null ? 0 : Math.max(0, time - landing.due);
2678
+ const appears = landing.fadeIn != null && late >= landing.fadeIn.ms;
2679
+ if (landing.fadeIn != null && !appears) {
2680
+ const ms = landing.fadeIn.ms - late;
1983
2681
  segments.set(
1984
2682
  'opacity',
1985
2683
  fadeSegment(landing.owner, time, [
@@ -1989,6 +2687,13 @@ export function createAnimator(
1989
2687
  );
1990
2688
  changed.push('opacity');
1991
2689
  end = time + ms;
2690
+ } else if (landing.fadeIn != null) {
2691
+ segments.delete('opacity');
2692
+ resting.opacity =
2693
+ landing.fadeIn.isBorrowed === true
2694
+ ? IDENTITY.opacity
2695
+ : landing.fadeIn.to;
2696
+ changed.push('opacity');
1992
2697
  } else if (landing.restore != null) {
1993
2698
  segments.delete('opacity');
1994
2699
  resting.opacity =
@@ -1996,11 +2701,13 @@ export function createAnimator(
1996
2701
  changed.push('opacity');
1997
2702
  }
1998
2703
  commit(changed, time);
1999
- if (landing.restoreIsBorrowed === true) {
2704
+ if (
2705
+ landing.restoreIsBorrowed === true ||
2706
+ (appears && landing.fadeIn?.isBorrowed === true)
2707
+ ) {
2000
2708
  // The stylesheet owns its opacity again.
2001
2709
  releaseOwnOpacity();
2002
- }
2003
- if (landing.fadeIn?.isBorrowed === true) {
2710
+ } else if (landing.fadeIn?.isBorrowed === true) {
2004
2711
  // The fade back in returns to the stylesheet's opacity: it owns it
2005
2712
  // again once the fade ends (releaseIdentity).
2006
2713
  borrowedOpacity = landing.fadeIn.to;
@@ -2020,10 +2727,7 @@ export function createAnimator(
2020
2727
  settle(owner, true);
2021
2728
  } else {
2022
2729
  owner.timer = setTimeout(
2023
- () => {
2024
- owner.timer = null;
2025
- settle(owner, true);
2026
- },
2730
+ () => settleAtEnd(owner),
2027
2731
  Math.max(0, end - now()),
2028
2732
  );
2029
2733
  }
@@ -2113,6 +2817,9 @@ export function createAnimator(
2113
2817
  get hasPendingLanding() {
2114
2818
  return landings.size > 0;
2115
2819
  },
2820
+ get hasWaitingDip() {
2821
+ return [...landings].some(landing => landing.fadeIn != null);
2822
+ },
2116
2823
  };
2117
2824
 
2118
2825
  /**
@@ -2152,6 +2859,7 @@ export function createAnimator(
2152
2859
  holds: plan.holds,
2153
2860
  landing: plan.landing,
2154
2861
  borrowed: plan.borrowed,
2862
+ joins: plan.joins,
2155
2863
  };
2156
2864
  };
2157
2865
 
@@ -2173,6 +2881,7 @@ export function createAnimator(
2173
2881
  if (next === target) {
2174
2882
  return;
2175
2883
  }
2884
+ flushDeferred();
2176
2885
  if (next == null) {
2177
2886
  // Unmount, unless a node replaces this one in the same task (React's
2178
2887
  // replacement order: attach(null), then the new node): nothing is
@@ -2208,6 +2917,9 @@ export function createAnimator(
2208
2917
  }
2209
2918
  retireTimers.clear();
2210
2919
  demote();
2920
+ // demote() asks for a fresh will-change read of the node it
2921
+ // demotes; a detached node gets none.
2922
+ cancelSheetWillChangeRead();
2211
2923
  });
2212
2924
  lastDetached = null;
2213
2925
  const time = now();
@@ -2226,9 +2938,25 @@ export function createAnimator(
2226
2938
  }
2227
2939
  // After the landing's commit, which can promote the element again.
2228
2940
  demote();
2941
+ // A pseudo-element holds an identity with a static animation, which the
2942
+ // cancel below drops: note the channels to hold again on the next node
2943
+ // (never a borrowed opacity, which is the stylesheet's).
2229
2944
  const isOpacityBorrowed =
2230
2945
  borrowedOpacity != null ||
2231
2946
  [...landings].some(landing => landing.restoreIsBorrowed === true);
2947
+ const pseudoHeld =
2948
+ pseudoElement == null || target == null
2949
+ ? null
2950
+ : new Set(
2951
+ (Object.keys(CHANNELS) as Channel[]).filter(
2952
+ channel =>
2953
+ running.has(channel) &&
2954
+ !(channel === 'opacity' && isOpacityBorrowed) &&
2955
+ CHANNELS[channel].every(
2956
+ p => !segments.has(p) && resting[p] === IDENTITY[p],
2957
+ ),
2958
+ ),
2959
+ );
2232
2960
  for (const animation of running.values()) {
2233
2961
  animation.cancel();
2234
2962
  }
@@ -2248,16 +2976,21 @@ export function createAnimator(
2248
2976
  // differs, kept through a detach for the node that comes next.
2249
2977
  if (target != null) {
2250
2978
  const outgoing = target;
2251
- heldIdentity = new Set(
2252
- (Object.keys(CHANNELS) as Channel[]).filter(
2253
- channel =>
2254
- outgoing.style.getPropertyValue(channel) ===
2255
- IDENTITY_TEXT[channel],
2256
- ),
2257
- );
2979
+ heldIdentity =
2980
+ pseudoHeld ??
2981
+ new Set(
2982
+ (Object.keys(CHANNELS) as Channel[]).filter(
2983
+ channel =>
2984
+ outgoing.style.getPropertyValue(channel) ===
2985
+ IDENTITY_TEXT[channel],
2986
+ ),
2987
+ );
2258
2988
  }
2259
2989
  const held = heldIdentity;
2260
2990
  target = next;
2991
+ // A new node: its own will-change is read again.
2992
+ cancelSheetWillChangeRead();
2993
+ sheetWillChangeRead = false;
2261
2994
  if (target == null) {
2262
2995
  return;
2263
2996
  }
@@ -2284,11 +3017,17 @@ export function createAnimator(
2284
3017
  } else if (held.has(channel)) {
2285
3018
  // An identity the animator held inline over a stylesheet that
2286
3019
  // differs goes onto the new node too (writeInline keeps it only
2287
- // where the new node's stylesheet still differs).
2288
- writeInline(channel, property => resting[property]);
3020
+ // where the new node's stylesheet still differs); a pseudo-element's
3021
+ // is held again.
3022
+ if (pseudoElement != null) {
3023
+ hold(channel, time);
3024
+ } else {
3025
+ writeInline(channel, property => resting[property]);
3026
+ }
2289
3027
  }
2290
3028
  }
2291
3029
  flushReleases();
3030
+ readSheetWillChangeLater();
2292
3031
  },
2293
3032
 
2294
3033
  get(property, time = now()) {
@@ -2301,8 +3040,9 @@ export function createAnimator(
2301
3040
  return velocityAt(property === 'scale' ? 'scaleX' : property, time);
2302
3041
  },
2303
3042
 
2304
- set(values) {
3043
+ set(values, setOptions = {}) {
2305
3044
  syncPending();
3045
+ flushDeferred();
2306
3046
  const time = now();
2307
3047
  const next = expand(values);
2308
3048
  for (const [property, value] of Object.entries(next) as [
@@ -2314,14 +3054,19 @@ export function createAnimator(
2314
3054
  resting[property] = value;
2315
3055
  }
2316
3056
  // Direct manipulation: the layer makes each write a composite only.
2317
- for (const property of Object.keys(next) as MotionProperty[]) {
2318
- promote(CHANNEL_OF[property]);
3057
+ if (setOptions.promote !== false) {
3058
+ for (const property of Object.keys(next) as MotionProperty[]) {
3059
+ promote(CHANNEL_OF[property]);
3060
+ }
2319
3061
  }
2320
3062
  commit(Object.keys(next) as MotionProperty[], time);
2321
3063
  },
2322
3064
 
2323
3065
  animate(to, transition, animateOptions = {}) {
2324
3066
  syncPending();
3067
+ if (animateOptions.start !== 'presented') {
3068
+ flushDeferred();
3069
+ }
2325
3070
  const time = animateOptions.at ?? now();
2326
3071
  const targets = expand(to);
2327
3072
  const velocities = expand(transition.velocity ?? {});
@@ -2343,6 +3088,21 @@ export function createAnimator(
2343
3088
  Object.assign(next, plan.next);
2344
3089
  } else {
2345
3090
  for (const property of properties) {
3091
+ const running =
3092
+ animateOptions.additive === true && velocities[property] == null
3093
+ ? segmentAt(property, time)
3094
+ : null;
3095
+ if (running != null && !isHeld(running)) {
3096
+ next[property] = additiveSegment(
3097
+ owner,
3098
+ property,
3099
+ time,
3100
+ targets[property] as number,
3101
+ transition.spring,
3102
+ running,
3103
+ );
3104
+ continue;
3105
+ }
2346
3106
  const velocity = velocities[property] ?? velocityAt(property, time);
2347
3107
  next[property] = springSegment(
2348
3108
  owner,
@@ -2359,6 +3119,7 @@ export function createAnimator(
2359
3119
  time,
2360
3120
  Object.keys(next) as MotionProperty[],
2361
3121
  animateOptions.at,
3122
+ animateOptions.start,
2362
3123
  );
2363
3124
  const adopted =
2364
3125
  plan?.landing != null
@@ -2383,12 +3144,24 @@ export function createAnimator(
2383
3144
  segments.set(property, segment);
2384
3145
  }
2385
3146
  }
2386
- commitCall(group, owner, changed, time);
3147
+ commitCall(
3148
+ group,
3149
+ owner,
3150
+ changed,
3151
+ time,
3152
+ animateOptions.start === 'presented' && animateOptions.at == null,
3153
+ );
2387
3154
  if (plan?.borrowed != null) {
2388
3155
  // The dip's own commit cleared it; the borrow lasts the dip.
2389
3156
  borrowedOpacity = plan.borrowed;
2390
3157
  }
2391
- const handle = makeHandle(owner, changed, finished, time, group);
3158
+ if (plan?.joins === true) {
3159
+ joinWaitingDip(owner);
3160
+ }
3161
+ const handle =
3162
+ plan?.joins === true
3163
+ ? makeHandle(owner, ['opacity'], finished, time, group, true)
3164
+ : makeHandle(owner, changed, finished, time, group);
2392
3165
  if (plan?.landing != null) {
2393
3166
  scheduleLanding(owner, handle.started, plan.landing, adopted);
2394
3167
  }
@@ -2397,6 +3170,9 @@ export function createAnimator(
2397
3170
 
2398
3171
  play(curves, playOptions = {}) {
2399
3172
  syncPending();
3173
+ if (playOptions.start !== 'presented') {
3174
+ flushDeferred();
3175
+ }
2400
3176
  const time = playOptions.at ?? now();
2401
3177
  const {owner, finished} = newOwner();
2402
3178
  const byProperty: Partial<Record<MotionProperty, MotionCurve>> = {};
@@ -2444,6 +3220,17 @@ export function createAnimator(
2444
3220
  continue;
2445
3221
  }
2446
3222
  const curve = byProperty[property] as MotionCurve;
3223
+ const running =
3224
+ playOptions.additive === true ? segmentAt(property, time) : null;
3225
+ if (
3226
+ running != null &&
3227
+ !isHeld(running) &&
3228
+ curve.duration > 0 &&
3229
+ Math.abs(curve.at(curve.duration) - curve.at(0)) > 1e-9
3230
+ ) {
3231
+ next[property] = additiveCurveSegment(owner, time, curve, running);
3232
+ continue;
3233
+ }
2447
3234
  next[property] =
2448
3235
  curve.duration === 0
2449
3236
  ? null
@@ -2461,6 +3248,7 @@ export function createAnimator(
2461
3248
  time,
2462
3249
  Object.keys(next) as MotionProperty[],
2463
3250
  playOptions.at,
3251
+ playOptions.start,
2464
3252
  );
2465
3253
  const adopted =
2466
3254
  plan?.landing != null
@@ -2485,12 +3273,24 @@ export function createAnimator(
2485
3273
  segments.set(property, segment);
2486
3274
  }
2487
3275
  }
2488
- commitCall(group, owner, changed, time);
3276
+ commitCall(
3277
+ group,
3278
+ owner,
3279
+ changed,
3280
+ time,
3281
+ playOptions.start === 'presented' && playOptions.at == null,
3282
+ );
2489
3283
  if (plan?.borrowed != null) {
2490
3284
  // The dip's own commit cleared it; the borrow lasts the dip.
2491
3285
  borrowedOpacity = plan.borrowed;
2492
3286
  }
2493
- const handle = makeHandle(owner, changed, finished, time, group);
3287
+ if (plan?.joins === true) {
3288
+ joinWaitingDip(owner);
3289
+ }
3290
+ const handle =
3291
+ plan?.joins === true
3292
+ ? makeHandle(owner, ['opacity'], finished, time, group, true)
3293
+ : makeHandle(owner, changed, finished, time, group);
2494
3294
  if (plan?.landing != null) {
2495
3295
  scheduleLanding(owner, handle.started, plan.landing, adopted);
2496
3296
  }
@@ -2499,6 +3299,7 @@ export function createAnimator(
2499
3299
 
2500
3300
  decay(curves, decayOptions = {}) {
2501
3301
  syncPending();
3302
+ flushDeferred();
2502
3303
  const time = decayOptions.at ?? now();
2503
3304
  // Under Reduce Motion only momentum keeps moving (DR2, DEC-2): a curve
2504
3305
  // that is a transition plays as `animate` does, a cross-fade or at once.
@@ -2580,6 +3381,7 @@ export function createAnimator(
2580
3381
 
2581
3382
  stop(properties) {
2582
3383
  syncPending();
3384
+ flushDeferred();
2583
3385
  const time = now();
2584
3386
  const list = properties == null ? PROPERTIES : expandList(properties);
2585
3387
  const changed: MotionProperty[] = [];
@@ -2615,6 +3417,7 @@ export function createAnimator(
2615
3417
 
2616
3418
  rebase(deltas, rebaseOptions = {}) {
2617
3419
  syncPending();
3420
+ flushDeferred();
2618
3421
  const time = rebaseOptions.at ?? now();
2619
3422
  const changed: MotionProperty[] = [];
2620
3423
  const owners = new Set<HandleState>();
@@ -2694,10 +3497,7 @@ export function createAnimator(
2694
3497
  }
2695
3498
  }
2696
3499
  owner.timer = setTimeout(
2697
- () => {
2698
- owner.timer = null;
2699
- settle(owner, true);
2700
- },
3500
+ () => settleAtEnd(owner),
2701
3501
  Math.max(0, end - now()),
2702
3502
  );
2703
3503
  }
@@ -2742,6 +3542,7 @@ export function createAnimator(
2742
3542
  },
2743
3543
 
2744
3544
  dispose() {
3545
+ flushDeferred();
2745
3546
  // A Reduce Motion move still waiting to land is written at its end
2746
3547
  // state, so the element is left visible where it was going (the node
2747
3548
  // just detached, when an unmount is pending); its call and the calls
@@ -2770,6 +3571,7 @@ export function createAnimator(
2770
3571
  retireTimers.clear();
2771
3572
  handBackBorrow();
2772
3573
  demote();
3574
+ cancelSheetWillChangeRead();
2773
3575
  target = null;
2774
3576
  },
2775
3577
  };