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

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 (559) 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/Avatar/Avatar.d.ts.map +1 -1
  5. package/dist/Avatar/Avatar.js +12 -3
  6. package/dist/Badge/Badge.d.ts.map +1 -1
  7. package/dist/Badge/Badge.js +7 -1
  8. package/dist/BottomSheet/BottomSheet.js +1 -1
  9. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  10. package/dist/BottomSheet/BottomSheetPanel.js +2 -1
  11. package/dist/BottomSheet/useSheetGestures.d.ts +12 -0
  12. package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
  13. package/dist/BottomSheet/useSheetGestures.js +30 -3
  14. package/dist/Button/Button.js +4 -4
  15. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  16. package/dist/CheckboxInput/CheckboxInput.js +6 -5
  17. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  18. package/dist/ClickableCard/ClickableCard.js +37 -4
  19. package/dist/DateInput/DateInput.d.ts.map +1 -1
  20. package/dist/DateInput/DateInput.js +12 -4
  21. package/dist/DateInput/MonthScroller.d.ts.map +1 -1
  22. package/dist/DateInput/MonthScroller.js +101 -15
  23. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  24. package/dist/DateInput/TouchDateField.js +8 -3
  25. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  26. package/dist/DateRangeInput/DateRangeInput.js +1 -1
  27. package/dist/DateTimeInput/DateTimeInput.d.ts +5 -2
  28. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  29. package/dist/DateTimeInput/DateTimeInput.js +23 -12
  30. package/dist/DateTimeInput/NativeTimeSegment.d.ts.map +1 -1
  31. package/dist/DateTimeInput/NativeTimeSegment.js +5 -4
  32. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  33. package/dist/DateTimeInput/TouchDateTimeField.js +4 -3
  34. package/dist/Dialog/Dialog.d.ts.map +1 -1
  35. package/dist/Dialog/Dialog.js +34 -9
  36. package/dist/Dialog/DialogHeader.d.ts.map +1 -1
  37. package/dist/Dialog/DialogHeader.js +5 -4
  38. package/dist/Divider/Divider.d.ts.map +1 -1
  39. package/dist/Divider/Divider.js +2 -1
  40. package/dist/Drawer/Drawer.d.ts +1 -0
  41. package/dist/Drawer/Drawer.d.ts.map +1 -1
  42. package/dist/Drawer/Drawer.js +7 -2
  43. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  44. package/dist/DropdownMenu/DropdownMenu.js +7 -3
  45. package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts.map +1 -1
  46. package/dist/DropdownMenu/MenuBottomSheetActionList.js +6 -5
  47. package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts +20 -2
  48. package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts.map +1 -1
  49. package/dist/DropdownMenu/lazyMenuBottomSheet.js +31 -3
  50. package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
  51. package/dist/DropdownMenu/renderDropdownItems.js +21 -16
  52. package/dist/EmptyState/EmptyState.d.ts.map +1 -1
  53. package/dist/EmptyState/EmptyState.js +2 -1
  54. package/dist/Field/FieldLabel.d.ts +1 -1
  55. package/dist/Field/FieldLabel.d.ts.map +1 -1
  56. package/dist/Field/FieldLabel.js +4 -4
  57. package/dist/Field/InputClearButton.js +3 -3
  58. package/dist/Field/PanelSearchInput.js +2 -2
  59. package/dist/FieldStatus/FieldStatus.js +2 -2
  60. package/dist/FileInput/FileInput.d.ts.map +1 -1
  61. package/dist/FileInput/FileInput.js +7 -1
  62. package/dist/Heading/Heading.js +1 -1
  63. package/dist/Icon/Icon.js +1 -1
  64. package/dist/Indicator/CheckIndicator.d.ts.map +1 -1
  65. package/dist/Indicator/CheckIndicator.js +2 -1
  66. package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
  67. package/dist/Indicator/CheckboxIndicator.js +3 -1
  68. package/dist/Indicator/RadioIndicator.d.ts.map +1 -1
  69. package/dist/Indicator/RadioIndicator.js +3 -1
  70. package/dist/Item/Item.d.ts.map +1 -1
  71. package/dist/Item/Item.js +2 -1
  72. package/dist/Item/ItemSwipeLayer.js +1 -1
  73. package/dist/Layer/popoverOperations.d.ts +27 -0
  74. package/dist/Layer/popoverOperations.d.ts.map +1 -0
  75. package/dist/Layer/popoverOperations.js +159 -0
  76. package/dist/Layer/useLayer.d.ts +1 -1
  77. package/dist/Layer/useLayer.d.ts.map +1 -1
  78. package/dist/Layer/useLayer.js +93 -59
  79. package/dist/Layout/Layout.js +1 -1
  80. package/dist/Layout/LayoutContent.js +1 -1
  81. package/dist/Layout/LayoutFooter.js +1 -1
  82. package/dist/Layout/LayoutHeader.js +1 -1
  83. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  84. package/dist/Lightbox/Lightbox.js +5 -0
  85. package/dist/Lightbox/LightboxViewport.a11y.browser.spec.js +5 -4
  86. package/dist/List/List.js +1 -1
  87. package/dist/List/ListItem.js +3 -3
  88. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  89. package/dist/MobileNav/MobileNav.js +7 -2
  90. package/dist/MultiSelector/CreateRow.a11y.chromium.spec.js +7 -6
  91. package/dist/MultiSelector/MultiSelector.d.ts +1 -1
  92. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  93. package/dist/MultiSelector/MultiSelector.js +26 -10
  94. package/dist/NumberInput/NumberInput.d.ts +3 -1
  95. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  96. package/dist/NumberInput/NumberInput.js +3 -3
  97. package/dist/NumberInput/numberParser.d.ts +3 -0
  98. package/dist/NumberInput/numberParser.d.ts.map +1 -1
  99. package/dist/NumberInput/numberParser.js +7 -44
  100. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  101. package/dist/ProgressBar/ProgressBar.js +16 -12
  102. package/dist/Resizable/useResizable.d.ts.map +1 -1
  103. package/dist/Resizable/useResizable.js +28 -2
  104. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  105. package/dist/SegmentedControl/SegmentedControlItem.js +4 -1
  106. package/dist/Selector/useSelectorPresentation.d.ts +8 -1
  107. package/dist/Selector/useSelectorPresentation.d.ts.map +1 -1
  108. package/dist/Selector/useSelectorPresentation.js +20 -4
  109. package/dist/Skeleton/Skeleton.d.ts.map +1 -1
  110. package/dist/Skeleton/Skeleton.js +1 -1
  111. package/dist/Slider/Slider.d.ts.map +1 -1
  112. package/dist/Slider/Slider.js +10 -2
  113. package/dist/Spinner/Spinner.d.ts.map +1 -1
  114. package/dist/Spinner/Spinner.js +3 -3
  115. package/dist/Stack/Stack.js +1 -1
  116. package/dist/Stack/StackItem.js +1 -1
  117. package/dist/TabList/TabList.d.ts.map +1 -1
  118. package/dist/TabList/TabList.js +16 -1
  119. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  120. package/dist/Table/plugins/columnResize/useTableColumnResize.js +9 -1
  121. package/dist/Text/Text.js +1 -1
  122. package/dist/Text/useTruncation.d.ts.map +1 -1
  123. package/dist/Text/useTruncation.js +23 -5
  124. package/dist/TextArea/TextArea.d.ts +1 -1
  125. package/dist/TextArea/TextArea.d.ts.map +1 -1
  126. package/dist/TextArea/TextArea.js +13 -2
  127. package/dist/TextInput/TextInput.d.ts.map +1 -1
  128. package/dist/TextInput/TextInput.js +3 -3
  129. package/dist/TimeInput/TimeInput.d.ts +6 -2
  130. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  131. package/dist/TimeInput/TimeInput.js +21 -14
  132. package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
  133. package/dist/TimeInput/TouchTimeField.js +5 -4
  134. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  135. package/dist/Timestamp/Timestamp.js +2 -2
  136. package/dist/Timestamp/TimestampHoverCard.js +4 -4
  137. package/dist/Toast/Toast.d.ts.map +1 -1
  138. package/dist/Toast/Toast.js +60 -20
  139. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  140. package/dist/Toast/ToastViewport.js +82 -51
  141. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  142. package/dist/Tokenizer/Tokenizer.js +13 -2
  143. package/dist/Tokenizer/TokenizerBottomSheet.js +3 -3
  144. package/dist/Toolbar/Toolbar.d.ts.map +1 -1
  145. package/dist/Toolbar/Toolbar.js +2 -1
  146. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  147. package/dist/TopNav/TopNavMegaMenu.js +3 -0
  148. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  149. package/dist/TopNav/TopNavMenu.js +1 -0
  150. package/dist/Typeahead/Typeahead.d.ts +1 -1
  151. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  152. package/dist/Typeahead/Typeahead.js +9 -1
  153. package/dist/astryx.css +20 -4
  154. package/dist/gestures/GestureArena.d.ts +6 -0
  155. package/dist/gestures/GestureArena.d.ts.map +1 -1
  156. package/dist/gestures/GestureArena.js +39 -0
  157. package/dist/gestures/GestureHost.d.ts +352 -0
  158. package/dist/gestures/GestureHost.d.ts.map +1 -0
  159. package/dist/gestures/GestureHost.js +1773 -0
  160. package/dist/gestures/GestureRecognizer.d.ts +10 -0
  161. package/dist/gestures/GestureRecognizer.d.ts.map +1 -1
  162. package/dist/gestures/GestureRecognizer.js +16 -0
  163. package/dist/gestures/LongPressGestureRecognizer.d.ts +1 -0
  164. package/dist/gestures/LongPressGestureRecognizer.d.ts.map +1 -1
  165. package/dist/gestures/LongPressGestureRecognizer.js +3 -0
  166. package/dist/gestures/PanGestureRecognizer.d.ts +1 -0
  167. package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -1
  168. package/dist/gestures/PanGestureRecognizer.js +3 -0
  169. package/dist/gestures/PinchGestureRecognizer.d.ts +31 -0
  170. package/dist/gestures/PinchGestureRecognizer.d.ts.map +1 -0
  171. package/dist/gestures/PinchGestureRecognizer.js +128 -0
  172. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts +71 -0
  173. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -0
  174. package/dist/gestures/ScreenEdgePanGestureRecognizer.js +223 -0
  175. package/dist/gestures/SwipeGestureRecognizer.d.ts +37 -0
  176. package/dist/gestures/SwipeGestureRecognizer.d.ts.map +1 -0
  177. package/dist/gestures/SwipeGestureRecognizer.js +148 -0
  178. package/dist/gestures/TapGestureRecognizer.d.ts +1 -0
  179. package/dist/gestures/TapGestureRecognizer.d.ts.map +1 -1
  180. package/dist/gestures/TapGestureRecognizer.js +3 -0
  181. package/dist/gestures/VelocityTracker.d.ts +6 -2
  182. package/dist/gestures/VelocityTracker.d.ts.map +1 -1
  183. package/dist/gestures/VelocityTracker.js +7 -3
  184. package/dist/gestures/haptics.d.ts +65 -0
  185. package/dist/gestures/haptics.d.ts.map +1 -0
  186. package/dist/gestures/haptics.js +182 -0
  187. package/dist/gestures/nativeScroll.d.ts +42 -0
  188. package/dist/gestures/nativeScroll.d.ts.map +1 -0
  189. package/dist/gestures/nativeScroll.js +228 -0
  190. package/dist/gestures/touchAction.d.ts +60 -0
  191. package/dist/gestures/touchAction.d.ts.map +1 -0
  192. package/dist/gestures/touchAction.js +157 -0
  193. package/dist/gestures/touchActionRule.d.ts +34 -0
  194. package/dist/gestures/touchActionRule.d.ts.map +1 -0
  195. package/dist/gestures/touchActionRule.js +140 -0
  196. package/dist/gestures/types.d.ts +18 -7
  197. package/dist/gestures/types.d.ts.map +1 -1
  198. package/dist/gestures/types.js +22 -2
  199. package/dist/hooks/index.d.ts +1 -1
  200. package/dist/hooks/index.d.ts.map +1 -1
  201. package/dist/hooks/modalAnnounce.d.ts.map +1 -1
  202. package/dist/hooks/modalAnnounce.js +107 -61
  203. package/dist/hooks/useAdaptivePresentation.d.ts.map +1 -1
  204. package/dist/hooks/useAdaptivePresentation.js +4 -1
  205. package/dist/hooks/useAnnounce.d.ts +101 -42
  206. package/dist/hooks/useAnnounce.d.ts.map +1 -1
  207. package/dist/hooks/useAnnounce.js +161 -75
  208. package/dist/hooks/useAnnounceRenderedText.d.ts +11 -3
  209. package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
  210. package/dist/hooks/useAnnounceRenderedText.js +5 -3
  211. package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
  212. package/dist/hooks/useBusyAnnouncement.js +6 -12
  213. package/dist/hooks/useMenuHover.d.ts.map +1 -1
  214. package/dist/hooks/useMenuHover.js +12 -1
  215. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  216. package/dist/i18n/generated-locales/en.generated.js +5 -0
  217. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  218. package/dist/i18n/generated-locales/pseudo.generated.js +5 -0
  219. package/dist/motion/animator.d.ts +7 -1
  220. package/dist/motion/animator.d.ts.map +1 -1
  221. package/dist/motion/animator.js +119 -27
  222. package/dist/theme/defineTheme.d.ts +19 -5
  223. package/dist/theme/defineTheme.d.ts.map +1 -1
  224. package/dist/theme/defineTheme.js +64 -4
  225. package/dist/theme/domainTokens/domainTokenDefaults.d.ts +3 -0
  226. package/dist/theme/domainTokens/domainTokenDefaults.d.ts.map +1 -0
  227. package/dist/theme/domainTokens/domainTokenDefaults.js +19 -0
  228. package/dist/theme/domainTokens/index.d.ts +5 -4
  229. package/dist/theme/domainTokens/index.d.ts.map +1 -1
  230. package/dist/theme/domainTokens/index.js +5 -9
  231. package/dist/theme/index.d.ts +1 -0
  232. package/dist/theme/index.d.ts.map +1 -1
  233. package/dist/theme/motionKnobs.d.ts +56 -0
  234. package/dist/theme/motionKnobs.d.ts.map +1 -0
  235. package/dist/theme/motionKnobs.js +48 -0
  236. package/dist/theme/resolveThemeValues.d.ts +11 -4
  237. package/dist/theme/resolveThemeValues.d.ts.map +1 -1
  238. package/dist/theme/resolveThemeValues.js +40 -4
  239. package/dist/theme/themeAdaptations.d.ts +7 -3
  240. package/dist/theme/themeAdaptations.d.ts.map +1 -1
  241. package/dist/theme/themeAdaptations.js +36 -7
  242. package/dist/theme/themeMotion.d.ts +96 -0
  243. package/dist/theme/themeMotion.d.ts.map +1 -0
  244. package/dist/theme/themeMotion.js +177 -0
  245. package/dist/theme/tokenReferences.d.ts +31 -0
  246. package/dist/theme/tokenReferences.d.ts.map +1 -0
  247. package/dist/theme/tokenReferences.js +132 -0
  248. package/dist/theme/tokens.d.ts +1 -0
  249. package/dist/theme/tokens.d.ts.map +1 -1
  250. package/dist/theme/tokens.js +9 -129
  251. package/dist/theme/tokens.stylex.d.ts +12 -0
  252. package/dist/theme/tokens.stylex.d.ts.map +1 -1
  253. package/dist/theme/tokens.stylex.js +12 -0
  254. package/dist/utils/focusReturn.d.ts +17 -1
  255. package/dist/utils/focusReturn.d.ts.map +1 -1
  256. package/dist/utils/focusReturn.js +11 -4
  257. package/dist/utils/getNodeText.d.ts +8 -0
  258. package/dist/utils/getNodeText.d.ts.map +1 -0
  259. package/dist/utils/getNodeText.js +37 -0
  260. package/dist/utils/interactionModality.d.ts +11 -2
  261. package/dist/utils/interactionModality.d.ts.map +1 -1
  262. package/dist/utils/interactionModality.js +58 -5
  263. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  264. package/dist/utils/interactionOverlay.stylex.js +17 -8
  265. package/dist/utils/plainDate.d.ts +2 -0
  266. package/dist/utils/plainDate.d.ts.map +1 -1
  267. package/dist/utils/plainDate.js +46 -3
  268. package/dist/utils/presentation.d.ts +50 -0
  269. package/dist/utils/presentation.d.ts.map +1 -0
  270. package/dist/utils/presentation.js +125 -0
  271. package/dist/utils/pressFeedback.d.ts.map +1 -1
  272. package/dist/utils/pressFeedback.js +20 -1
  273. package/dist/utils/primaryClick.d.ts +11 -0
  274. package/dist/utils/primaryClick.d.ts.map +1 -0
  275. package/dist/utils/primaryClick.js +25 -0
  276. package/dist/utils/timeFormat.d.ts +47 -0
  277. package/dist/utils/timeFormat.d.ts.map +1 -0
  278. package/dist/utils/timeFormat.js +240 -0
  279. package/dist/utils/touchPresentation.d.ts.map +1 -1
  280. package/dist/utils/touchPresentation.js +5 -3
  281. package/dist/utils/touchPresentation.stylex.d.ts +15 -0
  282. package/dist/utils/touchPresentation.stylex.d.ts.map +1 -0
  283. package/dist/utils/touchPresentation.stylex.js +33 -0
  284. package/dist/utils/unicodeDigits.d.ts +20 -0
  285. package/dist/utils/unicodeDigits.d.ts.map +1 -0
  286. package/dist/utils/unicodeDigits.js +70 -0
  287. package/locales/en.json +23 -3
  288. package/locales/pseudo.json +15 -0
  289. package/package.json +5 -4
  290. package/src/AlertDialog/AlertDialog.tsx +6 -5
  291. package/src/AlertDialog/__tests__/AlertDialog.a11y.chromium.spec.ts +18 -6
  292. package/src/Avatar/Avatar.spec.md +22 -22
  293. package/src/Avatar/Avatar.tsx +18 -1
  294. package/src/Avatar/__tests__/AvatarForcedColors.a11y.chromium.spec.ts +126 -0
  295. package/src/Badge/Badge.doc.mjs +1 -1
  296. package/src/Badge/Badge.tsx +19 -2
  297. package/src/Badge/__tests__/BadgeLargerText.a11y.chromium.spec.ts +260 -0
  298. package/src/BottomSheet/BottomSheet.test.tsx +46 -0
  299. package/src/BottomSheet/BottomSheet.tsx +1 -1
  300. package/src/BottomSheet/BottomSheetPanel.tsx +2 -1
  301. package/src/BottomSheet/useSheetGestures.test.ts +52 -0
  302. package/src/BottomSheet/useSheetGestures.ts +37 -6
  303. package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.chromium.spec.ts +18 -6
  304. package/src/Button/Button.tsx +4 -4
  305. package/src/Calendar/Calendar.spec.md +87 -48
  306. package/src/Calendar/__tests__/Calendar.a11y.chromium.spec.ts +21 -7
  307. package/src/Carousel/__tests__/Carousel.a11y.chromium.spec.ts +21 -7
  308. package/src/CheckboxInput/CheckboxInput.tsx +6 -5
  309. package/src/ClickableCard/ClickableCard.test.tsx +96 -0
  310. package/src/ClickableCard/ClickableCard.tsx +48 -4
  311. package/src/Collapsible/Collapsible.spec.md +2 -0
  312. package/src/Collapsible/CollapsibleGroup.spec.md +57 -29
  313. package/src/Collapsible/__tests__/Collapsible.a11y.chromium.spec.ts +18 -7
  314. package/src/Collapsible/__tests__/CollapsibleGroupAccordion.a11y.chromium.spec.ts +18 -6
  315. package/src/ComplexSelector/ComplexSelector.test.tsx +37 -0
  316. package/src/ContextMenu/ContextMenu.test.tsx +35 -0
  317. package/src/DateInput/DateInput.test.tsx +115 -3
  318. package/src/DateInput/DateInput.tsx +29 -14
  319. package/src/DateInput/DateInputTouch.test.tsx +76 -0
  320. package/src/DateInput/MonthScroller.tsx +106 -20
  321. package/src/DateInput/MonthScrollerSettle.test.tsx +165 -0
  322. package/src/DateInput/TouchDateField.tsx +14 -3
  323. package/src/DateInput/__tests__/MonthScrollerSteps.interaction.browser.spec.ts +312 -0
  324. package/src/DateRangeInput/DateRangeInput.test.tsx +46 -3
  325. package/src/DateRangeInput/DateRangeInput.tsx +16 -12
  326. package/src/DateTimeInput/DateTimeInput.doc.mjs +10 -8
  327. package/src/DateTimeInput/DateTimeInput.spec.md +75 -51
  328. package/src/DateTimeInput/DateTimeInput.test.tsx +81 -0
  329. package/src/DateTimeInput/DateTimeInput.tsx +46 -24
  330. package/src/DateTimeInput/NativeTimeSegment.tsx +4 -6
  331. package/src/DateTimeInput/TouchDateTimeField.tsx +3 -7
  332. package/src/Dialog/Dialog.test.tsx +216 -2
  333. package/src/Dialog/Dialog.tsx +42 -9
  334. package/src/Dialog/DialogHeader.tsx +5 -4
  335. package/src/Dialog/__tests__/DialogSecondDocument.a11y.browser.spec.ts +202 -0
  336. package/src/Divider/Divider.tsx +2 -1
  337. package/src/Drawer/Drawer.spec.md +111 -80
  338. package/src/Drawer/Drawer.test.tsx +35 -0
  339. package/src/Drawer/Drawer.tsx +13 -2
  340. package/src/Drawer/DrawerHeader.spec.md +181 -0
  341. package/src/Drawer/__tests__/DrawerNonModalPageScroll.a11y.chromium.spec.ts +267 -0
  342. package/src/DropdownMenu/DropdownMenu.test.tsx +41 -0
  343. package/src/DropdownMenu/DropdownMenu.tsx +10 -3
  344. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +34 -0
  345. package/src/DropdownMenu/MenuBottomSheetActionList.tsx +6 -5
  346. package/src/DropdownMenu/__tests__/Menu.a11y.chromium.spec.ts +19 -7
  347. package/src/DropdownMenu/__tests__/MenuButton.a11y.chromium.spec.ts +21 -9
  348. package/src/DropdownMenu/lazyMenuBottomSheet.test.ts +60 -0
  349. package/src/DropdownMenu/lazyMenuBottomSheet.ts +36 -7
  350. package/src/DropdownMenu/renderDropdownItems.tsx +24 -19
  351. package/src/EmptyState/EmptyState.tsx +2 -1
  352. package/src/Field/FieldLabel.tsx +5 -4
  353. package/src/Field/InputClearButton.tsx +3 -3
  354. package/src/Field/PanelSearchInput.tsx +2 -2
  355. package/src/FieldStatus/FieldStatus.tsx +2 -2
  356. package/src/FileInput/FileInput.test.tsx +21 -0
  357. package/src/FileInput/FileInput.tsx +4 -1
  358. package/src/FormLayout/FormLayout.spec.md +7 -8
  359. package/src/Heading/Heading.tsx +1 -1
  360. package/src/Icon/Icon.tsx +1 -1
  361. package/src/Indicator/CheckIndicator.spec.md +47 -42
  362. package/src/Indicator/CheckIndicator.tsx +2 -1
  363. package/src/Indicator/CheckboxIndicator.spec.md +40 -37
  364. package/src/Indicator/CheckboxIndicator.tsx +3 -1
  365. package/src/Indicator/Indicator.spec.md +188 -0
  366. package/src/Indicator/RadioIndicator.tsx +3 -1
  367. package/src/Item/Item.tsx +2 -1
  368. package/src/Item/ItemSwipeLayer.tsx +1 -1
  369. package/src/Kbd/Kbd.spec.md +81 -38
  370. package/src/Layer/__tests__/LayerBrowserHide.a11y.chromium.spec.ts +126 -0
  371. package/src/Layer/popoverOperations.test.ts +205 -0
  372. package/src/Layer/popoverOperations.ts +172 -0
  373. package/src/Layer/useLayer.test.tsx +348 -1
  374. package/src/Layer/useLayer.tsx +118 -71
  375. package/src/Layout/Layout.spec.md +127 -131
  376. package/src/Layout/Layout.tsx +1 -1
  377. package/src/Layout/LayoutContent.spec.md +205 -0
  378. package/src/Layout/LayoutContent.tsx +1 -1
  379. package/src/Layout/LayoutFooter.spec.md +190 -0
  380. package/src/Layout/LayoutFooter.tsx +1 -1
  381. package/src/Layout/LayoutHeader.spec.md +193 -0
  382. package/src/Layout/LayoutHeader.tsx +1 -1
  383. package/src/Layout/LayoutPanel.spec.md +194 -0
  384. package/src/Layout/__tests__/Layout.a11y.chromium.spec.ts +18 -6
  385. package/src/Lightbox/Lightbox.test.tsx +18 -0
  386. package/src/Lightbox/Lightbox.tsx +5 -0
  387. package/src/Lightbox/LightboxViewport.a11y.browser.spec.ts +8 -4
  388. package/src/Link/__tests__/Link.a11y.chromium.spec.ts +18 -8
  389. package/src/List/List.tsx +1 -1
  390. package/src/List/ListItem.spec.md +205 -0
  391. package/src/List/ListItem.tsx +3 -3
  392. package/src/MetadataList/MetadataList.spec.md +187 -0
  393. package/src/MetadataList/MetadataListItem.spec.md +165 -0
  394. package/src/MobileNav/MobileNav.test.tsx +15 -0
  395. package/src/MobileNav/MobileNav.tsx +9 -1
  396. package/src/MobileNav/__tests__/MobileNavHeader.a11y.chromium.spec.ts +89 -0
  397. package/src/MoreMenu/MoreMenu.test.tsx +11 -0
  398. package/src/MultiSelector/CreateRow.a11y.chromium.spec.ts +7 -8
  399. package/src/MultiSelector/MultiSelector.spec.md +7 -4
  400. package/src/MultiSelector/MultiSelector.test.tsx +270 -1
  401. package/src/MultiSelector/MultiSelector.tsx +25 -10
  402. package/src/MultiSelector/__tests__/MultiSelector.listbox.a11y.test.tsx +8 -1
  403. package/src/NavMenu/NavHeadingMenu.spec.md +1 -5
  404. package/src/NumberInput/NumberInput.doc.mjs +13 -7
  405. package/src/NumberInput/NumberInput.spec.md +59 -37
  406. package/src/NumberInput/NumberInput.tsx +13 -3
  407. package/src/NumberInput/__tests__/NumberInput.coarse-pointer.a11y.chromium.spec.ts +102 -0
  408. package/src/NumberInput/numberParser.ts +7 -45
  409. package/src/ProgressBar/ProgressBar.test.tsx +108 -32
  410. package/src/ProgressBar/ProgressBar.tsx +58 -10
  411. package/src/ProgressBar/__tests__/ProgressBar.a11y.chromium.spec.ts +21 -9
  412. package/src/ProgressBar/__tests__/ProgressBarMotion.a11y.chromium.spec.ts +831 -0
  413. package/src/Resizable/__tests__/ResizeHandle.a11y.chromium.spec.ts +21 -14
  414. package/src/Resizable/useResizable.test.ts +43 -0
  415. package/src/Resizable/useResizable.ts +32 -9
  416. package/src/SegmentedControl/SegmentedControl.test.tsx +84 -0
  417. package/src/SegmentedControl/SegmentedControlItem.tsx +11 -5
  418. package/src/Selector/Selector.test.tsx +90 -1
  419. package/src/Selector/__tests__/Selector.combobox.a11y.test.tsx +8 -1
  420. package/src/Selector/__tests__/Selector.listbox.a11y.test.tsx +8 -1
  421. package/src/Selector/useSelectorPresentation.ts +31 -3
  422. package/src/SideNav/SideNav.test.tsx +27 -0
  423. package/src/SideNav/__tests__/SideNavRailMotion.interaction.browser.spec.ts +176 -51
  424. package/src/Skeleton/Skeleton.tsx +3 -1
  425. package/src/Slider/Slider.test.tsx +31 -0
  426. package/src/Slider/Slider.tsx +8 -3
  427. package/src/Slider/__tests__/Slider.a11y.chromium.spec.ts +19 -7
  428. package/src/Spinner/Spinner.tsx +5 -3
  429. package/src/Stack/Stack.tsx +1 -1
  430. package/src/Stack/StackItem.tsx +1 -1
  431. package/src/TabList/TabList.test.tsx +58 -4
  432. package/src/TabList/TabList.tsx +16 -1
  433. package/src/TabList/__tests__/TabPressPointer.interaction.browser.spec.ts +163 -0
  434. package/src/Table/__tests__/Table.a11y.chromium.spec.ts +18 -6
  435. package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +22 -0
  436. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -4
  437. package/src/Text/Text.tsx +1 -1
  438. package/src/Text/useTruncation.test.tsx +128 -1
  439. package/src/Text/useTruncation.ts +23 -5
  440. package/src/TextArea/TextArea.spec.md +10 -13
  441. package/src/TextArea/TextArea.test.tsx +60 -0
  442. package/src/TextArea/TextArea.tsx +15 -1
  443. package/src/TextInput/TextInput.test.tsx +21 -0
  444. package/src/TextInput/TextInput.tsx +3 -1
  445. package/src/TimeInput/NativeTimeInput.test.tsx +17 -0
  446. package/src/TimeInput/Presentation.test.tsx +21 -0
  447. package/src/TimeInput/TimeInput.doc.mjs +8 -8
  448. package/src/TimeInput/TimeInput.spec.md +45 -48
  449. package/src/TimeInput/TimeInput.test.tsx +76 -0
  450. package/src/TimeInput/TimeInput.tsx +36 -18
  451. package/src/TimeInput/TouchTimeField.tsx +4 -6
  452. package/src/Timestamp/Timestamp.spec.md +6 -12
  453. package/src/Timestamp/Timestamp.test.tsx +30 -5
  454. package/src/Timestamp/Timestamp.tsx +6 -2
  455. package/src/Timestamp/TimestampHoverCard.tsx +4 -4
  456. package/src/Toast/Toast.spec.md +14 -20
  457. package/src/Toast/Toast.tsx +104 -36
  458. package/src/Toast/ToastViewport.test.tsx +719 -1
  459. package/src/Toast/ToastViewport.tsx +100 -50
  460. package/src/Tokenizer/Tokenizer.spec.md +5 -3
  461. package/src/Tokenizer/Tokenizer.test.tsx +68 -0
  462. package/src/Tokenizer/Tokenizer.tsx +14 -2
  463. package/src/Tokenizer/TokenizerBottomSheet.test.tsx +15 -4
  464. package/src/Tokenizer/TokenizerBottomSheet.tsx +3 -3
  465. package/src/Toolbar/Toolbar.spec.md +5 -6
  466. package/src/Toolbar/Toolbar.test.tsx +30 -0
  467. package/src/Toolbar/Toolbar.tsx +2 -1
  468. package/src/Toolbar/__tests__/Toolbar.a11y.chromium.spec.ts +18 -6
  469. package/src/Tooltip/__tests__/Tooltip.a11y.chromium.spec.ts +18 -7
  470. package/src/TopNav/TopNav.test.tsx +27 -0
  471. package/src/TopNav/TopNavMegaMenu.test.tsx +21 -0
  472. package/src/TopNav/TopNavMegaMenu.tsx +4 -1
  473. package/src/TopNav/TopNavMenu.test.tsx +17 -0
  474. package/src/TopNav/TopNavMenu.tsx +1 -0
  475. package/src/Typeahead/Typeahead.test.tsx +40 -0
  476. package/src/Typeahead/Typeahead.tsx +12 -1
  477. package/src/__tests__/pressState.ts +8 -4
  478. package/src/gestures/GestureArena.ts +35 -0
  479. package/src/gestures/GestureHost.ts +2065 -0
  480. package/src/gestures/GestureRecognizer.ts +18 -0
  481. package/src/gestures/LongPressGestureRecognizer.ts +4 -0
  482. package/src/gestures/PanGestureRecognizer.ts +4 -0
  483. package/src/gestures/PinchGestureRecognizer.ts +148 -0
  484. package/src/gestures/ScreenEdgePanGestureRecognizer.ts +256 -0
  485. package/src/gestures/SwipeGestureRecognizer.ts +197 -0
  486. package/src/gestures/TapGestureRecognizer.ts +4 -0
  487. package/src/gestures/VelocityTracker.ts +10 -3
  488. package/src/gestures/__tests__/GestureHost.test.ts +2087 -0
  489. package/src/gestures/__tests__/PanGestureRecognizer.test.ts +4 -4
  490. package/src/gestures/__tests__/PinchGestureRecognizer.test.ts +74 -0
  491. package/src/gestures/__tests__/ScreenEdgePanGestureRecognizer.test.ts +498 -0
  492. package/src/gestures/__tests__/SwipeGestureRecognizer.test.ts +108 -0
  493. package/src/gestures/__tests__/arena.test.ts +5 -0
  494. package/src/gestures/__tests__/arenaPinchSwipeEdge.test.ts +193 -0
  495. package/src/gestures/__tests__/browser/build-fixture.mjs +46 -0
  496. package/src/gestures/__tests__/browser/fixture.ts +307 -0
  497. package/src/gestures/__tests__/browser/gestures.interaction.browser.spec.ts +1137 -0
  498. package/src/gestures/__tests__/browserNegotiation.test.ts +293 -0
  499. package/src/gestures/__tests__/haptics.test.ts +187 -0
  500. package/src/gestures/__tests__/harness.ts +21 -2
  501. package/src/gestures/__tests__/recognizerKind.test.ts +78 -0
  502. package/src/gestures/__tests__/touchActionRule.test.ts +54 -0
  503. package/src/gestures/haptics.ts +203 -0
  504. package/src/gestures/nativeScroll.ts +277 -0
  505. package/src/gestures/touchAction.ts +191 -0
  506. package/src/gestures/touchActionRule.ts +157 -0
  507. package/src/gestures/types.ts +30 -9
  508. package/src/hooks/index.ts +5 -1
  509. package/src/hooks/modalAnnounce.ts +129 -72
  510. package/src/hooks/useAdaptivePresentation.ts +4 -1
  511. package/src/hooks/useAnnounce.doc.mjs +35 -3
  512. package/src/hooks/useAnnounce.replace.test.tsx +516 -0
  513. package/src/hooks/useAnnounce.ts +209 -102
  514. package/src/hooks/useAnnounceRenderedText.adopters.test.tsx +10 -1
  515. package/src/hooks/useAnnounceRenderedText.ts +17 -3
  516. package/src/hooks/useBusyAnnouncement.ts +7 -10
  517. package/src/hooks/useMenuHover.ts +15 -1
  518. package/src/i18n/generated-locales/en.generated.ts +6 -0
  519. package/src/i18n/generated-locales/pseudo.generated.ts +6 -0
  520. package/src/motion/README.md +11 -1
  521. package/src/motion/animator.test.ts +151 -3
  522. package/src/motion/animator.ts +149 -33
  523. package/src/theme/Theme.doc.mjs +1 -1
  524. package/src/theme/defineTheme.ts +117 -8
  525. package/src/theme/derivedVarRegistry.test.ts +4 -0
  526. package/src/theme/domainTokens/domainTokenDefaults.ts +19 -0
  527. package/src/theme/domainTokens/index.ts +6 -10
  528. package/src/theme/expandMotionScale.test.ts +1 -1
  529. package/src/theme/index.ts +5 -0
  530. package/src/theme/motionKnobs.ts +82 -0
  531. package/src/theme/resolveThemeValues.ts +68 -6
  532. package/src/theme/themeAdaptations.ts +52 -12
  533. package/src/theme/themeMotion.test.ts +620 -0
  534. package/src/theme/themeMotion.ts +221 -0
  535. package/src/theme/tokenReferences.ts +149 -0
  536. package/src/theme/tokens.stylex.ts +10 -0
  537. package/src/theme/tokens.ts +15 -158
  538. package/src/utils/focusReturn.ts +17 -6
  539. package/src/utils/getNodeText.test.ts +24 -0
  540. package/src/utils/getNodeText.ts +37 -0
  541. package/src/utils/interactionModality.test.ts +45 -1
  542. package/src/utils/interactionModality.ts +64 -5
  543. package/src/utils/interactionOverlay.stylex.ts +12 -3
  544. package/src/utils/plainDate.test.ts +90 -0
  545. package/src/utils/plainDate.ts +58 -3
  546. package/src/utils/presentation.test.ts +380 -0
  547. package/src/utils/presentation.ts +180 -0
  548. package/src/utils/pressFeedback.test.ts +138 -0
  549. package/src/utils/pressFeedback.ts +34 -11
  550. package/src/utils/pressPaintPriority.test.ts +80 -0
  551. package/src/utils/primaryClick.test.ts +38 -0
  552. package/src/utils/primaryClick.ts +28 -0
  553. package/src/utils/timeFormat.test.ts +204 -0
  554. package/src/utils/timeFormat.ts +314 -0
  555. package/src/utils/touchPresentation.stylex.ts +43 -0
  556. package/src/utils/touchPresentation.test.ts +140 -1
  557. package/src/utils/touchPresentation.ts +5 -3
  558. package/src/utils/unicodeDigits.test.ts +44 -0
  559. package/src/utils/unicodeDigits.ts +71 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motionKnobs.d.ts","sourceRoot":"","sources":["../../src/theme/motionKnobs.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH,yCAAyC;AACzC,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;AAElE;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAE1C,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,uCAAuC;AACvC,eAAO,MAAM,WAAW;;;CAAiC,CAAC;AAQ1D,kEAAkE;AAClE,wBAAgB,YAAY,CAC1B,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,mBAAmB,CAcrB"}
@@ -0,0 +1,48 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file motionKnobs.ts
5
+ * @input A theme's motion knobs (`tempo`, `character`)
6
+ * @output Their types and `resolveMotionKnobs`, which fills in the defaults
7
+ * and clamps `tempo` (`spec:AST-108` FR1). `reducedMotion` is not a public
8
+ * knob until `'always'` ships: every theme resolves to `'system'`
9
+ * @position Theme utility with no imports: themeMotion.ts builds the motion
10
+ * tokens on it, and the motion foundation reads a theme's knobs through it
11
+ * without loading the token stylesheet. Pure; safe on the server and in
12
+ * plain Node.
13
+ *
14
+ * SYNC: When modified, update:
15
+ * - /packages/core/src/theme/themeMotion.ts (re-exports these)
16
+ * - /packages/core/src/theme/themeMotion.test.ts
17
+ */
18
+
19
+ /** How lively a theme's motion feels. */
20
+
21
+ /**
22
+ * Whose Reduce Motion setting a theme follows: `'system'`, each person's own.
23
+ * Internal: no theme sets it until `'always'` ships (`spec:AST-108` FR6).
24
+ */
25
+
26
+ /** The motion knobs a theme sets (`spec:AST-108` FR1). */
27
+
28
+ /** The knobs with their defaults filled in and `tempo` clamped. */
29
+
30
+ /** The range `tempo` is clamped to. */
31
+ export const TEMPO_RANGE = {
32
+ min: 0.75,
33
+ max: 1.5
34
+ };
35
+ const CHARACTERS = ['crisp', 'standard', 'expressive'];
36
+
37
+ /** The knobs of `config`, defaults filled in, `tempo` clamped. */
38
+ export function resolveKnobs(config) {
39
+ const tempoIsSet = typeof config?.tempo === 'number' && Number.isFinite(config.tempo);
40
+ const tempo = tempoIsSet ? Math.min(TEMPO_RANGE.max, Math.max(TEMPO_RANGE.min, config.tempo)) : 1;
41
+ const character = config?.character != null && CHARACTERS.includes(config.character) ? config.character : 'standard';
42
+ return {
43
+ tempo,
44
+ character,
45
+ reducedMotion: 'system',
46
+ tempoIsSet
47
+ };
48
+ }
@@ -24,7 +24,7 @@ import type { ComponentStyleMap, TokenName, TokenValue } from './defineTheme.js'
24
24
  import type { TypographyConfig, FontWeight } from './types.js';
25
25
  import type { SyntaxThemeDefinition } from './syntax/index.js';
26
26
  import { type TypeScaleConfig } from './expandTypeScale.js';
27
- import { type MotionScaleConfig } from './expandMotionScale.js';
27
+ import { type MotionCharacter, type ThemeMotionConfig } from './themeMotion.js';
28
28
  import { type RadiusScaleConfig } from './expandRadiusScale.js';
29
29
  import { type ColorScaleConfig } from './expandColorScale.js';
30
30
  /**
@@ -41,8 +41,8 @@ export interface ThemeValuesInput {
41
41
  color?: ColorScaleConfig;
42
42
  /** Radius scale configuration. */
43
43
  radius?: RadiusScaleConfig;
44
- /** Motion scale configuration. */
45
- motion?: MotionScaleConfig;
44
+ /** Motion: the three knobs, a motion scale configuration, or both. */
45
+ motion?: ThemeMotionConfig;
46
46
  /** Syntax highlighting theme. */
47
47
  syntax?: SyntaxThemeDefinition;
48
48
  /** Explicit token overrides — highest precedence. */
@@ -118,7 +118,14 @@ export declare function buildFontFamilyTokens(typo: TypographyConfig): Record<st
118
118
  * `extends`, or nothing for a root theme. It sits below everything this input
119
119
  * declares.
120
120
  */
121
- export declare function resolveThemeValues(input: ThemeValuesInput, seed?: ThemeValuesSeed, { strictTokens }?: {
121
+ export declare function resolveThemeValues(input: ThemeValuesInput, seed?: ThemeValuesSeed, { strictTokens, inheritedCharacter, standardBeneath, }?: {
122
122
  strictTokens?: boolean;
123
+ /**
124
+ * The motion character in effect beneath this layer, from a base theme or
125
+ * the theme an adaptation rule belongs to, for a layer that sets none.
126
+ */
127
+ inheritedCharacter?: MotionCharacter;
128
+ /** The --ease-standard beneath a layer resolved without a seed: a rule's theme's. */
129
+ standardBeneath?: string;
123
130
  }): ResolvedThemeValues;
124
131
  //# sourceMappingURL=resolveThemeValues.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveThemeValues.d.ts","sourceRoot":"","sources":["../../src/theme/resolveThemeValues.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EAAC,gBAAgB,EAAE,UAAU,EAAC,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,UAAU,CAAC;AACpD,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAoB,KAAK,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAoB,KAAK,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAmB,KAAK,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAO3E;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,iCAAiC;IACjC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,kCAAkC;IAClC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,kCAAkC;IAClC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,iCAAiC;IACjC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAChD,iCAAiC;IACjC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,iCAAiC;IACjC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,8CAA8C;AAC9C,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,kDAAkD;IAClD,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,UAAU,EACjB,EAAC,MAAc,EAAC,GAAE;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAM,GACxC,MAAM,CAyBR;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAQ5D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,GAAG,SAAS,CASpB;AAMD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,gBAAgB,GACrB,eAAe,GAAG,SAAS,CA+C7B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,gBAAgB,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBxB;AAMD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,gBAAgB,EACvB,IAAI,CAAC,EAAE,eAAe,EACtB,EAAC,YAAoB,EAAC,GAAE;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAM,GACpD,mBAAmB,CA+DrB"}
1
+ {"version":3,"file":"resolveThemeValues.d.ts","sourceRoot":"","sources":["../../src/theme/resolveThemeValues.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EAAC,gBAAgB,EAAE,UAAU,EAAC,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,UAAU,CAAC;AACpD,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAoB,KAAK,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAE9E,OAAO,EAAmB,KAAK,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAO3E;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,iCAAiC;IACjC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,kCAAkC;IAClC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,sEAAsE;IACtE,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,iCAAiC;IACjC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAChD,iCAAiC;IACjC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,iCAAiC;IACjC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,8CAA8C;AAC9C,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,kDAAkD;IAClD,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,UAAU,EACjB,EAAC,MAAc,EAAC,GAAE;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAM,GACxC,MAAM,CAyBR;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAQ5D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,GAAG,SAAS,CASpB;AAMD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,gBAAgB,GACrB,eAAe,GAAG,SAAS,CA+C7B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,gBAAgB,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBxB;AAMD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,gBAAgB,EACvB,IAAI,CAAC,EAAE,eAAe,EACtB,EACE,YAAoB,EACpB,kBAAkB,EAClB,eAAe,GAChB,GAAE;IACD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,eAAe,CAAC;IACrC,qFAAqF;IACrF,eAAe,CAAC,EAAE,MAAM,CAAC;CACrB,GACL,mBAAmB,CA0GrB"}
@@ -24,8 +24,9 @@
24
24
  */
25
25
 
26
26
  import { expandTypeScale, generateTypeScaleComponents } from "./expandTypeScale.js";
27
- import { expandMotionScale } from "./expandMotionScale.js";
27
+ import { expandThemeMotion, preTempoName } from "./themeMotion.js";
28
28
  import { expandRadiusScale } from "./expandRadiusScale.js";
29
+ import { easeDefaults } from "./tokens.stylex.js";
29
30
  import { expandColorScale } from "./expandColorScale.js";
30
31
  import { deepMergeComponents } from "./mergeComponents.js";
31
32
 
@@ -212,7 +213,9 @@ export function buildFontFamilyTokens(typo) {
212
213
  * declares.
213
214
  */
214
215
  export function resolveThemeValues(input, seed, {
215
- strictTokens = false
216
+ strictTokens = false,
217
+ inheritedCharacter,
218
+ standardBeneath
216
219
  } = {}) {
217
220
  const tokens = {
218
221
  ...seed?.tokens
@@ -235,9 +238,19 @@ export function resolveThemeValues(input, seed, {
235
238
  Object.assign(tokens, expandRadiusScale(input.radius));
236
239
  }
237
240
 
238
- // 4. Motion-generated tokens
241
+ // 4. Motion-generated tokens (spec:AST-108 FR2, FR5). A layer that writes
242
+ // durations also writes the copies busy loops read (FR4), so an enclosing
243
+ // theme's tempo copies never stand in for its own: without a tempo of its
244
+ // own, they are its durations.
239
245
  if (input.motion) {
240
- Object.assign(tokens, expandMotionScale(input.motion));
246
+ const motion = expandThemeMotion(input.motion);
247
+ Object.assign(tokens, motion);
248
+ for (const [name, value] of Object.entries(motion)) {
249
+ const preTempo = preTempoName(name);
250
+ if (preTempo !== name && !(preTempo in motion)) {
251
+ tokens[preTempo] = value;
252
+ }
253
+ }
241
254
  }
242
255
 
243
256
  // 5. Font family tokens
@@ -256,11 +269,34 @@ export function resolveThemeValues(input, seed, {
256
269
  // 7. Explicit token overrides — highest precedence within this input layer.
257
270
  // A generated axis in the same root or adaptation value cannot beat them.
258
271
  if (input.tokens) {
272
+ const own = input.tokens;
259
273
  for (const [key, value] of Object.entries(input.tokens)) {
260
274
  if (value !== undefined) {
261
275
  tokens[key] = resolveTokenValue(value, {
262
276
  strict: strictTokens
263
277
  });
278
+ // An explicit duration beats tempo, so a busy loop reading the
279
+ // pre-tempo value reads it too (spec:AST-108 FR4).
280
+ const preTempo = preTempoName(key);
281
+ if (preTempo !== key && own[preTempo] === undefined) {
282
+ tokens[preTempo] = tokens[key];
283
+ }
284
+ }
285
+ }
286
+ }
287
+
288
+ // At 'standard', --ease-entrance and --ease-move equal the resolved
289
+ // --ease-standard (spec:AST-108 FR2): the layer's own, else the one beneath
290
+ // it. A layer that sets them itself, or whose character, its own or the one
291
+ // it inherits, picks its own curve, keeps them.
292
+ const own = input.tokens ?? {};
293
+ const ownCharacter = input.motion != null && 'character' in input.motion ? input.motion.character : undefined;
294
+ const character = ownCharacter ?? inheritedCharacter;
295
+ if (ownCharacter === 'standard' || own['--ease-standard'] !== undefined && (character === undefined || character === 'standard')) {
296
+ const standard = tokens['--ease-standard'] ?? standardBeneath ?? easeDefaults['--ease-standard'];
297
+ for (const name of ['--ease-entrance', '--ease-move']) {
298
+ if (own[name] === undefined) {
299
+ tokens[name] = standard;
264
300
  }
265
301
  }
266
302
  }
@@ -24,6 +24,7 @@
24
24
  import type { ComponentStyleMap, TokenName, TokenValue } from './defineTheme.js';
25
25
  import type { TypographyConfig } from './types.js';
26
26
  import type { MotionScaleConfig } from './expandMotionScale.js';
27
+ import type { ThemeMotionConfig, ThemeMotionKnobs } from './themeMotion.js';
27
28
  import type { RadiusScaleConfig } from './expandRadiusScale.js';
28
29
  import type { ColorScaleConfig } from './expandColorScale.js';
29
30
  /** Fixed names for viewport-width tier start points. */
@@ -88,8 +89,11 @@ export interface ThemeAdaptationValue {
88
89
  color?: Partial<ColorScaleConfig>;
89
90
  /** Radius axis overrides, completed from root metadata. */
90
91
  radius?: Partial<RadiusScaleConfig>;
91
- /** Motion axis overrides, completed from root metadata. */
92
- motion?: Partial<MotionScaleConfig>;
92
+ /**
93
+ * Motion axis overrides, completed from root metadata: scale fields, or the
94
+ * `tempo` and `character` knobs (spec:AST-108 FR5).
95
+ */
96
+ motion?: Partial<MotionScaleConfig> & ThemeMotionKnobs;
93
97
  /** Portable semantic-token writes. */
94
98
  tokens?: Partial<Record<TokenName, TokenValue>>;
95
99
  /** Replacements for exact theme-local names enrolled by the root lineage. */
@@ -123,7 +127,7 @@ export interface ThemeGenerativeAxes {
123
127
  typography?: TypographyConfig;
124
128
  color?: ColorScaleConfig;
125
129
  radius?: RadiusScaleConfig;
126
- motion?: MotionScaleConfig;
130
+ motion?: ThemeMotionConfig;
127
131
  }
128
132
  /** One rule lowered to concrete CSS writes. */
129
133
  export interface ResolvedThemeAdaptationRule {
@@ -1 +1 @@
1
- {"version":3,"file":"themeAdaptations.d.ts","sourceRoot":"","sources":["../../src/theme/themeAdaptations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"themeAdaptations.d.ts","sourceRoot":"","sources":["../../src/theme/themeAdaptations.ts"],"names":[],"mappings":"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"}
@@ -344,20 +344,43 @@ function completeRadius(root, rule, path) {
344
344
  };
345
345
  }
346
346
  function completeMotion(root, rule, path) {
347
- const fast = rule.fast ?? root?.fast;
348
- const medium = rule.medium ?? root?.medium;
349
- const ratio = rule.ratio ?? root?.ratio;
347
+ // Not a public field, but a plain-JS caller may still pass it.
348
+ if (rule.reducedMotion !== undefined) {
349
+ throw new Error(`${path}.reducedMotion is a theme-wide setting: set it on the theme's own ` + `motion, not in an adaptation rule.`);
350
+ }
351
+ const tempo = rule.tempo ?? root?.tempo;
352
+ const character = rule.character ?? root?.character;
353
+ const knobs = {
354
+ ...(tempo !== undefined ? {
355
+ tempo
356
+ } : {}),
357
+ ...(character !== undefined ? {
358
+ character
359
+ } : {})
360
+ };
361
+ if (knobs.tempo !== undefined) {
362
+ assertFiniteNumber(knobs.tempo, `${path}.tempo`);
363
+ }
364
+ const rootScale = root != null && 'fast' in root ? root : {};
365
+ const writesScale = rule.fast !== undefined || rule.medium !== undefined || rule.ratio !== undefined || rule.slow !== undefined || rule.easing !== undefined;
366
+ if (!writesScale && 'fast' in rootScale === false) {
367
+ // Knobs only, over a root with no scale: the knobs generate the tokens.
368
+ return knobs;
369
+ }
370
+ const fast = rule.fast ?? rootScale.fast;
371
+ const medium = rule.medium ?? rootScale.medium;
372
+ const ratio = rule.ratio ?? rootScale.ratio;
350
373
  if (fast === undefined || medium === undefined || ratio === undefined) {
351
374
  throw new Error(`${path} must supply \`fast\`, \`medium\`, and \`ratio\` unless each missing field exists on the effective root motion axis.`);
352
375
  }
353
376
  assertFiniteNumber(fast, `${path}.fast`);
354
377
  assertFiniteNumber(medium, `${path}.medium`);
355
378
  assertFiniteNumber(ratio, `${path}.ratio`);
356
- const slow = rule.slow ?? root?.slow;
379
+ const slow = rule.slow ?? rootScale.slow;
357
380
  if (slow !== undefined) {
358
381
  assertFiniteNumber(slow, `${path}.slow`);
359
382
  }
360
- const easing = rule.easing ?? root?.easing;
383
+ const easing = rule.easing ?? rootScale.easing;
361
384
  return {
362
385
  fast,
363
386
  medium,
@@ -367,7 +390,8 @@ function completeMotion(root, rule, path) {
367
390
  } : {}),
368
391
  ...(easing !== undefined ? {
369
392
  easing
370
- } : {})
393
+ } : {}),
394
+ ...knobs
371
395
  };
372
396
  }
373
397
  function valueToThemeInput(themeName, ruleIndex, value, axes) {
@@ -640,8 +664,13 @@ export function resolveThemeAdaptationRules(themeName, adaptations, axes, rootTo
640
664
  // acceptance to preserve, so a malformed token is rejected here rather
641
665
  // than emitted. The root path stays lenient for compatibility.
642
666
  // SYNC: packages/core/src/theme/resolveThemeValues.ts (resolveTokenValue)
667
+ // A rule without motion of its own keeps the theme's character, so its
668
+ // explicit --ease-standard leaves that character's curves alone; one
669
+ // at 'standard' matches the theme's --ease-standard.
643
670
  {
644
- strictTokens: true
671
+ strictTokens: true,
672
+ inheritedCharacter: axes.motion?.character,
673
+ standardBeneath: rootTokens['--ease-standard']
645
674
  });
646
675
  for (const [name, value] of Object.entries(resolved.tokens)) {
647
676
  assertConcreteLeaf(value, `defineTheme("${themeName}").adaptations.rules[${index}].value.tokens["${name}"]`);
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @file themeMotion.ts
3
+ * @input A theme's motion configuration: the knobs (`tempo`, `character`),
4
+ * the existing `MotionScaleConfig`, or both
5
+ * @output The resolved knobs, the motion tokens they generate, and
6
+ * `resolveThemeMotion`, the internal resolver the animator and server code
7
+ * read (`spec:AST-108` FR1, FR2, FR5, FR6)
8
+ * @position Theme utility; consumed by resolveThemeValues.ts. Pure: no DOM,
9
+ * no import-time work, safe on the server.
10
+ *
11
+ * `tempo` scales every motion duration token, clamped to 0.75–1.5.
12
+ * `character` picks the entrance and move curves. Every theme follows each
13
+ * person's Reduce Motion setting (`reducedMotion` resolves to `'system'`).
14
+ * No spring reads the knobs yet. With the defaults (tempo 1, `'standard'`, `'system'`) every token is
15
+ * today's.
16
+ *
17
+ * A `MotionScaleConfig` keeps generating its duration tokens, and its fields
18
+ * win over `tempo` (FR5); explicit `tokens` win over both in
19
+ * resolveThemeValues.
20
+ *
21
+ * SYNC: When modified, update:
22
+ * - /packages/core/src/theme/themeMotion.test.ts
23
+ * - /packages/core/src/theme/resolveThemeValues.ts
24
+ * - /packages/core/src/theme/defineTheme.ts (the `motion` field's docs)
25
+ */
26
+ import { type MotionScaleConfig } from './expandMotionScale.js';
27
+ import { type ResolvedMotionKnobs, type ThemeMotionKnobs } from './motionKnobs.js';
28
+ export { TEMPO_RANGE, type MotionCharacter, type ResolvedMotionKnobs, type ThemeMotionKnobs, type ThemeReducedMotion, } from './motionKnobs.js';
29
+ /**
30
+ * A theme's `motion`: the knobs, the existing `MotionScaleConfig`, or both.
31
+ * A `MotionScaleConfig`'s fields win over `tempo` for the durations they set.
32
+ */
33
+ export type ThemeMotionConfig = ThemeMotionKnobs | (MotionScaleConfig & ThemeMotionKnobs);
34
+ /**
35
+ * The entrance and move curve at each character. `'standard'` is the theme's
36
+ * `--ease-standard`, so a theme that overrides that easing keeps its entrances
37
+ * on it.
38
+ */
39
+ export declare const CHARACTER_EASE: {
40
+ readonly crisp: "cubic-bezier(0, 0, 0.2, 1)";
41
+ readonly standard: null;
42
+ readonly expressive: "cubic-bezier(0.3, 1.2, 0.5, 1)";
43
+ };
44
+ /** The knobs of `config`, defaults filled in, `tempo` clamped. */
45
+ export declare function resolveMotionKnobs(config: ThemeMotionConfig | undefined): ResolvedMotionKnobs;
46
+ /**
47
+ * The private custom property a theme with a `tempo` writes beside its
48
+ * duration tokens: the press release fade (`utils/interactionOverlay.stylex.ts`)
49
+ * multiplies its clock by it.
50
+ */
51
+ export declare const MOTION_TEMPO_PROPERTY = "--_astryx-motion-tempo";
52
+ /** The duration tokens at `tempo`: today's values times it, to the ms. */
53
+ export declare function durationTokensAt(tempo: number): Record<string, string>;
54
+ /**
55
+ * The private custom property holding a duration token's value before
56
+ * `tempo` scaled it (`--duration-slow` → `--_astryx-pre-tempo-duration-slow`).
57
+ * Busy loops (Spinner, Skeleton) read it, falling back to the token, so their
58
+ * timing follows a duration scale or an explicit token but never `tempo`
59
+ * (FR4). Private, like every property the knobs add beside the core tokens
60
+ * (`architecture:theme-tokens` INV1).
61
+ */
62
+ export declare function preTempoName(token: string): string;
63
+ /**
64
+ * The motion tokens `config` generates (FR2, FR5): `--duration-*` times
65
+ * `tempo`, with a `MotionScaleConfig`'s own durations winning, and the
66
+ * job-named `--ease-entrance` and `--ease-move` at the theme's character.
67
+ * A knob the config leaves out writes nothing, so a theme extending another
68
+ * keeps the base's value for it; a knob it sets is written even at its
69
+ * default, so a child can set a base's tempo back to 1.
70
+ */
71
+ export declare function expandThemeMotion(config: ThemeMotionConfig): Record<string, string>;
72
+ /** What `resolveThemeMotion` returns for a theme. */
73
+ export interface ThemeMotion {
74
+ /** The knobs, defaults filled in. */
75
+ readonly knobs: ResolvedMotionKnobs;
76
+ /** Every `--duration-*` token's value. */
77
+ readonly durations: Readonly<Record<string, string>>;
78
+ /** `--ease-standard`, `--ease-entrance` and `--ease-move`. */
79
+ readonly easings: Readonly<Record<string, string>>;
80
+ }
81
+ /**
82
+ * A theme's motion values, for the animator and for server code (FR6): the
83
+ * knobs, and the duration and easing tokens they resolve to with the theme's
84
+ * explicit tokens applied. A token written as a reference (`var(--name)`)
85
+ * resolves through the theme's tokens, as `resolveThemeTokens` resolves it
86
+ * (`architecture:theme-tokens` INV6). Pure: it reads only `theme`.
87
+ */
88
+ export declare function resolveThemeMotion(theme: {
89
+ readonly motion?: ThemeMotionConfig;
90
+ readonly __axes?: {
91
+ readonly motion?: ThemeMotionConfig;
92
+ };
93
+ readonly tokens?: Readonly<Record<string, unknown>>;
94
+ readonly localTokens?: Readonly<Record<string, unknown>>;
95
+ }): ThemeMotion;
96
+ //# sourceMappingURL=themeMotion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themeMotion.d.ts","sourceRoot":"","sources":["../../src/theme/themeMotion.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAoB,KAAK,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAIvB,OAAO,EACL,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAC;AAEvB;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAC3B,gBAAgB,GAAG,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,CAAC;AAE5D;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;CAIgC,CAAC;AAE5D,kEAAkE;AAClE,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GACpC,mBAAmB,CAErB;AAaD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAE9D,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMtE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmCxB;AAED,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAA;KAAC,CAAC;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1D,GAAG,WAAW,CAyCd"}
@@ -0,0 +1,177 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file themeMotion.ts
5
+ * @input A theme's motion configuration: the knobs (`tempo`, `character`),
6
+ * the existing `MotionScaleConfig`, or both
7
+ * @output The resolved knobs, the motion tokens they generate, and
8
+ * `resolveThemeMotion`, the internal resolver the animator and server code
9
+ * read (`spec:AST-108` FR1, FR2, FR5, FR6)
10
+ * @position Theme utility; consumed by resolveThemeValues.ts. Pure: no DOM,
11
+ * no import-time work, safe on the server.
12
+ *
13
+ * `tempo` scales every motion duration token, clamped to 0.75–1.5.
14
+ * `character` picks the entrance and move curves. Every theme follows each
15
+ * person's Reduce Motion setting (`reducedMotion` resolves to `'system'`).
16
+ * No spring reads the knobs yet. With the defaults (tempo 1, `'standard'`, `'system'`) every token is
17
+ * today's.
18
+ *
19
+ * A `MotionScaleConfig` keeps generating its duration tokens, and its fields
20
+ * win over `tempo` (FR5); explicit `tokens` win over both in
21
+ * resolveThemeValues.
22
+ *
23
+ * SYNC: When modified, update:
24
+ * - /packages/core/src/theme/themeMotion.test.ts
25
+ * - /packages/core/src/theme/resolveThemeValues.ts
26
+ * - /packages/core/src/theme/defineTheme.ts (the `motion` field's docs)
27
+ */
28
+
29
+ import { expandMotionScale } from "./expandMotionScale.js";
30
+ import { resolveKnobs } from "./motionKnobs.js";
31
+ import { durationDefaults, easeDefaults } from "./tokens.stylex.js";
32
+ import { resolveTokenReferences } from "./tokenReferences.js";
33
+ export { TEMPO_RANGE } from "./motionKnobs.js";
34
+
35
+ /**
36
+ * A theme's `motion`: the knobs, the existing `MotionScaleConfig`, or both.
37
+ * A `MotionScaleConfig`'s fields win over `tempo` for the durations they set.
38
+ */
39
+
40
+ /**
41
+ * The entrance and move curve at each character. `'standard'` is the theme's
42
+ * `--ease-standard`, so a theme that overrides that easing keeps its entrances
43
+ * on it.
44
+ */
45
+ export const CHARACTER_EASE = {
46
+ crisp: 'cubic-bezier(0, 0, 0.2, 1)',
47
+ standard: null,
48
+ expressive: 'cubic-bezier(0.3, 1.2, 0.5, 1)'
49
+ };
50
+
51
+ /** The knobs of `config`, defaults filled in, `tempo` clamped. */
52
+ export function resolveMotionKnobs(config) {
53
+ return resolveKnobs(config);
54
+ }
55
+ function isScaleConfig(config) {
56
+ return 'fast' in config && 'medium' in config && 'ratio' in config;
57
+ }
58
+
59
+ /** A duration token's value in ms (`'175ms'` → 175). */
60
+ function msOf(value) {
61
+ return Number.parseFloat(value);
62
+ }
63
+
64
+ /**
65
+ * The private custom property a theme with a `tempo` writes beside its
66
+ * duration tokens: the press release fade (`utils/interactionOverlay.stylex.ts`)
67
+ * multiplies its clock by it.
68
+ */
69
+ export const MOTION_TEMPO_PROPERTY = '--_astryx-motion-tempo';
70
+
71
+ /** The duration tokens at `tempo`: today's values times it, to the ms. */
72
+ export function durationTokensAt(tempo) {
73
+ const tokens = {};
74
+ for (const [name, value] of Object.entries(durationDefaults)) {
75
+ tokens[name] = `${Math.round(msOf(value) * tempo)}ms`;
76
+ }
77
+ return tokens;
78
+ }
79
+
80
+ /**
81
+ * The private custom property holding a duration token's value before
82
+ * `tempo` scaled it (`--duration-slow` → `--_astryx-pre-tempo-duration-slow`).
83
+ * Busy loops (Spinner, Skeleton) read it, falling back to the token, so their
84
+ * timing follows a duration scale or an explicit token but never `tempo`
85
+ * (FR4). Private, like every property the knobs add beside the core tokens
86
+ * (`architecture:theme-tokens` INV1).
87
+ */
88
+ export function preTempoName(token) {
89
+ return token.replace(/^--duration-/, '--_astryx-pre-tempo-duration-');
90
+ }
91
+
92
+ /**
93
+ * The motion tokens `config` generates (FR2, FR5): `--duration-*` times
94
+ * `tempo`, with a `MotionScaleConfig`'s own durations winning, and the
95
+ * job-named `--ease-entrance` and `--ease-move` at the theme's character.
96
+ * A knob the config leaves out writes nothing, so a theme extending another
97
+ * keeps the base's value for it; a knob it sets is written even at its
98
+ * default, so a child can set a base's tempo back to 1.
99
+ */
100
+ export function expandThemeMotion(config) {
101
+ const knobs = resolveMotionKnobs(config);
102
+ const tokens = {};
103
+ if (knobs.tempoIsSet) {
104
+ Object.assign(tokens, durationTokensAt(knobs.tempo));
105
+ for (const [name, value] of Object.entries(durationDefaults)) {
106
+ tokens[preTempoName(name)] = value;
107
+ }
108
+ // The press release fade, a fixed clock in the stylesheet, scales by the
109
+ // tempo itself (FR4; `component:Button` FR15), read where it plays.
110
+ tokens[MOTION_TEMPO_PROPERTY] = String(knobs.tempo);
111
+ }
112
+ if (isScaleConfig(config)) {
113
+ const scale = expandMotionScale(config);
114
+ Object.assign(tokens, scale);
115
+ if (knobs.tempoIsSet) {
116
+ for (const [name, value] of Object.entries(scale)) {
117
+ if (name.startsWith('--duration-')) {
118
+ tokens[preTempoName(name)] = value;
119
+ }
120
+ }
121
+ }
122
+ }
123
+ const scaleEasing = isScaleConfig(config) && config.easing != null ? config.easing : null;
124
+ const ease = CHARACTER_EASE[knobs.character] ?? (config.character != null ? scaleEasing ?? easeDefaults['--ease-standard'] : scaleEasing);
125
+ if (ease != null) {
126
+ tokens['--ease-entrance'] = ease;
127
+ tokens['--ease-move'] = ease;
128
+ }
129
+ return tokens;
130
+ }
131
+
132
+ /** What `resolveThemeMotion` returns for a theme. */
133
+
134
+ /**
135
+ * A theme's motion values, for the animator and for server code (FR6): the
136
+ * knobs, and the duration and easing tokens they resolve to with the theme's
137
+ * explicit tokens applied. A token written as a reference (`var(--name)`)
138
+ * resolves through the theme's tokens, as `resolveThemeTokens` resolves it
139
+ * (`architecture:theme-tokens` INV6). Pure: it reads only `theme`.
140
+ */
141
+ export function resolveThemeMotion(theme) {
142
+ // A defined theme's motion is its axes': its own merged with its base's.
143
+ const config = theme.__axes?.motion ?? theme.motion;
144
+ const knobs = resolveMotionKnobs(config);
145
+ const generated = config ? expandThemeMotion(config) : {};
146
+ // The graph the references resolve through: the defaults, the knobs'
147
+ // tokens, then the theme's own (a light/dark pair is not a motion value, so
148
+ // only plain strings take part).
149
+ const graph = {
150
+ ...durationDefaults,
151
+ ...easeDefaults,
152
+ ...generated
153
+ };
154
+ for (const tokens of [theme.localTokens, theme.tokens]) {
155
+ for (const [name, value] of Object.entries(tokens ?? {})) {
156
+ if (typeof value === 'string') {
157
+ graph[name] = value;
158
+ }
159
+ }
160
+ }
161
+ const explicit = name => typeof theme.tokens?.[name] === 'string' || name in generated;
162
+ const resolved = resolveTokenReferences(graph);
163
+ const durations = {};
164
+ for (const name of Object.keys(durationDefaults)) {
165
+ durations[name] = resolved[name];
166
+ }
167
+ const standard = resolved['--ease-standard'];
168
+ return {
169
+ knobs,
170
+ durations,
171
+ easings: {
172
+ '--ease-standard': standard,
173
+ '--ease-entrance': explicit('--ease-entrance') ? resolved['--ease-entrance'] : standard,
174
+ '--ease-move': explicit('--ease-move') ? resolved['--ease-move'] : standard
175
+ }
176
+ };
177
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @file tokenReferences.ts
3
+ * @input A flat map of token names to raw CSS values
4
+ * @output `resolveTokenReferences`, which follows `var(--name[, fallback])`
5
+ * references through the map, and the CSS parsing helpers it shares
6
+ * (`splitTopLevelComma`, `findMatchingParen`)
7
+ * @position Theme utility with no imports: tokens.ts resolves a theme's token
8
+ * graph on it (evaluating color functions as it goes), and themeMotion.ts
9
+ * resolves motion tokens written as references on it. Pure; safe on the
10
+ * server.
11
+ *
12
+ * SYNC: When modified, update:
13
+ * - /packages/core/src/theme/tokens.ts
14
+ * - /packages/core/src/theme/themeMotion.ts
15
+ */
16
+ /**
17
+ * Split the arguments of a CSS function body on the first top-level comma.
18
+ * Handles nested functions such as rgba(), color-mix(), var(), and quoted strings.
19
+ */
20
+ export declare function splitTopLevelComma(input: string): [string, string] | null;
21
+ /** Index of the `)` matching the `(` at `openIndex`, or -1 when unbalanced. */
22
+ export declare function findMatchingParen(input: string, openIndex: number): number;
23
+ /**
24
+ * Resolves every value in `raw` to a concrete one: each `var(--name[,
25
+ * fallback])` is replaced by `name`'s resolved value, or by its fallback when
26
+ * `raw` has no `name`, and is kept as written when neither exists or the
27
+ * references form a cycle. `evaluate` then runs on each substituted value
28
+ * (tokens.ts evaluates CSS color functions there).
29
+ */
30
+ export declare function resolveTokenReferences(raw: Readonly<Record<string, string>>, evaluate?: (expr: string) => string): Record<string, string>;
31
+ //# sourceMappingURL=tokenReferences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenReferences.d.ts","sourceRoot":"","sources":["../../src/theme/tokenReferences.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAwCzE;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAc1E;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACrC,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAqB,GAChD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyDxB"}