@astryxdesign/core 0.7.8 → 0.7.9-canary.0200dfe

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 (585) hide show
  1. package/dist/AppShell/observeMainOverflow.d.ts.map +1 -1
  2. package/dist/AppShell/observeMainOverflow.js +9 -6
  3. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  4. package/dist/BottomSheet/BottomSheet.js +37 -3
  5. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  6. package/dist/BottomSheet/BottomSheetPanel.js +40 -8
  7. package/dist/BottomSheet/bottomSheetStack.d.ts.map +1 -1
  8. package/dist/BottomSheet/bottomSheetStack.js +4 -3
  9. package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
  10. package/dist/BottomSheet/useSheetGestures.js +61 -21
  11. package/dist/Calendar/Calendar.d.ts +14 -2
  12. package/dist/Calendar/Calendar.d.ts.map +1 -1
  13. package/dist/Calendar/Calendar.js +63 -74
  14. package/dist/Calendar/getInitialFocusDate.d.ts +4 -1
  15. package/dist/Calendar/getInitialFocusDate.d.ts.map +1 -1
  16. package/dist/Calendar/getInitialFocusDate.js +7 -5
  17. package/dist/Calendar/hooks/useCalendarDays.d.ts +19 -2
  18. package/dist/Calendar/hooks/useCalendarDays.d.ts.map +1 -1
  19. package/dist/Calendar/hooks/useCalendarDays.js +57 -64
  20. package/dist/Calendar/hooks/useCalendarNavigation.d.ts +28 -3
  21. package/dist/Calendar/hooks/useCalendarNavigation.d.ts.map +1 -1
  22. package/dist/Calendar/hooks/useCalendarNavigation.js +33 -22
  23. package/dist/Calendar/styles.d.ts +1 -1
  24. package/dist/CheckboxInput/CheckboxInput.d.ts +2 -1
  25. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  26. package/dist/CheckboxInput/CheckboxInput.js +74 -18
  27. package/dist/CheckboxInput/CheckboxRowPressContext.d.ts +2 -0
  28. package/dist/CheckboxInput/CheckboxRowPressContext.d.ts.map +1 -0
  29. package/dist/CheckboxInput/CheckboxRowPressContext.js +20 -0
  30. package/dist/CheckboxList/CheckboxListItem.d.ts +2 -1
  31. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  32. package/dist/CheckboxList/CheckboxListItem.js +40 -14
  33. package/dist/ClickableCard/ClickableCard.d.ts +1 -1
  34. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  35. package/dist/ClickableCard/ClickableCard.js +5 -1
  36. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  37. package/dist/ContextMenu/ContextMenu.js +2 -0
  38. package/dist/DateInput/DateInput.d.ts +37 -6
  39. package/dist/DateInput/DateInput.d.ts.map +1 -1
  40. package/dist/DateInput/DateInput.js +97 -124
  41. package/dist/DateInput/MonthScroller.d.ts +5 -2
  42. package/dist/DateInput/MonthScroller.d.ts.map +1 -1
  43. package/dist/DateInput/MonthScroller.js +26 -29
  44. package/dist/DateInput/MonthYearWheels.d.ts +10 -1
  45. package/dist/DateInput/MonthYearWheels.d.ts.map +1 -1
  46. package/dist/DateInput/MonthYearWheels.js +54 -42
  47. package/dist/DateInput/PickerWheel.d.ts.map +1 -1
  48. package/dist/DateInput/PickerWheel.js +7 -1
  49. package/dist/DateInput/TouchDateField.d.ts +1 -1
  50. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  51. package/dist/DateInput/TouchDateField.js +26 -21
  52. package/dist/DateInput/monthGeometry.d.ts +42 -8
  53. package/dist/DateInput/monthGeometry.d.ts.map +1 -1
  54. package/dist/DateInput/monthGeometry.js +81 -7
  55. package/dist/DateInput/useCalendarPresentation.d.ts +10 -0
  56. package/dist/DateInput/useCalendarPresentation.d.ts.map +1 -0
  57. package/dist/DateInput/useCalendarPresentation.js +32 -0
  58. package/dist/DateInput/useTypedDate.d.ts +92 -0
  59. package/dist/DateInput/useTypedDate.d.ts.map +1 -0
  60. package/dist/DateInput/useTypedDate.js +269 -0
  61. package/dist/DateInput/wheelStrip.js +2 -2
  62. package/dist/DateRangeInput/DateRangeInput.d.ts +17 -1
  63. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  64. package/dist/DateRangeInput/DateRangeInput.js +15 -8
  65. package/dist/DateTimeInput/DateTimeInput.d.ts +26 -3
  66. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  67. package/dist/DateTimeInput/DateTimeInput.js +92 -88
  68. package/dist/DateTimeInput/TouchDateTimeField.d.ts +1 -1
  69. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  70. package/dist/DateTimeInput/TouchDateTimeField.js +26 -20
  71. package/dist/Dialog/Dialog.d.ts +2 -1
  72. package/dist/Dialog/Dialog.d.ts.map +1 -1
  73. package/dist/Dialog/Dialog.js +14 -3
  74. package/dist/Drawer/useDrawerDialogPresence.d.ts +2 -1
  75. package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
  76. package/dist/Drawer/useDrawerDialogPresence.js +11 -2
  77. package/dist/DropdownMenu/DropdownMenu.d.ts +9 -1
  78. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  79. package/dist/DropdownMenu/DropdownMenu.js +11 -8
  80. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
  81. package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +3 -2
  82. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  83. package/dist/DropdownMenu/DropdownMenuItem.js +3 -2
  84. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
  85. package/dist/DropdownMenu/DropdownMenuRadioItem.js +3 -2
  86. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
  87. package/dist/DropdownMenu/DropdownMenuSubMenu.js +3 -2
  88. package/dist/Field/inputDisabledFocus.d.ts +4 -4
  89. package/dist/Field/inputStyles.stylex.d.ts +1 -1
  90. package/dist/FileInput/FileInput.d.ts.map +1 -1
  91. package/dist/FileInput/FileInput.js +16 -2
  92. package/dist/HoverCard/useHoverCard.d.ts +3 -1
  93. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  94. package/dist/Icon/Icon.d.ts +1 -1
  95. package/dist/InfoTip/InfoTip.d.ts +1 -0
  96. package/dist/InfoTip/InfoTip.d.ts.map +1 -1
  97. package/dist/InfoTip/InfoTip.js +6 -18
  98. package/dist/InputGroup/InputGroup.d.ts +4 -3
  99. package/dist/InputGroup/InputGroup.d.ts.map +1 -1
  100. package/dist/InputGroup/InputGroup.js +2 -2
  101. package/dist/InputGroup/InputGroupText.d.ts +2 -1
  102. package/dist/InputGroup/InputGroupText.d.ts.map +1 -1
  103. package/dist/InputGroup/InputGroupText.js +2 -1
  104. package/dist/InputGroup/groupStyles.d.ts +1 -1
  105. package/dist/InputGroup/groupStyles.d.ts.map +1 -1
  106. package/dist/InputGroup/groupStyles.js +1 -1
  107. package/dist/Item/Item.d.ts +20 -1
  108. package/dist/Item/Item.d.ts.map +1 -1
  109. package/dist/Item/Item.js +97 -29
  110. package/dist/Item/ItemListRowContext.d.ts +2 -0
  111. package/dist/Item/ItemListRowContext.d.ts.map +1 -0
  112. package/dist/Item/ItemListRowContext.js +16 -0
  113. package/dist/Layer/holdEntranceInput.d.ts +24 -0
  114. package/dist/Layer/holdEntranceInput.d.ts.map +1 -0
  115. package/dist/Layer/holdEntranceInput.js +65 -0
  116. package/dist/Layer/inputHold.d.ts +49 -0
  117. package/dist/Layer/inputHold.d.ts.map +1 -0
  118. package/dist/Layer/inputHold.js +636 -0
  119. package/dist/Layer/outsidePress.d.ts +4 -0
  120. package/dist/Layer/outsidePress.d.ts.map +1 -1
  121. package/dist/Layer/outsidePress.js +18 -1
  122. package/dist/Layer/preserveAnimations.d.ts +1 -5
  123. package/dist/Layer/preserveAnimations.d.ts.map +1 -1
  124. package/dist/Layer/preserveAnimations.js +12 -214
  125. package/dist/Layer/useBackdropPress.d.ts +8 -0
  126. package/dist/Layer/useBackdropPress.d.ts.map +1 -1
  127. package/dist/Layer/useBackdropPress.js +31 -2
  128. package/dist/Layer/useLayer.d.ts +3 -1
  129. package/dist/Layer/useLayer.d.ts.map +1 -1
  130. package/dist/Layer/useLayer.js +64 -4
  131. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  132. package/dist/Layer/useTouchTrigger.js +4 -0
  133. package/dist/Layout/LayoutContent.d.ts +3 -1
  134. package/dist/Layout/LayoutContent.d.ts.map +1 -1
  135. package/dist/Layout/LayoutContent.js +12 -4
  136. package/dist/Layout/LayoutPanel.d.ts +13 -10
  137. package/dist/Layout/LayoutPanel.d.ts.map +1 -1
  138. package/dist/Layout/LayoutPanel.js +81 -11
  139. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  140. package/dist/Lightbox/Lightbox.js +4 -0
  141. package/dist/List/List.d.ts.map +1 -1
  142. package/dist/List/List.js +1 -0
  143. package/dist/List/ListItem.d.ts +5 -4
  144. package/dist/List/ListItem.d.ts.map +1 -1
  145. package/dist/List/ListItem.js +45 -9
  146. package/dist/Markdown/parser.d.ts.map +1 -1
  147. package/dist/Markdown/parser.js +56 -39
  148. package/dist/MetadataList/MetadataList.js +1 -1
  149. package/dist/MobileNav/MobileNav.d.ts +11 -1
  150. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  151. package/dist/MobileNav/MobileNav.js +39 -1
  152. package/dist/MoreMenu/MoreMenu.d.ts +5 -3
  153. package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
  154. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  155. package/dist/MultiSelector/MultiSelector.js +6 -9
  156. package/dist/NumberInput/NumberInput.d.ts +4 -2
  157. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  158. package/dist/NumberInput/NumberInput.js +244 -11
  159. package/dist/OverflowList/OverflowList.d.ts.map +1 -1
  160. package/dist/OverflowList/OverflowList.js +7 -2
  161. package/dist/Popover/usePopover.d.ts +1 -0
  162. package/dist/Popover/usePopover.d.ts.map +1 -1
  163. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  164. package/dist/PowerSearch/PowerSearch.js +12 -5
  165. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -1
  166. package/dist/PowerSearch/PowerSearchBottomSheet.js +4 -2
  167. package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
  168. package/dist/PowerSearch/PowerSearchToken.js +3 -1
  169. package/dist/PowerSearch/formatFilterValue.d.ts +9 -3
  170. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  171. package/dist/PowerSearch/formatFilterValue.js +14 -11
  172. package/dist/PowerSearch/formatTokenValue.d.ts +6 -2
  173. package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -1
  174. package/dist/PowerSearch/formatTokenValue.js +6 -3
  175. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  176. package/dist/RadioList/RadioListItem.js +16 -3
  177. package/dist/Resizable/ResizeHandle.d.ts +5 -5
  178. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  179. package/dist/Resizable/ResizeHandle.js +44 -5
  180. package/dist/Resizable/resizablePane.d.ts +58 -0
  181. package/dist/Resizable/resizablePane.d.ts.map +1 -0
  182. package/dist/Resizable/resizablePane.js +137 -0
  183. package/dist/Resizable/useResizable.d.ts +7 -0
  184. package/dist/Resizable/useResizable.d.ts.map +1 -1
  185. package/dist/Resizable/useResizable.js +13 -0
  186. package/dist/SegmentedControl/useSegmentedSelectionMotion.js +3 -3
  187. package/dist/SelectableCard/SelectableCard.d.ts +1 -1
  188. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  189. package/dist/SelectableCard/SelectableCard.js +5 -1
  190. package/dist/Selector/Selector.d.ts.map +1 -1
  191. package/dist/Selector/Selector.js +51 -10
  192. package/dist/SideNav/SideNav.d.ts +9 -3
  193. package/dist/SideNav/SideNav.d.ts.map +1 -1
  194. package/dist/SideNav/SideNav.js +45 -10
  195. package/dist/Slider/sliderTouchController.js +2 -2
  196. package/dist/Spinner/Spinner.d.ts.map +1 -1
  197. package/dist/Spinner/Spinner.js +14 -71
  198. package/dist/Spinner/index.d.ts +1 -1
  199. package/dist/Spinner/index.d.ts.map +1 -1
  200. package/dist/Spinner/spinnerRotor.d.ts +28 -0
  201. package/dist/Spinner/spinnerRotor.d.ts.map +1 -0
  202. package/dist/Spinner/spinnerRotor.js +98 -0
  203. package/dist/Stack/StackItem.d.ts +8 -4
  204. package/dist/Stack/StackItem.d.ts.map +1 -1
  205. package/dist/Stack/StackItem.js +17 -4
  206. package/dist/Switch/Switch.d.ts.map +1 -1
  207. package/dist/Switch/Switch.js +13 -10
  208. package/dist/Switch/useSwitchTouch.js +4 -4
  209. package/dist/TabList/Tab.d.ts.map +1 -1
  210. package/dist/TabList/Tab.js +5 -1
  211. package/dist/Table/plugins/sortable/useTableSortable.js +1 -1
  212. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  213. package/dist/Timestamp/Timestamp.js +14 -8
  214. package/dist/Timestamp/formatInstant.d.ts +10 -1
  215. package/dist/Timestamp/formatInstant.d.ts.map +1 -1
  216. package/dist/Timestamp/formatInstant.js +13 -27
  217. package/dist/Timestamp/tooltipEntries.d.ts +5 -3
  218. package/dist/Timestamp/tooltipEntries.d.ts.map +1 -1
  219. package/dist/Timestamp/tooltipEntries.js +6 -4
  220. package/dist/Token/Token.d.ts.map +1 -1
  221. package/dist/Token/Token.js +9 -0
  222. package/dist/Token/TokenLink.d.ts +1 -1
  223. package/dist/Token/TokenLink.d.ts.map +1 -1
  224. package/dist/Token/TokenLink.js +4 -1
  225. package/dist/Tokenizer/Tokenizer.d.ts +14 -10
  226. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  227. package/dist/Tokenizer/Tokenizer.js +189 -89
  228. package/dist/Tooltip/useTooltip.d.ts +3 -1
  229. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  230. package/dist/Tooltip/useTooltip.js +164 -59
  231. package/dist/TreeList/TreeListItem.d.ts +2 -1
  232. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  233. package/dist/TreeList/TreeListItem.js +27 -3
  234. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  235. package/dist/Typeahead/BaseTypeahead.js +2 -1
  236. package/dist/animator/createAnimator.js +2 -2
  237. package/dist/astryx.css +362 -325
  238. package/dist/gestures/GestureHost.d.ts +2 -2
  239. package/dist/gestures/GestureHost.d.ts.map +1 -1
  240. package/dist/gestures/GestureHost.js +21 -6
  241. package/dist/gestures/PanGestureRecognizer.d.ts +11 -1
  242. package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -1
  243. package/dist/gestures/PanGestureRecognizer.js +15 -1
  244. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts +6 -1
  245. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -1
  246. package/dist/gestures/nativeScroll.d.ts +3 -6
  247. package/dist/gestures/nativeScroll.d.ts.map +1 -1
  248. package/dist/gestures/nativeScroll.js +7 -52
  249. package/dist/gestures/wheelSegmenter.d.ts +68 -1
  250. package/dist/gestures/wheelSegmenter.d.ts.map +1 -1
  251. package/dist/gestures/wheelSegmenter.js +199 -10
  252. package/dist/hooks/StackItemScrollRegion.d.ts +31 -0
  253. package/dist/hooks/StackItemScrollRegion.d.ts.map +1 -0
  254. package/dist/hooks/StackItemScrollRegion.js +40 -0
  255. package/dist/hooks/computeOverflow.d.ts +2 -0
  256. package/dist/hooks/computeOverflow.d.ts.map +1 -1
  257. package/dist/hooks/computeOverflow.js +1 -1
  258. package/dist/hooks/menuPressGesture.d.ts +133 -21
  259. package/dist/hooks/menuPressGesture.d.ts.map +1 -1
  260. package/dist/hooks/menuPressGesture.js +155 -30
  261. package/dist/hooks/menuPressValues.d.ts +16 -0
  262. package/dist/hooks/menuPressValues.d.ts.map +1 -0
  263. package/dist/hooks/menuPressValues.js +18 -0
  264. package/dist/hooks/useClickableContainer.d.ts +36 -7
  265. package/dist/hooks/useClickableContainer.d.ts.map +1 -1
  266. package/dist/hooks/useClickableContainer.js +63 -14
  267. package/dist/hooks/useFocusTrap.d.ts +10 -0
  268. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  269. package/dist/hooks/useFocusTrap.js +225 -132
  270. package/dist/hooks/useKeyboardHighlight.d.ts +17 -0
  271. package/dist/hooks/useKeyboardHighlight.d.ts.map +1 -0
  272. package/dist/hooks/useKeyboardHighlight.js +38 -0
  273. package/dist/hooks/useMediaQuery.d.ts +2 -1
  274. package/dist/hooks/useMediaQuery.d.ts.map +1 -1
  275. package/dist/hooks/useMediaQuery.js +37 -12
  276. package/dist/hooks/useMenuPress.d.ts +34 -1
  277. package/dist/hooks/useMenuPress.d.ts.map +1 -1
  278. package/dist/hooks/useMenuPress.js +93 -5
  279. package/dist/hooks/useOverflow.d.ts +10 -0
  280. package/dist/hooks/useOverflow.d.ts.map +1 -1
  281. package/dist/hooks/useOverflow.js +214 -23
  282. package/dist/hooks/usePressFeedback.d.ts +6 -6
  283. package/dist/hooks/usePressFeedback.js +6 -6
  284. package/dist/hooks/useScrollRegionProps.d.ts +35 -0
  285. package/dist/hooks/useScrollRegionProps.d.ts.map +1 -0
  286. package/dist/hooks/useScrollRegionProps.js +51 -0
  287. package/dist/i18n/InternationalizationContext.d.ts +6 -0
  288. package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
  289. package/dist/i18n/InternationalizationProvider.d.ts +23 -3
  290. package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
  291. package/dist/i18n/InternationalizationProvider.js +8 -3
  292. package/dist/i18n/generated-english/DateInput/DateInput.generated.d.ts.map +1 -1
  293. package/dist/i18n/generated-english/DateInput/DateInput.generated.js +0 -1
  294. package/dist/i18n/generated-english/DateInput/useTypedDate.generated.d.ts +8 -0
  295. package/dist/i18n/generated-english/DateInput/useTypedDate.generated.d.ts.map +1 -0
  296. package/dist/i18n/generated-english/DateInput/useTypedDate.generated.js +16 -0
  297. package/dist/i18n/generated-english/DateTimeInput/DateTimeInput.generated.d.ts.map +1 -1
  298. package/dist/i18n/generated-english/DateTimeInput/DateTimeInput.generated.js +0 -1
  299. package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.d.ts +8 -0
  300. package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.d.ts.map +1 -0
  301. package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.js +12 -0
  302. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  303. package/dist/i18n/generated-locales/en.generated.js +5 -0
  304. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  305. package/dist/i18n/generated-locales/pseudo.generated.js +5 -0
  306. package/dist/i18n/index.d.ts +2 -0
  307. package/dist/i18n/index.d.ts.map +1 -1
  308. package/dist/i18n/index.js +1 -0
  309. package/dist/i18n/useCalendarSystem.d.ts +19 -0
  310. package/dist/i18n/useCalendarSystem.d.ts.map +1 -0
  311. package/dist/i18n/useCalendarSystem.js +61 -0
  312. package/dist/internal/calendar-system.d.ts +18 -0
  313. package/dist/internal/calendar-system.d.ts.map +1 -0
  314. package/dist/internal/calendar-system.js +19 -0
  315. package/dist/internal/spinner-rotor.d.ts +16 -0
  316. package/dist/internal/spinner-rotor.d.ts.map +1 -0
  317. package/dist/internal/spinner-rotor.js +16 -0
  318. package/dist/internal/touch.d.ts +20 -2
  319. package/dist/internal/touch.d.ts.map +1 -1
  320. package/dist/internal/touch.js +29 -3
  321. package/dist/motion/animator.d.ts +5 -5
  322. package/dist/motion/animator.d.ts.map +1 -1
  323. package/dist/motion/animator.js +7 -6
  324. package/dist/motion/carryAnimations.d.ts +58 -0
  325. package/dist/motion/carryAnimations.d.ts.map +1 -0
  326. package/dist/motion/carryAnimations.js +305 -0
  327. package/dist/motion/transientCopy.d.ts +4 -2
  328. package/dist/motion/transientCopy.d.ts.map +1 -1
  329. package/dist/motion/transientCopy.js +34 -5
  330. package/dist/motion/uikit/gestures.d.ts +41 -0
  331. package/dist/motion/uikit/gestures.d.ts.map +1 -1
  332. package/dist/motion/uikit/gestures.js +25 -0
  333. package/dist/motion/uikit/index.d.ts +1 -1
  334. package/dist/motion/uikit/index.d.ts.map +1 -1
  335. package/dist/motion/uikit/index.js +1 -1
  336. package/dist/motion/uikit/timing.d.ts +14 -10
  337. package/dist/motion/uikit/timing.d.ts.map +1 -1
  338. package/dist/motion/uikit/timing.js +7 -5
  339. package/dist/privateAttributes/menuPressLit.stylex.d.ts +52 -0
  340. package/dist/privateAttributes/menuPressLit.stylex.d.ts.map +1 -0
  341. package/dist/privateAttributes/menuPressLit.stylex.js +99 -0
  342. package/dist/privateAttributes/press.stylex.d.ts +142 -0
  343. package/dist/privateAttributes/press.stylex.d.ts.map +1 -0
  344. package/dist/privateAttributes/press.stylex.js +101 -0
  345. package/dist/theme/themeMotion.d.ts +3 -2
  346. package/dist/theme/themeMotion.d.ts.map +1 -1
  347. package/dist/theme/themeMotion.js +3 -2
  348. package/dist/theme/tokens.stylex.d.ts +2 -2
  349. package/dist/theme/tokens.stylex.js +1 -1
  350. package/dist/utils/calendarDateParser.d.ts +110 -0
  351. package/dist/utils/calendarDateParser.d.ts.map +1 -0
  352. package/dist/utils/calendarDateParser.js +1225 -0
  353. package/dist/utils/calendarSystem.d.ts +176 -0
  354. package/dist/utils/calendarSystem.d.ts.map +1 -0
  355. package/dist/utils/calendarSystem.js +569 -0
  356. package/dist/utils/coarsePointer.d.ts +5 -0
  357. package/dist/utils/coarsePointer.d.ts.map +1 -1
  358. package/dist/utils/coarsePointer.js +22 -13
  359. package/dist/utils/flatTree.d.ts +6 -3
  360. package/dist/utils/flatTree.d.ts.map +1 -1
  361. package/dist/utils/flatTree.js +13 -3
  362. package/dist/utils/focusReturn.d.ts +34 -13
  363. package/dist/utils/focusReturn.d.ts.map +1 -1
  364. package/dist/utils/focusReturn.js +64 -17
  365. package/dist/utils/hitArea.d.ts +8 -1
  366. package/dist/utils/hitArea.d.ts.map +1 -1
  367. package/dist/utils/hitArea.js +99 -9
  368. package/dist/utils/inputPresentation.d.ts +9 -1
  369. package/dist/utils/inputPresentation.d.ts.map +1 -1
  370. package/dist/utils/inputPresentation.js +15 -1
  371. package/dist/utils/inputStream.d.ts +14 -1
  372. package/dist/utils/inputStream.d.ts.map +1 -1
  373. package/dist/utils/inputStream.js +40 -9
  374. package/dist/utils/interactionOverlay.stylex.d.ts +5 -9
  375. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  376. package/dist/utils/interactionOverlay.stylex.js +29 -31
  377. package/dist/utils/plainDate.d.ts +38 -7
  378. package/dist/utils/plainDate.d.ts.map +1 -1
  379. package/dist/utils/plainDate.js +92 -18
  380. package/dist/utils/pressFeedback.d.ts +10 -2
  381. package/dist/utils/pressFeedback.d.ts.map +1 -1
  382. package/dist/utils/pressFeedback.js +40 -15
  383. package/dist/utils/pressGesture.d.ts +12 -6
  384. package/dist/utils/pressGesture.d.ts.map +1 -1
  385. package/dist/utils/pressGesture.js +26 -8
  386. package/dist/utils/scrollView.d.ts +25 -0
  387. package/dist/utils/scrollView.d.ts.map +1 -0
  388. package/dist/utils/scrollView.js +108 -0
  389. package/dist/utils/selectionLock.d.ts.map +1 -1
  390. package/dist/utils/selectionLock.js +1 -10
  391. package/dist/utils/touchHitArea.d.ts +30 -0
  392. package/dist/utils/touchHitArea.d.ts.map +1 -0
  393. package/dist/utils/touchHitArea.js +167 -0
  394. package/dist/utils/touchHitArea.stylex.d.ts +38 -0
  395. package/dist/utils/touchHitArea.stylex.d.ts.map +1 -0
  396. package/dist/utils/touchHitArea.stylex.js +48 -0
  397. package/dist/utils/triggerFocus.d.ts +5 -0
  398. package/dist/utils/triggerFocus.d.ts.map +1 -1
  399. package/dist/utils/triggerFocus.js +9 -2
  400. package/locales/en.json +21 -1
  401. package/locales/pseudo.json +15 -0
  402. package/package.json +15 -4
  403. package/src/AppShell/observeMainOverflow.ts +9 -6
  404. package/src/BottomSheet/BottomSheet.tsx +45 -3
  405. package/src/BottomSheet/BottomSheetPanel.tsx +64 -7
  406. package/src/BottomSheet/bottomSheetStack.ts +4 -3
  407. package/src/BottomSheet/useSheetGestures.ts +83 -20
  408. package/src/Calendar/Calendar.doc.mjs +76 -6
  409. package/src/Calendar/Calendar.tsx +123 -104
  410. package/src/Calendar/getInitialFocusDate.ts +22 -8
  411. package/src/Calendar/hooks/useCalendarDays.ts +89 -63
  412. package/src/Calendar/hooks/useCalendarNavigation.ts +68 -26
  413. package/src/CheckboxInput/CheckboxInput.doc.mjs +5 -4
  414. package/src/CheckboxInput/CheckboxInput.tsx +105 -20
  415. package/src/CheckboxInput/CheckboxRowPressContext.ts +22 -0
  416. package/src/CheckboxList/CheckboxList.doc.mjs +9 -0
  417. package/src/CheckboxList/CheckboxListItem.doc.mjs +3 -3
  418. package/src/CheckboxList/CheckboxListItem.tsx +35 -14
  419. package/src/ClickableCard/ClickableCard.tsx +8 -1
  420. package/src/ContextMenu/ContextMenu.tsx +2 -0
  421. package/src/DateInput/DateInput.doc.mjs +45 -12
  422. package/src/DateInput/DateInput.tsx +165 -179
  423. package/src/DateInput/MonthScroller.tsx +39 -37
  424. package/src/DateInput/MonthYearWheels.tsx +68 -47
  425. package/src/DateInput/PickerWheel.tsx +7 -2
  426. package/src/DateInput/TouchDateField.tsx +45 -17
  427. package/src/DateInput/monthGeometry.ts +110 -8
  428. package/src/DateInput/useCalendarPresentation.ts +64 -0
  429. package/src/DateInput/useTypedDate.ts +469 -0
  430. package/src/DateInput/wheelStrip.ts +2 -2
  431. package/src/DateRangeInput/DateRangeInput.doc.mjs +9 -0
  432. package/src/DateRangeInput/DateRangeInput.tsx +43 -9
  433. package/src/DateTimeInput/DateTimeInput.doc.mjs +42 -9
  434. package/src/DateTimeInput/DateTimeInput.tsx +138 -148
  435. package/src/DateTimeInput/TouchDateTimeField.tsx +31 -16
  436. package/src/Dialog/Dialog.doc.mjs +1 -1
  437. package/src/Dialog/Dialog.tsx +14 -2
  438. package/src/Drawer/Drawer.doc.mjs +1 -1
  439. package/src/Drawer/useDrawerDialogPresence.ts +9 -2
  440. package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -2
  441. package/src/DropdownMenu/DropdownMenu.tsx +31 -7
  442. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +5 -1
  443. package/src/DropdownMenu/DropdownMenuItem.tsx +8 -4
  444. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +5 -1
  445. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +5 -1
  446. package/src/FileInput/FileInput.tsx +16 -2
  447. package/src/HoverCard/useHoverCard.tsx +3 -1
  448. package/src/Icon/useIcon.doc.mjs +94 -0
  449. package/src/InfoTip/InfoTip.doc.mjs +26 -2
  450. package/src/InfoTip/InfoTip.tsx +6 -27
  451. package/src/InputGroup/InputGroup.doc.mjs +4 -3
  452. package/src/InputGroup/InputGroup.tsx +4 -3
  453. package/src/InputGroup/InputGroupText.doc.mjs +45 -3
  454. package/src/InputGroup/InputGroupText.tsx +2 -1
  455. package/src/InputGroup/groupStyles.ts +3 -1
  456. package/src/Item/Item.tsx +139 -35
  457. package/src/Item/ItemListRowContext.tsx +18 -0
  458. package/src/Layer/holdEntranceInput.ts +84 -0
  459. package/src/Layer/inputHold.ts +734 -0
  460. package/src/Layer/outsidePress.ts +18 -1
  461. package/src/Layer/preserveAnimations.ts +12 -275
  462. package/src/Layer/useBackdropPress.ts +41 -1
  463. package/src/Layer/useLayer.tsx +77 -4
  464. package/src/Layer/useTouchTrigger.ts +4 -0
  465. package/src/Layout/LayoutContent.doc.mjs +6 -3
  466. package/src/Layout/LayoutContent.tsx +10 -4
  467. package/src/Layout/LayoutPanel.doc.mjs +14 -11
  468. package/src/Layout/LayoutPanel.tsx +113 -16
  469. package/src/Lightbox/Lightbox.tsx +4 -0
  470. package/src/List/List.doc.mjs +10 -1
  471. package/src/List/List.tsx +5 -0
  472. package/src/List/ListItem.tsx +63 -8
  473. package/src/Markdown/parser.ts +65 -42
  474. package/src/MetadataList/MetadataList.tsx +1 -1
  475. package/src/MobileNav/MobileNav.doc.mjs +3 -3
  476. package/src/MobileNav/MobileNav.tsx +39 -1
  477. package/src/MoreMenu/MoreMenu.doc.mjs +2 -4
  478. package/src/MoreMenu/MoreMenu.tsx +5 -3
  479. package/src/MultiSelector/MultiSelector.tsx +7 -17
  480. package/src/NumberInput/NumberInput.doc.mjs +1 -1
  481. package/src/NumberInput/NumberInput.tsx +259 -11
  482. package/src/OverflowList/OverflowList.tsx +15 -9
  483. package/src/Popover/usePopover.tsx +1 -0
  484. package/src/PowerSearch/PowerSearch.doc.mjs +3 -3
  485. package/src/PowerSearch/PowerSearch.tsx +20 -3
  486. package/src/PowerSearch/PowerSearchBottomSheet.tsx +4 -1
  487. package/src/PowerSearch/PowerSearchToken.tsx +3 -0
  488. package/src/PowerSearch/formatFilterValue.ts +21 -11
  489. package/src/PowerSearch/formatTokenValue.ts +7 -1
  490. package/src/RadioList/RadioListItem.doc.mjs +3 -2
  491. package/src/RadioList/RadioListItem.tsx +16 -6
  492. package/src/Resizable/Resizable.doc.mjs +40 -12
  493. package/src/Resizable/ResizeHandle.tsx +68 -6
  494. package/src/Resizable/resizablePane.ts +179 -0
  495. package/src/Resizable/useResizable.ts +15 -0
  496. package/src/SegmentedControl/useSegmentedSelectionMotion.ts +3 -3
  497. package/src/SelectableCard/SelectableCard.tsx +8 -1
  498. package/src/Selector/Selector.tsx +83 -8
  499. package/src/SideNav/SideNav.doc.mjs +2 -2
  500. package/src/SideNav/SideNav.tsx +87 -12
  501. package/src/Slider/sliderTouchController.ts +2 -2
  502. package/src/Spinner/Spinner.tsx +7 -89
  503. package/src/Spinner/index.ts +1 -5
  504. package/src/Spinner/spinnerRotor.ts +113 -0
  505. package/src/Stack/Stack.doc.mjs +1 -1
  506. package/src/Stack/StackItem.tsx +27 -13
  507. package/src/Switch/Switch.tsx +7 -6
  508. package/src/Switch/useSwitchTouch.ts +4 -4
  509. package/src/TabList/Tab.tsx +5 -1
  510. package/src/Table/plugins/sortable/useTableSortable.tsx +1 -1
  511. package/src/Timestamp/Timestamp.doc.mjs +3 -3
  512. package/src/Timestamp/Timestamp.tsx +13 -8
  513. package/src/Timestamp/formatInstant.ts +49 -28
  514. package/src/Timestamp/tooltipEntries.ts +7 -3
  515. package/src/Token/Token.tsx +18 -1
  516. package/src/Token/TokenLink.tsx +7 -1
  517. package/src/Tokenizer/Tokenizer.doc.mjs +3 -3
  518. package/src/Tokenizer/Tokenizer.tsx +252 -115
  519. package/src/Tooltip/useTooltip.tsx +180 -80
  520. package/src/TreeList/TreeListItem.tsx +36 -2
  521. package/src/Typeahead/BaseTypeahead.tsx +2 -0
  522. package/src/animator/createAnimator.ts +3 -3
  523. package/src/gestures/GestureHost.ts +21 -5
  524. package/src/gestures/PanGestureRecognizer.ts +19 -2
  525. package/src/gestures/README.md +14 -5
  526. package/src/gestures/ScreenEdgePanGestureRecognizer.ts +6 -1
  527. package/src/gestures/nativeScroll.ts +12 -68
  528. package/src/gestures/wheelSegmenter.ts +243 -10
  529. package/src/hooks/StackItemScrollRegion.tsx +57 -0
  530. package/src/hooks/computeOverflow.ts +1 -1
  531. package/src/hooks/menuPressGesture.ts +244 -38
  532. package/src/hooks/menuPressValues.ts +18 -0
  533. package/src/hooks/useClickableContainer.doc.mjs +8 -2
  534. package/src/hooks/useClickableContainer.ts +93 -15
  535. package/src/hooks/useFocusTrap.ts +268 -151
  536. package/src/hooks/useKeyboardHighlight.ts +71 -0
  537. package/src/hooks/useMediaQuery.ts +41 -12
  538. package/src/hooks/useMenuPress.ts +118 -11
  539. package/src/hooks/useOverflow.ts +321 -75
  540. package/src/hooks/usePressFeedback.doc.mjs +3 -3
  541. package/src/hooks/usePressFeedback.ts +6 -6
  542. package/src/hooks/useScrollRegionProps.ts +76 -0
  543. package/src/i18n/InternationalizationContext.ts +6 -0
  544. package/src/i18n/InternationalizationProvider.doc.mjs +29 -1
  545. package/src/i18n/InternationalizationProvider.tsx +35 -3
  546. package/src/i18n/generated-english/DateInput/DateInput.generated.ts +0 -1
  547. package/src/i18n/generated-english/DateInput/useTypedDate.generated.ts +17 -0
  548. package/src/i18n/generated-english/DateTimeInput/DateTimeInput.generated.ts +0 -1
  549. package/src/i18n/generated-english/hooks/useScrollRegionProps.generated.ts +13 -0
  550. package/src/i18n/generated-locales/en.generated.ts +7 -0
  551. package/src/i18n/generated-locales/pseudo.generated.ts +7 -0
  552. package/src/i18n/index.ts +2 -0
  553. package/src/i18n/useCalendarSystem.ts +95 -0
  554. package/src/internal/calendar-system.ts +26 -0
  555. package/src/internal/spinner-rotor.ts +20 -0
  556. package/src/internal/touch.ts +43 -2
  557. package/src/motion/MEASUREMENTS.md +11 -0
  558. package/src/motion/README.md +3 -3
  559. package/src/motion/animator.ts +7 -7
  560. package/src/motion/carryAnimations.ts +389 -0
  561. package/src/motion/transientCopy.ts +45 -5
  562. package/src/motion/uikit/gestures.ts +22 -0
  563. package/src/motion/uikit/index.ts +1 -0
  564. package/src/motion/uikit/timing.ts +7 -5
  565. package/src/privateAttributes/menuPressLit.stylex.ts +104 -0
  566. package/src/privateAttributes/press.stylex.ts +261 -0
  567. package/src/theme/themeMotion.ts +3 -2
  568. package/src/theme/tokens.stylex.ts +1 -1
  569. package/src/utils/calendarDateParser.ts +1385 -0
  570. package/src/utils/calendarSystem.ts +832 -0
  571. package/src/utils/coarsePointer.ts +27 -14
  572. package/src/utils/flatTree.ts +15 -3
  573. package/src/utils/focusReturn.ts +78 -18
  574. package/src/utils/hitArea.ts +138 -9
  575. package/src/utils/inputPresentation.ts +21 -1
  576. package/src/utils/inputStream.ts +47 -10
  577. package/src/utils/interactionOverlay.stylex.ts +19 -22
  578. package/src/utils/plainDate.ts +130 -19
  579. package/src/utils/pressFeedback.ts +46 -14
  580. package/src/utils/pressGesture.ts +35 -9
  581. package/src/utils/scrollView.ts +135 -0
  582. package/src/utils/selectionLock.ts +5 -10
  583. package/src/utils/touchHitArea.stylex.ts +56 -0
  584. package/src/utils/touchHitArea.ts +177 -0
  585. package/src/utils/triggerFocus.ts +17 -4
@@ -18,7 +18,7 @@
18
18
 
19
19
  import {useId, type ReactNode} from 'react';
20
20
  import * as stylex from '@stylexjs/stylex';
21
- import {colorVars, durationVars, spacingVars} from '../theme/tokens.stylex';
21
+ import {colorVars, spacingVars} from '../theme/tokens.stylex';
22
22
  import type {BaseProps} from '../BaseProps';
23
23
  import {Text} from '../Text/Text';
24
24
  import {mergeProps} from '../utils/mergeProps';
@@ -28,6 +28,7 @@ import {
28
28
  useComponentTranslator,
29
29
  } from '../i18n/useComponentTranslator';
30
30
  import english from '../i18n/generated-english/Spinner/Spinner.generated';
31
+ import {spinnerRotorStyles, syncRotationPhase} from './spinnerRotor';
31
32
 
32
33
  registerEnglishFallback(english);
33
34
 
@@ -36,13 +37,13 @@ registerEnglishFallback(english);
36
37
  // =============================================================================
37
38
 
38
39
  /**
39
- * Default fraction of the ring the moving arc covers. The canvas ring this
40
- * replaces swept 135deg, not the 270deg its constant's comment claimed.
40
+ * The fraction of the ring the arc covers: SPINNER_ARC_FRACTION. StyleX reads
41
+ * only a literal in this file, and a test pins the two together.
41
42
  *
42
43
  * Themeable via `--spinner-arc-fraction`, declared alongside the other public
43
44
  * vars in `sizeStyles` below. Only the inline `strokeDasharray` attribute
44
- * (the pre-stylesheet render — see its own comment) still reads this
45
- * constant directly; the CSS side composes the dash from the live var.
45
+ * (the pre-stylesheet render) still reads the constant directly; the CSS side
46
+ * composes the dash from the live var.
46
47
  */
47
48
  const ARC_FRACTION = 0.375;
48
49
 
@@ -152,75 +153,6 @@ function registerSpinnerVars(): void {
152
153
  // elide.
153
154
  registerSpinnerVars();
154
155
 
155
- /**
156
- * Pin every ring's rotation to the document timeline's origin instead of its
157
- * own start time, so spinners mounted seconds apart stay in phase.
158
- *
159
- * Setting `startTime` is exact where arithmetic on a clock read is not. A
160
- * negative `animation-delay` computed at mount is only as good as the gap
161
- * between the clock read and the frame the animation starts in. At 10x CPU
162
- * throttling that gap measured 116 degrees of drift.
163
- *
164
- * Rotors are collected and pinned in one frame. `getAnimations()` resolves
165
- * style, and `startTime` dirties it again. So pinning them one at a time makes
166
- * each mount re-force what the previous one invalidated: 53 style recalcs for
167
- * 38 spinners, against 19 batched.
168
- */
169
- const pendingRotors = new Set<HTMLSpanElement>();
170
- let flushScheduled = false;
171
-
172
- function pinRotorsToTimelineOrigin(): void {
173
- flushScheduled = false;
174
- const animations: Animation[] = [];
175
- for (const rotor of pendingRotors) {
176
- animations.push(...rotor.getAnimations());
177
- }
178
- pendingRotors.clear();
179
- for (const animation of animations) {
180
- animation.startTime = 0;
181
- }
182
- }
183
-
184
- /**
185
- * Ref callback for the rotor: the one place a mounted ring touches the DOM.
186
- *
187
- * It reads nothing back — the geometry is resolved by the cascade, not in JS.
188
- */
189
- function syncRotationPhase(
190
- rotor: HTMLSpanElement | null,
191
- ): (() => void) | undefined {
192
- if (rotor == null) {
193
- return undefined;
194
- }
195
- // jsdom implements no Web Animations, and this runs in every consumer's
196
- // component tests.
197
- if (typeof rotor.getAnimations !== 'function') {
198
- return undefined;
199
- }
200
- pendingRotors.add(rotor);
201
- if (!flushScheduled) {
202
- flushScheduled = true;
203
- requestAnimationFrame(pinRotorsToTimelineOrigin);
204
- }
205
- return () => {
206
- pendingRotors.delete(rotor);
207
- };
208
- }
209
-
210
- // =============================================================================
211
- // Animation
212
- // =============================================================================
213
-
214
- /**
215
- * A `transform` animation runs on the compositor, so the ring keeps turning
216
- * while a script runs. A `stroke-dashoffset` animation would repaint the arc
217
- * on the main thread every frame, so it would stop while a script runs.
218
- */
219
- const rotation = stylex.keyframes({
220
- '0%': {transform: 'rotate(0deg)'},
221
- '100%': {transform: 'rotate(360deg)'},
222
- });
223
-
224
156
  // =============================================================================
225
157
  // Styles
226
158
  // =============================================================================
@@ -299,20 +231,6 @@ const styles = stylex.create({
299
231
  gridArea: '1 / 1',
300
232
  width: `var(${BOX_SIZE})`,
301
233
  height: `var(${BOX_SIZE})`,
302
- // Mobile Safari keeps a re-timed animation off the main thread only on an
303
- // element with its own layer. So the rotor declares one before the start
304
- // time is set (see `pinRotorsToTimelineOrigin`).
305
- willChange: 'transform',
306
- // Reduced motion slows the turn but never stops it: a still ring reads as
307
- // broken. The status role and its name still say that work is busy.
308
- animationDuration: {
309
- // The loop reads the duration before a theme's tempo scales it.
310
- default: `var(--_astryx-pre-tempo-duration-slow-min, ${durationVars['--duration-slow-min']})`,
311
- '@media (prefers-reduced-motion: reduce)': '3s',
312
- },
313
- animationIterationCount: 'infinite',
314
- animationName: rotation,
315
- animationTimingFunction: 'linear',
316
234
  },
317
235
  circle: {
318
236
  fill: 'none',
@@ -594,7 +512,7 @@ export function Spinner({
594
512
  <span
595
513
  ref={syncRotationPhase}
596
514
  aria-hidden="true"
597
- {...stylex.props(styles.rotor)}>
515
+ {...stylex.props(styles.rotor, spinnerRotorStyles.turn)}>
598
516
  <svg
599
517
  width={frameSize}
600
518
  height={frameSize}
@@ -12,8 +12,4 @@
12
12
  */
13
13
 
14
14
  export {Spinner} from './Spinner';
15
- export type {
16
- SpinnerProps,
17
- SpinnerSize,
18
- SpinnerShade,
19
- } from './Spinner';
15
+ export type {SpinnerProps, SpinnerSize, SpinnerShade} from './Spinner';
@@ -0,0 +1,113 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ /**
6
+ * @file spinnerRotor.ts
7
+ * @input StyleX keyframes and the slow-min duration token
8
+ * @output The one turning arc: SPINNER_ARC_FRACTION, spinnerRotorStyles.turn
9
+ * and syncRotationPhase
10
+ * @position Spinner's rotor, shared by Spinner and Lab's indeterminate
11
+ * CircularProgress (through `@astryxdesign/core/internal/spinner-rotor`), so
12
+ * both rings turn the same way on the compositor.
13
+ */
14
+
15
+ import * as stylex from '@stylexjs/stylex';
16
+ import {durationVars} from '../theme/tokens.stylex';
17
+
18
+ /** The fraction of the ring the arc covers: 135°. */
19
+ export const SPINNER_ARC_FRACTION = 0.375;
20
+
21
+ /**
22
+ * Full turns in one iteration of the rotation.
23
+ *
24
+ * Chromium wakes the main thread at each iteration boundary while the
25
+ * document listens for `animationiteration`. React listens for it on every
26
+ * root. One iteration holds 100 turns, so the wake comes once in 100 turns.
27
+ * Each turn is 360 degrees, so the ring looks the same.
28
+ */
29
+ const TURNS_PER_ITERATION = 100;
30
+
31
+ /**
32
+ * A `transform` animation runs on the compositor, so the ring keeps turning
33
+ * while a script runs. A `stroke-dashoffset` animation would repaint the arc
34
+ * on the main thread every frame, so it would stop while a script runs.
35
+ */
36
+ const rotation = stylex.keyframes({
37
+ '0%': {transform: 'rotate(0deg)'},
38
+ '100%': {transform: `rotate(${360 * TURNS_PER_ITERATION}deg)`},
39
+ });
40
+
41
+ export const spinnerRotorStyles = stylex.create({
42
+ turn: {
43
+ // Mobile Safari keeps a re-timed animation off the main thread only on an
44
+ // element with its own layer. So the rotor declares one before the start
45
+ // time is set (see `pinRotorsToTimelineOrigin`).
46
+ willChange: 'transform',
47
+ // Reduced motion slows the turn but never stops it: a still ring reads as
48
+ // broken. The ring's role and name still say that work is busy.
49
+ animationDuration: {
50
+ // The loop reads the duration before a theme's tempo scales it.
51
+ default: `calc(var(--_astryx-pre-tempo-duration-slow-min, ${durationVars['--duration-slow-min']}) * ${TURNS_PER_ITERATION})`,
52
+ '@media (prefers-reduced-motion: reduce)': `calc(3s * ${TURNS_PER_ITERATION})`,
53
+ },
54
+ animationIterationCount: 'infinite',
55
+ animationName: rotation,
56
+ animationTimingFunction: 'linear',
57
+ },
58
+ });
59
+
60
+ /**
61
+ * Pin every ring's rotation to the document timeline's origin instead of its
62
+ * own start time, so spinners mounted seconds apart stay in phase.
63
+ *
64
+ * Setting `startTime` is exact where arithmetic on a clock read is not. A
65
+ * negative `animation-delay` computed at mount is only as good as the gap
66
+ * between the clock read and the frame the animation starts in. At 10x CPU
67
+ * throttling that gap measured 116 degrees of drift.
68
+ *
69
+ * Rotors are collected and pinned in one frame. `getAnimations()` resolves
70
+ * style, and `startTime` dirties it again. So pinning them one at a time makes
71
+ * each mount re-force what the previous one invalidated: 53 style recalcs for
72
+ * 38 spinners, against 19 batched.
73
+ */
74
+ const pendingRotors = new Set<Element>();
75
+ let flushScheduled = false;
76
+
77
+ function pinRotorsToTimelineOrigin(): void {
78
+ flushScheduled = false;
79
+ const animations: Animation[] = [];
80
+ for (const rotor of pendingRotors) {
81
+ animations.push(...rotor.getAnimations());
82
+ }
83
+ pendingRotors.clear();
84
+ for (const animation of animations) {
85
+ animation.startTime = 0;
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Ref callback for a rotor: the one place a mounted ring touches the DOM.
91
+ *
92
+ * It reads nothing back — the geometry is resolved by the cascade, not in JS.
93
+ */
94
+ export function syncRotationPhase(
95
+ rotor: Element | null,
96
+ ): (() => void) | undefined {
97
+ if (rotor == null) {
98
+ return undefined;
99
+ }
100
+ // jsdom implements no Web Animations, and this runs in every consumer's
101
+ // component tests.
102
+ if (typeof rotor.getAnimations !== 'function') {
103
+ return undefined;
104
+ }
105
+ pendingRotors.add(rotor);
106
+ if (!flushScheduled) {
107
+ flushScheduled = true;
108
+ requestAnimationFrame(pinRotorsToTimelineOrigin);
109
+ }
110
+ return () => {
111
+ pendingRotors.delete(rotor);
112
+ };
113
+ }
@@ -524,7 +524,7 @@ export const docs = {
524
524
  name: 'isScrollable',
525
525
  type: 'boolean',
526
526
  description:
527
- 'Enables scrollable overflow (overflow: auto). StackItem already applies the flex min-height/min-width reset, so <StackItem size="fill" isScrollable> is a complete scroll region. Matches isScrollable on LayoutContent and LayoutPanel.',
527
+ 'Enables scrollable overflow (overflow: auto). StackItem already applies the flex min-height/min-width reset, so <StackItem size="fill" isScrollable> is a complete scroll region. Matches isScrollable on LayoutContent and LayoutPanel. While its content overflows, a div or span item is a group named by aria-label, or by a translated "Content"; another element keeps its own role.',
528
528
  default: 'false',
529
529
  },
530
530
  {
@@ -2,9 +2,11 @@
2
2
 
3
3
  /**
4
4
  * @file StackItem.tsx
5
- * @input Uses React, ElementType, stackItem utility
5
+ * @input Uses React, ElementType, stackItem utility, StackItemScrollRegion
6
6
  * @output Exports StackItem polymorphic component and StackItemProps
7
- * @position Layout/Stack component; uses stackItem.stylex.ts
7
+ * @position Layout/Stack component; uses stackItem.stylex.ts. A scrollable
8
+ * `div` or `span` item renders through StackItemScrollRegion, which names
9
+ * it while it scrolls.
8
10
  *
9
11
  * SYNC: When modified, update these files to stay in sync:
10
12
  * - /packages/core/src/Stack/Stack.doc.mjs
@@ -21,6 +23,7 @@ import {
21
23
  } from './stackItem.stylex';
22
24
  import {mergeProps} from '../utils/mergeProps';
23
25
  import {themeProps} from '../utils/themeProps';
26
+ import {StackItemScrollRegion} from '../hooks/StackItemScrollRegion';
24
27
 
25
28
  const overflowStyles = stylex.create({
26
29
  scrollable: {
@@ -53,7 +56,9 @@ export interface StackItemProps extends BaseProps<HTMLElement> {
53
56
  * reset, so `<StackItem size="fill" isScrollable>` is a complete scroll
54
57
  * region — it grows to fill the stack and scrolls its own overflow with
55
58
  * no extra style plumbing. Matches `isScrollable` on `LayoutContent`
56
- * and `LayoutPanel`.
59
+ * and `LayoutPanel`. While its content overflows, a `div` or `span` item
60
+ * is a group named by the caller's `aria-label`, or by a translated
61
+ * "Content". Another element keeps its own role.
57
62
  * @default false
58
63
  */
59
64
  isScrollable?: boolean;
@@ -102,18 +107,27 @@ export function StackItem({
102
107
  xstyle,
103
108
  );
104
109
 
110
+ const elementProps = {
111
+ ...mergeProps(
112
+ themeProps('stack-item', {size}),
113
+ stylexProps,
114
+ className,
115
+ style,
116
+ ),
117
+ ...props,
118
+ };
119
+
120
+ if (isScrollable && (element === 'div' || element === 'span')) {
121
+ return createElement(
122
+ StackItemScrollRegion,
123
+ {as: element, ref, elementProps},
124
+ children,
125
+ );
126
+ }
127
+
105
128
  return createElement(
106
129
  element,
107
- {
108
- ref: ref as Ref<Element>,
109
- ...mergeProps(
110
- themeProps('stack-item', {size}),
111
- stylexProps,
112
- className,
113
- style,
114
- ),
115
- ...props,
116
- },
130
+ {ref: ref as Ref<Element>, ...elementProps},
117
131
  children,
118
132
  );
119
133
  }
@@ -62,9 +62,9 @@ import {
62
62
  import english from '../i18n/generated-english/Switch/Switch.generated';
63
63
 
64
64
  registerEnglishFallback(english);
65
+ import {reducedMotionFadeConsts} from '../motion/reducedMotion.stylex';
65
66
  import {
66
67
  interactionOverlayStyles,
67
- pressConsts,
68
68
  pressVars,
69
69
  } from '../utils/interactionOverlay.stylex';
70
70
  import {pressHoldsDragProps} from '../privateAttributes/pressHoldsDrag.stylex';
@@ -93,14 +93,15 @@ const PRESS_FADING = '[data-astryx-press="fading"]';
93
93
 
94
94
  /**
95
95
  * The shared press release, for the press layers the switch fades on the
96
- * compositor. The clock scales by the theme's tempo, and the curve is the
97
- * controller's own. Switch.test.tsx compares the two.
96
+ * compositor: the theme's exit motion tokens, no longer than the Reduce
97
+ * Motion fade under Reduce Motion. Switch.test.tsx compares them with
98
+ * the overlay's.
98
99
  * SYNC: utils/interactionOverlay.stylex.ts PRESS_RELEASE_DURATION,
99
100
  * PRESS_RELEASE_DURATION_REDUCED and RELEASE_EASE.
100
101
  */
101
- const PRESS_RELEASE_DURATION = `calc(${pressConsts.releaseMs}ms * min(var(--_astryx-motion-tempo, 1), 1.5))`;
102
- const PRESS_RELEASE_DURATION_REDUCED = `min(${pressConsts.releaseMs}ms, calc(${pressConsts.releaseMs}ms * var(--_astryx-motion-tempo, 1)))`;
103
- const PRESS_RELEASE_EASE = 'cubic-bezier(0, 0, 0.2, 1)';
102
+ const PRESS_RELEASE_DURATION = durationVars['--duration-exit'];
103
+ const PRESS_RELEASE_DURATION_REDUCED = `min(${durationVars['--duration-exit']}, ${reducedMotionFadeConsts.duration})`;
104
+ const PRESS_RELEASE_EASE = easeVars['--ease-exit'];
104
105
 
105
106
  // The measured hit insets (utils/hitArea), 0 until measured.
106
107
  const HIT_TOP = 'var(--astryx-hit-inset-top, 0px)';
@@ -23,7 +23,7 @@ import type {GestureTouch} from '../gestures/types';
23
23
  import {isRtlElement} from '../hooks/isRtlElement';
24
24
  import {useIsomorphicLayoutEffect} from '../hooks/useIsomorphicLayoutEffect';
25
25
  import {
26
- createMotionAnimator,
26
+ createMotionEngine,
27
27
  type Animator,
28
28
  type MotionCurve,
29
29
  } from '../motion/animator';
@@ -282,15 +282,15 @@ export class SwitchTouchController {
282
282
  return;
283
283
  }
284
284
  registerSwitchTable();
285
- this.thumb = createMotionAnimator(elements.thumb);
285
+ this.thumb = createMotionEngine(elements.thumb);
286
286
  // The layer rests clear (its class's opacity 0) while the visuals show
287
287
  // the value; from here its opacity is the animator's.
288
- this.fade = createMotionAnimator(elements.track, {
288
+ this.fade = createMotionEngine(elements.track, {
289
289
  pseudoElement: '::after',
290
290
  initial: {opacity: 0},
291
291
  });
292
292
  this.fade.set({opacity: 0});
293
- this.shadow = createMotionAnimator(elements.thumb, {
293
+ this.shadow = createMotionEngine(elements.thumb, {
294
294
  pseudoElement: '::after',
295
295
  initial: {opacity: 0},
296
296
  });
@@ -39,6 +39,7 @@ import {useLinkComponent} from '../Link/useLinkComponent';
39
39
  import type {LinkComponentType} from '../Link/types';
40
40
  import {mergeProps} from '../utils';
41
41
  import {useDevWarning} from '../hooks/useDevWarning';
42
+ import {withholdCallerHandlers} from '../utils/disabledInteraction';
42
43
  import {EDGE_COMP_ATTR} from '../Layout/edgeCompensation.stylex';
43
44
  import {themeProps} from '../utils/themeProps';
44
45
  import {focusOutlineProps} from '../utils/focusOutline.stylex';
@@ -362,7 +363,10 @@ export function Tab({
362
363
  ) : null;
363
364
 
364
365
  const sharedProps = {
365
- ...restProps,
366
+ // A disabled tab keeps its tab stop, so the browser still sends it events.
367
+ // It runs no caller handler other than `onFocus` and `onBlur`, as a natively
368
+ // disabled control runs none. `onClick` is guarded in `handleSelect`.
369
+ ...withholdCallerHandlers(restProps, isDisabled),
366
370
  ...pressable,
367
371
  ...(isLabelHidden ? {'aria-label': label} : {}),
368
372
  [EDGE_COMP_ATTR]: '',
@@ -168,7 +168,7 @@ const sortStyles = stylex.create({
168
168
  fontSize: 10,
169
169
  // eslint-disable-next-line @astryx/no-hardcoded-styles -- no token for lineHeight:1 (tight badge)
170
170
  lineHeight: '1',
171
- color: colorVars['--color-accent'],
171
+ color: colorVars['--color-text-accent'],
172
172
  },
173
173
  });
174
174
 
@@ -28,7 +28,7 @@ export const docs = {
28
28
  name: 'format',
29
29
  type: "'relative' | 'relative_short' | 'auto' | 'date' | 'date_long' | 'date_weekday' | 'date_time' | 'time' | 'system_date' | 'system_date_time' | 'system_time' | 'unix_seconds'",
30
30
  description:
31
- "Display format. 'relative' uses the locale's native long relative-time wording ('2 hours ago' in English), 'relative_short' uses its narrow pattern ('2h ago' in English) for compact surfaces, 'date' shows 'Mar 21, 2025', 'date_long' shows 'March 21, 2025', 'date_weekday' shows 'Wed, Mar 21, 2025', 'date_time' shows 'Mar 21, 2025, 2:51 PM', 'time' shows '2:51 PM', 'system_*' variants use ISO-style formatting, 'unix_seconds' shows the Unix time in whole seconds since the epoch (an absolute, zone-independent value), 'auto' switches from relative to date_time based on recency. Absolute formats never read the current time. 'relative', 'relative_short' and 'auto' read it on the client only: a server render or static prerender shows the full date and time in UTC, labelled, and the client switches to the format's normal output after hydration.",
31
+ "Display format. 'relative' uses the locale's native long relative-time wording ('2 hours ago' in English), 'relative_short' uses its narrow pattern ('2h ago' in English) for compact surfaces, 'date' shows 'Mar 21, 2025', 'date_long' shows 'March 21, 2025', 'date_weekday' shows 'Wed, Mar 21, 2025', 'date_time' shows 'Mar 21, 2025, 2:51 PM', 'time' shows '2:51 PM', 'system_*' variants use ISO-style formatting, 'unix_seconds' shows the Unix time in whole seconds since the epoch (an absolute, zone-independent value), 'auto' switches from relative to date_time based on recency. Absolute formats never read the current time. 'relative', 'relative_short' and 'auto' read it on the client only: a server render or static prerender shows the full date and time in UTC, labelled, and the client switches to the format's normal output after hydration. Date-bearing formats ('date', 'date_long', 'date_weekday', 'date_time', and the full date in the hover card and the accessible name) use the InternationalizationProvider calendar, such as calendar=\"persian\"; 'time', the relative formats, 'system_*', and 'unix_seconds' do not change.",
32
32
  default: "'auto'",
33
33
  },
34
34
  {
@@ -124,7 +124,7 @@ export const docs = {
124
124
  export const docsZh = {
125
125
  propDescriptions: {
126
126
  value: '\u8981\u663e\u793a\u7684\u65e5\u671f/\u65f6\u95f4\u3002\u63a5\u53d7 Unix \u65f6\u95f4\u6233\uff08\u79d2\uff09\u6216 ISO 8601 \u5b57\u7b26\u4e32\u3002',
127
- format: "\u663e\u793a\u683c\u5f0f\u3002'relative' \u663e\u793a '2\u5c0f\u65f6\u524d'\uff0c'date' \u663e\u793a\u65e5\u671f\uff0c'date_long' \u663e\u793a\u957f\u6708\u4efd\u65e5\u671f\uff0c'date_weekday' \u663e\u793a\u661f\u671f+\u65e5\u671f\uff0c'auto' \u6839\u636e\u65f6\u95f4\u8fdc\u8fd1\u81ea\u52a8\u5207\u6362\u3002",
127
+ format: "\u663e\u793a\u683c\u5f0f\u3002'relative' \u663e\u793a '2\u5c0f\u65f6\u524d'\uff0c'date' \u663e\u793a\u65e5\u671f\uff0c'date_long' \u663e\u793a\u957f\u6708\u4efd\u65e5\u671f\uff0c'date_weekday' \u663e\u793a\u661f\u671f+\u65e5\u671f\uff0c'auto' \u6839\u636e\u65f6\u95f4\u8fdc\u8fd1\u81ea\u52a8\u5207\u6362\u3002\u5e26\u65e5\u671f\u7684\u683c\u5f0f\uff08'date'\u3001'date_long'\u3001'date_weekday'\u3001'date_time'\uff0c\u4ee5\u53ca\u60ac\u505c\u5361\u7247\u548c\u65e0\u969c\u788d\u540d\u79f0\u4e2d\u7684\u5b8c\u6574\u65e5\u671f\uff09\u4f7f\u7528 InternationalizationProvider \u7684\u5386\u6cd5\uff08\u5982 calendar=\"persian\"\uff09\uff1b'time'\u3001\u76f8\u5bf9\u683c\u5f0f\u3001'system_*' \u548c 'unix_seconds' \u4e0d\u53d8\u3002",
128
128
  autoThreshold: "auto \u683c\u5f0f\u4ece\u76f8\u5bf9\u65f6\u95f4\u5207\u6362\u5230 date_time \u7684\u9608\u503c\u79d2\u6570\u3002",
129
129
  hasTooltip: '\u60ac\u505c\u65f6\u662f\u5426\u663e\u793a\u5305\u542b\u5b8c\u6574\u65e5\u671f/\u65f6\u95f4\u7684\u53ef\u590d\u5236\u60ac\u505c\u5361\u7247\uff08\u76f8\u5bf9\u65f6\u95f4\u6a21\u5f0f\uff0c\u6216\u914d\u7f6e tooltipEntries \u7684\u4efb\u610f\u683c\u5f0f\uff09\u3002',
130
130
  tooltipEntries:
@@ -186,7 +186,7 @@ export const docsDense = {
186
186
  },
187
187
  propDescriptions: {
188
188
  value: 'date/time as unix seconds or ISO string',
189
- format: "display mode: 'relative' (locale-native long wording), 'relative_short' (locale-native narrow wording), 'auto', 'date', 'date_long', 'date_weekday', 'date_time', 'time', 'system_date', 'system_date_time', 'system_time', 'unix_seconds'",
189
+ format: "display mode: 'relative' (locale-native long wording), 'relative_short' (locale-native narrow wording), 'auto', 'date', 'date_long', 'date_weekday', 'date_time', 'time', 'system_date', 'system_date_time', 'system_time', 'unix_seconds'; date-bearing formats use the provider calendar, system_* and time do not",
190
190
  autoThreshold: 'seconds threshold for auto relative\u2192date_time switch',
191
191
  hasTooltip: 'show copyable full-time hover card on hover (relative mode, or any format with tooltipEntries)',
192
192
  tooltipEntries:
@@ -4,7 +4,7 @@
4
4
 
5
5
  /**
6
6
  * @file Timestamp.tsx
7
- * @input Uses React, Text, provider locale, and Timestamp formatters
7
+ * @input Uses React, Text, provider locale and calendar, and Timestamp formatters
8
8
  * @output Exports Timestamp component and related types
9
9
  * @position Core implementation; renders formatted timestamps
10
10
  *
@@ -31,6 +31,7 @@ import type {TextType, TextSize, TextColor, TextWeight} from '../theme/types';
31
31
  import {mergeProps} from '../utils';
32
32
  import {useDevWarning} from '../hooks/useDevWarning';
33
33
  import {useLocale} from '../i18n/useLocale';
34
+ import {useCalendarSystem} from '../i18n/useCalendarSystem';
34
35
  import type {BaseProps} from '../BaseProps';
35
36
  import {themeProps} from '../utils/themeProps';
36
37
  import {formatInstant} from './formatInstant';
@@ -297,6 +298,7 @@ export function Timestamp({
297
298
  }: TimestampProps) {
298
299
  const t = useComponentTranslator();
299
300
  const locale = useLocale();
301
+ const calendar = useCalendarSystem(undefined, 'Timestamp');
300
302
  const timeRef = useRef<HTMLTimeElement>(null);
301
303
  const mergedTimeRef = useMergedRefs(ref, timeRef);
302
304
  // Only relative and auto formats depend on the current time. Absolute
@@ -358,12 +360,12 @@ export function Timestamp({
358
360
  date,
359
361
  effectiveFormat,
360
362
  locale,
361
- // The pre-hydration placeholder is written in UTC, labelled, so
362
- // the server and the hydrating client produce the same text in
363
- // every time zone.
363
+ // The placeholder before hydration is Gregorian and in UTC, with
364
+ // its zone. The server and the client then write the same text,
365
+ // with or without Temporal.
364
366
  isClockPending
365
367
  ? {timeZone: 'UTC', isTimezoneShown: true}
366
- : {isTimezoneShown},
368
+ : {isTimezoneShown, calendar},
367
369
  )
368
370
  : '';
369
371
 
@@ -372,10 +374,13 @@ export function Timestamp({
372
374
  // out in full: abbreviations like "PST" or "GMT+2" are unexpanded
373
375
  // abbreviations to a screen-reader user (WCAG 3.1.4).
374
376
  const fullAbsoluteText = isValidDate
375
- ? formatInstant(date, 'full', locale)
377
+ ? formatInstant(date, 'full', locale, {calendar})
376
378
  : '';
377
379
  const ariaLabelText = isValidDate
378
- ? formatInstant(date, 'full', locale, {timeZoneNameStyle: 'long'})
380
+ ? formatInstant(date, 'full', locale, {
381
+ timeZoneNameStyle: 'long',
382
+ calendar,
383
+ })
379
384
  : '';
380
385
 
381
386
  // Syncs the relative time with an interval timer while the timestamp is live.
@@ -424,7 +429,7 @@ export function Timestamp({
424
429
  const lines: ReadonlyArray<TimestampTooltipLine> =
425
430
  entries === undefined
426
431
  ? [{value: fullAbsoluteText, isCopyable: true}]
427
- : formatTooltipLines(date, entries, locale);
432
+ : formatTooltipLines(date, entries, locale, calendar);
428
433
 
429
434
  const timestampProps = mergeProps(
430
435
  themeProps('timestamp', {format: effectiveFormat}),
@@ -2,7 +2,7 @@
2
2
 
3
3
  /**
4
4
  * @file formatInstant.ts
5
- * @input A Date, one absolute format name, and an optional time zone
5
+ * @input A Date, one absolute format name, an optional time zone and calendar
6
6
  * @output That instant rendered as a string
7
7
  * @position Leaf shared by Timestamp's visible text and each of its tooltip
8
8
  * lines; owns every absolute format Timestamp can produce
@@ -30,6 +30,10 @@
30
30
  */
31
31
 
32
32
  import {SHARED_DATE_FORMAT_OPTIONS, getWallClock} from '../utils/plainDate';
33
+ import {
34
+ formatCalendarInstant,
35
+ type CalendarSystem,
36
+ } from '../utils/calendarSystem';
33
37
  import type {Locale} from '../i18n/types';
34
38
  import type {TimestampFormat} from './Timestamp';
35
39
 
@@ -80,6 +84,14 @@ export interface FormatInstantOptions {
80
84
  * @default 'short'
81
85
  */
82
86
  timeZoneNameStyle?: 'short' | 'long';
87
+ /**
88
+ * The calendar that date-bearing formats write the date in. Timestamp
89
+ * passes its resolved calendar. `time` has no date, and the `system_*`
90
+ * shapes and `unix_seconds` stay Gregorian ISO or calendar-neutral in every
91
+ * calendar.
92
+ * @default 'gregory'
93
+ */
94
+ calendar?: CalendarSystem;
83
95
  }
84
96
 
85
97
  // =============================================================================
@@ -139,6 +151,7 @@ export function formatInstant(
139
151
  timeZone,
140
152
  isTimezoneShown = false,
141
153
  timeZoneNameStyle = 'short',
154
+ calendar = 'gregory',
142
155
  }: FormatInstantOptions = {},
143
156
  ): string {
144
157
  const zone = timeZone === undefined ? {} : {timeZone};
@@ -146,41 +159,49 @@ export function formatInstant(
146
159
 
147
160
  switch (format) {
148
161
  case 'full':
149
- return new Intl.DateTimeFormat(locale, {
150
- ...FULL_OPTIONS,
151
- timeZoneName: timeZoneNameStyle,
152
- ...zone,
153
- calendar: 'gregory',
154
- }).format(date);
162
+ return formatCalendarInstant(
163
+ calendar,
164
+ date,
165
+ {...FULL_OPTIONS, timeZoneName: timeZoneNameStyle},
166
+ locale,
167
+ timeZone,
168
+ );
155
169
 
156
170
  case 'date':
157
- return new Intl.DateTimeFormat(locale, {
158
- ...SHARED_DATE_FORMAT_OPTIONS.date,
159
- ...zone,
160
- calendar: 'gregory',
161
- }).format(date);
171
+ return formatCalendarInstant(
172
+ calendar,
173
+ date,
174
+ SHARED_DATE_FORMAT_OPTIONS.date,
175
+ locale,
176
+ timeZone,
177
+ );
162
178
 
163
179
  case 'date_long':
164
- return new Intl.DateTimeFormat(locale, {
165
- ...SHARED_DATE_FORMAT_OPTIONS.date_long,
166
- ...zone,
167
- calendar: 'gregory',
168
- }).format(date);
180
+ return formatCalendarInstant(
181
+ calendar,
182
+ date,
183
+ SHARED_DATE_FORMAT_OPTIONS.date_long,
184
+ locale,
185
+ timeZone,
186
+ );
169
187
 
170
188
  case 'date_weekday':
171
- return new Intl.DateTimeFormat(locale, {
172
- ...SHARED_DATE_FORMAT_OPTIONS.date_weekday,
173
- ...zone,
174
- calendar: 'gregory',
175
- }).format(date);
189
+ return formatCalendarInstant(
190
+ calendar,
191
+ date,
192
+ SHARED_DATE_FORMAT_OPTIONS.date_weekday,
193
+ locale,
194
+ timeZone,
195
+ );
176
196
 
177
197
  case 'date_time':
178
- return new Intl.DateTimeFormat(locale, {
179
- ...DATE_TIME_OPTIONS,
180
- ...zoneName,
181
- ...zone,
182
- calendar: 'gregory',
183
- }).format(date);
198
+ return formatCalendarInstant(
199
+ calendar,
200
+ date,
201
+ {...DATE_TIME_OPTIONS, ...zoneName},
202
+ locale,
203
+ timeZone,
204
+ );
184
205
 
185
206
  case 'time':
186
207
  return new Intl.DateTimeFormat(locale, {