@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
@@ -21,10 +21,15 @@
21
21
  // primary pointer, so a mouse, trackpad or Space press on such a device comes
22
22
  // here as `buttonDown`: painted at once and faded on release.
23
23
  //
24
+ // Only a finger inside a scroller waits. The controller tells the machine
25
+ // which touch waits (`down`'s `delayed`), and a touch that does not wait goes
26
+ // straight to `pressed`. After that the machine is the same.
27
+ //
24
28
  // The constants were measured against native apps. The machine knows nothing
25
29
  // of the DOM, so {@link pressGestureStep}'s cases are the state diagram.
26
30
 
27
- import { pressConsts } from "./interactionOverlay.stylex.js";
31
+ import { resolveTokenReferences } from "../theme/tokenReferences.js";
32
+ import { durationDefaults } from "../theme/tokens.stylex.js";
28
33
 
29
34
  /**
30
35
  * How long a finger must stay put before the surface believes it.
@@ -59,14 +64,14 @@ export const PRESS_SLOP_PX = 10;
59
64
  export const PRESS_FLASH_MS = 100;
60
65
 
61
66
  /**
62
- * How long the paint takes to leave after a release: UIKit's deselect
63
- * crossfade. The one number, shared with the stylesheet: the release
64
- * animation in interactionOverlay.stylex.ts runs on the same constant, so the
65
- * controller's release clock and the fade cannot drift apart. When the clock
66
- * runs out, the controller waits for a release animation that still runs,
67
- * then removes the attribute.
67
+ * How long the paint takes to leave after a release when no theme sets
68
+ * `--duration-exit`: that token's default. The release plays the theme's
69
+ * exit motion tokens, so the controller reads the token on
70
+ * the pressed element (`pressFadeMs` in pressFeedback.ts) and falls back to
71
+ * this. When the clock runs out, the controller waits for a release
72
+ * animation that still runs, then removes the attribute.
68
73
  */
69
- export const PRESS_FADE_MS = pressConsts.releaseMs;
74
+ export const PRESS_FADE_MS = Number.parseFloat(resolveTokenReferences(durationDefaults)['--duration-exit']);
70
75
 
71
76
  /**
72
77
  * How recently a scroller must have moved for a touch on it to be a BRAKE
@@ -123,6 +128,19 @@ function step(gesture, phase, paint, timer) {
123
128
  */
124
129
  export function pressGestureStep(gesture, event) {
125
130
  if (event.kind === 'down') {
131
+ // A surface with no scroller above it: nothing can turn this touch into a
132
+ // scroll, so it paints in the frame it lands, as a UIControl highlights.
133
+ if (event.delayed === false) {
134
+ return {
135
+ gesture: {
136
+ originX: event.x,
137
+ originY: event.y,
138
+ phase: 'pressed'
139
+ },
140
+ paint: 'on',
141
+ timer: null
142
+ };
143
+ }
126
144
  // A new touch always starts armed and painting nothing, whatever the last
127
145
  // gesture ended as. This is the only way out of `dead`.
128
146
  return {
@@ -0,0 +1,25 @@
1
+ /** Overflow values that let a box scroll. */
2
+ export declare const SCROLLABLE_OVERFLOW: ReadonlySet<string>;
3
+ export interface AllowedPans {
4
+ readonly x: boolean;
5
+ readonly y: boolean;
6
+ }
7
+ /** Which pans a `touch-action` value lets the browser perform. */
8
+ export declare function parseTouchAction(value: string): AllowedPans;
9
+ /**
10
+ * The viewport's overflow on an axis. It scrolls unless the root or the body
11
+ * clips it, as a scroll lock does with `overflow: hidden`.
12
+ */
13
+ export declare function rootOverflow(doc: Document, axis: 'x' | 'y'): string;
14
+ /**
15
+ * Whether a touch on `element` lands inside a scroll view, UIKit's question
16
+ * for a touch: a box above it, the page included, overflows on an axis it
17
+ * scrolls, and `touch-action` on the way up leaves that axis to the browser.
18
+ * A `position: fixed` box ends the walk, because it does not move with any
19
+ * scroller above it. A wheel scrolls whatever `touch-action` says, so a
20
+ * wheel's question passes `readsTouchAction: false`.
21
+ */
22
+ export declare function isInsideScrollView(element: Element, { readsTouchAction }?: {
23
+ readsTouchAction?: boolean;
24
+ }): boolean;
25
+ //# sourceMappingURL=scrollView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollView.d.ts","sourceRoot":"","sources":["../../src/utils/scrollView.ts"],"names":[],"mappings":"AAgBA,6CAA6C;AAC7C,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAIlD,CAAC;AAKH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAiB3D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,MAAM,CAgBnE;AAQD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,EAAC,gBAAuB,EAAC,GAAE;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAM,GAC3D,OAAO,CA4CT"}
@@ -0,0 +1,108 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file scrollView.ts
5
+ * @input An element and its computed styles
6
+ * @output Exports parseTouchAction, rootOverflow, SCROLLABLE_OVERFLOW and
7
+ * isInsideScrollView: whether a touch on the element lands inside a box the
8
+ * browser can scroll
9
+ * @position The one definition of "inside a scroll view", shared by the
10
+ * press feedback controller (utils/pressFeedback.ts) and the gesture
11
+ * core's native-scroll probe (gestures/nativeScroll.ts), so Core's main
12
+ * entry can ask it without the gesture core
13
+ */
14
+
15
+ import { parentAcrossShadow } from "./flatTree.js";
16
+
17
+ /** Overflow values that let a box scroll. */
18
+ export const SCROLLABLE_OVERFLOW = new Set(['auto', 'scroll', 'overlay']);
19
+
20
+ /** How far a box must overflow, in px, before it counts as scrolling. */
21
+ const OVERFLOW_TOLERANCE_PX = 1;
22
+ /** Which pans a `touch-action` value lets the browser perform. */
23
+ export function parseTouchAction(value) {
24
+ const tokens = value.trim().split(/\s+/);
25
+ if (tokens.includes('auto') || tokens.includes('manipulation')) {
26
+ return {
27
+ x: true,
28
+ y: true
29
+ };
30
+ }
31
+ if (tokens.includes('none')) {
32
+ return {
33
+ x: false,
34
+ y: false
35
+ };
36
+ }
37
+ return {
38
+ x: tokens.some(token => token === 'pan-x' || token === 'pan-left' || token === 'pan-right'),
39
+ y: tokens.some(token => token === 'pan-y' || token === 'pan-up' || token === 'pan-down')
40
+ };
41
+ }
42
+
43
+ /**
44
+ * The viewport's overflow on an axis. It scrolls unless the root or the body
45
+ * clips it, as a scroll lock does with `overflow: hidden`.
46
+ */
47
+ export function rootOverflow(doc, axis) {
48
+ const view = doc.defaultView;
49
+ if (view == null) {
50
+ return 'hidden';
51
+ }
52
+ for (const element of [doc.documentElement, doc.body]) {
53
+ if (element == null) {
54
+ continue;
55
+ }
56
+ const style = view.getComputedStyle(element);
57
+ const value = axis === 'x' ? style.overflowX : style.overflowY;
58
+ if (value === 'hidden' || value === 'clip') {
59
+ return 'hidden';
60
+ }
61
+ }
62
+ return 'auto';
63
+ }
64
+ function overflows(element, axis) {
65
+ return axis === 'y' ? element.scrollHeight - element.clientHeight > OVERFLOW_TOLERANCE_PX : element.scrollWidth - element.clientWidth > OVERFLOW_TOLERANCE_PX;
66
+ }
67
+
68
+ /**
69
+ * Whether a touch on `element` lands inside a scroll view, UIKit's question
70
+ * for a touch: a box above it, the page included, overflows on an axis it
71
+ * scrolls, and `touch-action` on the way up leaves that axis to the browser.
72
+ * A `position: fixed` box ends the walk, because it does not move with any
73
+ * scroller above it. A wheel scrolls whatever `touch-action` says, so a
74
+ * wheel's question passes `readsTouchAction: false`.
75
+ */
76
+ export function isInsideScrollView(element, {
77
+ readsTouchAction = true
78
+ } = {}) {
79
+ const doc = element.ownerDocument;
80
+ const view = doc.defaultView;
81
+ if (view == null) {
82
+ return false;
83
+ }
84
+ const root = doc.scrollingElement ?? doc.documentElement;
85
+ let panX = true;
86
+ let panY = true;
87
+ for (let node = element; node != null;) {
88
+ if (node instanceof Element) {
89
+ const style = view.getComputedStyle(node);
90
+ if (readsTouchAction) {
91
+ const pans = parseTouchAction(style.touchAction || 'auto');
92
+ panX &&= pans.x;
93
+ panY &&= pans.y;
94
+ }
95
+ if (node === root || node === doc.documentElement) {
96
+ break;
97
+ }
98
+ if (panY && SCROLLABLE_OVERFLOW.has(style.overflowY) && overflows(node, 'y') || panX && SCROLLABLE_OVERFLOW.has(style.overflowX) && overflows(node, 'x')) {
99
+ return true;
100
+ }
101
+ if (style.position === 'fixed') {
102
+ return false;
103
+ }
104
+ }
105
+ node = parentAcrossShadow(node);
106
+ }
107
+ return panY && SCROLLABLE_OVERFLOW.has(rootOverflow(doc, 'y')) && overflows(root, 'y') || panX && SCROLLABLE_OVERFLOW.has(rootOverflow(doc, 'x')) && overflows(root, 'x');
108
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"selectionLock.d.ts","sourceRoot":"","sources":["../../src/utils/selectionLock.ts"],"names":[],"mappings":"AAoDA;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AAWD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC3B,MAAM,EAAE,WAAW,GAAG,IAAI,GACzB,MAAM,IAAI,CA4BZ;AAED,mEAAmE;AACnE,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,CAAC,OAAO,CAAC,EAAE,2BAA2B,GAAG,IAAI,CAAC;IAC9C;;;OAGG;IACH,iBAAiB,IAAI,IAAI,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,IAAI,EAAE,aAAa,CAAC,aAAa,CAAC,EAClC,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,iBAAiB,CAuGnB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,aAAa,CAAC,aAAa,CAAC,CAiB9B;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,QAAQ,EACb,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,WAAW,GAAG,IAAI,GACzB,OAAO,CA+CT"}
1
+ {"version":3,"file":"selectionLock.d.ts","sourceRoot":"","sources":["../../src/utils/selectionLock.ts"],"names":[],"mappings":"AAwDA;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AAWD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC3B,MAAM,EAAE,WAAW,GAAG,IAAI,GACzB,MAAM,IAAI,CA4BZ;AAED,mEAAmE;AACnE,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,CAAC,OAAO,CAAC,EAAE,2BAA2B,GAAG,IAAI,CAAC;IAC9C;;;OAGG;IACH,iBAAiB,IAAI,IAAI,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,IAAI,EAAE,aAAa,CAAC,aAAa,CAAC,EAClC,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,iBAAiB,CAuGnB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,aAAa,CAAC,aAAa,CAAC,CAiB9B;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,QAAQ,EACb,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,WAAW,GAAG,IAAI,GACzB,OAAO,CA+CT"}
@@ -28,7 +28,7 @@
28
28
  //
29
29
  // A mouse never takes the lock, so its released behavior stays (AST-017).
30
30
 
31
- import { containsAlongFlatTree, parentAcrossShadow } from "./flatTree.js";
31
+ import { containsAlongFlatTree, deepActiveElement, parentAcrossShadow } from "./flatTree.js";
32
32
  import { subscribeInput } from "./inputStream.js";
33
33
  import { isIosWebKit } from "./touchQueries.js";
34
34
 
@@ -477,15 +477,6 @@ function openShadowRootsOf(target) {
477
477
  return roots;
478
478
  }
479
479
 
480
- /** The focused element, inside open shadow roots too. */
481
- function deepActiveElement(doc) {
482
- let active = doc?.activeElement ?? null;
483
- while (active?.shadowRoot?.activeElement != null) {
484
- active = active.shadowRoot.activeElement;
485
- }
486
- return active;
487
- }
488
-
489
480
  /**
490
481
  * The selection-lock styles on `set`, refcounted per element; idempotent
491
482
  * release.
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @file touchHitArea.ts
3
+ * @input Whether an element takes taps, the shared touch hit area
4
+ * (utils/hitArea.ts) and the Web Animations around the element
5
+ * @output `useTouchHitArea`, a callback ref that keeps an element's hit insets
6
+ * live for its invisible layer (`touchHitAreaStyles.layer`)
7
+ * @position Core-internal hook for the coarse-only 44 px target. List rows,
8
+ * InfoTip, CheckboxInput and RadioListItem use it, and so can any control
9
+ * whose target grows under a finger without growing its box.
10
+ *
11
+ * SYNC: When modified, update utils/touchHitArea.stylex.ts and
12
+ * touchHitArea.test.tsx.
13
+ */
14
+ import { type RefCallback } from 'react';
15
+ /**
16
+ * A callback ref that keeps its element's hit insets live while `enabled`:
17
+ * the element takes taps, so it is interactive and not disabled or read-only.
18
+ * Merge it into the element's ref, and pair it with `touchHitAreaStyles.layer`
19
+ * on the same element. The watch lasts while the element is attached, so a
20
+ * replaced element starts its own. A re-render that hands the same element a
21
+ * new merged ref keeps its watch.
22
+ *
23
+ * @example
24
+ * ```
25
+ * const hitAreaRef = useTouchHitArea(isInteractive && !isDisabled);
26
+ * <li ref={hitAreaRef} {...stylex.props(isInteractive && touchHitAreaStyles.layer)} />
27
+ * ```
28
+ */
29
+ export declare function useTouchHitArea(enabled: boolean): RefCallback<HTMLElement>;
30
+ //# sourceMappingURL=touchHitArea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touchHitArea.d.ts","sourceRoot":"","sources":["../../src/utils/touchHitArea.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAc,KAAK,WAAW,EAAC,MAAM,OAAO,CAAC;AAmIpD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,CAa1E"}
@@ -0,0 +1,167 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ /**
6
+ * @file touchHitArea.ts
7
+ * @input Whether an element takes taps, the shared touch hit area
8
+ * (utils/hitArea.ts) and the Web Animations around the element
9
+ * @output `useTouchHitArea`, a callback ref that keeps an element's hit insets
10
+ * live for its invisible layer (`touchHitAreaStyles.layer`)
11
+ * @position Core-internal hook for the coarse-only 44 px target. List rows,
12
+ * InfoTip, CheckboxInput and RadioListItem use it, and so can any control
13
+ * whose target grows under a finger without growing its box.
14
+ *
15
+ * SYNC: When modified, update utils/touchHitArea.stylex.ts and
16
+ * touchHitArea.test.tsx.
17
+ */
18
+ import { useCallback } from 'react';
19
+ import { MIN_TOUCH_TARGET, NO_HIT_INSETS, watchHitArea, writeHitInsets } from "./hitArea.js";
20
+
21
+ /**
22
+ * The finite animations running or held in the element's parent, the element
23
+ * included: a row's own motion and its neighbors'. An endless one (a spinner)
24
+ * moves nothing that comes to rest, so it holds nothing.
25
+ */
26
+ function settlingAnimations(element) {
27
+ const scope = element.parentElement ?? element;
28
+ if (typeof scope.getAnimations !== 'function') {
29
+ return [];
30
+ }
31
+ return scope.getAnimations({
32
+ subtree: true
33
+ }).filter(animation => {
34
+ if (animation.playState !== 'running' && animation.playState !== 'paused') {
35
+ return false;
36
+ }
37
+ const end = animation.effect?.getComputedTiming().endTime;
38
+ return typeof end === 'number' && Number.isFinite(end);
39
+ });
40
+ }
41
+
42
+ /**
43
+ * Watches `element` and takes its insets only at rest. Returns the stop.
44
+ *
45
+ * Under a coarse primary pointer, the shared utility measures how far the
46
+ * element's hit target may grow without reaching a neighbor's half of the
47
+ * gap. This writes those insets on the element, where its layer reads them.
48
+ * Under a fine pointer the shared utility starts no observer.
49
+ *
50
+ * Elements move by transform: a list row in an update's slide, a swipe, or
51
+ * neighbors that slide past. The shared measurement reads them as they stand
52
+ * in one frame. So a measurement that arrives while the parent has a finite
53
+ * animation running or held is dropped. When those animations end, the
54
+ * element is watched again. The insets are then taken at rest, and no frame
55
+ * of a compositor-only motion lays out or paints for them.
56
+ */
57
+ function watchAtRest(element, minSize) {
58
+ let stopWatch = () => {};
59
+ let isStopped = false;
60
+ let isWaiting = false;
61
+ let hasWritten = false;
62
+ // A stopped watch clears the insets it wrote. A fresh watch skips a
63
+ // measurement equal to its start, zero, so old insets would otherwise stay.
64
+ // A watch that wrote nothing, as under a mouse, writes nothing.
65
+ const stop = () => {
66
+ stopWatch();
67
+ if (hasWritten) {
68
+ hasWritten = false;
69
+ writeHitInsets(element, NO_HIT_INSETS);
70
+ }
71
+ };
72
+ const watch = () => {
73
+ stopWatch = watchHitArea(element, insets => {
74
+ const moving = settlingAnimations(element);
75
+ if (moving.length === 0) {
76
+ hasWritten = true;
77
+ writeHitInsets(element, insets);
78
+ return;
79
+ }
80
+ if (isWaiting) {
81
+ return;
82
+ }
83
+ isWaiting = true;
84
+ void Promise.allSettled(moving.map(async animation => animation.finished)).then(() => {
85
+ isWaiting = false;
86
+ if (!isStopped) {
87
+ stop();
88
+ watch();
89
+ }
90
+ });
91
+ },
92
+ // The layer is the host's own `::after`, so a touch on the host's
93
+ // content is the host's, even where that content paints past its box.
94
+ {
95
+ minSize,
96
+ ownsDescendantTouches: true
97
+ });
98
+ };
99
+ watch();
100
+ return () => {
101
+ isStopped = true;
102
+ stop();
103
+ };
104
+ }
105
+
106
+ /** The watch on an element, and how many attached refs hold it. */
107
+
108
+ const heldWatches = new WeakMap();
109
+
110
+ /**
111
+ * Holds the element's watch, and starts it on the first hold. Returns the
112
+ * release. A ref that changes, such as a merge with a caller's inline ref,
113
+ * detaches and attaches again in one commit. So the last release waits a
114
+ * microtask, and an attach in between keeps the watch and its insets.
115
+ */
116
+ function holdWatch(element) {
117
+ let held = heldWatches.get(element);
118
+ if (held == null) {
119
+ held = {
120
+ stop: watchAtRest(element, MIN_TOUCH_TARGET),
121
+ holders: 0
122
+ };
123
+ heldWatches.set(element, held);
124
+ }
125
+ held.holders += 1;
126
+ const entry = held;
127
+ let isReleased = false;
128
+ return () => {
129
+ if (isReleased) {
130
+ return;
131
+ }
132
+ isReleased = true;
133
+ entry.holders -= 1;
134
+ queueMicrotask(() => {
135
+ if (entry.holders === 0 && heldWatches.get(element) === entry) {
136
+ heldWatches.delete(element);
137
+ entry.stop();
138
+ }
139
+ });
140
+ };
141
+ }
142
+
143
+ /**
144
+ * A callback ref that keeps its element's hit insets live while `enabled`:
145
+ * the element takes taps, so it is interactive and not disabled or read-only.
146
+ * Merge it into the element's ref, and pair it with `touchHitAreaStyles.layer`
147
+ * on the same element. The watch lasts while the element is attached, so a
148
+ * replaced element starts its own. A re-render that hands the same element a
149
+ * new merged ref keeps its watch.
150
+ *
151
+ * @example
152
+ * ```
153
+ * const hitAreaRef = useTouchHitArea(isInteractive && !isDisabled);
154
+ * <li ref={hitAreaRef} {...stylex.props(isInteractive && touchHitAreaStyles.layer)} />
155
+ * ```
156
+ */
157
+ export function useTouchHitArea(enabled) {
158
+ // Syncs with an external system: the shared touch hit area
159
+ // (utils/hitArea.ts) measures the element against its neighbors and writes
160
+ // its insets on it. The ref's cleanup stops the watch.
161
+ return useCallback(element => {
162
+ if (!enabled || element == null) {
163
+ return undefined;
164
+ }
165
+ return holdWatch(element);
166
+ }, [enabled]);
167
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @file touchHitArea.stylex.ts
3
+ * @input Uses StyleX and the insets that utils/hitArea.ts writes on a host
4
+ * @output Exports `touchHitAreaStyles.layer`, a host's invisible hit band
5
+ * under a coarse pointer
6
+ * @position Internal styling utility for CheckboxInput, RadioListItem, List
7
+ * rows and InfoTip. Each keeps its insets live with `useTouchHitArea`
8
+ * (utils/touchHitArea.ts).
9
+ *
10
+ * The band is the host's `::after`, grown past each edge by the measured
11
+ * inset. A clip path cuts out the host's box, so its content keeps its taps.
12
+ * A tap on the band lands on the host. SYNC: hitArea.ts HIT_INSET_PROPERTIES,
13
+ * touchHitArea.ts and touchHitArea.test.tsx.
14
+ */
15
+ import * as stylex from '@stylexjs/stylex';
16
+ export declare const touchHitAreaStyles: Readonly<{
17
+ readonly layer: Readonly<{
18
+ readonly '::after': stylex.StyleXClassNameFor<"::after", {
19
+ readonly content: {
20
+ readonly default: null;
21
+ readonly "@media (pointer: coarse)": "\"\"";
22
+ };
23
+ readonly position: {
24
+ readonly default: null;
25
+ readonly "@media (pointer: coarse)": "absolute";
26
+ };
27
+ readonly inset: {
28
+ readonly default: null;
29
+ readonly "@media (pointer: coarse)": "calc((var(--astryx-hit-inset-top, 0px) + var(--_hit-border-top, 0px)) * -1) calc((var(--astryx-hit-inset-right, 0px) + var(--_hit-border-right, 0px)) * -1) calc((var(--astryx-hit-inset-bottom, 0px) + var(--_hit-border-bottom, 0px)) * -1) calc((var(--astryx-hit-inset-left, 0px) + var(--_hit-border-left, 0px)) * -1)";
30
+ };
31
+ readonly clipPath: {
32
+ readonly default: null;
33
+ readonly "@media (pointer: coarse)": "polygon(evenodd, 0 0, 100% 0, 100% 100%, 0 100%, 0 0, var(--astryx-hit-inset-left, 0px) var(--astryx-hit-inset-top, 0px), calc(100% - var(--astryx-hit-inset-right, 0px)) var(--astryx-hit-inset-top, 0px), calc(100% - var(--astryx-hit-inset-right, 0px)) calc(100% - var(--astryx-hit-inset-bottom, 0px)), var(--astryx-hit-inset-left, 0px) calc(100% - var(--astryx-hit-inset-bottom, 0px)), var(--astryx-hit-inset-left, 0px) var(--astryx-hit-inset-top, 0px))";
34
+ };
35
+ }>;
36
+ }>;
37
+ }>;
38
+ //# sourceMappingURL=touchHitArea.stylex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touchHitArea.stylex.d.ts","sourceRoot":"","sources":["../../src/utils/touchHitArea.stylex.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAsB3C,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;EAgB7B,CAAC"}
@@ -0,0 +1,48 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file touchHitArea.stylex.ts
5
+ * @input Uses StyleX and the insets that utils/hitArea.ts writes on a host
6
+ * @output Exports `touchHitAreaStyles.layer`, a host's invisible hit band
7
+ * under a coarse pointer
8
+ * @position Internal styling utility for CheckboxInput, RadioListItem, List
9
+ * rows and InfoTip. Each keeps its insets live with `useTouchHitArea`
10
+ * (utils/touchHitArea.ts).
11
+ *
12
+ * The band is the host's `::after`, grown past each edge by the measured
13
+ * inset. A clip path cuts out the host's box, so its content keeps its taps.
14
+ * A tap on the band lands on the host. SYNC: hitArea.ts HIT_INSET_PROPERTIES,
15
+ * touchHitArea.ts and touchHitArea.test.tsx.
16
+ */
17
+
18
+ import * as stylex from '@stylexjs/stylex';
19
+
20
+ // StyleX reads these at build time, so they are spelled out.
21
+ const TOUCH = '@media (pointer: coarse)';
22
+ // The insets are measured in the viewport, so the sides are physical.
23
+ const TOP = 'var(--astryx-hit-inset-top, 0px)';
24
+ const RIGHT = 'var(--astryx-hit-inset-right, 0px)';
25
+ const BOTTOM = 'var(--astryx-hit-inset-bottom, 0px)';
26
+ const LEFT = 'var(--astryx-hit-inset-left, 0px)';
27
+ // The insets start at the host's border box, but the band's offsets start at
28
+ // its padding box. So a host that draws a border declares its width on that
29
+ // side, 0 by default. It declares it on its own `::after`, so content inside
30
+ // the host never inherits it.
31
+ const BORDER_TOP = 'var(--_hit-border-top, 0px)';
32
+ const BORDER_RIGHT = 'var(--_hit-border-right, 0px)';
33
+ const BORDER_BOTTOM = 'var(--_hit-border-bottom, 0px)';
34
+ const BORDER_LEFT = 'var(--_hit-border-left, 0px)';
35
+
36
+ // The host is the band's containing block, so a host that is not positioned
37
+ // sets `position: relative`. The band has no z-index of its own. Inside a
38
+ // List, which isolates its rows, ListItem raises it. Under a finger the host's
39
+ // `::after` is this band, so decorate the host with a child.
40
+ export const touchHitAreaStyles = {
41
+ layer: {
42
+ k5JduY: "x1fjtqre",
43
+ kwXMNM: "x7b72wb",
44
+ kv0HGH: "x1ukc1h5",
45
+ kJYu5r: "x1c440c0",
46
+ $$css: true
47
+ }
48
+ };
@@ -21,6 +21,11 @@ export declare function isFocusableTrigger(element: HTMLElement): boolean;
21
21
  * too, so a plain wrapper ignores its children's focus.
22
22
  */
23
23
  export declare function isFocusForTrigger(event: Event, mode: TriggerFocusMode): boolean;
24
+ /**
25
+ * `isFocusForTrigger` for focus already on `target`, inside `trigger`: the
26
+ * same rule, read when a trigger attaches with focus inside it.
27
+ */
28
+ export declare function isFocusOnTrigger(target: EventTarget | null, trigger: HTMLElement | null, mode: TriggerFocusMode): boolean;
24
29
  /** Remembers whether a trigger's current focus counted when it arrived. */
25
30
  export interface TriggerFocusGate {
26
31
  /** On focusin: whether this focus opens the layer. */
@@ -1 +1 @@
1
- {"version":3,"file":"triggerFocus.d.ts","sourceRoot":"","sources":["../../src/utils/triggerFocus.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3D,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAShE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAWT;AAED,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;IACvD;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;CACzD;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,IAAI,gBAAgB,CAezD"}
1
+ {"version":3,"file":"triggerFocus.d.ts","sourceRoot":"","sources":["../../src/utils/triggerFocus.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3D,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAShE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAMT;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,OAAO,EAAE,WAAW,GAAG,IAAI,EAC3B,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAQT;AAED,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;IACvD;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;CACzD;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,IAAI,gBAAgB,CAezD"}
@@ -34,14 +34,21 @@ export function isFocusableTrigger(element) {
34
34
  * too, so a plain wrapper ignores its children's focus.
35
35
  */
36
36
  export function isFocusForTrigger(event, mode) {
37
+ return isFocusOnTrigger(event.target, event.currentTarget, mode);
38
+ }
39
+
40
+ /**
41
+ * `isFocusForTrigger` for focus already on `target`, inside `trigger`: the
42
+ * same rule, read when a trigger attaches with focus inside it.
43
+ */
44
+ export function isFocusOnTrigger(target, trigger, mode) {
37
45
  if (mode === 'always') {
38
46
  return true;
39
47
  }
40
48
  if (mode === 'never') {
41
49
  return false;
42
50
  }
43
- const trigger = event.currentTarget;
44
- return trigger != null && (event.target === trigger || isFocusableTrigger(trigger));
51
+ return trigger != null && (target === trigger || isFocusableTrigger(trigger));
45
52
  }
46
53
 
47
54
  /** Remembers whether a trigger's current focus counted when it arrived. */
package/locales/en.json CHANGED
@@ -1121,7 +1121,23 @@
1121
1121
  },
1122
1122
  "@astryx.dateInput.invalidDate": {
1123
1123
  "defaultMessage": "Invalid date",
1124
- "description": "Screen-reader-only live-region alert in DateInput / DateTimeInput when the typed date cannot be parsed. The field silently reverts on blur, so this is the only rejection feedback a screen-reader user gets."
1124
+ "description": "Screen-reader-only live-region alert in DateInput / DateTimeInput when the typed text cannot be read as a date. Text the field cannot finish, such as a one-digit year, stays on Enter or blur and shows this message as the field status."
1125
+ },
1126
+ "@astryx.dateInput.nonexistentDate": {
1127
+ "defaultMessage": "This date does not exist in the {calendar}",
1128
+ "description": "Error in DateInput / DateTimeInput, shown below the field and announced, when the typed date is readable but the calendar does not have it, such as 30 Esfand in a common Persian year or February 30. {calendar} is the calendar's localized name from the platform, such as \"Persian Calendar\" or \"Gregorian Calendar\"."
1129
+ },
1130
+ "@astryx.dateInput.outOfRangeDate": {
1131
+ "defaultMessage": "{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}}",
1132
+ "description": "Error in DateInput / DateTimeInput, shown below the field and announced, when the typed date is outside the allowed range. {min} and {max} are the bounds, written as dates in the field's calendar. `bounds` is `both`, `min`, or `max` for a date outside those bounds, and `other` for a date that a custom rule rejects."
1133
+ },
1134
+ "@astryx.dateInput.formatHint": {
1135
+ "defaultMessage": "e.g., {example}",
1136
+ "description": "Placeholder hint in a DateInput / DateTimeInput date field that uses a calendar other than the Gregorian calendar, shown when the field is focused and empty. {example} is today's date, or the nearest date the field accepts, written in that calendar's numeric pattern, such as ۱۴۰۵/۸/۱۱."
1137
+ },
1138
+ "@astryx.dateInput.calendarDescription": {
1139
+ "defaultMessage": "Dates use the {calendar}",
1140
+ "description": "Screen-reader-only description of a DateInput / DateTimeInput date field whose calendar differs from the app's calendar, such as a Persian field in a Gregorian app or a Gregorian field in a Persian app. {calendar} is the calendar's localized name from the platform, such as \"Persian Calendar\" or \"Gregorian Calendar\"."
1125
1141
  },
1126
1142
  "@astryx.dateInput.resetPicking": {
1127
1143
  "defaultMessage": "Reset",
@@ -1323,6 +1339,10 @@
1323
1339
  "defaultMessage": "Loading",
1324
1340
  "description": "Screen-reader-only default name for a standalone Spinner's role=\"status\" element, used when the consumer supplies neither `aria-label` nor a visible string label; also announced once when a busy input or selector starts loading, in place of its decorative Spinner. Present-progressive form. Kept separate from `button.loading` and `typeahead.loading` — translations may diverge."
1325
1341
  },
1342
+ "@astryx.scrollRegion.label": {
1343
+ "defaultMessage": "Content",
1344
+ "description": "Accessible name of a scrolling content region (LayoutContent, LayoutPanel or StackItem) when the caller gives none. A screen reader announces it with the region's group role while the region scrolls."
1345
+ },
1326
1346
  "@astryx.chatComposerDrawer.expand": {
1327
1347
  "defaultMessage": "Expand {label}",
1328
1348
  "description": "Screen-reader-only label on the ChatComposerDrawer toggle when the drawer is collapsed. `{label}` is the drawer's visible name — example: `Expand Attachments`. Pairs with `collapse`."
@@ -842,6 +842,18 @@
842
842
  "@astryx.dateInput.invalidDate": {
843
843
  "defaultMessage": "⟦Íñṽàłíð ðàţé⟧"
844
844
  },
845
+ "@astryx.dateInput.nonexistentDate": {
846
+ "defaultMessage": "⟦Ţĥíš ðàţé ðóéš ñóţ éẋíšţ íñ ţĥé {calendar}⟧"
847
+ },
848
+ "@astryx.dateInput.outOfRangeDate": {
849
+ "defaultMessage": "⟦{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}}⟧"
850
+ },
851
+ "@astryx.dateInput.formatHint": {
852
+ "defaultMessage": "⟦é.ĝ., {example}⟧"
853
+ },
854
+ "@astryx.dateInput.calendarDescription": {
855
+ "defaultMessage": "⟦Ðàţéš úšé ţĥé {calendar}⟧"
856
+ },
845
857
  "@astryx.dateInput.resetPicking": {
846
858
  "defaultMessage": "⟦Řéšéţ⟧"
847
859
  },
@@ -992,6 +1004,9 @@
992
1004
  "@astryx.spinner.loading": {
993
1005
  "defaultMessage": "⟦Łóàðíñĝ⟧"
994
1006
  },
1007
+ "@astryx.scrollRegion.label": {
1008
+ "defaultMessage": "⟦Çóñţéñţ⟧"
1009
+ },
995
1010
  "@astryx.chatComposerDrawer.expand": {
996
1011
  "defaultMessage": "⟦Éẋþàñð {label}⟧"
997
1012
  },