@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
@@ -3,11 +3,12 @@
3
3
  /**
4
4
  * @file flatTree.ts
5
5
  * @input A DOM node
6
- * @output Exports parentAcrossShadow, and containsAlongFlatTree, which walks it
6
+ * @output Exports parentAcrossShadow, containsAlongFlatTree, which walks it,
7
+ * and deepActiveElement
7
8
  * @position The flat-tree parent the browser scrolls and dispatches
8
- * through, shared by the gesture host's native-scroll probe and the
9
+ * through, shared by the gesture host's native-scroll probe, the
9
10
  * selection lock (which the press feedback controller uses without the
10
- * gesture system)
11
+ * gesture system) and the Layer module's input hold
11
12
  */
12
13
 
13
14
  /** The node's parent, crossing out of shadow roots. */
@@ -35,4 +36,13 @@ export function containsAlongFlatTree(ancestor, node) {
35
36
  }
36
37
  }
37
38
  return false;
39
+ }
40
+
41
+ /** The focused element of `doc`, inside open shadow roots too. */
42
+ export function deepActiveElement(doc) {
43
+ let active = doc?.activeElement ?? null;
44
+ while (active?.shadowRoot?.activeElement != null) {
45
+ active = active.shadowRoot.activeElement;
46
+ }
47
+ return active;
38
48
  }
@@ -3,8 +3,9 @@
3
3
  * @input The document's current active element and the shared interaction
4
4
  * modality.
5
5
  * @output Whether focus would be lost if a surface hid now; a focus move whose
6
- * ring follows the last input; and the one path that moves focus out of
7
- * content a change removed or hid (`noteFocusWithin`, `moveFocusLeftBehind`).
6
+ * ring follows the last input; the focus return of a closed overlay, which
7
+ * never scrolls the page; and the one path that moves focus out of content a
8
+ * change removed or hid (`noteFocusWithin`, `moveFocusLeftBehind`).
8
9
  * @position Utility; used by overlays (BottomSheet, Dialog, DropdownMenu) that
9
10
  * move focus programmatically, and by disclosures that hide focused
10
11
  * content. isFocusDetached lives in isFocusDetached.ts, so the utils entry,
@@ -58,18 +59,38 @@ export declare function moveFocusLeftBehind(note: FocusWithin | null, target: HT
58
59
  */
59
60
  export declare function focusForLastInput(element: HTMLElement, options?: FocusOptions, modality?: InteractionModality): void;
60
61
  /**
61
- * Prepares the focus return for an open surface that may be removed while
62
- * open (rendered only while open, or removed with its view). Removing a
63
- * `<dialog>` runs no close and no browser focus return. Call this while the
64
- * surface is mounted: it reads the frame that hosts the surface now, because a
65
- * removed frame's document has no window. Call the returned function from the
66
- * effect cleanup with the opener.
62
+ * Returns focus to `opener` after an overlay closes, without a scroll and with
63
+ * the ring the last input calls for. WebKit records the nearest focusable
64
+ * ancestor of a tapped button as the opener, such as a `tabindex="-1"` main
65
+ * region. A reveal of that region scrolls the page to its top edge.
66
+ */
67
+ export declare function returnFocusForLastInput(opener: HTMLElement, modality?: InteractionModality): void;
68
+ /**
69
+ * Prepares a focus repair for an open surface that may be removed while open
70
+ * (rendered only while open, or removed with its view). Removing a `<dialog>`
71
+ * runs no close and no browser focus return. Call this while the surface is
72
+ * mounted: it reads the frame that hosts the surface now, because a removed
73
+ * frame's document has no window. Call the returned function from the effect
74
+ * cleanup with the repair to run.
67
75
  *
68
- * Once the commit has finished, focus moves to the opener only when the
69
- * surface really left the document (StrictMode's simulated unmount keeps it),
70
- * the opener is still on the page, and the removal lost focus, both in the
71
- * surface's document and in the document that hosts its frame. A control the
72
- * user pressed outside the surface, or outside its frame, keeps its focus.
76
+ * Once the commit has finished, the repair runs only when the surface really
77
+ * left the document (StrictMode's simulated unmount keeps it) and the removal
78
+ * lost focus, both in the surface's document and in the document that hosts
79
+ * its frame. A control the user pressed outside the surface, or outside its
80
+ * frame, keeps its focus, and so does a surface that took focus in the same
81
+ * commit.
82
+ */
83
+ export declare function prepareFocusRepairOnRemoval(surface: Element, options?: {
84
+ /**
85
+ * Skip the repair when focus already rested on the page body before the
86
+ * commit's first removal: the removal did not lose that focus.
87
+ */
88
+ keepRestingFocus?: boolean;
89
+ }): (repair: () => void) => void;
90
+ /**
91
+ * The focus repair above that returns focus to `opener` while the opener is
92
+ * still on the page. Call the returned function from the effect cleanup with
93
+ * the opener.
73
94
  */
74
95
  export declare function prepareFocusReturnOnRemoval(surface: Element): (opener: Element | null) => void;
75
96
  //# sourceMappingURL=focusReturn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"focusReturn.d.ts","sourceRoot":"","sources":["../../src/utils/focusReturn.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAG/B;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,CAM5E;AAED,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACxC,WAAW,GAAG,IAAI,CAMpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,GAAG,IAAI,EACxB,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EACtC,MAAM,GAAE,OAAO,GAAG,IAAW,GAC5B,OAAO,CAUT;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,YAAY,EACtB,QAAQ,GAAE,mBAAqD,GAC9D,IAAI,CA2BN;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,GACf,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAYlC"}
1
+ {"version":3,"file":"focusReturn.d.ts","sourceRoot":"","sources":["../../src/utils/focusReturn.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAG/B;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,CAM5E;AAED,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACxC,WAAW,GAAG,IAAI,CAMpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,GAAG,IAAI,EACxB,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EACtC,MAAM,GAAE,OAAO,GAAG,IAAW,GAC5B,OAAO,CAUT;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,YAAY,EACtB,QAAQ,GAAE,mBAAqD,GAC9D,IAAI,CA2BN;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,EACnB,QAAQ,CAAC,EAAE,mBAAmB,GAC7B,IAAI,CAEN;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;IACR;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GACA,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,IAAI,CAkB9B;AAgBD;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,GACf,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CASlC"}
@@ -5,8 +5,9 @@
5
5
  * @input The document's current active element and the shared interaction
6
6
  * modality.
7
7
  * @output Whether focus would be lost if a surface hid now; a focus move whose
8
- * ring follows the last input; and the one path that moves focus out of
9
- * content a change removed or hid (`noteFocusWithin`, `moveFocusLeftBehind`).
8
+ * ring follows the last input; the focus return of a closed overlay, which
9
+ * never scrolls the page; and the one path that moves focus out of content a
10
+ * change removed or hid (`noteFocusWithin`, `moveFocusLeftBehind`).
10
11
  * @position Utility; used by overlays (BottomSheet, Dialog, DropdownMenu) that
11
12
  * move focus programmatically, and by disclosures that hide focused
12
13
  * content. isFocusDetached lives in isFocusDetached.ts, so the utils entry,
@@ -108,28 +109,74 @@ export function focusForLastInput(element, options, modality = getInteractionMod
108
109
  }
109
110
 
110
111
  /**
111
- * Prepares the focus return for an open surface that may be removed while
112
- * open (rendered only while open, or removed with its view). Removing a
113
- * `<dialog>` runs no close and no browser focus return. Call this while the
114
- * surface is mounted: it reads the frame that hosts the surface now, because a
115
- * removed frame's document has no window. Call the returned function from the
116
- * effect cleanup with the opener.
112
+ * Returns focus to `opener` after an overlay closes, without a scroll and with
113
+ * the ring the last input calls for. WebKit records the nearest focusable
114
+ * ancestor of a tapped button as the opener, such as a `tabindex="-1"` main
115
+ * region. A reveal of that region scrolls the page to its top edge.
116
+ */
117
+ export function returnFocusForLastInput(opener, modality) {
118
+ focusForLastInput(opener, {
119
+ preventScroll: true
120
+ }, modality);
121
+ }
122
+
123
+ /**
124
+ * Prepares a focus repair for an open surface that may be removed while open
125
+ * (rendered only while open, or removed with its view). Removing a `<dialog>`
126
+ * runs no close and no browser focus return. Call this while the surface is
127
+ * mounted: it reads the frame that hosts the surface now, because a removed
128
+ * frame's document has no window. Call the returned function from the effect
129
+ * cleanup with the repair to run.
117
130
  *
118
- * Once the commit has finished, focus moves to the opener only when the
119
- * surface really left the document (StrictMode's simulated unmount keeps it),
120
- * the opener is still on the page, and the removal lost focus, both in the
121
- * surface's document and in the document that hosts its frame. A control the
122
- * user pressed outside the surface, or outside its frame, keeps its focus.
131
+ * Once the commit has finished, the repair runs only when the surface really
132
+ * left the document (StrictMode's simulated unmount keeps it) and the removal
133
+ * lost focus, both in the surface's document and in the document that hosts
134
+ * its frame. A control the user pressed outside the surface, or outside its
135
+ * frame, keeps its focus, and so does a surface that took focus in the same
136
+ * commit.
123
137
  */
124
- export function prepareFocusReturnOnRemoval(surface) {
138
+ export function prepareFocusRepairOnRemoval(surface, options) {
125
139
  const host = surface.ownerDocument.defaultView?.frameElement ?? null;
126
- return opener => {
140
+ return repair => {
141
+ if (options?.keepRestingFocus === true && wasFocusDetachedBeforeRemoval(surface.ownerDocument)) {
142
+ return;
143
+ }
127
144
  queueMicrotask(() => {
128
- if (surface.isConnected || opener == null || !opener.isConnected) {
145
+ if (surface.isConnected) {
129
146
  return;
130
147
  }
131
148
  if (isFocusLost(surface) && (host == null || isFocusLost(host))) {
132
- focusForLastInput(opener);
149
+ repair();
150
+ }
151
+ });
152
+ };
153
+ }
154
+
155
+ // Whether focus rested on the page body when the current commit began
156
+ // removing surfaces, per document. One removal can drop focus before a later
157
+ // surface's cleanup runs, so every cleanup of the commit reads the first value.
158
+ const focusDetachedAtRemovalStart = new WeakMap();
159
+ function wasFocusDetachedBeforeRemoval(doc) {
160
+ let wasDetached = focusDetachedAtRemovalStart.get(doc);
161
+ if (wasDetached === undefined) {
162
+ wasDetached = isFocusDetached(doc);
163
+ focusDetachedAtRemovalStart.set(doc, wasDetached);
164
+ queueMicrotask(() => focusDetachedAtRemovalStart.delete(doc));
165
+ }
166
+ return wasDetached;
167
+ }
168
+
169
+ /**
170
+ * The focus repair above that returns focus to `opener` while the opener is
171
+ * still on the page. Call the returned function from the effect cleanup with
172
+ * the opener.
173
+ */
174
+ export function prepareFocusReturnOnRemoval(surface) {
175
+ const repairOnRemoval = prepareFocusRepairOnRemoval(surface);
176
+ return opener => {
177
+ repairOnRemoval(() => {
178
+ if (opener != null && opener.isConnected) {
179
+ returnFocusForLastInput(opener);
133
180
  }
134
181
  });
135
182
  };
@@ -53,6 +53,13 @@ export declare function writeHitInsets(element: HTMLElement, insets: HitInsets):
53
53
  export interface WatchHitAreaOptions {
54
54
  /** The size to grow toward, px. @default 44 */
55
55
  readonly minSize?: number;
56
+ /**
57
+ * A touch that the browser hit-tests onto a descendant is the element's,
58
+ * however near a neighbour is. Set it for a host whose content can paint
59
+ * past its box, such as a list row with a swipe panel. A control whose
60
+ * grown input is its descendant leaves it off. @default false
61
+ */
62
+ readonly ownsDescendantTouches?: boolean;
56
63
  }
57
64
  /**
58
65
  * Stops every watch and forgets them, for tests: no observer, listener or
@@ -68,5 +75,5 @@ export declare function resetHitAreaForTests(): void;
68
75
  * its parent's text and children settle after a change, all in the shared
69
76
  * per-frame pass, and re-measured at once when a touch starts on it.
70
77
  */
71
- export declare function watchHitArea(element: Element, onInsets: (insets: HitInsets) => void, { minSize }?: WatchHitAreaOptions): () => void;
78
+ export declare function watchHitArea(element: Element, onInsets: (insets: HitInsets) => void, { minSize, ownsDescendantTouches, }?: WatchHitAreaOptions): () => void;
72
79
  //# sourceMappingURL=hitArea.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hitArea.d.ts","sourceRoot":"","sources":["../../src/utils/hitArea.ts"],"names":[],"mappings":"AA6BA,+BAA+B;AAC/B,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,mEAAmE;AACnE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,6CAA6C;AAC7C,eAAO,MAAM,aAAa,EAAE,SAAkD,CAAC;AAE/E;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;CAKvB,CAAC;AAmCX;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,EAClC,OAAO,GAAE,MAAyB,GACjC,SAAS,CA4CX;AAYD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,EAC7B,OAAO,GAAE,MAAyB,GACjC,MAAM,CAoBR;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAI5E;AAmdD,iCAAiC;AACjC,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAW3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,EACrC,EAAC,OAA0B,EAAC,GAAE,mBAAwB,GACrD,MAAM,IAAI,CAyDZ"}
1
+ {"version":3,"file":"hitArea.d.ts","sourceRoot":"","sources":["../../src/utils/hitArea.ts"],"names":[],"mappings":"AAgCA,+BAA+B;AAC/B,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,mEAAmE;AACnE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,6CAA6C;AAC7C,eAAO,MAAM,aAAa,EAAE,SAAkD,CAAC;AAE/E;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;CAKvB,CAAC;AAmCX;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,EAClC,OAAO,GAAE,MAAyB,GACjC,SAAS,CA4CX;AAYD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,EAC7B,OAAO,GAAE,MAAyB,GACjC,MAAM,CAoBR;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAI5E;AAskBD,iCAAiC;AACjC,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAC1C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAW3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,EACrC,EACE,OAA0B,EAC1B,qBAA6B,GAC9B,GAAE,mBAAwB,GAC1B,MAAM,IAAI,CA0DZ"}
@@ -24,6 +24,9 @@
24
24
  // live control measures: only under a coarse primary pointer (AST-094), only on
25
25
  // screen, and in one read pass per frame within a 4 ms budget. Until the first
26
26
  // pass the insets are 0, so first paint never overlaps anything.
27
+ // The insets are lengths in the control's own box, so a pass measures in its
28
+ // layout px. A layer that opens from a smaller scale then keeps the insets of
29
+ // the size it settles at.
27
30
  import { observeContent } from "./sharedMutationObserver.js";
28
31
 
29
32
  /** A rect in client pixels. */
@@ -217,6 +220,8 @@ const observedSizes = new WeakMap();
217
220
  const scopeTimers = new Map();
218
221
  let frame = null;
219
222
  let view = null;
223
+ /** The document the shared press listener is on, while it is on one. */
224
+ let pressDocument = null;
220
225
  let pointer = null;
221
226
  let visibility = null;
222
227
  let resize = null;
@@ -263,6 +268,74 @@ function plainRect(element) {
263
268
  bottom
264
269
  };
265
270
  }
271
+
272
+ /** A box that the transforms around it leave at its layout size. */
273
+ const UNSCALED = {
274
+ x: 1,
275
+ y: 1
276
+ };
277
+
278
+ /** One axis of a box's scale on screen: its client size over its layout size. */
279
+ function axisScale(onScreen, layout) {
280
+ if (!(layout > 0) || !(onScreen > 0)) {
281
+ return 1;
282
+ }
283
+ const scale = onScreen / layout;
284
+ // Within rounding of 1 the box is at its layout size: no change to the rects.
285
+ return Math.abs(scale - 1) < 1e-3 ? 1 : scale;
286
+ }
287
+
288
+ /**
289
+ * How far the transforms around `element` scale its box on screen, per axis.
290
+ * A layer that opens from a smaller scale scales every rect inside it, while
291
+ * the layout box keeps the size the layer settles at. Only a scale is
292
+ * expected: a rotated or skewed box would read as a larger scale.
293
+ */
294
+ function screenScale(element, onScreen) {
295
+ // The offset size is the layout size in whole pixels, unaffected by
296
+ // transforms, and costs no style resolution. A box with none, such as an SVG
297
+ // element or a jsdom box, reads as unscaled.
298
+ const box = element;
299
+ const offsetWidth = box.offsetWidth ?? 0;
300
+ const offsetHeight = box.offsetHeight ?? 0;
301
+ if (offsetWidth === 0 || offsetHeight === 0) {
302
+ return UNSCALED;
303
+ }
304
+ // Within a pixel of its layout size the box reads as unscaled, which bounds
305
+ // the inset error at about a pixel. Only a box that a transform shrinks or
306
+ // grows reads its exact size from the computed style.
307
+ if (Math.abs(onScreen.right - onScreen.left - offsetWidth) <= 1 && Math.abs(onScreen.bottom - onScreen.top - offsetHeight) <= 1) {
308
+ return UNSCALED;
309
+ }
310
+ const style = element.ownerDocument.defaultView?.getComputedStyle(element);
311
+ if (style == null || !style.width.endsWith('px')) {
312
+ return UNSCALED;
313
+ }
314
+ const px = value => Number.parseFloat(value) || 0;
315
+ const isContentBox = style.boxSizing !== 'border-box';
316
+ const width = px(style.width) + (isContentBox ? px(style.paddingLeft) + px(style.paddingRight) + px(style.borderLeftWidth) + px(style.borderRightWidth) : 0);
317
+ const height = px(style.height) + (isContentBox ? px(style.paddingTop) + px(style.paddingBottom) + px(style.borderTopWidth) + px(style.borderBottomWidth) : 0);
318
+ return {
319
+ x: axisScale(onScreen.right - onScreen.left, width),
320
+ y: axisScale(onScreen.bottom - onScreen.top, height)
321
+ };
322
+ }
323
+
324
+ /**
325
+ * `rect` in the layout px of the box at `origin`: its offset from `origin`,
326
+ * divided by that box's scale on screen.
327
+ */
328
+ function inLayout(rect, origin, scale) {
329
+ if (scale.x === 1 && scale.y === 1) {
330
+ return rect;
331
+ }
332
+ return {
333
+ left: origin.left + (rect.left - origin.left) / scale.x,
334
+ top: origin.top + (rect.top - origin.top) / scale.y,
335
+ right: origin.left + (rect.right - origin.left) / scale.x,
336
+ bottom: origin.top + (rect.bottom - origin.top) / scale.y
337
+ };
338
+ }
266
339
  /** The watched element `element` belongs to, if any (itself included). */
267
340
  function watchedOwner(element) {
268
341
  for (let node = element; node != null; node = node.parentElement) {
@@ -297,14 +370,15 @@ function readCandidates(doc) {
297
370
  /** A control's rect and clamped insets, from candidates already read. */
298
371
  function measureOne(watch, candidates) {
299
372
  const target = plainRect(watch.element);
373
+ const scale = screenScale(watch.element, target);
300
374
  // Two targets each growing up to half the minimum reach each other from a
301
375
  // minimum apart.
302
376
  const reach = Math.max(0, watch.minSize);
303
377
  const band = grown(target, {
304
- top: reach,
305
- right: reach,
306
- bottom: reach,
307
- left: reach
378
+ top: reach * scale.y,
379
+ right: reach * scale.x,
380
+ bottom: reach * scale.y,
381
+ left: reach * scale.x
308
382
  });
309
383
  const neighbours = candidates.filter(({
310
384
  element,
@@ -314,7 +388,12 @@ function measureOne(watch, candidates) {
314
388
  }) => rect);
315
389
  return {
316
390
  target,
317
- insets: clampedHitInsets(target, neighbours, watch.minSize),
391
+ // The insets are in the control's layout px. The returned rects stay in
392
+ // screen px for a touch's distance checks. A neighbour maps by the
393
+ // control's scale, as if it is in the same layer. A neighbour outside that
394
+ // layer then reads farther away. A touch compares screen distances, so it
395
+ // still counts that neighbour.
396
+ insets: clampedHitInsets(inLayout(target, target, scale), neighbours.map(rect => inLayout(rect, target, scale)), watch.minSize),
318
397
  neighbours
319
398
  };
320
399
  }
@@ -419,7 +498,12 @@ function checkPress(element, event) {
419
498
  const own = distanceTo(target, x, y);
420
499
  isNearerNeighbour ||= neighbours.some(rect => distanceTo(rect, x, y) < own);
421
500
  }
422
- if (isNearerNeighbour) {
501
+ // A watch can own its descendants' touches. Then a press that the browser
502
+ // hit-tests onto a descendant lands on content the element paints, even
503
+ // past its own box. A swipe panel's entry beside a moved row is such
504
+ // content. That touch is the element's.
505
+ const isOnOwnContent = [...entry.watches].some(watch => watch.ownsDescendantTouches) && press.target instanceof Node && press.target !== element && element.contains(press.target);
506
+ if (isNearerNeighbour && !isOnOwnContent) {
423
507
  const swallow = click => {
424
508
  disarm();
425
509
  // A keyboard or assistive-technology activation (detail 0) is never
@@ -500,7 +584,8 @@ function startObserving() {
500
584
  return;
501
585
  }
502
586
  view.addEventListener('resize', scheduleAll);
503
- view.document.addEventListener('pointerdown', onPress, PASSIVE_CAPTURE);
587
+ pressDocument = view.document;
588
+ pressDocument.addEventListener('pointerdown', onPress, PASSIVE_CAPTURE);
504
589
  if (typeof IntersectionObserver === 'function') {
505
590
  visibility = new IntersectionObserver(entries => {
506
591
  for (const entry of entries) {
@@ -555,7 +640,10 @@ function stopObserving() {
555
640
  entry.release = null;
556
641
  }
557
642
  view?.removeEventListener('resize', scheduleAll);
558
- view?.document.removeEventListener('pointerdown', onPress, PASSIVE_CAPTURE);
643
+ // The listener leaves the document it went on. A window can close first, as
644
+ // a removed iframe's, and then it has no document to read.
645
+ pressDocument?.removeEventListener('pointerdown', onPress, PASSIVE_CAPTURE);
646
+ pressDocument = null;
559
647
  visibility?.disconnect();
560
648
  resize?.disconnect();
561
649
  visibility = null;
@@ -613,7 +701,8 @@ export function resetHitAreaForTests() {
613
701
  * per-frame pass, and re-measured at once when a touch starts on it.
614
702
  */
615
703
  export function watchHitArea(element, onInsets, {
616
- minSize = MIN_TOUCH_TARGET
704
+ minSize = MIN_TOUCH_TARGET,
705
+ ownsDescendantTouches = false
617
706
  } = {}) {
618
707
  const owner = element.ownerDocument.defaultView;
619
708
  if (owner == null) {
@@ -633,6 +722,7 @@ export function watchHitArea(element, onInsets, {
633
722
  const watch = {
634
723
  element,
635
724
  minSize,
725
+ ownsDescendantTouches,
636
726
  onInsets,
637
727
  isVisible: isCoarse && visibility == null,
638
728
  last: NO_HIT_INSETS
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @file inputPresentation.ts
3
- * @input A presentation policy, the deprecated nativePicker value, and pointer type
3
+ * @input A presentation policy, the deprecated nativePicker value, whether the
4
+ * native date control can show the calendar, and pointer type
4
5
  * @output The resolved picker surface for DateInput, DateTimeInput, and TimeInput
5
6
  * @position Shared presentation vocabulary (AST-043)
6
7
  *
@@ -48,6 +49,13 @@ export declare function presentationFromNativePicker(nativePicker: LegacyNativeP
48
49
  export declare function effectivePickerPresentation(presentation: PickerPresentation | undefined, nativePicker: LegacyNativePicker | undefined): PickerPresentation;
49
50
  /** The effective policy: explicit `presentation` wins over the deprecated prop. */
50
51
  export declare function effectiveInputPresentation(presentation: InputPresentation | undefined, nativePicker: LegacyNativePicker | undefined, component: 'date' | 'time'): InputPresentation;
52
+ /**
53
+ * The policy a date picker follows in its calendar. `<input type="date">` is
54
+ * Gregorian, so in a calendar it cannot show, the policies that use it
55
+ * (`native` and `adaptive-native`) use the Astryx popover on a fine pointer and
56
+ * the bottom sheet on a coarse one instead.
57
+ */
58
+ export declare function calendarPickerPresentation(presentation: PickerPresentation, isNativeCalendar: boolean): PickerPresentation;
51
59
  /** Resolve a picker-only policy to the surface rendered for the current pointer. */
52
60
  export declare function resolvePickerPresentation(presentation: PickerPresentation, isCoarsePointer: boolean): PickerPresentationSurface;
53
61
  /** Resolve a policy to the surface rendered for the current pointer. */
@@ -1 +1 @@
1
- {"version":3,"file":"inputPresentation.d.ts","sourceRoot":"","sources":["../../src/utils/inputPresentation.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,kDAAkD;AAClD,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,SAAS,GACT,cAAc,GACd,QAAQ,GACR,uBAAuB,GACvB,iBAAiB,CAAC;AAEtB,8GAA8G;AAC9G,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AAE1E,mEAAmE;AACnE,MAAM,MAAM,wBAAwB,GAClC,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhD,qFAAqF;AACrF,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC7C,wBAAwB,EACxB,YAAY,CACb,CAAC;AAEF,gCAAgC;AAChC,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,0BAA0B,EAAE,kBAAsC,CAAC;AAEhF;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAChD,YAAY,EAAE,kBAAkB,GAC/B,kBAAkB,CASpB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,kBAAkB,EAChC,SAAS,EAAE,MAAM,GAAG,MAAM,GACzB,iBAAiB,CAKnB;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,YAAY,EAAE,kBAAkB,GAAG,SAAS,GAC3C,kBAAkB,CAQpB;AAED,mFAAmF;AACnF,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,iBAAiB,GAAG,SAAS,EAC3C,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,SAAS,EAAE,MAAM,GAAG,MAAM,GACzB,iBAAiB,CAQnB;AAED,oFAAoF;AACpF,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,kBAAkB,EAChC,eAAe,EAAE,OAAO,GACvB,yBAAyB,CAa3B;AAED,wEAAwE;AACxE,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,iBAAiB,EAC/B,eAAe,EAAE,OAAO,GACvB,wBAAwB,CAI1B"}
1
+ {"version":3,"file":"inputPresentation.d.ts","sourceRoot":"","sources":["../../src/utils/inputPresentation.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,kDAAkD;AAClD,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,SAAS,GACT,cAAc,GACd,QAAQ,GACR,uBAAuB,GACvB,iBAAiB,CAAC;AAEtB,8GAA8G;AAC9G,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AAE1E,mEAAmE;AACnE,MAAM,MAAM,wBAAwB,GAClC,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhD,qFAAqF;AACrF,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC7C,wBAAwB,EACxB,YAAY,CACb,CAAC;AAEF,gCAAgC;AAChC,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,0BAA0B,EAAE,kBAAsC,CAAC;AAEhF;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAChD,YAAY,EAAE,kBAAkB,GAC/B,kBAAkB,CASpB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,kBAAkB,EAChC,SAAS,EAAE,MAAM,GAAG,MAAM,GACzB,iBAAiB,CAKnB;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,YAAY,EAAE,kBAAkB,GAAG,SAAS,GAC3C,kBAAkB,CAQpB;AAED,mFAAmF;AACnF,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,iBAAiB,GAAG,SAAS,EAC3C,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,SAAS,EAAE,MAAM,GAAG,MAAM,GACzB,iBAAiB,CAQnB;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,kBAAkB,EAChC,gBAAgB,EAAE,OAAO,GACxB,kBAAkB,CAQpB;AAED,oFAAoF;AACpF,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,kBAAkB,EAChC,eAAe,EAAE,OAAO,GACvB,yBAAyB,CAa3B;AAED,wEAAwE;AACxE,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,iBAAiB,EAC/B,eAAe,EAAE,OAAO,GACvB,wBAAwB,CAI1B"}
@@ -2,7 +2,8 @@
2
2
 
3
3
  /**
4
4
  * @file inputPresentation.ts
5
- * @input A presentation policy, the deprecated nativePicker value, and pointer type
5
+ * @input A presentation policy, the deprecated nativePicker value, whether the
6
+ * native date control can show the calendar, and pointer type
6
7
  * @output The resolved picker surface for DateInput, DateTimeInput, and TimeInput
7
8
  * @position Shared presentation vocabulary (AST-043)
8
9
  *
@@ -86,6 +87,19 @@ export function effectiveInputPresentation(presentation, nativePicker, component
86
87
  return DEFAULT_INPUT_PRESENTATION;
87
88
  }
88
89
 
90
+ /**
91
+ * The policy a date picker follows in its calendar. `<input type="date">` is
92
+ * Gregorian, so in a calendar it cannot show, the policies that use it
93
+ * (`native` and `adaptive-native`) use the Astryx popover on a fine pointer and
94
+ * the bottom sheet on a coarse one instead.
95
+ */
96
+ export function calendarPickerPresentation(presentation, isNativeCalendar) {
97
+ if (!isNativeCalendar && (presentation === 'native' || presentation === 'adaptive-native')) {
98
+ return 'adaptive-bottom-sheet';
99
+ }
100
+ return presentation;
101
+ }
102
+
89
103
  /** Resolve a picker-only policy to the surface rendered for the current pointer. */
90
104
  export function resolvePickerPresentation(presentation, isCoarsePointer) {
91
105
  switch (presentation) {
@@ -6,12 +6,25 @@ export interface InputSubscriptionOptions {
6
6
  * @default false
7
7
  */
8
8
  readonly cancels?: boolean;
9
+ /**
10
+ * The subscriber runs before every subscriber that is not first. When it
11
+ * returns `true`, no later subscriber hears the event.
12
+ * @default false
13
+ */
14
+ readonly first?: boolean;
9
15
  }
10
16
  /** The events a window's capture phase sees: its own, and the document's. */
11
17
  export type InputEventMap = WindowEventMap & DocumentEventMap;
18
+ /**
19
+ * The type of the latest pointer event `view`'s stream delivered: `mouse`,
20
+ * `pen` or `touch`, or `null` before any. The stream hears a pointer event
21
+ * type only while a subscriber listens to it, as press feedback does on any
22
+ * page with a pressable. Reading it adds no listener.
23
+ */
24
+ export declare function getLastPointerType(view: Window): string | null;
12
25
  /**
13
26
  * Listen to `type` on `view`'s capture phase through its shared native
14
27
  * listener. Returns the unsubscribe; calling it again does nothing.
15
28
  */
16
- export declare function subscribeInput<K extends keyof InputEventMap>(view: Window, type: K, listener: (event: InputEventMap[K]) => void, { cancels }?: InputSubscriptionOptions): () => void;
29
+ export declare function subscribeInput<K extends keyof InputEventMap>(view: Window, type: K, listener: (event: InputEventMap[K]) => unknown, { cancels, first }?: InputSubscriptionOptions): () => void;
17
30
  //# sourceMappingURL=inputStream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inputStream.d.ts","sourceRoot":"","sources":["../../src/utils/inputStream.ts"],"names":[],"mappings":"AA4CA,0CAA0C;AAC1C,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,6EAA6E;AAC7E,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAI9D;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,aAAa,EAC1D,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,EAC3C,EAAC,OAAe,EAAC,GAAE,wBAA6B,GAC/C,MAAM,IAAI,CAoCZ"}
1
+ {"version":3,"file":"inputStream.d.ts","sourceRoot":"","sources":["../../src/utils/inputStream.ts"],"names":[],"mappings":"AAgDA,0CAA0C;AAC1C,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,6EAA6E;AAC7E,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAM9D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE9D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,aAAa,EAC1D,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,EAC9C,EAAC,OAAe,EAAE,KAAa,EAAC,GAAE,wBAA6B,GAC9D,MAAM,IAAI,CA4CZ"}
@@ -4,7 +4,8 @@
4
4
  * @file inputStream.ts
5
5
  * @input A window, and subscribers to its input events (the press feedback
6
6
  * controller, the gesture host)
7
- * @output subscribeInput
7
+ * @output subscribeInput, and getLastPointerType: the type of the latest
8
+ * pointer event the stream delivered
8
9
  * @position The one entry for document-wide input listeners in core: one
9
10
  * native listener per event type on the window's capture phase, shared by
10
11
  * every subscriber
@@ -22,8 +23,10 @@
22
23
  // `blur` or `focus`. A subscriber for the window's own event checks
23
24
  // `event.target`.
24
25
  //
25
- // Subscribers run in subscription order. One that throws is reported, and
26
- // the rest still run.
26
+ // Subscribers run in subscription order, after the ones subscribed `first`.
27
+ // A first subscriber that returns `true` ends the dispatch: no later
28
+ // subscriber hears the event. One that throws is reported, and the rest still
29
+ // run.
27
30
  //
28
31
  // A type's native listener is passive, so it blocks no scroll. It is
29
32
  // non-passive only while a subscriber that cancels the event
@@ -34,13 +37,26 @@
34
37
  /** The events a window's capture phase sees: its own, and the document's. */
35
38
 
36
39
  const streams = new WeakMap();
40
+ /** The type of the latest pointer event each window's stream delivered. */
41
+ const lastPointerTypes = new WeakMap();
42
+
43
+ /**
44
+ * The type of the latest pointer event `view`'s stream delivered: `mouse`,
45
+ * `pen` or `touch`, or `null` before any. The stream hears a pointer event
46
+ * type only while a subscriber listens to it, as press feedback does on any
47
+ * page with a pressable. Reading it adds no listener.
48
+ */
49
+ export function getLastPointerType(view) {
50
+ return lastPointerTypes.get(view) ?? null;
51
+ }
37
52
 
38
53
  /**
39
54
  * Listen to `type` on `view`'s capture phase through its shared native
40
55
  * listener. Returns the unsubscribe; calling it again does nothing.
41
56
  */
42
57
  export function subscribeInput(view, type, listener, {
43
- cancels = false
58
+ cancels = false,
59
+ first = false
44
60
  } = {}) {
45
61
  let channels = streams.get(view);
46
62
  if (channels == null) {
@@ -57,9 +73,15 @@ export function subscribeInput(view, type, listener, {
57
73
  }
58
74
  const subscriber = {
59
75
  listener: listener,
60
- cancels
76
+ cancels,
77
+ isFirst: first
61
78
  };
62
- channel.subscribers.push(subscriber);
79
+ const firstLater = first ? channel.subscribers.findIndex(other => !other.isFirst) : -1;
80
+ if (firstLater === -1) {
81
+ channel.subscribers.push(subscriber);
82
+ } else {
83
+ channel.subscribers.splice(firstLater, 0, subscriber);
84
+ }
63
85
  register(view, type, channel);
64
86
  let isSubscribed = true;
65
87
  return () => {
@@ -101,7 +123,7 @@ function register(view, type, channel) {
101
123
  if (wanted == null) {
102
124
  return;
103
125
  }
104
- const listener = event => dispatch(channel, event);
126
+ const listener = event => dispatch(view, channel, event);
105
127
  view.addEventListener(type, listener, {
106
128
  capture: true,
107
129
  passive: !wanted
@@ -111,7 +133,14 @@ function register(view, type, channel) {
111
133
  cancels: wanted
112
134
  };
113
135
  }
114
- function dispatch(channel, event) {
136
+ function dispatch(view, channel, event) {
137
+ // Recorded before any subscriber runs, so each reads the pointer at hand.
138
+ const {
139
+ pointerType
140
+ } = event;
141
+ if (typeof pointerType === 'string' && pointerType !== '') {
142
+ lastPointerTypes.set(view, pointerType);
143
+ }
115
144
  // A subscriber may subscribe or unsubscribe while the event runs; the
116
145
  // event goes to those subscribed when it arrived.
117
146
  for (const subscriber of [...channel.subscribers]) {
@@ -119,7 +148,9 @@ function dispatch(channel, event) {
119
148
  continue;
120
149
  }
121
150
  try {
122
- subscriber.listener(event);
151
+ if (subscriber.listener(event) === true && subscriber.isFirst) {
152
+ return;
153
+ }
123
154
  } catch (error) {
124
155
  report(error);
125
156
  }
@@ -3,7 +3,8 @@
3
3
  * @input StyleX and the semantic interaction-overlay color tokens
4
4
  * @output Reusable background-color and background-image state styles, the
5
5
  * touch press's registered strength variable (`pressVars`) and its clocks
6
- * (`pressConsts`)
6
+ * (`pressConsts`). The list row's compositor press layer and its clocks
7
+ * are internal (privateAttributes/press.stylex.ts, utils/rowPressLayer.stylex.ts)
7
8
  * @position Internal styling utility for interactive core surfaces
8
9
  *
9
10
  * SYNC: When modified, update pressFeedback.ts, pressGesture.ts (the fade
@@ -29,16 +30,11 @@ export declare const pressVars: stylex.VarGroup<Readonly<{
29
30
  '--astryx-press-alpha': stylex.Types.Num<0>;
30
31
  }>, symbol>;
31
32
  /**
32
- * The touch press's clocks that both the stylesheet and the controller read.
33
- *
34
- * `defineConsts`, so the one number is inlined here at build time and is the
35
- * controller's constant at run time (`PRESS_FADE_MS` in pressGesture.ts):
36
- * the release animation and the controller's clock cannot drift apart. When
37
- * that clock runs out, the controller waits for a release animation that a
38
- * busy main thread started late, then removes the attribute.
33
+ * The touch press's measured release clock, kept as a reference value. Press
34
+ * releases now play the theme's `--duration-exit`.
39
35
  */
40
36
  export declare const pressConsts: {
41
- /** How long the release takes, in ms. UIKit's deselect clock. */
37
+ /** UIKit's deselect clock, in ms: the measured reference value. */
42
38
  releaseMs: number;
43
39
  };
44
40
  export declare const interactionOverlayStyles: Readonly<{