@astryxdesign/core 0.7.7 → 0.7.8-canary.36cde5e

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 (581) hide show
  1. package/dist/AlertDialog/AlertDialog.d.ts +4 -1
  2. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  3. package/dist/AlertDialog/AlertDialog.js +46 -6
  4. package/dist/AppShell/AppShell.d.ts.map +1 -1
  5. package/dist/AppShell/AppShell.js +5 -0
  6. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  7. package/dist/BottomSheet/BottomSheet.js +1 -0
  8. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  9. package/dist/BottomSheet/BottomSheetPanel.js +25 -4
  10. package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
  11. package/dist/BottomSheet/BottomSheetSwitcher.js +5 -0
  12. package/dist/BottomSheet/useMobileKeyboard.d.ts.map +1 -1
  13. package/dist/BottomSheet/useMobileKeyboard.js +6 -0
  14. package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
  15. package/dist/BottomSheet/useSheetGestures.js +12 -1
  16. package/dist/Button/Button.d.ts.map +1 -1
  17. package/dist/Button/Button.js +17 -1
  18. package/dist/Calendar/Calendar.d.ts.map +1 -1
  19. package/dist/Calendar/Calendar.js +15 -16
  20. package/dist/Carousel/Carousel.d.ts.map +1 -1
  21. package/dist/Carousel/Carousel.js +2 -0
  22. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  23. package/dist/Chat/ChatComposerInput.js +4 -0
  24. package/dist/Chat/ChatMessageList.d.ts.map +1 -1
  25. package/dist/Chat/ChatMessageList.js +2 -1
  26. package/dist/Chat/useChatDictation.d.ts.map +1 -1
  27. package/dist/Chat/useChatDictation.js +2 -0
  28. package/dist/Chat/useChatNewMessages.js +1 -1
  29. package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
  30. package/dist/Chat/useChatStreamScroll.js +2 -0
  31. package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
  32. package/dist/Chat/useSpeechRecognition.js +3 -0
  33. package/dist/Chat/useTriggerMenu.js +1 -1
  34. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  35. package/dist/CheckboxInput/CheckboxInput.js +17 -12
  36. package/dist/CodeBlock/CodeBlock.d.ts +10 -1
  37. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  38. package/dist/CodeBlock/CodeBlock.js +28 -11
  39. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  40. package/dist/CommandPalette/CommandPalette.js +2 -0
  41. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  42. package/dist/CommandPalette/CommandPaletteItem.js +2 -0
  43. package/dist/ComplexSelector/ComplexSelector.d.ts +4 -1
  44. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  45. package/dist/ComplexSelector/ComplexSelector.js +14 -4
  46. package/dist/ContextMenu/ContextMenu.js +2 -2
  47. package/dist/DateInput/MonthScroller.d.ts.map +1 -1
  48. package/dist/DateInput/MonthScroller.js +5 -2
  49. package/dist/DateInput/PickerWheel.d.ts +19 -0
  50. package/dist/DateInput/PickerWheel.d.ts.map +1 -0
  51. package/dist/DateInput/PickerWheel.js +625 -0
  52. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  53. package/dist/DateInput/TouchDateField.js +1 -0
  54. package/dist/DateInput/Wheel.d.ts +18 -37
  55. package/dist/DateInput/Wheel.d.ts.map +1 -1
  56. package/dist/DateInput/Wheel.js +84 -113
  57. package/dist/DateInput/useOwnScrollGesture.d.ts +10 -0
  58. package/dist/DateInput/useOwnScrollGesture.d.ts.map +1 -1
  59. package/dist/DateInput/useOwnScrollGesture.js +16 -3
  60. package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -1
  61. package/dist/DateInput/usePointerDragScroll.js +2 -0
  62. package/dist/DateInput/useScrollSettle.d.ts.map +1 -1
  63. package/dist/DateInput/useScrollSettle.js +3 -0
  64. package/dist/DateInput/useWheelListbox.d.ts +59 -0
  65. package/dist/DateInput/useWheelListbox.d.ts.map +1 -0
  66. package/dist/DateInput/useWheelListbox.js +88 -0
  67. package/dist/DateInput/wheelOptions.d.ts +74 -0
  68. package/dist/DateInput/wheelOptions.d.ts.map +1 -0
  69. package/dist/DateInput/wheelOptions.js +98 -0
  70. package/dist/DateInput/wheelPhysics.d.ts +127 -0
  71. package/dist/DateInput/wheelPhysics.d.ts.map +1 -0
  72. package/dist/DateInput/wheelPhysics.js +341 -0
  73. package/dist/DateInput/wheelStrip.d.ts +92 -0
  74. package/dist/DateInput/wheelStrip.d.ts.map +1 -0
  75. package/dist/DateInput/wheelStrip.js +258 -0
  76. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  77. package/dist/DateTimeInput/TouchDateTimeField.js +2 -0
  78. package/dist/Dialog/Dialog.d.ts.map +1 -1
  79. package/dist/Dialog/Dialog.js +9 -32
  80. package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
  81. package/dist/Drawer/useDrawerDialogPresence.js +3 -0
  82. package/dist/DropdownMenu/useMenuOverflow.d.ts.map +1 -1
  83. package/dist/DropdownMenu/useMenuOverflow.js +5 -0
  84. package/dist/Field/Field.js +2 -2
  85. package/dist/FieldStatus/useFieldStatusAnnouncement.d.ts.map +1 -1
  86. package/dist/FieldStatus/useFieldStatusAnnouncement.js +1 -0
  87. package/dist/FormLayout/FormLayout.d.ts +5 -1
  88. package/dist/FormLayout/FormLayout.d.ts.map +1 -1
  89. package/dist/HoverCard/HoverCard.d.ts +6 -4
  90. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  91. package/dist/HoverCard/HoverCard.js +48 -3
  92. package/dist/HoverCard/useHoverCard.d.ts +5 -4
  93. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  94. package/dist/HoverCard/useHoverCard.js +20 -33
  95. package/dist/Icon/Icon.d.ts +5 -1
  96. package/dist/Icon/Icon.d.ts.map +1 -1
  97. package/dist/Icon/Icon.js +5 -2
  98. package/dist/Item/useSwipeAction.d.ts.map +1 -1
  99. package/dist/Item/useSwipeAction.js +3 -0
  100. package/dist/Layer/modalOutlet.d.ts.map +1 -1
  101. package/dist/Layer/modalOutlet.js +2 -0
  102. package/dist/Layer/outsidePress.d.ts.map +1 -1
  103. package/dist/Layer/outsidePress.js +1 -0
  104. package/dist/Layer/useLayer.d.ts.map +1 -1
  105. package/dist/Layer/useLayer.js +3 -0
  106. package/dist/Layer/useLayerDismissal.d.ts.map +1 -1
  107. package/dist/Layer/useLayerDismissal.js +3 -0
  108. package/dist/Layer/usePressPin.d.ts +17 -5
  109. package/dist/Layer/usePressPin.d.ts.map +1 -1
  110. package/dist/Layer/usePressPin.js +62 -12
  111. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  112. package/dist/Layer/useTouchTrigger.js +3 -0
  113. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  114. package/dist/Lightbox/Lightbox.js +19 -0
  115. package/dist/MobileNav/MobileNav.d.ts +3 -2
  116. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  117. package/dist/MobileNav/MobileNav.js +9 -25
  118. package/dist/Outline/useOutlineFromDOM.d.ts.map +1 -1
  119. package/dist/Outline/useOutlineFromDOM.js +3 -0
  120. package/dist/Outline/useScrollSpy.d.ts.map +1 -1
  121. package/dist/Outline/useScrollSpy.js +3 -0
  122. package/dist/OverflowList/OverflowList.d.ts.map +1 -1
  123. package/dist/OverflowList/OverflowList.js +3 -0
  124. package/dist/Popover/Popover.d.ts.map +1 -1
  125. package/dist/Popover/Popover.js +6 -0
  126. package/dist/PowerSearch/PowerSearch.d.ts +43 -4
  127. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  128. package/dist/PowerSearch/PowerSearch.js +445 -134
  129. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts +102 -0
  130. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -0
  131. package/dist/PowerSearch/PowerSearchBottomSheet.js +1919 -0
  132. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +35 -2
  133. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  134. package/dist/PowerSearch/PowerSearchEditPopover.js +25 -6
  135. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts +1 -1
  136. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts.map +1 -1
  137. package/dist/PowerSearch/PowerSearchFilterEditor.js +4 -2
  138. package/dist/PowerSearch/PowerSearchToken.d.ts +1 -1
  139. package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
  140. package/dist/PowerSearch/PowerSearchToken.js +7 -2
  141. package/dist/PowerSearch/PowerSearchValueEditor.d.ts +38 -3
  142. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  143. package/dist/PowerSearch/PowerSearchValueEditor.js +193 -83
  144. package/dist/PowerSearch/formatFilterValue.d.ts +18 -6
  145. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  146. package/dist/PowerSearch/formatFilterValue.js +33 -12
  147. package/dist/PowerSearch/formatTokenValue.d.ts +28 -0
  148. package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -0
  149. package/dist/PowerSearch/formatTokenValue.js +162 -0
  150. package/dist/PowerSearch/powerSearchDateZone.d.ts +21 -0
  151. package/dist/PowerSearch/powerSearchDateZone.d.ts.map +1 -0
  152. package/dist/PowerSearch/powerSearchDateZone.js +37 -0
  153. package/dist/PowerSearch/powerSearchSheetUtils.d.ts +65 -0
  154. package/dist/PowerSearch/powerSearchSheetUtils.d.ts.map +1 -0
  155. package/dist/PowerSearch/powerSearchSheetUtils.js +168 -0
  156. package/dist/PowerSearch/types.d.ts +2 -0
  157. package/dist/PowerSearch/types.d.ts.map +1 -1
  158. package/dist/ProgressBar/ProgressBarTouch.d.ts.map +1 -1
  159. package/dist/ProgressBar/ProgressBarTouch.js +2 -0
  160. package/dist/RadioList/RadioList.d.ts.map +1 -1
  161. package/dist/RadioList/RadioList.js +3 -2
  162. package/dist/RadioList/RadioListItem.d.ts +1 -1
  163. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  164. package/dist/RadioList/RadioListItem.js +5 -3
  165. package/dist/Resizable/ResizeHandle.d.ts +2 -1
  166. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  167. package/dist/Resizable/ResizeHandle.js +101 -77
  168. package/dist/Resizable/createResizable.d.ts +145 -0
  169. package/dist/Resizable/createResizable.d.ts.map +1 -0
  170. package/dist/Resizable/createResizable.js +575 -0
  171. package/dist/Resizable/useResizable.d.ts +3 -3
  172. package/dist/Resizable/useResizable.d.ts.map +1 -1
  173. package/dist/Resizable/useResizable.js +252 -459
  174. package/dist/SegmentedControl/useSegmentedSelectionMotion.d.ts.map +1 -1
  175. package/dist/SegmentedControl/useSegmentedSelectionMotion.js +3 -3
  176. package/dist/SelectableCard/SelectableCard.d.ts +2 -0
  177. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  178. package/dist/SelectableCard/SelectableCard.js +36 -11
  179. package/dist/SelectableCard/selectableCardInput.d.ts +12 -0
  180. package/dist/SelectableCard/selectableCardInput.d.ts.map +1 -0
  181. package/dist/SelectableCard/selectableCardInput.js +20 -0
  182. package/dist/Selector/Selector.d.ts.map +1 -1
  183. package/dist/Selector/Selector.js +5 -8
  184. package/dist/Slider/sliderTouchController.js +2 -2
  185. package/dist/Spinner/Spinner.d.ts +1 -1
  186. package/dist/Spinner/Spinner.d.ts.map +1 -1
  187. package/dist/Spinner/Spinner.js +60 -58
  188. package/dist/Switch/Switch.d.ts.map +1 -1
  189. package/dist/Switch/Switch.js +4 -10
  190. package/dist/Switch/useSwitchTouch.js +4 -4
  191. package/dist/Table/BaseTable.d.ts.map +1 -1
  192. package/dist/Table/BaseTable.js +29 -8
  193. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  194. package/dist/Table/plugins/columnResize/useTableColumnResize.js +3 -1
  195. package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
  196. package/dist/Table/plugins/filtering/useTableFiltering.js +2 -1
  197. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  198. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +4 -0
  199. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
  200. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +2 -0
  201. package/dist/TextInput/TextInput.d.ts +2 -2
  202. package/dist/TextInput/TextInput.d.ts.map +1 -1
  203. package/dist/TextInput/TextInput.js +10 -7
  204. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  205. package/dist/TimeInput/TimeInput.js +2 -0
  206. package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
  207. package/dist/TimeInput/TouchTimeField.js +2 -0
  208. package/dist/Timer/Timer.d.ts.map +1 -1
  209. package/dist/Timer/Timer.js +2 -0
  210. package/dist/Timestamp/Timestamp.js +1 -1
  211. package/dist/Toast/Toast.d.ts +11 -1
  212. package/dist/Toast/Toast.d.ts.map +1 -1
  213. package/dist/Toast/Toast.js +25 -15
  214. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  215. package/dist/Toast/ToastViewport.js +97 -34
  216. package/dist/Toast/types.d.ts +9 -3
  217. package/dist/Toast/types.d.ts.map +1 -1
  218. package/dist/Toast/useToast.d.ts.map +1 -1
  219. package/dist/Toast/useToast.js +1 -0
  220. package/dist/Tokenizer/Tokenizer.d.ts +49 -37
  221. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  222. package/dist/Tokenizer/Tokenizer.js +22 -19
  223. package/dist/Tokenizer/TokenizerBottomSheet.d.ts +1 -1
  224. package/dist/Tokenizer/TokenizerBottomSheet.js +1 -1
  225. package/dist/Tokenizer/index.d.ts +1 -1
  226. package/dist/Tokenizer/index.d.ts.map +1 -1
  227. package/dist/Tooltip/useTooltip.d.ts +19 -1
  228. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  229. package/dist/Tooltip/useTooltip.js +34 -53
  230. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  231. package/dist/Typeahead/BaseTypeahead.js +27 -18
  232. package/dist/Typeahead/TypeaheadItem.d.ts +2 -1
  233. package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
  234. package/dist/animator/createAnimator.d.ts +98 -0
  235. package/dist/animator/createAnimator.d.ts.map +1 -0
  236. package/dist/animator/createAnimator.js +259 -0
  237. package/dist/astryx.css +39 -6
  238. package/dist/gestures/GestureHost.d.ts +16 -1
  239. package/dist/gestures/GestureHost.d.ts.map +1 -1
  240. package/dist/gestures/GestureHost.js +1 -1
  241. package/dist/gestures/PressTracker.d.ts.map +1 -1
  242. package/dist/gestures/PressTracker.js +4 -3
  243. package/dist/hooks/ModalAnnounceProvider.d.ts.map +1 -1
  244. package/dist/hooks/ModalAnnounceProvider.js +1 -0
  245. package/dist/hooks/actionGroupTracker.d.ts +4 -1
  246. package/dist/hooks/actionGroupTracker.d.ts.map +1 -1
  247. package/dist/hooks/actionGroupTracker.js +13 -3
  248. package/dist/hooks/index.d.ts +1 -0
  249. package/dist/hooks/index.d.ts.map +1 -1
  250. package/dist/hooks/index.js +1 -0
  251. package/dist/hooks/longPressDetector.d.ts +66 -0
  252. package/dist/hooks/longPressDetector.d.ts.map +1 -0
  253. package/dist/hooks/longPressDetector.js +200 -0
  254. package/dist/hooks/pressGroupContext.d.ts +6 -0
  255. package/dist/hooks/pressGroupContext.d.ts.map +1 -0
  256. package/dist/hooks/pressGroupContext.js +20 -0
  257. package/dist/hooks/rootScrollStyles.d.ts +48 -0
  258. package/dist/hooks/rootScrollStyles.d.ts.map +1 -0
  259. package/dist/hooks/rootScrollStyles.js +207 -0
  260. package/dist/hooks/scrollLockTouchGuard.d.ts +13 -0
  261. package/dist/hooks/scrollLockTouchGuard.d.ts.map +1 -0
  262. package/dist/hooks/scrollLockTouchGuard.js +134 -0
  263. package/dist/hooks/scrollbarGutter.d.ts +4 -4
  264. package/dist/hooks/scrollbarGutter.d.ts.map +1 -1
  265. package/dist/hooks/scrollbarGutter.js +36 -23
  266. package/dist/hooks/useActionGroupTracking.d.ts +53 -0
  267. package/dist/hooks/useActionGroupTracking.d.ts.map +1 -0
  268. package/dist/hooks/useActionGroupTracking.js +174 -0
  269. package/dist/hooks/useAnimator.d.ts +41 -0
  270. package/dist/hooks/useAnimator.d.ts.map +1 -0
  271. package/dist/hooks/useAnimator.js +70 -0
  272. package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
  273. package/dist/hooks/useAnnounceRenderedText.js +1 -0
  274. package/dist/hooks/useAttachment.d.ts +1 -1
  275. package/dist/hooks/useAttachment.js +1 -1
  276. package/dist/hooks/useAutoMediaMode.d.ts.map +1 -1
  277. package/dist/hooks/useAutoMediaMode.js +1 -0
  278. package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
  279. package/dist/hooks/useBusyAnnouncement.js +2 -0
  280. package/dist/hooks/useDevWarning.d.ts.map +1 -1
  281. package/dist/hooks/useDevWarning.js +2 -0
  282. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  283. package/dist/hooks/useFocusTrap.js +2 -0
  284. package/dist/hooks/useGridFocus.d.ts +8 -5
  285. package/dist/hooks/useGridFocus.d.ts.map +1 -1
  286. package/dist/hooks/useGridFocus.js +4 -3
  287. package/dist/hooks/useHotkeys.d.ts.map +1 -1
  288. package/dist/hooks/useHotkeys.js +3 -0
  289. package/dist/hooks/useImageMode.d.ts.map +1 -1
  290. package/dist/hooks/useImageMode.js +3 -0
  291. package/dist/hooks/useInputStatusIcon.d.ts +1 -1
  292. package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
  293. package/dist/hooks/useInputStatusIcon.js +2 -2
  294. package/dist/hooks/useKeyboardHint.js +1 -1
  295. package/dist/hooks/useLongPress.d.ts +8 -9
  296. package/dist/hooks/useLongPress.d.ts.map +1 -1
  297. package/dist/hooks/useLongPress.js +23 -106
  298. package/dist/hooks/useMenuHover.d.ts.map +1 -1
  299. package/dist/hooks/useMenuHover.js +2 -0
  300. package/dist/hooks/useMenuPress.d.ts.map +1 -1
  301. package/dist/hooks/useMenuPress.js +3 -0
  302. package/dist/hooks/useOverflow.d.ts.map +1 -1
  303. package/dist/hooks/useOverflow.js +2 -1
  304. package/dist/hooks/usePressFeedback.d.ts.map +1 -1
  305. package/dist/hooks/usePressFeedback.js +1 -0
  306. package/dist/hooks/useResolvedRequired.d.ts +3 -0
  307. package/dist/hooks/useResolvedRequired.d.ts.map +1 -1
  308. package/dist/hooks/useResolvedRequired.js +3 -0
  309. package/dist/hooks/useScrollLock.d.ts +7 -9
  310. package/dist/hooks/useScrollLock.d.ts.map +1 -1
  311. package/dist/hooks/useScrollLock.js +55 -48
  312. package/dist/hooks/useScrollableArea.d.ts.map +1 -1
  313. package/dist/hooks/useScrollableArea.js +5 -0
  314. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  315. package/dist/hooks/useStreamingText.js +3 -0
  316. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts +8 -0
  317. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts.map +1 -0
  318. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.js +42 -0
  319. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.d.ts.map +1 -1
  320. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.js +6 -0
  321. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts +8 -0
  322. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts.map +1 -0
  323. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.js +14 -0
  324. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  325. package/dist/i18n/generated-locales/en.generated.js +30 -0
  326. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  327. package/dist/i18n/generated-locales/pseudo.generated.js +30 -0
  328. package/dist/index.d.ts +1 -0
  329. package/dist/index.d.ts.map +1 -1
  330. package/dist/index.js +4 -0
  331. package/dist/internal/indicatorPress.stylex.d.ts +20 -0
  332. package/dist/internal/indicatorPress.stylex.d.ts.map +1 -0
  333. package/dist/internal/indicatorPress.stylex.js +26 -0
  334. package/dist/internal/selectable-card.d.ts +21 -0
  335. package/dist/internal/selectable-card.d.ts.map +1 -0
  336. package/dist/internal/selectable-card.js +20 -0
  337. package/dist/internal/sheetDraft.d.ts +2 -2
  338. package/dist/internal/sheetDraft.js +2 -2
  339. package/dist/motion/animatedLayout.d.ts.map +1 -1
  340. package/dist/motion/animatedLayout.js +7 -7
  341. package/dist/motion/animator.d.ts +14 -14
  342. package/dist/motion/animator.d.ts.map +1 -1
  343. package/dist/motion/animator.js +45 -20
  344. package/dist/motion/progress.d.ts +88 -0
  345. package/dist/motion/progress.d.ts.map +1 -0
  346. package/dist/motion/progress.js +128 -0
  347. package/dist/motion/reducedMotion.d.ts.map +1 -1
  348. package/dist/motion/reducedMotion.js +3 -1
  349. package/dist/motion/uikit/alert.d.ts +41 -0
  350. package/dist/motion/uikit/alert.d.ts.map +1 -0
  351. package/dist/motion/uikit/alert.js +43 -0
  352. package/dist/motion/uikit/index.d.ts +4 -3
  353. package/dist/motion/uikit/index.d.ts.map +1 -1
  354. package/dist/motion/uikit/index.js +4 -3
  355. package/dist/motion/uikit/picker.d.ts +96 -0
  356. package/dist/motion/uikit/picker.d.ts.map +1 -0
  357. package/dist/motion/uikit/picker.js +117 -0
  358. package/dist/privateAttributes/pressGroupItem.stylex.d.ts +22 -0
  359. package/dist/privateAttributes/pressGroupItem.stylex.d.ts.map +1 -0
  360. package/dist/privateAttributes/pressGroupItem.stylex.js +36 -0
  361. package/dist/privateAttributes/reducedMotion.stylex.d.ts +23 -0
  362. package/dist/privateAttributes/reducedMotion.stylex.d.ts.map +1 -0
  363. package/dist/privateAttributes/reducedMotion.stylex.js +40 -0
  364. package/dist/theme/Theme.d.ts.map +1 -1
  365. package/dist/theme/Theme.js +29 -4
  366. package/dist/theme/motionKnobs.d.ts +4 -3
  367. package/dist/theme/motionKnobs.d.ts.map +1 -1
  368. package/dist/theme/motionKnobs.js +3 -2
  369. package/dist/theme/themeMotion.d.ts +6 -0
  370. package/dist/theme/themeMotion.d.ts.map +1 -1
  371. package/dist/theme/themeMotion.js +7 -0
  372. package/dist/utils/dateParser.d.ts.map +1 -1
  373. package/dist/utils/dateParser.js +12 -0
  374. package/dist/utils/focusReturn.d.ts +15 -0
  375. package/dist/utils/focusReturn.d.ts.map +1 -1
  376. package/dist/utils/focusReturn.js +28 -0
  377. package/dist/utils/interactionModality.d.ts.map +1 -1
  378. package/dist/utils/interactionModality.js +4 -0
  379. package/dist/utils/interactionOverlay.stylex.d.ts +3 -2
  380. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  381. package/dist/utils/interactionOverlay.stylex.js +3 -2
  382. package/dist/utils/plainDate.d.ts +8 -0
  383. package/dist/utils/plainDate.d.ts.map +1 -1
  384. package/dist/utils/plainDate.js +19 -0
  385. package/dist/utils/pressFeedback.d.ts.map +1 -1
  386. package/dist/utils/pressFeedback.js +20 -6
  387. package/dist/utils/triggerFocus.d.ts +36 -0
  388. package/dist/utils/triggerFocus.d.ts.map +1 -0
  389. package/dist/utils/triggerFocus.js +65 -0
  390. package/locales/en.json +120 -0
  391. package/locales/pseudo.json +90 -0
  392. package/package.json +14 -9
  393. package/src/AlertDialog/AlertDialog.doc.mjs +2 -2
  394. package/src/AlertDialog/AlertDialog.tsx +46 -5
  395. package/src/AppShell/AppShell.tsx +4 -0
  396. package/src/BottomSheet/BottomSheet.tsx +1 -0
  397. package/src/BottomSheet/BottomSheetPanel.tsx +39 -3
  398. package/src/BottomSheet/BottomSheetSwitcher.tsx +5 -0
  399. package/src/BottomSheet/useMobileKeyboard.ts +4 -0
  400. package/src/BottomSheet/useSheetGestures.ts +10 -1
  401. package/src/Button/Button.tsx +26 -4
  402. package/src/Calendar/Calendar.tsx +36 -25
  403. package/src/Carousel/Carousel.tsx +1 -0
  404. package/src/Chat/ChatComposerInput.tsx +2 -0
  405. package/src/Chat/ChatMessageList.tsx +2 -1
  406. package/src/Chat/useChatDictation.ts +1 -0
  407. package/src/Chat/useChatNewMessages.ts +1 -1
  408. package/src/Chat/useChatStreamScroll.ts +2 -0
  409. package/src/Chat/useSpeechRecognition.ts +2 -0
  410. package/src/Chat/useTriggerMenu.tsx +1 -1
  411. package/src/CheckboxInput/CheckboxInput.doc.mjs +18 -0
  412. package/src/CheckboxInput/CheckboxInput.tsx +38 -15
  413. package/src/CodeBlock/CodeBlock.doc.mjs +9 -1
  414. package/src/CodeBlock/CodeBlock.tsx +41 -4
  415. package/src/CommandPalette/CommandPalette.tsx +1 -0
  416. package/src/CommandPalette/CommandPaletteItem.tsx +1 -0
  417. package/src/ComplexSelector/ComplexSelector.tsx +20 -5
  418. package/src/ContextMenu/ContextMenu.tsx +2 -2
  419. package/src/DateInput/MonthScroller.tsx +8 -2
  420. package/src/DateInput/PickerWheel.tsx +765 -0
  421. package/src/DateInput/TouchDateField.tsx +1 -0
  422. package/src/DateInput/Wheel.tsx +94 -150
  423. package/src/DateInput/useOwnScrollGesture.ts +25 -3
  424. package/src/DateInput/usePointerDragScroll.ts +1 -0
  425. package/src/DateInput/useScrollSettle.ts +2 -0
  426. package/src/DateInput/useWheelListbox.ts +112 -0
  427. package/src/DateInput/wheelOptions.ts +155 -0
  428. package/src/DateInput/wheelPhysics.ts +406 -0
  429. package/src/DateInput/wheelStrip.ts +341 -0
  430. package/src/DateTimeInput/TouchDateTimeField.tsx +2 -0
  431. package/src/Dialog/Dialog.tsx +12 -32
  432. package/src/Drawer/useDrawerDialogPresence.ts +2 -0
  433. package/src/DropdownMenu/useMenuOverflow.ts +3 -0
  434. package/src/Field/Field.tsx +2 -2
  435. package/src/FieldStatus/useFieldStatusAnnouncement.ts +1 -0
  436. package/src/FormLayout/FormLayout.doc.mjs +181 -46
  437. package/src/FormLayout/FormLayout.tsx +5 -1
  438. package/src/HoverCard/HoverCard.doc.mjs +10 -8
  439. package/src/HoverCard/HoverCard.tsx +58 -6
  440. package/src/HoverCard/useHoverCard.doc.mjs +178 -36
  441. package/src/HoverCard/useHoverCard.tsx +49 -54
  442. package/src/Icon/Icon.doc.mjs +49 -8
  443. package/src/Icon/Icon.tsx +15 -7
  444. package/src/IconButton/IconButton.doc.mjs +141 -21
  445. package/src/Item/useSwipeAction.ts +2 -0
  446. package/src/Layer/modalOutlet.ts +2 -0
  447. package/src/Layer/outsidePress.ts +1 -0
  448. package/src/Layer/useLayer.tsx +2 -0
  449. package/src/Layer/useLayerDismissal.ts +2 -0
  450. package/src/Layer/usePressPin.ts +81 -15
  451. package/src/Layer/useTouchTrigger.ts +2 -0
  452. package/src/Lightbox/Lightbox.tsx +19 -0
  453. package/src/MobileNav/MobileNav.tsx +9 -30
  454. package/src/Outline/useOutlineFromDOM.ts +2 -0
  455. package/src/Outline/useScrollSpy.ts +2 -0
  456. package/src/OverflowList/OverflowList.tsx +2 -0
  457. package/src/Popover/Popover.tsx +4 -0
  458. package/src/PowerSearch/PowerSearch.doc.mjs +60 -8
  459. package/src/PowerSearch/PowerSearch.tsx +627 -157
  460. package/src/PowerSearch/PowerSearchBottomSheet.tsx +2525 -0
  461. package/src/PowerSearch/PowerSearchEditPopover.tsx +39 -6
  462. package/src/PowerSearch/PowerSearchFilterEditor.tsx +2 -0
  463. package/src/PowerSearch/PowerSearchToken.tsx +7 -0
  464. package/src/PowerSearch/PowerSearchValueEditor.tsx +244 -58
  465. package/src/PowerSearch/formatFilterValue.ts +55 -17
  466. package/src/PowerSearch/formatTokenValue.ts +222 -0
  467. package/src/PowerSearch/powerSearchDateZone.ts +64 -0
  468. package/src/PowerSearch/powerSearchSheetUtils.ts +224 -0
  469. package/src/PowerSearch/types.ts +2 -0
  470. package/src/ProgressBar/ProgressBarTouch.ts +2 -0
  471. package/src/RadioList/RadioList.tsx +3 -2
  472. package/src/RadioList/RadioListItem.tsx +5 -3
  473. package/src/Resizable/Resizable.doc.mjs +5 -4
  474. package/src/Resizable/ResizeHandle.tsx +169 -109
  475. package/src/Resizable/createResizable.ts +831 -0
  476. package/src/Resizable/useResizable.ts +292 -623
  477. package/src/SegmentedControl/useSegmentedSelectionMotion.ts +6 -3
  478. package/src/SelectableCard/SelectableCard.tsx +39 -10
  479. package/src/SelectableCard/selectableCardInput.ts +30 -0
  480. package/src/Selector/Selector.tsx +5 -12
  481. package/src/Slider/sliderTouchController.ts +2 -2
  482. package/src/Spinner/Spinner.tsx +77 -63
  483. package/src/Switch/Switch.tsx +2 -6
  484. package/src/Switch/useSwitchTouch.ts +4 -4
  485. package/src/Table/BaseTable.tsx +46 -12
  486. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +2 -1
  487. package/src/Table/plugins/filtering/useTableFiltering.tsx +1 -0
  488. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +4 -0
  489. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +2 -0
  490. package/src/TextInput/TextInput.tsx +11 -10
  491. package/src/TimeInput/TimeInput.tsx +2 -0
  492. package/src/TimeInput/TouchTimeField.tsx +2 -0
  493. package/src/Timer/Timer.tsx +1 -0
  494. package/src/Timestamp/Timestamp.tsx +1 -1
  495. package/src/Toast/Toast.doc.mjs +4 -3
  496. package/src/Toast/Toast.tsx +52 -32
  497. package/src/Toast/ToastViewport.tsx +123 -35
  498. package/src/Toast/types.ts +9 -3
  499. package/src/Toast/useToast.tsx +1 -0
  500. package/src/Tokenizer/Tokenizer.doc.mjs +19 -3
  501. package/src/Tokenizer/Tokenizer.tsx +73 -51
  502. package/src/Tokenizer/TokenizerBottomSheet.tsx +1 -1
  503. package/src/Tokenizer/index.ts +1 -0
  504. package/src/Tooltip/useTooltip.doc.mjs +24 -0
  505. package/src/Tooltip/useTooltip.tsx +61 -56
  506. package/src/Typeahead/BaseTypeahead.tsx +27 -17
  507. package/src/Typeahead/TypeaheadItem.doc.mjs +6 -3
  508. package/src/Typeahead/TypeaheadItem.tsx +2 -1
  509. package/src/animator/createAnimator.doc.mjs +153 -0
  510. package/src/animator/createAnimator.ts +324 -0
  511. package/src/gestures/GestureHost.ts +1 -1
  512. package/src/gestures/PressTracker.ts +4 -3
  513. package/src/gestures/README.md +10 -4
  514. package/src/hooks/ModalAnnounceProvider.tsx +1 -0
  515. package/src/hooks/actionGroupTracker.ts +20 -5
  516. package/src/hooks/index.ts +2 -0
  517. package/src/hooks/longPressDetector.ts +273 -0
  518. package/src/hooks/pressGroupContext.ts +21 -0
  519. package/src/hooks/rootScrollStyles.ts +247 -0
  520. package/src/hooks/scrollLockTouchGuard.ts +182 -0
  521. package/src/hooks/scrollbarGutter.ts +41 -26
  522. package/src/hooks/useActionGroupTracking.ts +224 -0
  523. package/src/hooks/useAnimator.doc.mjs +109 -0
  524. package/src/hooks/useAnimator.ts +67 -0
  525. package/src/hooks/useAnnounceRenderedText.ts +1 -0
  526. package/src/hooks/useAttachment.ts +1 -1
  527. package/src/hooks/useAutoMediaMode.ts +1 -0
  528. package/src/hooks/useBusyAnnouncement.ts +2 -0
  529. package/src/hooks/useDevWarning.ts +2 -0
  530. package/src/hooks/useFocusTrap.ts +2 -0
  531. package/src/hooks/useGridFocus.doc.mjs +6 -6
  532. package/src/hooks/useGridFocus.ts +10 -7
  533. package/src/hooks/useHotkeys.ts +2 -0
  534. package/src/hooks/useImageMode.ts +2 -0
  535. package/src/hooks/useInputStatusIcon.tsx +3 -2
  536. package/src/hooks/useKeyboardHint.tsx +1 -1
  537. package/src/hooks/useLongPress.doc.mjs +2 -2
  538. package/src/hooks/useLongPress.ts +32 -122
  539. package/src/hooks/useMenuHover.ts +1 -0
  540. package/src/hooks/useMenuPress.ts +2 -0
  541. package/src/hooks/useOverflow.ts +2 -1
  542. package/src/hooks/usePressFeedback.ts +1 -0
  543. package/src/hooks/useResolvedRequired.ts +3 -0
  544. package/src/hooks/useScrollLock.doc.mjs +51 -12
  545. package/src/hooks/useScrollLock.ts +57 -60
  546. package/src/hooks/useScrollableArea.ts +4 -0
  547. package/src/hooks/useStreamingText.ts +2 -0
  548. package/src/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.ts +43 -0
  549. package/src/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.ts +6 -0
  550. package/src/i18n/generated-english/PowerSearch/formatTokenValue.generated.ts +15 -0
  551. package/src/i18n/generated-locales/en.generated.ts +41 -0
  552. package/src/i18n/generated-locales/pseudo.generated.ts +42 -0
  553. package/src/index.ts +13 -0
  554. package/src/internal/indicatorPress.stylex.ts +24 -0
  555. package/src/internal/selectable-card.ts +21 -0
  556. package/src/internal/sheetDraft.ts +2 -2
  557. package/src/motion/MEASUREMENTS.md +18 -0
  558. package/src/motion/README.md +10 -5
  559. package/src/motion/animatedLayout.ts +10 -5
  560. package/src/motion/animator.ts +66 -31
  561. package/src/motion/progress.ts +155 -0
  562. package/src/motion/reducedMotion.ts +3 -1
  563. package/src/motion/uikit/alert.ts +43 -0
  564. package/src/motion/uikit/index.ts +4 -3
  565. package/src/motion/uikit/picker.ts +116 -0
  566. package/src/privateAttributes/pressGroupItem.stylex.ts +44 -0
  567. package/src/privateAttributes/reducedMotion.stylex.ts +45 -0
  568. package/src/theme/Theme.tsx +37 -3
  569. package/src/theme/motionKnobs.ts +4 -3
  570. package/src/theme/themeMotion.ts +7 -0
  571. package/src/utils/dateParser.ts +16 -0
  572. package/src/utils/focusReturn.ts +30 -0
  573. package/src/utils/interactionModality.ts +4 -0
  574. package/src/utils/interactionOverlay.stylex.ts +3 -2
  575. package/src/utils/plainDate.ts +21 -0
  576. package/src/utils/pressFeedback.ts +24 -6
  577. package/src/utils/triggerFocus.ts +80 -0
  578. package/dist/internal/touch-sheet.d.ts +0 -21
  579. package/dist/internal/touch-sheet.d.ts.map +0 -1
  580. package/dist/internal/touch-sheet.js +0 -19
  581. package/src/internal/touch-sheet.ts +0 -21
@@ -45,6 +45,11 @@ import {registerTheme} from './themeRegistry';
45
45
  import {dataAttr} from '../naming';
46
46
  import {ThemeContext} from './useTheme';
47
47
  import {warnOnce} from '../utils/devWarning';
48
+ import {REDUCED_MOTION_PROPERTY, resolveMotionKnobs} from './themeMotion';
49
+ import {
50
+ reducedMotionMarkProps,
51
+ setRootReducedMotionMark,
52
+ } from '../privateAttributes/reducedMotion.stylex';
48
53
 
49
54
  /**
50
55
  * Theme provider props
@@ -76,6 +81,11 @@ const wrapperStyles = stylex.create({
76
81
  system: {
77
82
  colorScheme: 'light dark',
78
83
  },
84
+ // The mark's custom property (REDUCED_MOTION_PROPERTY), which every element
85
+ // under the mark inherits.
86
+ reducedMotion: {
87
+ '--_astryx-reduced-motion': '1',
88
+ },
79
89
  });
80
90
 
81
91
  // =============================================================================
@@ -110,6 +120,7 @@ const THEME_LAYER_ORDER = '@layer reset, astryx-base, astryx-theme;';
110
120
  function useThemeStyleInjection(theme: DefinedTheme): void {
111
121
  const id = useId();
112
122
 
123
+ // Syncs the document's stylesheets with the runtime theme CSS.
113
124
  useInsertionEffect(() => {
114
125
  // Built themes have their CSS in a separate file — skip injection
115
126
  if (theme.__built) {
@@ -197,12 +208,18 @@ function useThemeStyleInjection(theme: DefinedTheme): void {
197
208
  *
198
209
  * - 'light' | 'dark' → sets data-theme="light" | "dark"
199
210
  * - 'system' → removes data-theme (reset.css defaults to color-scheme: light dark)
211
+ *
212
+ * A theme that reduces motion for everyone also marks `<html>` with
213
+ * `data-astryx-reduced-motion` and its custom property, so layers portaled
214
+ * outside the wrapper reduce their motion too.
200
215
  */
201
216
  function useRootThemeSync(
202
217
  isNested: boolean,
203
218
  mode: ThemeMode,
204
219
  themeName: string,
220
+ reducesMotion: boolean,
205
221
  ): void {
222
+ // Syncs the theme attributes on the root `<html>` element.
206
223
  useIsomorphicLayoutEffect(() => {
207
224
  if (isNested) {
208
225
  return;
@@ -220,12 +237,20 @@ function useRootThemeSync(
220
237
 
221
238
  // Sync theme name so @scope rules reach portals/fallback viewports.
222
239
  document.documentElement.setAttribute(dataAttr('theme'), themeName);
240
+ setRootReducedMotionMark(document.documentElement, reducesMotion);
241
+ if (reducesMotion) {
242
+ document.documentElement.style.setProperty(REDUCED_MOTION_PROPERTY, '1');
243
+ } else {
244
+ document.documentElement.style.removeProperty(REDUCED_MOTION_PROPERTY);
245
+ }
223
246
 
224
247
  return () => {
225
248
  document.documentElement.removeAttribute('data-theme');
226
249
  document.documentElement.removeAttribute(dataAttr('theme'));
250
+ setRootReducedMotionMark(document.documentElement, false);
251
+ document.documentElement.style.removeProperty(REDUCED_MOTION_PROPERTY);
227
252
  };
228
- }, [isNested, mode, themeName]);
253
+ }, [isNested, mode, themeName, reducesMotion]);
229
254
  }
230
255
 
231
256
  // =============================================================================
@@ -255,7 +280,11 @@ export function Theme({
255
280
  registerTheme(theme);
256
281
 
257
282
  useThemeStyleInjection(theme);
258
- useRootThemeSync(isNested, mode, theme.name);
283
+ // resolveMotionKnobs resolves no public theme to 'always', so no theme
284
+ // marks its root.
285
+ const reducesMotion =
286
+ resolveMotionKnobs(theme.__axes?.motion).reducedMotion === 'always';
287
+ useRootThemeSync(isNested, mode, theme.name, reducesMotion);
259
288
 
260
289
  // Get color-scheme style
261
290
  const colorSchemeStyle =
@@ -272,8 +301,13 @@ export function Theme({
272
301
  <ThemeContext value={ctxValue}>
273
302
  <ThemeNestingContext value={true}>
274
303
  <div
275
- {...stylex.props(wrapperStyles.base, colorSchemeStyle)}
304
+ {...stylex.props(
305
+ wrapperStyles.base,
306
+ colorSchemeStyle,
307
+ reducesMotion && wrapperStyles.reducedMotion,
308
+ )}
276
309
  data-astryx-theme={theme.name}
310
+ {...reducedMotionMarkProps(reducesMotion)}
277
311
  data-theme={mode === 'system' ? undefined : mode}>
278
312
  {children}
279
313
  </div>
@@ -20,10 +20,11 @@
20
20
  export type MotionCharacter = 'crisp' | 'standard' | 'expressive';
21
21
 
22
22
  /**
23
- * Whose Reduce Motion setting a theme follows: `'system'`, each person's own.
24
- * Internal: no theme sets it until `'always'` ships (`spec:AST-108` FR6).
23
+ * Whose Reduce Motion setting a theme follows: `'system'`, each person's own,
24
+ * or `'always'`, reduced for everyone. Internal: `resolveKnobs` resolves
25
+ * every theme to `'system'` until `'always'` ships (`spec:AST-108` FR6).
25
26
  */
26
- export type ThemeReducedMotion = 'system';
27
+ export type ThemeReducedMotion = 'system' | 'always';
27
28
 
28
29
  /** The motion knobs a theme sets (`spec:AST-108` FR1). */
29
30
  export interface ThemeMotionKnobs {
@@ -87,6 +87,13 @@ function msOf(value: string): number {
87
87
  */
88
88
  export const MOTION_TEMPO_PROPERTY = '--_astryx-motion-tempo';
89
89
 
90
+ /**
91
+ * The custom property a theme whose `reducedMotion` resolves to `'always'`
92
+ * sets to `1` on its root, and the root theme on `<html>`: styles that cannot
93
+ * key a selector on the mark read it in a value.
94
+ */
95
+ export const REDUCED_MOTION_PROPERTY = '--_astryx-reduced-motion';
96
+
90
97
  /** The duration tokens at `tempo`: today's values times it, to the ms. */
91
98
  export function durationTokensAt(tempo: number): Record<string, string> {
92
99
  const tokens: Record<string, string> = {};
@@ -32,6 +32,11 @@ export function isLocaleDayFirst(locale: Locale = 'en'): boolean {
32
32
  return dayIndex < monthIndex;
33
33
  }
34
34
 
35
+ // Built at run time: a Unicode property escape in a literal fails a source
36
+ // build whose Babel lacks the Unicode data.
37
+ const LETTER_FREE = new RegExp('^[^\\p{L}]+$', 'u');
38
+ const YEAR_FIRST = new RegExp('^\\d{4}[^\\p{L}\\d]', 'u');
39
+
35
40
  /**
36
41
  * Parses user input into a PlainDate.
37
42
  *
@@ -138,6 +143,17 @@ export function parseDateInput(
138
143
  if (/^\d+$/.test(trimmed)) {
139
144
  return null;
140
145
  }
146
+ // In a day-first locale, letter-free text that no form above matched is not
147
+ // a date. Native `Date` reads `a/b/c` month first. It also takes a year of
148
+ // one to three digits. So "12/01/2" gives a wrong date. A four-digit year
149
+ // written first is not ambiguous.
150
+ if (
151
+ isLocaleDayFirst(locale) &&
152
+ LETTER_FREE.test(trimmed) &&
153
+ !YEAR_FIRST.test(trimmed)
154
+ ) {
155
+ return null;
156
+ }
141
157
 
142
158
  const parsed = new Date(trimmed);
143
159
  if (!isNaN(parsed.getTime())) {
@@ -151,3 +151,33 @@ export function focusForLastInput(
151
151
  }
152
152
  element.focus({...options, focusVisible: false});
153
153
  }
154
+
155
+ /**
156
+ * Prepares the focus return for an open surface that may be removed while
157
+ * open (rendered only while open, or removed with its view). Removing a
158
+ * `<dialog>` runs no close and no browser focus return. Call this while the
159
+ * surface is mounted: it reads the frame that hosts the surface now, because a
160
+ * removed frame's document has no window. Call the returned function from the
161
+ * effect cleanup with the opener.
162
+ *
163
+ * Once the commit has finished, focus moves to the opener only when the
164
+ * surface really left the document (StrictMode's simulated unmount keeps it),
165
+ * the opener is still on the page, and the removal lost focus, both in the
166
+ * surface's document and in the document that hosts its frame. A control the
167
+ * user pressed outside the surface, or outside its frame, keeps its focus.
168
+ */
169
+ export function prepareFocusReturnOnRemoval(
170
+ surface: Element,
171
+ ): (opener: Element | null) => void {
172
+ const host = surface.ownerDocument.defaultView?.frameElement ?? null;
173
+ return opener => {
174
+ queueMicrotask(() => {
175
+ if (surface.isConnected || opener == null || !opener.isConnected) {
176
+ return;
177
+ }
178
+ if (isFocusLost(surface) && (host == null || isFocusLost(host))) {
179
+ focusForLastInput(opener as HTMLElement);
180
+ }
181
+ });
182
+ };
183
+ }
@@ -203,6 +203,7 @@ function holdNodeDocument(
203
203
  * tracker of its own for modality.
204
204
  */
205
205
  export function useInteractionModalityTracking(): InteractionModalityTracking {
206
+ // Syncs the document's interaction-modality tracking with this mount.
206
207
  useEffect(() => trackInteractionModality(), []);
207
208
  const nodeRef = useRef<Element | null>(null);
208
209
  const holdRef = useRef<{release: (() => void) | null}>({release: null});
@@ -236,7 +237,10 @@ export function useInteractionModalityTracking(): InteractionModalityTracking {
236
237
  export function useInteractionModalityTrackingFor(
237
238
  elementRef: RefObject<Element | null>,
238
239
  ): () => InteractionModality {
240
+ // Syncs the document's interaction-modality tracking with this mount.
239
241
  useEffect(() => trackInteractionModality(), []);
242
+ // Syncs modality tracking in the element's second document, such as an iframe
243
+ // or a Picture-in-Picture window.
240
244
  useEffect(() => {
241
245
  const ownerDocument = elementRef.current?.ownerDocument;
242
246
  if (
@@ -15,8 +15,9 @@
15
15
  * SYNC: When modified, update pressFeedback.ts, pressGesture.ts (the fade
16
16
  * clock), hooks/usePressFeedback.doc.mjs, the components that paint the touch
17
17
  * press off an ancestor scope or a pseudo-element (Switch, Tab,
18
- * CheckboxInput, RadioListItem, ClickableCard, SelectableCard, Thumbnail)
19
- * and scripts/build-css.test.mjs.
18
+ * CheckboxInput, RadioListItem, ClickableCard, SelectableCard, Thumbnail),
19
+ * Button (a tracked action sizes its `:active` image to zero) and
20
+ * scripts/build-css.test.mjs.
20
21
  */
21
22
 
22
23
  // Every surface that paints a press uses one of these styles, so a change to
@@ -488,6 +488,27 @@ export function plainDateWeekFieldName(locale: Locale = 'en'): string {
488
488
  return 'week';
489
489
  }
490
490
 
491
+ const dayNumberFormats = new Map<Locale, Intl.NumberFormat>();
492
+
493
+ /**
494
+ * A day of the month or a week number in the locale's own digits: `15` in
495
+ * English, `۱۵` in Persian, `١٥` in Egyptian Arabic. Only the digits follow the
496
+ * locale. The number stays the Gregorian day or ISO week that it names, so no
497
+ * other calendar applies, and no grouping separator or unit word is added.
498
+ * Internal: not re-exported from `utils/index.ts`.
499
+ */
500
+ export function plainDateFormatDayNumber(
501
+ value: number,
502
+ locale: Locale,
503
+ ): string {
504
+ let format = dayNumberFormats.get(locale);
505
+ if (format == null) {
506
+ format = new Intl.NumberFormat(locale, {useGrouping: false});
507
+ dayNumberFormats.set(locale, format);
508
+ }
509
+ return format.format(value);
510
+ }
511
+
491
512
  // =============================================================================
492
513
  // Shared date-only format vocabulary
493
514
  // =============================================================================
@@ -2,8 +2,8 @@
2
2
 
3
3
  /**
4
4
  * @file pressFeedback.ts
5
- * @input The press state machine (pressGesture.ts), the menu-press marker
6
- * (hooks/menuPressMarker.ts) and the document's pointer, keyboard, scroll and
5
+ * @input The press state machine (pressGesture.ts), the menu-press and
6
+ * press-group markers and the document's pointer, keyboard, scroll and
7
7
  * visibility events
8
8
  * @output PRESSABLE_ATTRIBUTE, PRESSED_ATTRIBUTE, pressableProps and
9
9
  * installPressFeedback
@@ -46,6 +46,7 @@ import {isCoarsePointer, watchCoarsePointer} from './coarsePointer';
46
46
  import {subscribeInput} from './inputStream';
47
47
  import {TOUCH_QUERY} from './touchPresentation';
48
48
  import {holdsPressThroughDrag} from '../privateAttributes/pressHoldsDrag.stylex';
49
+ import {isTrackedByGroup} from '../privateAttributes/pressGroupItem.stylex';
49
50
 
50
51
  /**
51
52
  * The marker the controller finds with `closest()`. Every Astryx component
@@ -325,8 +326,9 @@ function stylesheetDroppedActive(): boolean {
325
326
 
326
327
  /**
327
328
  * The surface a mouse button's or the Space key's press paints, if any: the
328
- * innermost marked surface, outside a menu. A key's press paints only a
329
- * focused element that is itself the surface, as `:active` does.
329
+ * innermost marked surface, outside a menu and off a tracked action. A key's
330
+ * press paints only a focused element that is itself the surface, as
331
+ * `:active` does.
330
332
  */
331
333
  function buttonSurfaceAt(
332
334
  target: EventTarget | null,
@@ -336,6 +338,10 @@ function buttonSurfaceAt(
336
338
  if (element == null || element.closest(MENU_PRESS_ROOT) != null) {
337
339
  return null;
338
340
  }
341
+ // A tracker that follows a mouse paints a mouse press on its own actions.
342
+ if (pointerId != null && isTrackedByGroup(element, 'mouse')) {
343
+ return null;
344
+ }
339
345
  if (pointerId == null && element !== target) {
340
346
  return null;
341
347
  }
@@ -414,7 +420,14 @@ function onPointerDown(event: PointerEvent): void {
414
420
  const braking = element != null && scrollerIsBraking(element);
415
421
  lastTouchAt = Date.now();
416
422
  lastTouchTarget = event.target instanceof Node ? event.target : null;
417
- if (element == null || braking) {
423
+ // A group's tracker that follows this pointer paints its action, so two
424
+ // writers would erase each other's paint. The touch still counts for the
425
+ // brake above.
426
+ if (
427
+ element == null ||
428
+ braking ||
429
+ isTrackedByGroup(element, event.pointerType)
430
+ ) {
418
431
  return;
419
432
  }
420
433
  takeOver(button, element);
@@ -560,6 +573,11 @@ function activatesOnSpace(target: EventTarget | null): boolean {
560
573
  );
561
574
  }
562
575
 
576
+ /** A tracked action takes no `:active` paint, so a key's press paints here. */
577
+ function isTrackedAction(target: EventTarget | null): boolean {
578
+ return target instanceof Element && isTrackedByGroup(target);
579
+ }
580
+
563
581
  /**
564
582
  * Space went down on a focused button that is itself a pressable surface.
565
583
  * Heard in the BUBBLE phase, after the page's own handlers, so a press the
@@ -573,7 +591,7 @@ function onKeyDown(event: KeyboardEvent): void {
573
591
  event.isComposing ||
574
592
  event.defaultPrevented ||
575
593
  !activatesOnSpace(event.target) ||
576
- !stylesheetDroppedActive()
594
+ !(stylesheetDroppedActive() || isTrackedAction(event.target))
577
595
  ) {
578
596
  return;
579
597
  }
@@ -0,0 +1,80 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file triggerFocus.ts
5
+ * @input A focus event on a hover-layer trigger and its focusTrigger value
6
+ * @output Whether that focus counts as focus on the trigger, and a gate that
7
+ * remembers it for the matching blur
8
+ * @position Shared focus-trigger judgement for Tooltip and HoverCard
9
+ */
10
+
11
+ /** When focus on a trigger opens its layer. */
12
+ export type TriggerFocusMode = 'auto' | 'always' | 'never';
13
+
14
+ /** Whether `element` is in the tab order or naturally focusable. */
15
+ export function isFocusableTrigger(element: HTMLElement): boolean {
16
+ if (element.hasAttribute('tabindex')) {
17
+ return element.tabIndex >= 0;
18
+ }
19
+ const focusableTags = ['A', 'BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'];
20
+ if (focusableTags.includes(element.tagName)) {
21
+ return !(element as HTMLButtonElement).disabled;
22
+ }
23
+ return element.isContentEditable;
24
+ }
25
+
26
+ /**
27
+ * Whether a focus event on a trigger (its `currentTarget`) counts as focus on
28
+ * the trigger.
29
+ *
30
+ * Under `auto` it is decided when focus arrives, not when listeners attach: a
31
+ * roving-tabindex member that was `tabindex="-1"` then can be the tab stop
32
+ * now. A trigger that receives focus is focusable by definition, which covers
33
+ * focusable elements this check does not list, such as a `<summary>` or an SVG
34
+ * link. Focus inside the trigger counts only while the trigger is focusable
35
+ * too, so a plain wrapper ignores its children's focus.
36
+ */
37
+ export function isFocusForTrigger(
38
+ event: Event,
39
+ mode: TriggerFocusMode,
40
+ ): boolean {
41
+ if (mode === 'always') {
42
+ return true;
43
+ }
44
+ if (mode === 'never') {
45
+ return false;
46
+ }
47
+ const trigger = event.currentTarget as HTMLElement | null;
48
+ return (
49
+ trigger != null && (event.target === trigger || isFocusableTrigger(trigger))
50
+ );
51
+ }
52
+
53
+ /** Remembers whether a trigger's current focus counted when it arrived. */
54
+ export interface TriggerFocusGate {
55
+ /** On focusin: whether this focus opens the layer. */
56
+ focusIn(event: Event, mode: TriggerFocusMode): boolean;
57
+ /**
58
+ * On focusout: whether this blur closes the layer. A focus that counted
59
+ * closes on blur even if the trigger has since left the tab order.
60
+ */
61
+ focusOut(event: Event, mode: TriggerFocusMode): boolean;
62
+ }
63
+
64
+ /** A gate for one trigger; each hook keeps one for its lifetime. */
65
+ export function createTriggerFocusGate(): TriggerFocusGate {
66
+ let isCounted = false;
67
+ return {
68
+ focusIn(event, mode) {
69
+ isCounted = isFocusForTrigger(event, mode);
70
+ return isCounted;
71
+ },
72
+ focusOut(event, mode) {
73
+ if (!isCounted && !isFocusForTrigger(event, mode)) {
74
+ return false;
75
+ }
76
+ isCounted = false;
77
+ return true;
78
+ },
79
+ };
80
+ }
@@ -1,21 +0,0 @@
1
- /**
2
- * @file touch-sheet.ts
3
- * @input The touch sheets' shared confirmation, search-drag dismissal and
4
- * draft rules
5
- * @output `@astryxdesign/core/internal/touch-sheet`: SheetConfirmation,
6
- * useDismissSearchOnTouchDrag, hasSameSelection and nameSheetDraftChange,
7
- * re-exported by name for Lab's sheets
8
- * @position An internal entry reserved for Astryx's own packages:
9
- * undocumented, outside the public API and its compatibility promise,
10
- * versioned in lockstep with Core, and allowed only in Core and Lab by the
11
- * `@astryx/no-core-internal-import` lint rule. 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 { SheetConfirmation } from './SheetConfirmation.js';
17
- export type { SheetConfirmationProps } from './SheetConfirmation.js';
18
- export { useDismissSearchOnTouchDrag } from './useDismissSearchOnTouchDrag.js';
19
- export { hasSameSelection, nameSheetDraftChange } from './sheetDraft.js';
20
- export type { SheetDraftChange } from './sheetDraft.js';
21
- //# sourceMappingURL=touch-sheet.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"touch-sheet.d.ts","sourceRoot":"","sources":["../../src/internal/touch-sheet.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAC,sBAAsB,EAAC,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAC,2BAA2B,EAAC,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAC,gBAAgB,EAAE,oBAAoB,EAAC,MAAM,cAAc,CAAC;AACpE,YAAY,EAAC,gBAAgB,EAAC,MAAM,cAAc,CAAC"}
@@ -1,19 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
- /**
3
- * @file touch-sheet.ts
4
- * @input The touch sheets' shared confirmation, search-drag dismissal and
5
- * draft rules
6
- * @output `@astryxdesign/core/internal/touch-sheet`: SheetConfirmation,
7
- * useDismissSearchOnTouchDrag, hasSameSelection and nameSheetDraftChange,
8
- * re-exported by name for Lab's sheets
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. Core components import the
13
- * same modules by relative path. Named re-exports only.
14
- *
15
- * SYNC: When modified, update scripts/sync-exports.js.
16
- */
17
- export { SheetConfirmation } from "./SheetConfirmation.js";
18
- export { useDismissSearchOnTouchDrag } from "./useDismissSearchOnTouchDrag.js";
19
- export { hasSameSelection, nameSheetDraftChange } from "./sheetDraft.js";
@@ -1,21 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
- /**
3
- * @file touch-sheet.ts
4
- * @input The touch sheets' shared confirmation, search-drag dismissal and
5
- * draft rules
6
- * @output `@astryxdesign/core/internal/touch-sheet`: SheetConfirmation,
7
- * useDismissSearchOnTouchDrag, hasSameSelection and nameSheetDraftChange,
8
- * re-exported by name for Lab's sheets
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. Core components import the
13
- * same modules by relative path. Named re-exports only.
14
- *
15
- * SYNC: When modified, update scripts/sync-exports.js.
16
- */
17
- export {SheetConfirmation} from './SheetConfirmation';
18
- export type {SheetConfirmationProps} from './SheetConfirmation';
19
- export {useDismissSearchOnTouchDrag} from './useDismissSearchOnTouchDrag';
20
- export {hasSameSelection, nameSheetDraftChange} from './sheetDraft';
21
- export type {SheetDraftChange} from './sheetDraft';