@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
@@ -20,12 +20,12 @@ export const docs = {
20
20
  name: 'pressableProps',
21
21
  type: "{'data-astryx-pressable': ''}",
22
22
  description:
23
- "The marker attribute to spread on the element that paints the press. Compose one of `interactionOverlayStyles` (from `@astryxdesign/core/utils`) on the same element — `backgroundColor` or `backgroundImage` for a surface whose hover and press are the system's overlays, `pressedBackgroundColor` for one whose hover is its own — and it paints the pressed token at the press's strength on the first frame of a believed press and fades it over the release, keeping `:active` for a mouse on a desktop. On a phone or tablet, where the stylesheet drops `:active`, the controller also paints a mouse, trackpad or Space-key press: at once, held while the button or key is down, faded at the release. A press is themed through `--color-overlay-pressed`.",
23
+ "The marker attribute to spread on the element that paints the press. Compose one of `interactionOverlayStyles` (from `@astryxdesign/core/utils`) on the same element — `backgroundColor` or `backgroundImage` for a surface whose hover and press are the system's overlays, `pressedBackgroundColor` for one whose hover is its own — and it paints the pressed token on the first frame of a press and fades it over the release, keeping `:active` for a mouse on a desktop. On a phone or tablet, where the stylesheet drops `:active`, the controller also paints a mouse, trackpad or Space-key press: at once, held while the button or key is down, faded at the release. A press is themed through `--color-overlay-pressed`.",
24
24
  },
25
25
  ],
26
26
  usage: {
27
27
  description:
28
- 'The touch press model every Astryx pressable uses, for a local component that paints its own press. Under a finger, CSS `:active` paints on the touch itself and can outlive the start of a scroll; the press model instead waits 150 ms before believing a press, cancels it the moment the finger travels 10 px or a scroll claims the gesture, never brings it back inside that gesture, answers a quick tap at the lift, and fades the release over 200 ms — the clocks a native list uses. One document-level controller does this for every marked element (installed by the first pressable to mount, removed by the last to unmount), so calling the hook adds no listener or state to your element. On a desktop a mouse press is still your `:active` rule: keep it, and drop it under `@media (pointer: coarse)` the way the built-in components do. That query reads the primary pointer, so on a phone or tablet it also drops `:active` for a connected mouse, trackpad or keyboard; the controller paints those presses there (at once, faded at the release), so nothing goes unanswered.',
28
+ 'The touch press model every Astryx pressable uses, for a local component that paints its own press. Under a finger, CSS `:active` paints on the touch itself and can outlive the start of a scroll; the press model instead tracks the touch the way UIKit tracks a control: it highlights as the finger lands (after the content-touch delay inside a scroller, where a flick paints nothing), a quick tap answers at the lift, and a scroll that takes the touch cancels it with no fade. One document-level controller does this for every marked element (installed by the first pressable to mount, removed by the last to unmount), so calling the hook adds no listener or state to your element. On a desktop a mouse press is still your `:active` rule: keep it, and drop it under `@media (pointer: coarse)` the way the built-in components do. That query reads the primary pointer, so on a phone or tablet it also drops `:active` for a connected mouse, trackpad or keyboard; the controller paints those presses there (at once, faded at the release), so nothing goes unanswered.',
29
29
  bestPractices: [
30
30
  {
31
31
  guidance: true,
@@ -58,7 +58,7 @@ export const docs = {
58
58
  /** @type {import('@astryxdesign/cli/authoring').HookTranslationDoc} */
59
59
  export const docsDense = {
60
60
  description:
61
- 'Marks an element as a pressable surface of the touch press model (150 ms onset, 10 px slop, cancel on scroll, tap answers at lift, 200 ms fade) and installs the shared document controller; on a coarse primary pointer it also paints mouse, trackpad and Space-key presses at once. Returns the data-astryx-pressable marker to spread; compose one of interactionOverlayStyles on the same element to paint.',
61
+ 'Marks an element as a pressable surface of the touch press model, tracked like a UIKit control (highlight as the finger lands, 150 ms inside a scroller, fade at the lift), and installs the shared document controller; on a coarse primary pointer it also paints mouse, trackpad and Space-key presses at once. Returns the data-astryx-pressable marker to spread; compose one of interactionOverlayStyles on the same element to paint.',
62
62
  paramDescriptions: {},
63
63
  returnDescriptions: {
64
64
  pressableProps:
@@ -26,11 +26,11 @@ import {installPressFeedback, pressableProps} from '../utils/pressFeedback';
26
26
  * `interactionOverlayStyles` (from `@astryxdesign/core/utils`) on the same
27
27
  * element: `backgroundColor` or `backgroundImage` for a surface whose hover
28
28
  * and press are the system's overlays, `pressedBackgroundColor` for one
29
- * whose hover is its own. The controller writes its attribute on the element
30
- * while a touch press is believed (after the onset delay, cancelled by travel
31
- * or by a scroll) and for the release, and the composed style paints the
32
- * pressed token at the press's strength on the first frame and fades it over
33
- * the release, keeping `:active` for a mouse on a desktop. On a phone or
29
+ * whose hover is its own. Under a finger the controller tracks the press the
30
+ * way UIKit tracks a control and writes its
31
+ * attribute on the element while the press is held and for the release; the
32
+ * composed style paints the pressed token on the first frame and fades it
33
+ * over the release, keeping `:active` for a mouse on a desktop. On a phone or
34
34
  * tablet the stylesheet drops `:active` for every press, so the controller
35
35
  * also paints a mouse, trackpad or Space-key press there, at once. A press is
36
36
  * themed through `--color-overlay-pressed`, which the hold, the flash and the
@@ -46,7 +46,7 @@ import {installPressFeedback, pressableProps} from '../utils/pressFeedback';
46
46
  * @example
47
47
  * ```
48
48
  * const pressable = usePressFeedback();
49
- * return <div role="button" {...pressable} {...stylex.props(styles.row)} />;
49
+ * return <button {...pressable} {...stylex.props(styles.button)} />;
50
50
  * ```
51
51
  */
52
52
  export function usePressFeedback(): typeof pressableProps {
@@ -0,0 +1,76 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ /**
6
+ * @file useScrollRegionProps.ts
7
+ * @input Whether a region may scroll, and the caller's role and label
8
+ * @output useScrollRegionProps: a ref for the region, and the role and
9
+ * accessible name that the region carries while its content overflows
10
+ * @position Internal hook for LayoutContent, LayoutPanel and StackItem.
11
+ *
12
+ * SYNC: When modified, update:
13
+ * - /packages/core/src/hooks/useScrollRegionProps.test.tsx
14
+ * - /packages/core/src/AppShell/observeMainOverflow.ts
15
+ */
16
+
17
+ import {useCallback, useState, type AriaRole, type RefCallback} from 'react';
18
+ import {
19
+ registerEnglishFallback,
20
+ useComponentTranslator,
21
+ } from '../i18n/useComponentTranslator';
22
+ import english from '../i18n/generated-english/hooks/useScrollRegionProps.generated';
23
+ import {observeMainOverflow} from '../AppShell/observeMainOverflow';
24
+
25
+ registerEnglishFallback(english);
26
+
27
+ export interface ScrollRegionOptions {
28
+ /** Whether the region may scroll at all (`overflow: auto`). */
29
+ isScrollable: boolean;
30
+ /** The caller's role. It always wins, and takes no default name. */
31
+ role?: AriaRole;
32
+ /** The caller's accessible name. It always wins. */
33
+ label?: string;
34
+ }
35
+
36
+ export interface ScrollRegionProps {
37
+ ref: RefCallback<HTMLElement>;
38
+ role: AriaRole | undefined;
39
+ 'aria-label': string | undefined;
40
+ }
41
+
42
+ /**
43
+ * The region's ref, role and accessible name. While the region may scroll
44
+ * and its content overflows, it is a group named by the caller's `label`, or
45
+ * by the translated "Content". A caller's `role` is kept with only the
46
+ * caller's `label`: a single main landmark relies on its role alone. When
47
+ * the region does not scroll, the caller's own `role` and `label` pass
48
+ * through unchanged.
49
+ */
50
+ export function useScrollRegionProps({
51
+ isScrollable,
52
+ role,
53
+ label,
54
+ }: ScrollRegionOptions): ScrollRegionProps {
55
+ const t = useComponentTranslator();
56
+ const [overflows, setOverflows] = useState(false);
57
+ // A caller's role takes no default name, so its region is not observed.
58
+ const hasRole = role != null;
59
+ const ref = useCallback(
60
+ (element: HTMLElement | null) => {
61
+ if (element == null || !isScrollable || hasRole) {
62
+ setOverflows(false);
63
+ return undefined;
64
+ }
65
+ return observeMainOverflow(element, setOverflows);
66
+ },
67
+ [hasRole, isScrollable],
68
+ );
69
+ const isGroup = !hasRole && isScrollable && overflows;
70
+ return {
71
+ ref,
72
+ role: role ?? (isGroup ? 'group' : undefined),
73
+ 'aria-label':
74
+ label ?? (isGroup ? t('@astryx.scrollRegion.label') : undefined),
75
+ };
76
+ }
@@ -25,10 +25,16 @@
25
25
  import {createContext} from 'react';
26
26
  import {getResolve} from './resolve';
27
27
  import type {Locale, MessagesByLocale, Overrides} from './types';
28
+ import type {CalendarSystem} from '../utils/calendarSystem';
28
29
 
29
30
  export interface InternationalizationContextValue {
30
31
  locale: Locale;
31
32
  direction: 'ltr' | 'rtl';
33
+ /**
34
+ * The provider's requested calendar system. A context without it means
35
+ * Gregorian dates.
36
+ */
37
+ calendar?: CalendarSystem;
32
38
  messages: MessagesByLocale;
33
39
  overrides?: Overrides;
34
40
  translate: ReturnType<typeof getResolve>;
@@ -26,7 +26,7 @@ export const docs = {
26
26
  name: 'Provider boundary',
27
27
  required: true,
28
28
  description:
29
- 'A nonvisual context boundary that supplies locale, message catalogs, overrides, and direction to descendant Astryx components. It renders no DOM element.',
29
+ 'A nonvisual context boundary that supplies locale, message catalogs, overrides, and direction to descendant Astryx components, and a calendar system to `Calendar`. It renders no DOM element.',
30
30
  },
31
31
  ],
32
32
  bestPractices: [
@@ -50,6 +50,11 @@ export const docs = {
50
50
  description:
51
51
  "Set the `dir` attribute on `<html>` (or a wrapping element) yourself; the provider does not set it. Astryx components mirror layout and directional icons from the DOM `dir`, so an RTL locale won't visually mirror without it. Use `getLocaleDirection(locale)` to derive the value for both the provider and the DOM.",
52
52
  },
53
+ {
54
+ guidance: true,
55
+ description:
56
+ 'Set `calendar` to show `Calendar`, `DateInput`, `DateRangeInput`, and `DateTimeInput` in another calendar system and write Timestamp, PowerSearch, and Schedule dates in it. A locale never selects the calendar: `fa-IR` shows Gregorian dates until you set `calendar="persian"`, and a `-u-ca-` keyword in `locale`, as in `th-TH-u-ca-buddhist`, keeps Gregorian dates too. Date values stay Gregorian ISO strings.',
57
+ },
53
58
  {
54
59
  guidance: false,
55
60
  description:
@@ -86,6 +91,13 @@ export const docs = {
86
91
  description:
87
92
  'Explicit text-direction override for the context. When omitted, direction is derived from `locale` via `Intl.Locale.getTextInfo()`. This sets the direction Astryx reads, but it does NOT set the DOM `dir` attribute; you must set `dir` on `<html>` (or a wrapping element) yourself, since Astryx components mirror layout and directional icons from the DOM `dir`, not from this prop. Set both to the same value and keep them in sync.',
88
93
  },
94
+ {
95
+ name: 'calendar',
96
+ type: "'gregory' | 'iso8601' | 'buddhist' | 'roc' | 'japanese' | 'persian' | 'indian' | 'hebrew' | 'chinese' | 'dangi' | 'coptic' | 'ethiopic' | 'ethioaa' | 'islamic-civil' | 'islamic-tbla' | 'islamic-umalqura'",
97
+ required: false,
98
+ description:
99
+ "Calendar system of the subtree, such as 'persian', 'hebrew', or 'buddhist'. `Calendar`, `DateInput`, `DateRangeInput`, and `DateTimeInput` show it, and Timestamp, PowerSearch, and Lab's Schedule write their dates in it. When omitted, the calendar is Gregorian: a locale never selects it, neither by its default calendar nor by a `-u-ca-` keyword. A component's own `calendar` prop takes precedence. Values stay Gregorian ISO dates. Calendars other than gregory, iso8601, buddhist, roc, and japanese need `Temporal`; the context keeps the requested calendar, and where the runtime lacks `Temporal`, these components show Gregorian dates and warn in development. Load a polyfill such as `temporal-polyfill/full/global` on the server and in the browser.",
100
+ },
89
101
  {
90
102
  name: 'children',
91
103
  type: 'ReactNode',
@@ -124,6 +136,20 @@ export function AppI18n({children}: {children: ReactNode}) {
124
136
  {children}
125
137
  </InternationalizationProvider>
126
138
  );
139
+ }`,
140
+ },
141
+ {
142
+ label: 'Show Calendar in the Persian calendar',
143
+ code: `import type {ReactNode} from 'react';
144
+ import {InternationalizationProvider} from '@astryxdesign/core/i18n';
145
+
146
+ // Values stay Gregorian ISO dates, for example '2026-10-30'.
147
+ export function AppI18n({children}: {children: ReactNode}) {
148
+ return (
149
+ <InternationalizationProvider locale="fa-IR" calendar="persian">
150
+ {children}
151
+ </InternationalizationProvider>
152
+ );
127
153
  }`,
128
154
  },
129
155
  {
@@ -190,5 +216,7 @@ export const docsDense = {
190
216
  'map of BCP 47 tag to a rich Catalog or generated RuntimeCatalog; "en" is always available',
191
217
  overrides:
192
218
  'sparse per-locale key overrides applied on top of shipped defaults',
219
+ calendar:
220
+ 'calendar system for Calendar, DateInput, DateRangeInput, DateTimeInput, Timestamp, PowerSearch, and Schedule dates (default: gregory; a -u-ca- keyword in locale does not select it); values stay Gregorian ISO; non-Gregorian-aligned calendars need Temporal',
193
221
  },
194
222
  };
@@ -4,9 +4,9 @@
4
4
 
5
5
  /**
6
6
  * @file InternationalizationProvider.tsx
7
- * @input React, InternationalizationContext, i18n types
7
+ * @input React, InternationalizationContext, i18n types, calendar resolution
8
8
  * @output Exports InternationalizationProvider component and props type
9
- * @position Provider component for astryx i18n locale + messages
9
+ * @position Provider component for astryx i18n locale, messages, and calendar
10
10
  *
11
11
  * Wraps a subtree with a locale and (optional) additional message catalogs +
12
12
  * overrides. Astryx components inside the subtree resolve their strings via
@@ -22,6 +22,8 @@
22
22
  import {useMemo, type ReactNode} from 'react';
23
23
  import {InternationalizationContext} from './InternationalizationContext';
24
24
  import {getLocaleDirection} from './getLocaleDirection';
25
+ import {resolveCalendarSystem} from './useCalendarSystem';
26
+ import type {CalendarSystem} from '../utils/calendarSystem';
25
27
  import type {
26
28
  Locale,
27
29
  MessagesByLocale,
@@ -30,6 +32,8 @@ import type {
30
32
  } from './types';
31
33
  import {getResolve} from './resolve';
32
34
 
35
+ const PROVIDER_NAME = 'InternationalizationProvider';
36
+
33
37
  function normalizeMessages(
34
38
  messages: ProviderMessagesByLocale,
35
39
  ): MessagesByLocale {
@@ -100,6 +104,25 @@ export interface InternationalizationProviderProps {
100
104
  * in sync (e.g. `dir={getLocaleDirection(locale)}` on both).
101
105
  */
102
106
  dir?: 'ltr' | 'rtl';
107
+ /**
108
+ * The calendar system of this subtree, such as `'persian'` or `'hebrew'`.
109
+ * `Calendar` shows it, and Timestamp, PowerSearch, and Lab's Schedule write
110
+ * their dates in it. `DateInput`, `DateRangeInput`, and `DateTimeInput`
111
+ * show it too. Values stay
112
+ * Gregorian ISO dates. When omitted, the calendar is Gregorian: a locale
113
+ * never selects it, neither by its default calendar nor by a `-u-ca-`
114
+ * keyword. A component's own `calendar` prop takes precedence. Calendars
115
+ * other than `gregory`, `iso8601`, `buddhist`, `roc`, and `japanese` need
116
+ * `Temporal`. The context keeps the requested calendar; where `Temporal` is
117
+ * missing, these components show Gregorian dates and warn once in
118
+ * development.
119
+ *
120
+ * @example
121
+ * ```
122
+ * <InternationalizationProvider locale="fa-IR" calendar="persian">
123
+ * ```
124
+ */
125
+ calendar?: CalendarSystem;
103
126
  children: ReactNode;
104
127
  }
105
128
 
@@ -112,19 +135,28 @@ export function InternationalizationProvider({
112
135
  messages,
113
136
  overrides,
114
137
  dir,
138
+ calendar: calendarProp,
115
139
  children,
116
140
  }: InternationalizationProviderProps) {
117
141
  const direction = dir ?? getLocaleDirection(locale);
142
+ const calendar = useMemo(
143
+ () =>
144
+ calendarProp != null
145
+ ? resolveCalendarSystem(calendarProp, PROVIDER_NAME)
146
+ : 'gregory',
147
+ [calendarProp],
148
+ );
118
149
  const value = useMemo(() => {
119
150
  const providedMessages = messages ?? {};
120
151
  return {
121
152
  locale,
122
153
  direction,
154
+ calendar,
123
155
  messages: normalizeMessages(providedMessages),
124
156
  overrides,
125
157
  translate: getResolve(locale, providedMessages, overrides),
126
158
  };
127
- }, [locale, direction, messages, overrides]);
159
+ }, [locale, direction, calendar, messages, overrides]);
128
160
  return (
129
161
  <InternationalizationContext value={value}>
130
162
  {children}
@@ -10,7 +10,6 @@ const english: Readonly<Record<string, string>> = {
10
10
  "@astryx.dateInput.clear": "Clear {label}",
11
11
  "@astryx.dateInput.closeCalendar": "Close calendar",
12
12
  "@astryx.dateInput.dialogLabel": "Choose date",
13
- "@astryx.dateInput.invalidDate": "Invalid date",
14
13
  "@astryx.dateInput.openCalendar": "Open calendar",
15
14
  "@astryx.dateInput.placeholder": "Select a date",
16
15
  "@astryx.dateInput.toggleCalendarClose": "Close calendar",
@@ -0,0 +1,17 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @generated by scripts/generate-i18n-runtime.mjs from packages/core/locales/en.json,
5
+ * holding the English for the catalog keys named in packages/core/src/DateInput/useTypedDate.ts.
6
+ * Do not edit by hand. Run `pnpm generate:i18n-runtime` instead.
7
+ */
8
+
9
+ const english: Readonly<Record<string, string>> = {
10
+ "@astryx.dateInput.calendarDescription": "Dates use the {calendar}",
11
+ "@astryx.dateInput.formatHint": "e.g., {example}",
12
+ "@astryx.dateInput.invalidDate": "Invalid date",
13
+ "@astryx.dateInput.nonexistentDate": "This date does not exist in the {calendar}",
14
+ "@astryx.dateInput.outOfRangeDate": "{bounds, select, both {Enter a date from {min} to {max}} min {Enter a date on or after {min}} max {Enter a date on or before {max}} other {This date is not available}}"
15
+ };
16
+
17
+ export default english;
@@ -9,7 +9,6 @@
9
9
  const english: Readonly<Record<string, string>> = {
10
10
  "@astryx.dateInput.clear": "Clear {label}",
11
11
  "@astryx.dateInput.closeCalendar": "Close calendar",
12
- "@astryx.dateInput.invalidDate": "Invalid date",
13
12
  "@astryx.dateInput.openCalendar": "Open calendar",
14
13
  "@astryx.dateInput.toggleCalendarClose": "Close calendar",
15
14
  "@astryx.dateTimeInput.dialogLabel": "Choose date and time",
@@ -0,0 +1,13 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @generated by scripts/generate-i18n-runtime.mjs from packages/core/locales/en.json,
5
+ * holding the English for the catalog keys named in packages/core/src/hooks/useScrollRegionProps.ts.
6
+ * Do not edit by hand. Run `pnpm generate:i18n-runtime` instead.
7
+ */
8
+
9
+ const english: Readonly<Record<string, string>> = {
10
+ "@astryx.scrollRegion.label": "Content"
11
+ };
12
+
13
+ export default english;
@@ -325,6 +325,12 @@ const runtimeCatalog: Readonly<Record<string, string>> = {
325
325
  '@astryx.dateInput.toggleCalendarClose': 'Close calendar',
326
326
  '@astryx.dateInput.clear': 'Clear {label}',
327
327
  '@astryx.dateInput.invalidDate': 'Invalid date',
328
+ '@astryx.dateInput.nonexistentDate':
329
+ 'This date does not exist in the {calendar}',
330
+ '@astryx.dateInput.outOfRangeDate':
331
+ '{bounds, select, both {Enter a date from {min} to {max}} min {Enter a date on or after {min}} max {Enter a date on or before {max}} other {This date is not available}}',
332
+ '@astryx.dateInput.formatHint': 'e.g., {example}',
333
+ '@astryx.dateInput.calendarDescription': 'Dates use the {calendar}',
328
334
  '@astryx.dateInput.resetPicking': 'Reset',
329
335
  '@astryx.dateInput.savePicking': 'Save',
330
336
  '@astryx.dateInput.doneChoosingMonth': 'Done',
@@ -375,6 +381,7 @@ const runtimeCatalog: Readonly<Record<string, string>> = {
375
381
  '@astryx.banner.expand': 'Expand',
376
382
  '@astryx.button.loading': 'Loading',
377
383
  '@astryx.spinner.loading': 'Loading',
384
+ '@astryx.scrollRegion.label': 'Content',
378
385
  '@astryx.chatComposerDrawer.expand': 'Expand {label}',
379
386
  '@astryx.chatComposerDrawer.collapse': 'Collapse {label}',
380
387
  '@astryx.chatDictationButton.startDictation': 'Start dictation',
@@ -333,6 +333,12 @@ const runtimeCatalog: Readonly<Record<string, string>> = {
333
333
  '@astryx.dateInput.toggleCalendarClose': '⟦Çłóšé çàłéñðàř⟧',
334
334
  '@astryx.dateInput.clear': '⟦Çłéàř {label}⟧',
335
335
  '@astryx.dateInput.invalidDate': '⟦Íñṽàłíð ðàţé⟧',
336
+ '@astryx.dateInput.nonexistentDate':
337
+ '⟦Ţĥíš ðàţé ðóéš ñóţ éẋíšţ íñ ţĥé {calendar}⟧',
338
+ '@astryx.dateInput.outOfRangeDate':
339
+ '⟦{bounds, select, both {Enter a date from {min} to {max}} min {Enter a date on or after {min}} max {Enter a date on or before {max}} other {This date is not available}}⟧',
340
+ '@astryx.dateInput.formatHint': '⟦é.ĝ., {example}⟧',
341
+ '@astryx.dateInput.calendarDescription': '⟦Ðàţéš úšé ţĥé {calendar}⟧',
336
342
  '@astryx.dateInput.resetPicking': '⟦Řéšéţ⟧',
337
343
  '@astryx.dateInput.savePicking': '⟦Šàṽé⟧',
338
344
  '@astryx.dateInput.doneChoosingMonth': '⟦Ðóñé⟧',
@@ -383,6 +389,7 @@ const runtimeCatalog: Readonly<Record<string, string>> = {
383
389
  '@astryx.banner.expand': '⟦Éẋþàñð⟧',
384
390
  '@astryx.button.loading': '⟦Łóàðíñĝ⟧',
385
391
  '@astryx.spinner.loading': '⟦Łóàðíñĝ⟧',
392
+ '@astryx.scrollRegion.label': '⟦Çóñţéñţ⟧',
386
393
  '@astryx.chatComposerDrawer.expand': '⟦Éẋþàñð {label}⟧',
387
394
  '@astryx.chatComposerDrawer.collapse': '⟦Çółłàþšé {label}⟧',
388
395
  '@astryx.chatDictationButton.startDictation': '⟦Šţàřţ ðíçţàţíóñ⟧',
package/src/i18n/index.ts CHANGED
@@ -15,6 +15,7 @@
15
15
  * - useDirection — hook returning the ambient text direction
16
16
  * - getLocaleDirection — server-safe locale → direction helper
17
17
  * - Translator — interface for consumer-injected runtimes
18
+ * - CalendarSystem — the calendars date components can show
18
19
  *
19
20
  * `useTranslator` and `InternationalizationContext` are the public paths
20
21
  * that resolve any Astryx key, so they register the whole English catalog.
@@ -39,6 +40,7 @@ export {useLocale} from './useLocale';
39
40
  export {useCollator} from './useCollator';
40
41
  export {useDirection} from './useDirection';
41
42
  export {getLocaleDirection} from './getLocaleDirection';
43
+ export type {CalendarSystem} from '../utils/calendarSystem';
42
44
  export type {Translator} from './translator';
43
45
  export type {
44
46
  Locale,
@@ -0,0 +1,95 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ /**
6
+ * @file useCalendarSystem.ts
7
+ * @input InternationalizationContext, an optional component `calendar`
8
+ * @output The calendar system a date component shows, and the helpers that
9
+ * normalize a calendar identifier
10
+ * @position Internal i18n hook; read by InternationalizationProvider, date
11
+ * components, and the public calendar hooks. Not re-exported from the i18n
12
+ * barrel.
13
+ */
14
+
15
+ import {use} from 'react';
16
+ import {InternationalizationContext} from './InternationalizationContext';
17
+ import {
18
+ type CalendarSystem,
19
+ isCalendarSystem,
20
+ isCalendarSystemAvailable,
21
+ } from '../utils/calendarSystem';
22
+ import {warnOnce} from '../utils/devWarning';
23
+
24
+ /**
25
+ * Normalizes a calendar identifier. An identifier outside `CalendarSystem`
26
+ * resolves to `gregory` and warns once in development.
27
+ */
28
+ export function resolveCalendarSystem(
29
+ id: string,
30
+ source: string,
31
+ ): CalendarSystem {
32
+ if (isCalendarSystem(id)) {
33
+ return id;
34
+ }
35
+ warnOnce(
36
+ `calendar-unsupported:${id}`,
37
+ source,
38
+ `The calendar "${id}" is not supported; showing Gregorian dates.`,
39
+ );
40
+ return 'gregory';
41
+ }
42
+
43
+ /**
44
+ * A calendar this runtime can show, else `gregory`. Calendars outside the
45
+ * Gregorian-aligned set need a `Temporal` that supports them. The fallback
46
+ * warns once for each calendar, on the server and in the browser.
47
+ */
48
+ function availableCalendarOrGregorian(
49
+ calendar: CalendarSystem,
50
+ source: string,
51
+ ): CalendarSystem {
52
+ if (isCalendarSystemAvailable(calendar)) {
53
+ return calendar;
54
+ }
55
+ warnOnce(
56
+ `calendar-unavailable:${calendar}`,
57
+ source,
58
+ `The "${calendar}" calendar needs a Temporal that supports it, and this ` +
59
+ 'runtime has none; showing Gregorian dates. Load a Temporal polyfill ' +
60
+ "with every calendar, such as 'temporal-polyfill/full/global', on the " +
61
+ 'server and in the browser.',
62
+ );
63
+ return 'gregory';
64
+ }
65
+
66
+ /**
67
+ * The calendar that a caller names, without the provider: an unknown
68
+ * identifier, or one this runtime cannot show, becomes `gregory` and warns
69
+ * once in development.
70
+ */
71
+ export function resolveShownCalendar(
72
+ calendar: string,
73
+ source: string,
74
+ ): CalendarSystem {
75
+ return availableCalendarOrGregorian(
76
+ resolveCalendarSystem(calendar, source),
77
+ source,
78
+ );
79
+ }
80
+
81
+ /**
82
+ * The calendar a date component shows: its own `calendar`, else the
83
+ * provider's resolved calendar, else `gregory`. It resolves during render, so
84
+ * the server and the browser agree when both have `Temporal` or both lack it.
85
+ */
86
+ export function useCalendarSystem(
87
+ calendar: CalendarSystem | undefined,
88
+ source: string,
89
+ ): CalendarSystem {
90
+ const context = use(InternationalizationContext);
91
+ return resolveShownCalendar(
92
+ calendar ?? context.calendar ?? 'gregory',
93
+ source,
94
+ );
95
+ }
@@ -0,0 +1,26 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file calendar-system.ts
5
+ * @input The i18n calendar resolution
6
+ * @output `@astryxdesign/core/internal/calendar-system`: the hook that
7
+ * resolves the calendar a date component shows, and the helpers that name
8
+ * its months and days as Core's Calendar does, for Lab components
9
+ * @position An internal entry reserved for Astryx's own packages:
10
+ * undocumented, outside the public API and its compatibility promise,
11
+ * versioned in lockstep with Core, and allowed only in Core and Lab by the
12
+ * `@astryx/no-core-internal-import` lint rule. Named re-exports only.
13
+ *
14
+ * SYNC: When modified, update calendar-system.test.ts and
15
+ * scripts/sync-exports.js.
16
+ */
17
+
18
+ export {useCalendarSystem} from '../i18n/useCalendarSystem';
19
+ export {
20
+ calendarMonthLabelDay,
21
+ calendarMonthOf,
22
+ formatCalendarDate,
23
+ formatCalendarDateToParts,
24
+ formatCalendarInstantRange,
25
+ } from '../utils/calendarSystem';
26
+ export type {CalendarSystem} from '../utils/calendarSystem';
@@ -0,0 +1,20 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ /**
3
+ * @file spinner-rotor.ts
4
+ * @input Spinner's shared rotor
5
+ * @output `@astryxdesign/core/internal/spinner-rotor`: SPINNER_ARC_FRACTION,
6
+ * spinnerRotorStyles and syncRotationPhase, re-exported by name for Lab's
7
+ * indeterminate CircularProgress
8
+ * @position An internal entry reserved for Astryx's own packages. It is
9
+ * undocumented, outside the public API and its compatibility promise, and
10
+ * versioned in lockstep with Core. The `@astryx/no-core-internal-import`
11
+ * lint rule allows it only in Core and Lab. Core components import the
12
+ * same modules by relative path. Named re-exports only.
13
+ *
14
+ * SYNC: When modified, update scripts/sync-exports.js.
15
+ */
16
+ export {
17
+ SPINNER_ARC_FRACTION,
18
+ spinnerRotorStyles,
19
+ syncRotationPhase,
20
+ } from '../Spinner/spinnerRotor';
@@ -2,9 +2,12 @@
2
2
 
3
3
  /**
4
4
  * @file touch.ts
5
- * @input The gesture core: the arena, the recognizers, and their geometry
5
+ * @input The gesture core: the arena, the recognizers, and their geometry;
6
+ * the pan, the motion engine and math, and the touch-presentation and
7
+ * direction helpers that Lab components read
6
8
  * @output `@astryxdesign/core/internal/touch`: the gesture core's primitives
7
- * for Lab components, re-exported by name
9
+ * and the motion, touch-presentation and direction modules for Lab
10
+ * components, re-exported by name
8
11
  * @position An internal entry reserved for Astryx's own packages:
9
12
  * undocumented, outside the public API and its compatibility promise
10
13
  * (spec:AST-017 FR21), versioned in lockstep with Core, and allowed only in
@@ -39,3 +42,41 @@ export {
39
42
  export {LongPressGestureRecognizer} from '../gestures/LongPressGestureRecognizer';
40
43
  export {TapGestureRecognizer} from '../gestures/TapGestureRecognizer';
41
44
  export {DEFAULT_ENVIRONMENT} from '../gestures/types';
45
+
46
+ // Lab's useRefreshControl reads these: its pull's pan and the hook that
47
+ // starts it. It also reads the motion engine and math, and the scroll
48
+ // view's bounce spring, for its pull, settle and end. Its indicator fades
49
+ // along the settle's curve, and the motion-role parsers read the theme's
50
+ // tokens for its end.
51
+ export {PanGestureRecognizer} from '../gestures/PanGestureRecognizer';
52
+ export type {PanGestureRecognizerOptions} from '../gestures/PanGestureRecognizer';
53
+ export type {
54
+ GestureEventContext,
55
+ GestureTouch,
56
+ PointerKind,
57
+ } from '../gestures/types';
58
+ export {useGestureRecognizer} from '../gestures/useGestureRecognizer';
59
+ // The motion engine's factory. The public one, `createAnimator`, plays
60
+ // only the theme's state-change motion.
61
+ export {createMotionEngine} from '../motion/animator';
62
+ export type {
63
+ Animator as MotionEngine,
64
+ AnimatorOptions as MotionEngineOptions,
65
+ MotionCurve,
66
+ } from '../motion/animator';
67
+ export {cubicBezier} from '../motion/bezier';
68
+ export {mapProgress} from '../motion/progress';
69
+ export {parseCssEasing, parseMotionRoleValue} from '../motion/roles';
70
+ export {
71
+ rubberBand,
72
+ rubberBandInverse,
73
+ rubberBandSlope,
74
+ } from '../motion/rubberBand';
75
+ export {scroll} from '../motion/uikit/scroll';
76
+
77
+ // Lab components also read the UIKit gesture table, the touch presentation
78
+ // and its query, and an element's direction.
79
+ export {isRtlElement} from '../hooks/isRtlElement';
80
+ export {UIKIT_GESTURES} from '../motion/uikit/gestures';
81
+ export {useTouchPresentation} from '../utils/touchPresentation';
82
+ export {TOUCH_QUERY} from '../utils/touchQueries';
@@ -314,3 +314,14 @@ scroll view coasts with 0.25 × the pan's velocity plus 0.75 × its value one
314
314
  event earlier (four HID releases; `velocity.scrollReleaseWeight`, which a
315
315
  pan's `scrollVelocity()` reads). On UIKit, Reduce Motion with Prefer Cross-Fade changes
316
316
  nothing on a picker; the Wheel follows design:reduced-motion instead.
317
+
318
+ ## Menus (UIMenu)
319
+
320
+ Probe: the UIKit lab host app with a UIButton whose `UIMenu` is its primary
321
+ action (`showsMenuAsPrimaryAction`), three to twelve items, on a plain view
322
+ and inside a UIScrollView; the gesture-state, presentation-modifier,
323
+ display-link and feedback hooks; real HID touches.
324
+
325
+ | ID | Scene | Gesture | Extract | Method |
326
+ | ----- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------ |
327
+ | M-MN2 | button on a plain view | hold until the menu is open, then lift still; move 8 pt down, 8 pt right, 12 pt down, (7, 7), (8, 8) and lift; move 6 pt before the open and 6 pt after | row picked or not; handoff and list-selection recognizer states; highlighted row per frame: threshold, metric, where it is counted from | C |