@astryxdesign/core 0.7.9-canary.e657e2e → 0.7.9-canary.e9a5ca6

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 (427) hide show
  1. package/dist/AlertDialog/AlertDialog.d.ts +3 -2
  2. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  3. package/dist/AlertDialog/AlertDialog.js +11 -14
  4. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  5. package/dist/BottomSheet/BottomSheet.js +31 -2
  6. package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
  7. package/dist/BottomSheet/useSheetGestures.js +36 -9
  8. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  9. package/dist/Breadcrumbs/BreadcrumbItem.js +3 -1
  10. package/dist/Button/Button.d.ts.map +1 -1
  11. package/dist/Button/Button.js +13 -4
  12. package/dist/ButtonGroup/ButtonGroup.d.ts +2 -1
  13. package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
  14. package/dist/ButtonGroup/ButtonGroup.js +28 -5
  15. package/dist/Calendar/Calendar.d.ts.map +1 -1
  16. package/dist/Calendar/Calendar.js +5 -7
  17. package/dist/Calendar/hooks/useCalendarNavigation.d.ts.map +1 -1
  18. package/dist/Calendar/hooks/useCalendarNavigation.js +3 -4
  19. package/dist/Chat/ChatMessageList.d.ts.map +1 -1
  20. package/dist/Chat/ChatMessageList.js +10 -2
  21. package/dist/Chat/useChatDictation.d.ts.map +1 -1
  22. package/dist/Chat/useChatDictation.js +13 -7
  23. package/dist/Chat/useChatNewMessages.d.ts.map +1 -1
  24. package/dist/Chat/useChatNewMessages.js +6 -3
  25. package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
  26. package/dist/Chat/useSpeechRecognition.js +15 -9
  27. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  28. package/dist/CheckboxInput/CheckboxInput.js +2 -1
  29. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  30. package/dist/CheckboxList/CheckboxListItem.js +8 -1
  31. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  32. package/dist/ClickableCard/ClickableCard.js +6 -6
  33. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  34. package/dist/CodeBlock/CodeBlock.js +12 -4
  35. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  36. package/dist/ComplexSelector/ComplexSelector.js +21 -12
  37. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  38. package/dist/ContextMenu/ContextMenu.js +5 -1
  39. package/dist/DateInput/DateInput.d.ts.map +1 -1
  40. package/dist/DateInput/DateInput.js +2 -1
  41. package/dist/DateInput/PickerWheel.js +3 -3
  42. package/dist/DateInput/wheelStrip.js +2 -2
  43. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  44. package/dist/DateTimeInput/DateTimeInput.js +35 -10
  45. package/dist/Drawer/Drawer.d.ts.map +1 -1
  46. package/dist/Drawer/Drawer.js +3 -1
  47. package/dist/DropdownMenu/DropdownMenu.d.ts +2 -1
  48. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  49. package/dist/DropdownMenu/DropdownMenu.js +42 -8
  50. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  51. package/dist/HoverCard/HoverCard.js +19 -9
  52. package/dist/Icon/ComponentIcon.d.ts +33 -0
  53. package/dist/Icon/ComponentIcon.d.ts.map +1 -0
  54. package/dist/Icon/ComponentIcon.js +56 -0
  55. package/dist/Icon/globalIconRegistry.d.ts +45 -4
  56. package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
  57. package/dist/Icon/globalIconRegistry.js +137 -3
  58. package/dist/Icon/index.d.ts +73 -2
  59. package/dist/Icon/index.d.ts.map +1 -1
  60. package/dist/Icon/index.js +42 -3
  61. package/dist/Icon/useIcon.d.ts +13 -4
  62. package/dist/Icon/useIcon.d.ts.map +1 -1
  63. package/dist/Icon/useIcon.js +16 -5
  64. package/dist/InputGroup/InputGroupText.d.ts +2 -1
  65. package/dist/InputGroup/InputGroupText.d.ts.map +1 -1
  66. package/dist/InputGroup/InputGroupText.js +2 -1
  67. package/dist/Item/Item.d.ts.map +1 -1
  68. package/dist/Item/Item.js +13 -3
  69. package/dist/Layer/LayerProvider.d.ts.map +1 -1
  70. package/dist/Layer/LayerProvider.js +8 -7
  71. package/dist/Layer/LayerTouch.d.ts +13 -0
  72. package/dist/Layer/LayerTouch.d.ts.map +1 -0
  73. package/dist/Layer/LayerTouch.js +16 -0
  74. package/dist/Layer/holdEntranceInput.d.ts.map +1 -1
  75. package/dist/Layer/holdEntranceInput.js +4 -2
  76. package/dist/Layer/layerKeyboardClearance.d.ts +41 -0
  77. package/dist/Layer/layerKeyboardClearance.d.ts.map +1 -0
  78. package/dist/Layer/layerKeyboardClearance.js +51 -0
  79. package/dist/Layer/layerViewportInset.stylex.d.ts +5 -1
  80. package/dist/Layer/layerViewportInset.stylex.d.ts.map +1 -1
  81. package/dist/Layer/layerViewportInset.stylex.js +11 -4
  82. package/dist/Layer/outsidePress.d.ts +4 -0
  83. package/dist/Layer/outsidePress.d.ts.map +1 -1
  84. package/dist/Layer/outsidePress.js +18 -1
  85. package/dist/Layer/settledBox.d.ts +16 -0
  86. package/dist/Layer/settledBox.d.ts.map +1 -0
  87. package/dist/Layer/settledBox.js +117 -0
  88. package/dist/Layer/toastHost.d.ts +77 -0
  89. package/dist/Layer/toastHost.d.ts.map +1 -0
  90. package/dist/Layer/toastHost.js +172 -0
  91. package/dist/Layer/useBackdropPress.d.ts +8 -0
  92. package/dist/Layer/useBackdropPress.d.ts.map +1 -1
  93. package/dist/Layer/useBackdropPress.js +31 -2
  94. package/dist/Layer/useLayer.d.ts.map +1 -1
  95. package/dist/Layer/useLayer.js +36 -106
  96. package/dist/Layer/useLayerKeyboardClearance.d.ts +54 -0
  97. package/dist/Layer/useLayerKeyboardClearance.d.ts.map +1 -0
  98. package/dist/Layer/useLayerKeyboardClearance.js +330 -0
  99. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  100. package/dist/Layer/useTouchTrigger.js +4 -0
  101. package/dist/Layout/LayoutPanel.d.ts.map +1 -1
  102. package/dist/Layout/LayoutPanel.js +12 -3
  103. package/dist/Link/Link.d.ts.map +1 -1
  104. package/dist/Link/Link.js +5 -1
  105. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  106. package/dist/MultiSelector/MultiSelector.js +7 -2
  107. package/dist/MultiSelector/hooks.d.ts.map +1 -1
  108. package/dist/MultiSelector/hooks.js +28 -28
  109. package/dist/OverflowList/OverflowList.d.ts.map +1 -1
  110. package/dist/OverflowList/OverflowList.js +7 -2
  111. package/dist/Pagination/Pagination.d.ts.map +1 -1
  112. package/dist/Pagination/Pagination.js +28 -10
  113. package/dist/Popover/Popover.d.ts.map +1 -1
  114. package/dist/Popover/Popover.js +1 -0
  115. package/dist/Resizable/resizablePane.d.ts +0 -2
  116. package/dist/Resizable/resizablePane.d.ts.map +1 -1
  117. package/dist/Resizable/resizablePane.js +2 -7
  118. package/dist/SegmentedControl/useSegmentedSelectionMotion.d.ts.map +1 -1
  119. package/dist/SegmentedControl/useSegmentedSelectionMotion.js +19 -59
  120. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  121. package/dist/SelectableCard/SelectableCard.js +6 -6
  122. package/dist/Selector/Selector.d.ts.map +1 -1
  123. package/dist/Selector/Selector.js +45 -18
  124. package/dist/SideNav/SideNav.d.ts.map +1 -1
  125. package/dist/SideNav/SideNav.js +0 -2
  126. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  127. package/dist/SideNav/SideNavItem.js +7 -4
  128. package/dist/Slider/sliderTouchController.js +2 -2
  129. package/dist/Spinner/Spinner.d.ts +1 -1
  130. package/dist/Spinner/Spinner.d.ts.map +1 -1
  131. package/dist/Spinner/Spinner.js +27 -5
  132. package/dist/Spinner/SpinnerOwnerContext.d.ts +2 -0
  133. package/dist/Spinner/SpinnerOwnerContext.d.ts.map +1 -0
  134. package/dist/Spinner/SpinnerOwnerContext.js +20 -0
  135. package/dist/Switch/useSwitchTouch.d.ts.map +1 -1
  136. package/dist/Switch/useSwitchTouch.js +13 -9
  137. package/dist/TabList/Tab.d.ts.map +1 -1
  138. package/dist/TabList/Tab.js +5 -1
  139. package/dist/TabList/TabList.d.ts.map +1 -1
  140. package/dist/TabList/TabList.js +1 -0
  141. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  142. package/dist/Table/plugins/columnResize/useTableColumnResize.js +6 -1
  143. package/dist/Table/plugins/columnSettings/useTableColumnSettingsState.d.ts.map +1 -1
  144. package/dist/Table/plugins/columnSettings/useTableColumnSettingsState.js +6 -1
  145. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +2 -1
  146. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  147. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +27 -5
  148. package/dist/Table/plugins/selection/useTableSelectionState.d.ts.map +1 -1
  149. package/dist/Table/plugins/selection/useTableSelectionState.js +7 -2
  150. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  151. package/dist/Table/plugins/sortable/useTableSortable.js +16 -8
  152. package/dist/Table/plugins/tree/useTableTreeState.d.ts.map +1 -1
  153. package/dist/Table/plugins/tree/useTableTreeState.js +9 -3
  154. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  155. package/dist/Thumbnail/Thumbnail.js +3 -3
  156. package/dist/Timestamp/TimestampHoverCard.d.ts +2 -1
  157. package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -1
  158. package/dist/Timestamp/TimestampHoverCard.js +12 -5
  159. package/dist/Toast/Toast.js +4 -4
  160. package/dist/Toast/ToastContext.d.ts +6 -13
  161. package/dist/Toast/ToastContext.d.ts.map +1 -1
  162. package/dist/Toast/ToastContext.js +6 -8
  163. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  164. package/dist/Toast/ToastViewport.js +75 -10
  165. package/dist/Toast/useToast.d.ts.map +1 -1
  166. package/dist/Toast/useToast.js +10 -50
  167. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  168. package/dist/Tokenizer/Tokenizer.js +17 -10
  169. package/dist/Tooltip/Tooltip.d.ts.map +1 -1
  170. package/dist/Tooltip/Tooltip.js +19 -9
  171. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  172. package/dist/Tooltip/useTooltip.js +2 -0
  173. package/dist/TopNav/TopNavItem.d.ts.map +1 -1
  174. package/dist/TopNav/TopNavItem.js +7 -2
  175. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  176. package/dist/Typeahead/BaseTypeahead.js +18 -7
  177. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  178. package/dist/Typeahead/Typeahead.js +11 -4
  179. package/dist/animator/createAnimator.d.ts.map +1 -1
  180. package/dist/animator/createAnimator.js +4 -3
  181. package/dist/astryx.css +36 -5
  182. package/dist/gestures/createPanGesture.d.ts +49 -0
  183. package/dist/gestures/createPanGesture.d.ts.map +1 -0
  184. package/dist/gestures/createPanGesture.js +80 -0
  185. package/dist/hooks/actionGroupTracker.d.ts +9 -0
  186. package/dist/hooks/actionGroupTracker.d.ts.map +1 -1
  187. package/dist/hooks/actionGroupTracker.js +38 -24
  188. package/dist/hooks/index.d.ts +2 -0
  189. package/dist/hooks/index.d.ts.map +1 -1
  190. package/dist/hooks/index.js +2 -1
  191. package/dist/hooks/pressGroupContext.d.ts +5 -3
  192. package/dist/hooks/pressGroupContext.d.ts.map +1 -1
  193. package/dist/hooks/pressGroupContext.js +17 -9
  194. package/dist/hooks/useActionGroupTracking.d.ts +29 -4
  195. package/dist/hooks/useActionGroupTracking.d.ts.map +1 -1
  196. package/dist/hooks/useActionGroupTracking.js +92 -14
  197. package/dist/hooks/useAnnounceRenderedText.d.ts +10 -2
  198. package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
  199. package/dist/hooks/useAnnounceRenderedText.js +45 -8
  200. package/dist/hooks/useGroupPressTracking.d.ts +34 -0
  201. package/dist/hooks/useGroupPressTracking.d.ts.map +1 -0
  202. package/dist/hooks/useGroupPressTracking.js +122 -0
  203. package/dist/hooks/useImageMode.d.ts.map +1 -1
  204. package/dist/hooks/useImageMode.js +13 -5
  205. package/dist/hooks/useMenuPress.d.ts.map +1 -1
  206. package/dist/hooks/useMenuPress.js +7 -0
  207. package/dist/hooks/useOverflow.d.ts +10 -0
  208. package/dist/hooks/useOverflow.d.ts.map +1 -1
  209. package/dist/hooks/useOverflow.js +25 -3
  210. package/dist/hooks/usePanGesture.d.ts +32 -0
  211. package/dist/hooks/usePanGesture.d.ts.map +1 -0
  212. package/dist/hooks/usePanGesture.js +67 -0
  213. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  214. package/dist/i18n/generated-locales/en.generated.js +2 -1
  215. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  216. package/dist/i18n/generated-locales/pseudo.generated.js +2 -1
  217. package/dist/index.d.ts +1 -0
  218. package/dist/index.d.ts.map +1 -1
  219. package/dist/index.js +1 -0
  220. package/dist/internal/touch.d.ts +19 -6
  221. package/dist/internal/touch.d.ts.map +1 -1
  222. package/dist/internal/touch.js +25 -8
  223. package/dist/motion/animatedLayout.d.ts.map +1 -1
  224. package/dist/motion/animatedLayout.js +10 -7
  225. package/dist/motion/animator.d.ts +5 -5
  226. package/dist/motion/animator.d.ts.map +1 -1
  227. package/dist/motion/animator.js +13 -11
  228. package/dist/motion/resolveMotion.d.ts +6 -27
  229. package/dist/motion/resolveMotion.d.ts.map +1 -1
  230. package/dist/motion/resolveMotion.js +82 -16
  231. package/dist/motion/roles.d.ts +8 -0
  232. package/dist/motion/roles.d.ts.map +1 -1
  233. package/dist/motion/roles.js +24 -0
  234. package/dist/motion/themeTempo.d.ts +7 -0
  235. package/dist/motion/themeTempo.d.ts.map +1 -0
  236. package/dist/motion/themeTempo.js +38 -0
  237. package/dist/motion/themeTiming.d.ts +63 -0
  238. package/dist/motion/themeTiming.d.ts.map +1 -0
  239. package/dist/motion/themeTiming.js +173 -0
  240. package/dist/motion/uikit/navigation.d.ts +3 -1
  241. package/dist/motion/uikit/navigation.d.ts.map +1 -1
  242. package/dist/motion/uikit/navigation.js +5 -2
  243. package/dist/motion/uikit/paging.d.ts +2 -1
  244. package/dist/motion/uikit/paging.d.ts.map +1 -1
  245. package/dist/motion/uikit/paging.js +4 -2
  246. package/dist/motion/uikit/picker.d.ts +3 -2
  247. package/dist/motion/uikit/picker.d.ts.map +1 -1
  248. package/dist/motion/uikit/picker.js +5 -3
  249. package/dist/motion/uikit/springs.d.ts +3 -3
  250. package/dist/motion/uikit/springs.d.ts.map +1 -1
  251. package/dist/motion/uikit/springs.js +50 -40
  252. package/dist/privateAttributes/focusOwner.stylex.d.ts +22 -0
  253. package/dist/privateAttributes/focusOwner.stylex.d.ts.map +1 -0
  254. package/dist/privateAttributes/focusOwner.stylex.js +39 -0
  255. package/dist/privateAttributes/press.stylex.d.ts +5 -1
  256. package/dist/privateAttributes/press.stylex.d.ts.map +1 -1
  257. package/dist/privateAttributes/press.stylex.js +6 -1
  258. package/dist/privateAttributes/pressGroupItem.stylex.d.ts +8 -5
  259. package/dist/privateAttributes/pressGroupItem.stylex.d.ts.map +1 -1
  260. package/dist/privateAttributes/pressGroupItem.stylex.js +11 -5
  261. package/dist/theme/defineTheme.d.ts +42 -3
  262. package/dist/theme/defineTheme.d.ts.map +1 -1
  263. package/dist/theme/defineTheme.js +48 -0
  264. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  265. package/dist/theme/generateThemeRules.js +4 -1
  266. package/dist/theme/resolveThemeValues.d.ts.map +1 -1
  267. package/dist/theme/resolveThemeValues.js +12 -4
  268. package/dist/theme/themeMotion.d.ts +7 -5
  269. package/dist/theme/themeMotion.d.ts.map +1 -1
  270. package/dist/theme/themeMotion.js +7 -5
  271. package/dist/utils/focusReturn.d.ts +24 -11
  272. package/dist/utils/focusReturn.d.ts.map +1 -1
  273. package/dist/utils/focusReturn.js +48 -14
  274. package/dist/utils/hitArea.d.ts +28 -2
  275. package/dist/utils/hitArea.d.ts.map +1 -1
  276. package/dist/utils/hitArea.js +49 -11
  277. package/dist/utils/touchHitArea.d.ts +25 -6
  278. package/dist/utils/touchHitArea.d.ts.map +1 -1
  279. package/dist/utils/touchHitArea.js +22 -12
  280. package/dist/utils/touchHitArea.stylex.d.ts +29 -5
  281. package/dist/utils/touchHitArea.stylex.d.ts.map +1 -1
  282. package/dist/utils/touchHitArea.stylex.js +37 -6
  283. package/locales/en.json +4 -0
  284. package/locales/pseudo.json +3 -0
  285. package/package.json +4 -4
  286. package/src/AlertDialog/AlertDialog.tsx +9 -13
  287. package/src/BottomSheet/BottomSheet.tsx +39 -2
  288. package/src/BottomSheet/useSheetGestures.ts +41 -10
  289. package/src/Breadcrumbs/BreadcrumbItem.tsx +7 -1
  290. package/src/Button/Button.tsx +37 -4
  291. package/src/ButtonGroup/ButtonGroup.doc.mjs +3 -2
  292. package/src/ButtonGroup/ButtonGroup.tsx +28 -4
  293. package/src/Calendar/Calendar.tsx +5 -6
  294. package/src/Calendar/hooks/useCalendarNavigation.ts +3 -4
  295. package/src/Calendar/useCalendarDays.doc.mjs +158 -0
  296. package/src/Chat/ChatMessageList.tsx +18 -2
  297. package/src/Chat/useChatDictation.ts +13 -7
  298. package/src/Chat/useChatNewMessages.ts +12 -4
  299. package/src/Chat/useSpeechRecognition.ts +15 -9
  300. package/src/CheckboxInput/CheckboxInput.tsx +5 -1
  301. package/src/CheckboxList/CheckboxListItem.tsx +7 -4
  302. package/src/ClickableCard/ClickableCard.tsx +40 -5
  303. package/src/CodeBlock/CodeBlock.doc.mjs +17 -0
  304. package/src/CodeBlock/CodeBlock.tsx +11 -2
  305. package/src/ComplexSelector/ComplexSelector.doc.mjs +2 -2
  306. package/src/ComplexSelector/ComplexSelector.tsx +39 -31
  307. package/src/ContextMenu/ContextMenu.tsx +9 -1
  308. package/src/DateInput/DateInput.tsx +2 -0
  309. package/src/DateInput/PickerWheel.tsx +3 -3
  310. package/src/DateInput/wheelStrip.ts +2 -2
  311. package/src/DateTimeInput/DateTimeInput.tsx +37 -13
  312. package/src/Drawer/Drawer.tsx +3 -1
  313. package/src/DropdownMenu/DropdownMenu.tsx +48 -10
  314. package/src/FieldStatus/FieldStatus.doc.mjs +10 -0
  315. package/src/HoverCard/HoverCard.tsx +4 -1
  316. package/src/Icon/ComponentIcon.tsx +71 -0
  317. package/src/Icon/globalIconRegistry.tsx +181 -4
  318. package/src/Icon/index.ts +85 -2
  319. package/src/Icon/useIcon.doc.mjs +94 -0
  320. package/src/Icon/useIcon.ts +24 -3
  321. package/src/InputGroup/InputGroupText.doc.mjs +45 -3
  322. package/src/InputGroup/InputGroupText.tsx +2 -1
  323. package/src/Item/Item.doc.mjs +19 -4
  324. package/src/Item/Item.tsx +21 -2
  325. package/src/Layer/LayerProvider.tsx +9 -8
  326. package/src/Layer/LayerTouch.ts +17 -0
  327. package/src/Layer/holdEntranceInput.ts +4 -2
  328. package/src/Layer/layerKeyboardClearance.ts +55 -0
  329. package/src/Layer/layerViewportInset.stylex.ts +16 -5
  330. package/src/Layer/outsidePress.ts +18 -1
  331. package/src/Layer/settledBox.ts +138 -0
  332. package/src/Layer/toastHost.tsx +212 -0
  333. package/src/Layer/useBackdropPress.ts +41 -1
  334. package/src/Layer/useLayer.tsx +41 -123
  335. package/src/Layer/useLayerKeyboardClearance.ts +371 -0
  336. package/src/Layer/useTouchTrigger.ts +4 -0
  337. package/src/Layout/LayoutPanel.tsx +16 -2
  338. package/src/Link/Link.tsx +5 -1
  339. package/src/Link/useLinkComponent.doc.mjs +95 -0
  340. package/src/MultiSelector/MultiSelector.tsx +24 -2
  341. package/src/MultiSelector/hooks.ts +28 -35
  342. package/src/MultiSelector/useMultiCombobox.doc.mjs +2 -2
  343. package/src/OverflowList/OverflowList.tsx +15 -9
  344. package/src/Overlay/useOverlay.doc.mjs +176 -0
  345. package/src/Pagination/Pagination.tsx +23 -9
  346. package/src/Popover/Popover.tsx +5 -0
  347. package/src/Resizable/resizablePane.ts +4 -13
  348. package/src/SegmentedControl/useSegmentedSelectionMotion.ts +18 -65
  349. package/src/SelectableCard/SelectableCard.tsx +40 -5
  350. package/src/Selector/Selector.tsx +71 -9
  351. package/src/SideNav/SideNav.tsx +0 -1
  352. package/src/SideNav/SideNavItem.tsx +8 -6
  353. package/src/Slider/sliderTouchController.ts +2 -2
  354. package/src/Spinner/Spinner.doc.mjs +150 -36
  355. package/src/Spinner/Spinner.tsx +34 -6
  356. package/src/Spinner/SpinnerOwnerContext.ts +22 -0
  357. package/src/Switch/useSwitchTouch.ts +17 -9
  358. package/src/TabList/Tab.tsx +5 -1
  359. package/src/TabList/TabList.tsx +1 -0
  360. package/src/Table/Table.doc.mjs +34 -0
  361. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +6 -1
  362. package/src/Table/plugins/columnSettings/useTableColumnSettingsState.tsx +7 -4
  363. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +32 -7
  364. package/src/Table/plugins/selection/useTableSelectionState.tsx +7 -3
  365. package/src/Table/plugins/sortable/useTableSortable.tsx +19 -12
  366. package/src/Table/plugins/sortable/useTableSortableState.doc.mjs +173 -0
  367. package/src/Table/plugins/tree/useTableTreeState.tsx +9 -3
  368. package/src/Thumbnail/Thumbnail.tsx +20 -2
  369. package/src/Timestamp/Timestamp.doc.mjs +17 -0
  370. package/src/Timestamp/TimestampHoverCard.tsx +11 -3
  371. package/src/Toast/Toast.doc.mjs +14 -0
  372. package/src/Toast/Toast.tsx +2 -2
  373. package/src/Toast/ToastContext.ts +7 -17
  374. package/src/Toast/ToastViewport.tsx +53 -9
  375. package/src/Toast/useToast.tsx +7 -52
  376. package/src/Tokenizer/Tokenizer.tsx +14 -10
  377. package/src/Tooltip/Tooltip.tsx +4 -1
  378. package/src/Tooltip/useTooltip.tsx +2 -0
  379. package/src/TopNav/TopNavItem.tsx +7 -2
  380. package/src/Typeahead/BaseTypeahead.tsx +34 -8
  381. package/src/Typeahead/Typeahead.tsx +7 -1
  382. package/src/animator/createAnimator.doc.mjs +1 -1
  383. package/src/animator/createAnimator.ts +5 -4
  384. package/src/gestures/README.md +2 -1
  385. package/src/gestures/createPanGesture.doc.mjs +145 -0
  386. package/src/gestures/createPanGesture.ts +107 -0
  387. package/src/hooks/actionGroupTracker.ts +33 -24
  388. package/src/hooks/index.ts +8 -0
  389. package/src/hooks/pressGroupContext.ts +18 -9
  390. package/src/hooks/useActionGroupTracking.ts +139 -19
  391. package/src/hooks/useAnimatedLayout.doc.mjs +1 -1
  392. package/src/hooks/useAnimator.doc.mjs +1 -1
  393. package/src/hooks/useAnnounceRenderedText.ts +59 -8
  394. package/src/hooks/useEntryAnimation.doc.mjs +1 -1
  395. package/src/hooks/useGroupPressTracking.ts +154 -0
  396. package/src/hooks/useImageMode.ts +19 -7
  397. package/src/hooks/useMenuPress.ts +14 -1
  398. package/src/hooks/useOverflow.ts +25 -3
  399. package/src/hooks/usePanGesture.doc.mjs +158 -0
  400. package/src/hooks/usePanGesture.ts +75 -0
  401. package/src/hooks/usePressFeedback.doc.mjs +1 -1
  402. package/src/i18n/generated-locales/en.generated.ts +1 -0
  403. package/src/i18n/generated-locales/pseudo.generated.ts +1 -0
  404. package/src/index.ts +2 -0
  405. package/src/internal/touch.ts +32 -9
  406. package/src/motion/README.md +13 -13
  407. package/src/motion/animatedLayout.ts +10 -7
  408. package/src/motion/animator.ts +13 -12
  409. package/src/motion/resolveMotion.ts +89 -18
  410. package/src/motion/roles.ts +29 -0
  411. package/src/motion/themeTempo.ts +41 -0
  412. package/src/motion/themeTiming.ts +198 -0
  413. package/src/motion/uikit/navigation.ts +5 -1
  414. package/src/motion/uikit/paging.ts +4 -1
  415. package/src/motion/uikit/picker.ts +5 -2
  416. package/src/motion/uikit/springs.ts +94 -37
  417. package/src/privateAttributes/focusOwner.stylex.ts +51 -0
  418. package/src/privateAttributes/press.stylex.ts +21 -1
  419. package/src/privateAttributes/pressGroupItem.stylex.ts +11 -5
  420. package/src/theme/defineTheme.ts +99 -2
  421. package/src/theme/generateThemeRules.ts +3 -0
  422. package/src/theme/resolveThemeValues.ts +12 -3
  423. package/src/theme/themeMotion.ts +7 -5
  424. package/src/utils/focusReturn.ts +61 -15
  425. package/src/utils/hitArea.ts +88 -8
  426. package/src/utils/touchHitArea.stylex.ts +29 -19
  427. package/src/utils/touchHitArea.ts +60 -12
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * @file AlertDialog.tsx
3
3
  * @input Uses React, StyleX, Dialog, Layout, Heading, Text, Button, the
4
- * action-group tracking (hooks/useActionGroupTracking) and the press-group
5
- * marker (privateAttributes/pressGroupItem.stylex)
4
+ * action-group tracking (hooks/useActionGroupTracking), the press-group
5
+ * context (hooks/pressGroupContext) and the group pointers
6
+ * (hooks/useGroupPressTracking)
6
7
  * @output Exports AlertDialog component, AlertDialogProps type
7
8
  * @position Core implementation; consumed by index.ts, tested by AlertDialog.test.tsx
8
9
  *
@@ -1 +1 @@
1
- {"version":3,"file":"AlertDialog.d.ts","sourceRoot":"","sources":["../../src/AlertDialog/AlertDialog.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAmC,MAAM,OAAO,CAAC;AAUxD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAsC5C,MAAM,WAAW,gBAAiB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACpE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAE3C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC;IAExB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,GAAG,EACH,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,KAAK,EACL,WAAW,EACX,WAAW,EAAE,oBAAoB,EACjC,WAAW,EACX,aAA6B,EAC7B,eAAe,EACf,QAAQ,EACR,KAAW,EACX,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,IAAI,EACR,EAAE,gBAAgB,qBAsHlB;yBAxIe,WAAW"}
1
+ {"version":3,"file":"AlertDialog.d.ts","sourceRoot":"","sources":["../../src/AlertDialog/AlertDialog.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAmC,MAAM,OAAO,CAAC;AAUxD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAmC5C,MAAM,WAAW,gBAAiB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACpE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAE3C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC;IAExB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,GAAG,EACH,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,KAAK,EACL,WAAW,EACX,WAAW,EAAE,oBAAoB,EACjC,WAAW,EACX,aAA6B,EAC7B,eAAe,EACf,QAAQ,EACR,KAAW,EACX,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,IAAI,EACR,EAAE,gBAAgB,qBAoHlB;yBAtIe,WAAW"}
@@ -5,8 +5,9 @@
5
5
  /**
6
6
  * @file AlertDialog.tsx
7
7
  * @input Uses React, StyleX, Dialog, Layout, Heading, Text, Button, the
8
- * action-group tracking (hooks/useActionGroupTracking) and the press-group
9
- * marker (privateAttributes/pressGroupItem.stylex)
8
+ * action-group tracking (hooks/useActionGroupTracking), the press-group
9
+ * context (hooks/pressGroupContext) and the group pointers
10
+ * (hooks/useGroupPressTracking)
10
11
  * @output Exports AlertDialog component, AlertDialogProps type
11
12
  * @position Core implementation; consumed by index.ts, tested by AlertDialog.test.tsx
12
13
  *
@@ -36,12 +37,10 @@ import { registerEnglishFallback, useComponentTranslator } from "../i18n/useComp
36
37
  import english from "../i18n/generated-english/AlertDialog/AlertDialog.generated.js";
37
38
  import { useActionGroupTracking } from "../hooks/useActionGroupTracking.js";
38
39
  import { PressGroupContext } from "../hooks/pressGroupContext.js";
40
+ import { GROUP_PRESS_POINTERS } from "../hooks/useGroupPressTracking.js";
39
41
  import { alertController } from "../motion/uikit/alert.js";
40
- import { pressGroupItemProps } from "../privateAttributes/pressGroupItem.stylex.js";
41
42
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
42
43
  registerEnglishFallback(english);
43
- const SLIDING_POINTERS = ['touch', 'pen'];
44
- const ACTION_TRACKING_PROPS = pressGroupItemProps(SLIDING_POINTERS);
45
44
  const SMALL_SCREEN_QUERY = '(max-width: 640px)';
46
45
  const styles = {
47
46
  trackingRow: {
@@ -115,8 +114,8 @@ export function AlertDialog({
115
114
  onOpenChange(false);
116
115
  }, [onOpenChange]);
117
116
 
118
- // Each action carries the press-group marker from its first render, so the
119
- // tracker is its only painter.
117
+ // Through the group's context, each action's Button writes the press-group
118
+ // marker from its first render. So the tracker is its only painter.
120
119
  const actionsRef = useRef(null);
121
120
  // Only under the touch presentation does a press slide across the
122
121
  // actions. A desktop press stays the native button's.
@@ -130,21 +129,20 @@ export function AlertDialog({
130
129
  highlightOnsetMs: alertController.actions.highlightOnsetMs,
131
130
  highlightExpansion: alertController.actions.highlightExpansion,
132
131
  // A mouse press acts as a native button's under any presentation.
133
- pointerTypes: SLIDING_POINTERS,
132
+ pointerTypes: GROUP_PRESS_POINTERS,
134
133
  isEnabled: isTracking
135
134
  });
136
- const actionTrackingProps = isTracking ? ACTION_TRACKING_PROPS : undefined;
137
135
  const buttonActionStyle = [styles.action, isSmallScreen && styles.stackedAction];
138
136
  const cancelButton = /*#__PURE__*/_jsx(Button, {
139
137
  variant: "ghost",
140
138
  label: cancelLabel,
141
139
  onClick: handleCancel,
142
- xstyle: buttonActionStyle,
143
- ...actionTrackingProps,
140
+ xstyle: buttonActionStyle
144
141
  // Dialog focuses [data-autofocus] itself after showModal(), because
145
142
  // React's autoFocus runs during commit while the dialog is invisible.
146
143
  // Cancel is least destructive, so it remains the autofocus target even
147
144
  // when small-screen visual order places the destructive action above it.
145
+ ,
148
146
  "data-autofocus": true
149
147
  }, "cancel");
150
148
  const actionButton = /*#__PURE__*/_jsx(Button, {
@@ -152,8 +150,7 @@ export function AlertDialog({
152
150
  label: actionLabel,
153
151
  onClick: onAction,
154
152
  isLoading: isActionLoading,
155
- xstyle: buttonActionStyle,
156
- ...actionTrackingProps
153
+ xstyle: buttonActionStyle
157
154
  }, "action");
158
155
  return /*#__PURE__*/_jsx(Dialog, {
159
156
  ...rest,
@@ -200,7 +197,7 @@ export function AlertDialog({
200
197
  hAlign: isSmallScreen ? 'stretch' : 'end',
201
198
  wrap: isSmallScreen ? 'nowrap' : 'wrap',
202
199
  children: /*#__PURE__*/_jsx(PressGroupContext, {
203
- value: isTracking,
200
+ value: isTracking ? GROUP_PRESS_POINTERS : null,
204
201
  children: isSmallScreen ? [actionButton, cancelButton] : [cancelButton, actionButton]
205
202
  })
206
203
  })
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheet.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/BottomSheet.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAuBH,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAyDhD,YAAY,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AAmLhF,UAAU,sBAAuB,SAAQ,SAAS,CAAC,cAAc,CAAC;IAChE,qDAAqD;IACrD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IAEd,0EAA0E;IAC1E,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB,wGAAwG;IACxG,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;IAE7C;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAEjD;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,UAAU,0BAA2B,SAAQ,sBAAsB;IACjE,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB;AAED,UAAU,wBAAyB,SAAQ,sBAAsB;IAC/D;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAC1B,0BAA0B,GAAG,wBAAwB,CAAC;AAy5BxD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,+BA6BlD;yBA7Be,WAAW"}
1
+ {"version":3,"file":"BottomSheet.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/BottomSheet.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAuBH,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AA4DhD,YAAY,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AAmLhF,UAAU,sBAAuB,SAAQ,SAAS,CAAC,cAAc,CAAC;IAChE,qDAAqD;IACrD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IAEd,0EAA0E;IAC1E,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB,wGAAwG;IACxG,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;IAE7C;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAEjD;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,UAAU,0BAA2B,SAAQ,sBAAsB;IACjE,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB;AAED,UAAU,wBAAyB,SAAQ,sBAAsB;IAC/D;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAC1B,0BAA0B,GAAG,wBAAwB,CAAC;AA27BxD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,+BA6BlD;yBA7Be,WAAW"}
@@ -65,7 +65,7 @@ import { ModalAnnounceProvider } from "../hooks/ModalAnnounceProvider.js";
65
65
  import { useModalOutlet } from "../Layer/modalOutlet.js";
66
66
  import { useLayerDismissal } from "../Layer/useLayerDismissal.js";
67
67
  import { useFocusRegionContainment } from "../hooks/useFocusTrap.js";
68
- import { returnFocusForLastInput } from "../utils/focusReturn.js";
68
+ import { prepareFocusRepairOnRemoval, returnFocusForLastInput } from "../utils/focusReturn.js";
69
69
  import { useInteractionModalityTracking } from "../utils/interactionModality.js";
70
70
  import { BottomSheetPanel } from "./BottomSheetPanel.js";
71
71
  import { BottomSheetEdgeTint } from "./BottomSheetEdgeTint.js";
@@ -387,7 +387,14 @@ function StandaloneBottomSheet({
387
387
  return;
388
388
  }
389
389
  const key = stackKeyRef.current;
390
- return registerBottomSheet({
390
+ const dialog = dialogRef.current;
391
+ // Removing an open dialog runs no close, so focus would drop to the page.
392
+ // After the commit, the repair sends focus where a close would, if the
393
+ // removal lost focus.
394
+ const repairOnRemoval = dialog == null ? null : prepareFocusRepairOnRemoval(dialog, {
395
+ keepRestingFocus: true
396
+ });
397
+ const leave = registerBottomSheet({
391
398
  key,
392
399
  getElement: () => dialogRef.current,
393
400
  show: () => {
@@ -437,6 +444,28 @@ function StandaloneBottomSheet({
437
444
  }
438
445
  }
439
446
  }, isOpenRef.current, hasScrim);
447
+ return () => {
448
+ // Read before the registry lets go of the sheet beneath. Focus the
449
+ // person had already moved out of the sheet to the page body stays
450
+ // there: the removal did not lose it.
451
+ if (repairOnRemoval != null && isSheetHostPresented(dialog)) {
452
+ const returnTarget = finalFocusRefRef.current?.current ?? triggerRef.current;
453
+ const revealed = hasScrim ? getBottomSheetBeneath(key) : null;
454
+ repairOnRemoval(() => {
455
+ // The sheet beneath left too. Its own repair returns focus for the
456
+ // stack.
457
+ if (revealed != null && !revealed.element.isConnected) {
458
+ return;
459
+ }
460
+ if (revealed != null && (returnTarget == null || !revealed.element.contains(returnTarget))) {
461
+ revealed.focus();
462
+ } else if (returnTarget != null && returnTarget.isConnected) {
463
+ returnFocusForLastInput(returnTarget);
464
+ }
465
+ });
466
+ }
467
+ leave();
468
+ };
440
469
  }, [hasScrim, shouldPresent, writeScrim]);
441
470
  useLayoutEffect(() => {
442
471
  if (!isOpen) {
@@ -1 +1 @@
1
- {"version":3,"file":"useSheetGestures.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/useSheetGestures.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAoCH,OAAO,EAOL,KAAK,aAAa,EAClB,KAAK,UAAU,IAAI,eAAe,EAClC,KAAK,YAAY,IAAI,iBAAiB,EACtC,KAAK,SAAS,EACd,KAAK,UAAU,IAAI,eAAe,EAClC,KAAK,OAAO,IAAI,YAAY,EAC7B,MAAM,OAAO,CAAC;AA4Hf;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE3E;AA+BD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,IAAI,EAAE,WAAW,GAChB,OAAO,CAWT;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,IAAI,EAAE,WAAW,GAChB,WAAW,EAAE,CAaf;AA0DD,MAAM,WAAW,uBAAuB;IACtC,0EAA0E;IAC1E,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gFAAgF;IAChF,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;IAC7B,oEAAoE;IACpE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAChD,oBAAoB,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACzD,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD,eAAe,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACpD,YAAY,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,WAAW,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACxC,aAAa,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAChD,oBAAoB,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACzD,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD,eAAe,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,8HAA8H;IAC9H,YAAY,EAAE,iBAAiB,CAAC;IAChC,gEAAgE;IAChE,WAAW,EAAE,gBAAgB,CAAC;IAC9B;;;;OAIG;IACH,SAAS,EAAE,cAAc,CAAC;IAC1B;;;;;OAKG;IACH,cAAc,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,UAAU,EAAE,OAAO,CAAC;IACpB,4EAA4E;IAC5E,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;;;OAOG;IACH,sBAAsB,EAAE,OAAO,CAAC;IAChC;;;;OAIG;IACH,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACnC,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,uBAAuB,EAAE,MAAM,CAAC;IAChC,qEAAqE;IACrE,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC;;;;;;;OAOG;IACH,wBAAwB,EAAE,MAAM,IAAI,CAAC;IACrC;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AASD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,eAAwB,EACxB,UAAiB,EACjB,sBAA0B,EAC1B,SAAS,EACT,WAAW,EACX,MAAM,EACN,aAAa,EACb,cAAc,EACd,cAAsB,GACvB,EAAE,uBAAuB,GAAG,sBAAsB,CAg3ClD"}
1
+ {"version":3,"file":"useSheetGestures.d.ts","sourceRoot":"","sources":["../../src/BottomSheet/useSheetGestures.ts"],"names":[],"mappings":"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"}
@@ -333,18 +333,26 @@ export function useSheetGestures({
333
333
  // onDismiss() and sets `pending`; the host answers in the same update, so
334
334
  // the first render afterwards says whether it took the close (its
335
335
  // controlled state now says closed: the exit under way is the drag's) or
336
- // refused it (a guarded onOpenChange left it open: the sheet snaps back and
337
- // the request is spent). Either way the flag is settled during render, the
338
- // prev-prop pattern, and derived back to false once the sheet is open
339
- // again — so a later close from a control, Escape or code is never
340
- // mistaken for a drag.
336
+ // refused it (a guarded onOpenChange left it open: the sheet snaps back,
337
+ // its scrim with it, and the request is spent). Either way the flag is
338
+ // settled during render, the prev-prop pattern, and derived back to false
339
+ // once the sheet is open again — so a later close from a control, Escape
340
+ // or code is never mistaken for a drag.
341
341
  const [touchDragDismissal, setTouchDragDismissal] = useState(null);
342
+ // The render that spends a refused request counts it. The layout effect
343
+ // below answers each count.
344
+ const [refusedDismissalCount, setRefusedDismissalCount] = useState(0);
342
345
  if (touchDragDismissal != null) {
343
346
  if (touchDragDismissal.pending) {
344
- setTouchDragDismissal(isOpenRequested ? null : {
345
- isTouch: touchDragDismissal.isTouch,
346
- pending: false
347
- });
347
+ if (isOpenRequested) {
348
+ setTouchDragDismissal(null);
349
+ setRefusedDismissalCount(count => count + 1);
350
+ } else {
351
+ setTouchDragDismissal({
352
+ isTouch: touchDragDismissal.isTouch,
353
+ pending: false
354
+ });
355
+ }
348
356
  } else if (isOpenRequested) {
349
357
  setTouchDragDismissal(null);
350
358
  }
@@ -452,6 +460,24 @@ export function useSheetGestures({
452
460
  hasFixedHeightRef.current = hasFixedHeight;
453
461
  });
454
462
 
463
+ // The release cannot know whether the host takes the close. The host
464
+ // answers through `isOpenRequested` in the next render. Keep the left
465
+ // detent's scrim until then.
466
+ const restingScrimOpacityRef = useRef(null);
467
+ // Syncs the host's scrim (its backdrop, written through `onScrimOpacity`)
468
+ // with the panel's return to rest after a refusal: the panel rests on that
469
+ // detent again, so the scrim the drag thinned toward the dismiss line rests
470
+ // with it. The refusal changes none of the host's own scrim inputs, so the
471
+ // drag's last value would otherwise stand.
472
+ useLayoutEffect(() => {
473
+ const restingScrimOpacity = restingScrimOpacityRef.current;
474
+ if (refusedDismissalCount === 0 || restingScrimOpacity == null) {
475
+ return;
476
+ }
477
+ restingScrimOpacityRef.current = null;
478
+ onScrimOpacityRef.current?.(restingScrimOpacity);
479
+ }, [refusedDismissalCount]);
480
+
455
481
  // Live drag bookkeeping (refs so pointermove doesn't churn renders).
456
482
  const dragStateRef = useRef(null);
457
483
 
@@ -770,6 +796,7 @@ export function useSheetGestures({
770
796
  if (dir > 0 && projected > dismissOffset) {
771
797
  if (canDismissRef.current) {
772
798
  prepareScrollAreaSettle(baseLayoutOffset, baseOffset, baseLayoutOffset, baseLayoutOffset, baseLayoutOffset, naturalEndGap, false);
799
+ restingScrimOpacityRef.current = scrimOpacityForOffset(baseOffset, offsets, dismissOffset, peekOffset);
773
800
  setTouchDragDismissal({
774
801
  isTouch,
775
802
  pending: true
@@ -1 +1 @@
1
- {"version":3,"file":"BreadcrumbItem.d.ts","sourceRoot":"","sources":["../../src/Breadcrumbs/BreadcrumbItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAa5C,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,qCAAqC,CAAC;AAM7C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,8BAA8B,CAAC;AAarE,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAC/C,SAAS,CAAC,aAAa,CAAC,EACxB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/C;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAsID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,IAAI,EACR,EAAE,mBAAmB,qBAuMrB;yBAtNe,cAAc"}
1
+ {"version":3,"file":"BreadcrumbItem.d.ts","sourceRoot":"","sources":["../../src/Breadcrumbs/BreadcrumbItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAc5C,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,qCAAqC,CAAC;AAM7C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,8BAA8B,CAAC;AAarE,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAC/C,SAAS,CAAC,aAAa,CAAC,EACxB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/C;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AA2ID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,IAAI,EACR,EAAE,mBAAmB,qBAuMrB;yBAtNe,cAAc"}
@@ -41,6 +41,8 @@ import { menuTouchActionStyles } from "../DropdownMenu/menuTouchAction.stylex.js
41
41
  import { useMenuOverflow } from "../DropdownMenu/useMenuOverflow.js";
42
42
  import { useTypeahead } from "../hooks/useTypeahead.js";
43
43
  import { layerAnimations } from "../Layer/layerAnimations.stylex.js";
44
+ import "../Layer/layerViewportInset.stylex.js";
45
+ import { layerViewportInset } from "../Layer/layerViewportInset.stylex.js";
44
46
  import { renderDropdownItems } from "../DropdownMenu/renderDropdownItems.js";
45
47
  import { DropdownMenuContext, DropdownMenuRootOpenContext } from "../DropdownMenu/DropdownMenuContext.js";
46
48
  import { MENU_ITEM_ROLES, MENU_ITEM_SELECTOR, MENU_BOUNDARY_SELECTOR } from "../DropdownMenu/menuItemRoles.js";
@@ -131,7 +133,7 @@ const menuStyles = {
131
133
  k1xSpc: "x78zum5",
132
134
  kXwgrk: "xdt5ytf",
133
135
  kOIVth: "x1lsbc85",
134
- kskxy: "xuyqlj2",
136
+ kskxy: "x1uh1i8a",
135
137
  kORKVm: "x1odjw0f",
136
138
  "--_dropdown-menu-radius": "x1fcsqxe",
137
139
  "--_dropdown-menu-padding": "xgory14",
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/Button/Button.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/Button/Button.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAqC3C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAKrD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AA+K9C,QAAA,MAAM,UAAU;;;;;;;;;;EAUd,CAAC;AAuDH;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,UAAU,CAAC;AAQjD,MAAM,WAAW,WAAY,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC/D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC,oDAAoD;IACpD,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACrD;;OAEG;IACH,WAAW,CAAC,EAAE,CACZ,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KACnC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA6KD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,OAAqB,EACrB,IAAI,EAAE,QAAQ,EACd,IAAe,EACf,UAAkB,EAClB,SAAiB,EACjB,eAAuB,EACvB,WAAW,EACX,IAAI,EACJ,UAAkB,EAClB,KAAK,EACL,SAAkB,EAClB,QAAQ,EACR,UAAU,EACV,OAAO,EACP,IAAI,EACJ,EAAE,EACF,MAAM,EACN,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,WAAW,GAAG,SAAS,CAoVzB;yBA7We,MAAM"}
@@ -30,7 +30,7 @@ import { iconBoxSizeStyles } from "../Icon/IconSize.stylex.js";
30
30
  import { EDGE_COMP_ATTR } from "../Layout/edgeCompensation.stylex.js";
31
31
  import { useSize } from "../SizeContext/SizeContext.js";
32
32
  import { useButtonGroup } from "../ButtonGroup/ButtonGroupContext.js";
33
- import { PressGroupContext } from "../hooks/pressGroupContext.js";
33
+ import { PressGroupContext, pressGroupItemProps } from "../hooks/pressGroupContext.js";
34
34
  import { useInputGroup } from "../InputGroup/InputGroupContext.js";
35
35
  import { InputGroupInternalContext } from "../InputGroup/InputGroupInternalContext.js";
36
36
  import { groupStyles as inputGroupStyles, inputGroupItemProps } from "../InputGroup/groupStyles.js";
@@ -53,6 +53,9 @@ registerEnglishFallback(english);
53
53
  */
54
54
  const PRESSED_ON = '[data-astryx-press="on"]';
55
55
 
56
+ /** `aria-haspopup` values of a trigger that keeps its own press and opening. */
57
+ const MENU_POPUPS = new Set(['true', 'menu', 'listbox']);
58
+
56
59
  /**
57
60
  * Base button styles
58
61
  * Pseudo-classes are nested within properties per StyleX recommendation:
@@ -86,7 +89,7 @@ const styles = {
86
89
  $$css: true
87
90
  },
88
91
  pressable: {
89
- k3aq6I: "x3oybdh x8ppqj xom6oz5 x3y5scg",
92
+ k3aq6I: "x3oybdh x8ppqj x1249l8d xbht4k1 x1ex9uxt x3y5scg xg3abmg xoigjuk",
90
93
  $$css: true
91
94
  },
92
95
  trackedOverlay: {
@@ -94,7 +97,7 @@ const styles = {
94
97
  $$css: true
95
98
  },
96
99
  pressableTracked: {
97
- k3aq6I: "x3oybdh x3y5scg",
100
+ k3aq6I: "x3oybdh x3y5scg xg3abmg xoigjuk",
98
101
  $$css: true
99
102
  },
100
103
  inactive: {
@@ -396,7 +399,11 @@ export function Button({
396
399
  const t = useComponentTranslator();
397
400
  const size = useSize(sizeProp, 'md');
398
401
  const buttonGroup = useButtonGroup();
399
- const isGroupTracked = use(PressGroupContext);
402
+ // A tracking group's tracker paints this button's pointer press. A menu
403
+ // trigger is not tracked: it keeps its own press and opening.
404
+ const groupPointers = use(PressGroupContext);
405
+ const groupItemProps = groupPointers != null && !MENU_POPUPS.has(String(props['aria-haspopup'])) ? pressGroupItemProps(groupPointers) : undefined;
406
+ const isGroupTracked = groupItemProps != null;
400
407
  const inputGroup = useInputGroup();
401
408
  const [isPending, startTransition] = useTransition();
402
409
  // clickAction is normally fire-once (submit/save/pay), so a same-tick
@@ -611,6 +618,7 @@ export function Button({
611
618
  ...(inputGroup != null && buttonGroup == null ? inputGroupItemProps : undefined),
612
619
  ...sharedMergedProps,
613
620
  ...pressFeedback,
621
+ ...groupItemProps,
614
622
  ...props,
615
623
  ...ariaLabelProp,
616
624
  ...describedByProp,
@@ -633,6 +641,7 @@ export function Button({
633
641
  ...(inputGroup != null && buttonGroup == null ? inputGroupItemProps : undefined),
634
642
  ...sharedMergedProps,
635
643
  ...pressFeedback,
644
+ ...groupItemProps,
636
645
  ...props,
637
646
  ...ariaLabelProp,
638
647
  ...describedByProp,
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @file ButtonGroup.tsx
3
- * @input Uses React, StyleX, Button/IconButton children
3
+ * @input Uses React, StyleX, Button/IconButton children, and the shared group
4
+ * press tracking (hooks/useGroupPressTracking)
4
5
  * @output Exports ButtonGroup component, context, and types
5
6
  * @position Groups buttons with connected styling; consumed by index.ts
6
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonGroup.d.ts","sourceRoot":"","sources":["../../src/ButtonGroup/ButtonGroup.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAU,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAE9C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAI9C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,sBAAsB,CAAC;AAQjE,MAAM,WAAW,gBAAiB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACjE,yCAAyC;IACzC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,WAAW,CAAC,EAAE,sBAAsB,CAAC;IAErC;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAwCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,KAAK,EACL,WAA0B,EAC1B,IAAI,EAAE,QAAQ,EACd,UAAkB,EAClB,SAAkB,EAClB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,aAAa,EAAE,MAAM,EACrB,SAAS,EACT,OAAO,EACP,GAAG,KAAK,EACT,EAAE,gBAAgB,GAAG,SAAS,CAoD9B;yBAnEe,WAAW"}
1
+ {"version":3,"file":"ButtonGroup.d.ts","sourceRoot":"","sources":["../../src/ButtonGroup/ButtonGroup.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAkB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAW9C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,sBAAsB,CAAC;AAQjE,MAAM,WAAW,gBAAiB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACjE,yCAAyC;IACzC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,WAAW,CAAC,EAAE,sBAAsB,CAAC;IAErC;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA6CD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,KAAK,EACL,WAA0B,EAC1B,IAAI,EAAE,QAAQ,EACd,UAAkB,EAClB,SAAkB,EAClB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,aAAa,EAAE,MAAM,EACrB,SAAS,EACT,OAAO,EACP,GAAG,KAAK,EACT,EAAE,gBAAgB,GAAG,SAAS,CA+D9B;yBA9Ee,WAAW"}
@@ -4,7 +4,8 @@
4
4
 
5
5
  /**
6
6
  * @file ButtonGroup.tsx
7
- * @input Uses React, StyleX, Button/IconButton children
7
+ * @input Uses React, StyleX, Button/IconButton children, and the shared group
8
+ * press tracking (hooks/useGroupPressTracking)
8
9
  * @output Exports ButtonGroup component, context, and types
9
10
  * @position Groups buttons with connected styling; consumed by index.ts
10
11
  *
@@ -20,12 +21,16 @@
20
21
  * - /apps/storybook/stories/ButtonGroup.stories.tsx (storybook stories)
21
22
  * - /packages/cli/assets/templates/blocks/components/ButtonGroup/ (showcase blocks)
22
23
  */
23
- import { useMemo } from 'react';
24
+ import { useMemo, useRef } from 'react';
24
25
  import * as stylex from '@stylexjs/stylex';
25
26
  import "../theme/tokens.stylex.js";
26
27
  import { radiusVars, shadowVars } from "../theme/tokens.stylex.js";
27
28
  import { SizeProvider, useSize } from "../SizeContext/SizeContext.js";
28
29
  import { useListFocus } from "../hooks/useListFocus.js";
30
+ import { PressGroupContext } from "../hooks/pressGroupContext.js";
31
+ import { GROUP_PRESS_POINTERS, useGroupPressTracking } from "../hooks/useGroupPressTracking.js";
32
+ import { useTouchPresentation } from "../utils/touchPresentation.js";
33
+ import { touchHitAreaStyles } from "../utils/touchHitArea.stylex.js";
29
34
  import { mergeProps, composeEventHandlers } from "../utils/index.js";
30
35
  import { ButtonGroupContext } from "./ButtonGroupContext.js";
31
36
  import { themeProps } from "../utils/themeProps.js";
@@ -47,6 +52,10 @@ const styles = {
47
52
  vertical: {
48
53
  kXwgrk: "xdt5ytf",
49
54
  $$css: true
55
+ },
56
+ tracking: {
57
+ kVAEAm: "x1n2onr6",
58
+ $$css: true
50
59
  }
51
60
  };
52
61
 
@@ -154,25 +163,39 @@ export function ButtonGroup({
154
163
  orientation,
155
164
  isDisabled
156
165
  }), [orientation, isDisabled]);
166
+
167
+ // Only under the touch presentation does a press slide across the buttons.
168
+ // A desktop press stays the native button's.
169
+ const {
170
+ isTouch
171
+ } = useTouchPresentation();
172
+ const tracksPress = !isDisabled && isTouch;
173
+ const groupRef = useRef(null);
174
+ const {
175
+ hitAreaRef
176
+ } = useGroupPressTracking(groupRef, tracksPress);
157
177
  return /*#__PURE__*/_jsx(ButtonGroupContext, {
158
178
  value: contextValue,
159
179
  children: /*#__PURE__*/_jsx(SizeProvider, {
160
180
  value: size,
161
181
  children: /*#__PURE__*/_jsx("div", {
162
- ref: useMergedRefs(ref, listRef),
182
+ ref: useMergedRefs(ref, listRef, groupRef, hitAreaRef),
163
183
  ...props,
164
184
  ...mergeProps(themeProps('button-group', {
165
185
  size,
166
186
  orientation,
167
187
  elevation
168
- }), stylex.props(styles.group, orientation === 'vertical' && styles.vertical, elevationStyles[elevation], xstyle), className, style),
188
+ }), stylex.props(styles.group, tracksPress && styles.tracking, tracksPress && touchHitAreaStyles.layerBelowChildren, orientation === 'vertical' && styles.vertical, elevationStyles[elevation], xstyle), className, style),
169
189
  role: "group",
170
190
  "aria-label": label,
171
191
  onKeyDown: composeEventHandlers(onKeyDown, handleKeyDown),
172
192
  onFocus: composeEventHandlers(onFocus, handleFocus),
173
193
  "aria-disabled": isDisabled || undefined,
174
194
  "data-testid": testId,
175
- children: children
195
+ children: /*#__PURE__*/_jsx(PressGroupContext, {
196
+ value: tracksPress ? GROUP_PRESS_POINTERS : null,
197
+ children: children
198
+ })
176
199
  })
177
200
  })
178
201
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../src/Calendar/Calendar.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA6B5C,OAAO,EAEL,KAAK,cAAc,EASpB,MAAM,yBAAyB,CAAC;AAoBjC,YAAY,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,EACV,MAAM,oBAAoB,CAAC;AAiB5B,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,UAAU,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C;AAID,UAAU,iBAAkB,SAAQ,IAAI,CACtC,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,GAAG,cAAc,CAC5B;IACC,kDAAkD;IAClD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,qDAAqD;IACrD,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACtC,+CAA+C;IAC/C,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAEvB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,aAAa,CAAC;IAEpB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,aAAa,CAAC;IAEpB;;;OAGG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;IAEzD;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;IAE1B,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAC;IAEvD;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;IAEzC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAID,UAAU,mBAAoB,SAAQ,iBAAiB;IACrD,qBAAqB;IACrB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB,mFAAmF;IACnF,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAE7B,0CAA0C;IAC1C,YAAY,CAAC,EAAE,aAAa,CAAC;IAE7B,qCAAqC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,KAAK,IAAI,CAAC;CAC9D;AAED,UAAU,kBAAmB,SAAQ,iBAAiB;IACpD,qBAAqB;IACrB,IAAI,EAAE,OAAO,CAAC;IAEd,8DAA8D;IAC9D,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAEzB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AA4BrE;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EAAC,GAAG,EAAE,GAAG,KAAK,EAAC,EAAE,aAAa,+BAogBtD;yBApgBe,QAAQ"}
1
+ {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../src/Calendar/Calendar.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA6B5C,OAAO,EAEL,KAAK,cAAc,EASpB,MAAM,yBAAyB,CAAC;AAoBjC,YAAY,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,EACV,MAAM,oBAAoB,CAAC;AAiB5B,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,UAAU,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C;AAID,UAAU,iBAAkB,SAAQ,IAAI,CACtC,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,GAAG,cAAc,CAC5B;IACC,kDAAkD;IAClD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,qDAAqD;IACrD,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACtC,+CAA+C;IAC/C,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAEvB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,aAAa,CAAC;IAEpB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,aAAa,CAAC;IAEpB;;;OAGG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;IAEzD;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;IAE1B,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAC;IAEvD;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;IAEzC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAID,UAAU,mBAAoB,SAAQ,iBAAiB;IACrD,qBAAqB;IACrB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB,mFAAmF;IACnF,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAE7B,0CAA0C;IAC1C,YAAY,CAAC,EAAE,aAAa,CAAC;IAE7B,qCAAqC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,KAAK,IAAI,CAAC;CAC9D;AAED,UAAU,kBAAmB,SAAQ,iBAAiB;IACpD,qBAAqB;IACrB,IAAI,EAAE,OAAO,CAAC;IAEd,8DAA8D;IAC9D,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAEzB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AA4BrE;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EAAC,GAAG,EAAE,GAAG,KAAK,EAAC,EAAE,aAAa,+BAmgBtD;yBAngBe,QAAQ"}
@@ -264,9 +264,8 @@ export function Calendar({
264
264
  return;
265
265
  }
266
266
  const newPd = calendarAddMonths(calendar, baseMonth, delta).start;
267
- if (onFocusDateChange) {
268
- onFocusDateChange(plainDateToISO(newPd));
269
- } else {
267
+ onFocusDateChange?.(plainDateToISO(newPd));
268
+ if (!isControlledFocus) {
270
269
  setInternalFocusDate(newPd);
271
270
  }
272
271
  return;
@@ -331,12 +330,11 @@ export function Calendar({
331
330
  }
332
331
  const targetMonth = calendarMonthOf(calendar, resolved);
333
332
  const newPd = isBeforeShown ? targetMonth.start : calendarAddMonths(calendar, targetMonth, -(numberOfMonths - 1)).start;
334
- if (onFocusDateChange) {
335
- onFocusDateChange(plainDateToISO(newPd));
336
- } else {
333
+ onFocusDateChange?.(plainDateToISO(newPd));
334
+ if (!isControlledFocus) {
337
335
  setInternalFocusDate(newPd);
338
336
  }
339
- }, [baseMonth, calendar, canNavigateNext, canNavigatePrevious, isRootDateDisabled, lastVisibleMonth, maxDateForKeys, minDateForKeys, numberOfMonths, onFocusDateChange]);
337
+ }, [baseMonth, calendar, canNavigateNext, canNavigatePrevious, isControlledFocus, isRootDateDisabled, lastVisibleMonth, maxDateForKeys, minDateForKeys, numberOfMonths, onFocusDateChange]);
340
338
 
341
339
  // Escape key handler to cancel range selection
342
340
  const handleCalendarKeyDown = useCallback(e => {
@@ -1 +1 @@
1
- {"version":3,"file":"useCalendarNavigation.d.ts","sourceRoot":"","sources":["../../../src/Calendar/hooks/useCalendarNavigation.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,KAAK,SAAS,EAKf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,cAAc,EAKpB,MAAM,4BAA4B,CAAC;AAIpC;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,gDAAgD;IAChD,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,qDAAqD;IACrD,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAC;IACvD,kCAAkC;IAClC,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,iDAAiD;IACjD,SAAS,EAAE,SAAS,CAAC;IACrB,oDAAoD;IACpD,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B;;;OAGG;IACH,qBAAqB,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IACvD,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,aAAa,EAAE,CACb,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,aAAa,EAC3B,MAAM,CAAC,EAAE,MAAM,KACZ,IAAI,CAAC;IACV,4CAA4C;IAC5C,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,8BAA8B;IAC9B,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,2BAA2B,CAuG7B"}
1
+ {"version":3,"file":"useCalendarNavigation.d.ts","sourceRoot":"","sources":["../../../src/Calendar/hooks/useCalendarNavigation.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,KAAK,SAAS,EAKf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,cAAc,EAKpB,MAAM,4BAA4B,CAAC;AAIpC;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,gDAAgD;IAChD,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,qDAAqD;IACrD,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAC;IACvD,kCAAkC;IAClC,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,iDAAiD;IACjD,SAAS,EAAE,SAAS,CAAC;IACrB,oDAAoD;IACpD,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B;;;OAGG;IACH,qBAAqB,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IACvD,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,aAAa,EAAE,CACb,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,aAAa,EAC3B,MAAM,CAAC,EAAE,MAAM,KACZ,IAAI,CAAC;IACV,4CAA4C;IAC5C,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,8BAA8B;IAC9B,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,2BAA2B,CAsG7B"}
@@ -119,12 +119,11 @@ export function useCalendarNavigation(options) {
119
119
  const targetDate = plainDateAddDays(currentDate, delta * daysToMove);
120
120
  setPendingFocus(plainDateToISO(targetDate));
121
121
  }
122
- if (onFocusDateChange) {
123
- onFocusDateChange(newISO);
124
- } else {
122
+ onFocusDateChange?.(newISO);
123
+ if (!isControlledFocus) {
125
124
  setInternalFocusDate(newMonth);
126
125
  }
127
- }, [calendar, shownMonths, onFocusDateChange]);
126
+ }, [calendar, shownMonths, isControlledFocus, onFocusDateChange]);
128
127
 
129
128
  // Clear pending focus
130
129
  const clearPendingFocus = useCallback(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"ChatMessageList.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatMessageList.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAC,KAAK,SAAS,EAA4C,MAAM,OAAO,CAAC;AAGhF,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAWhD,MAAM,WAAW,oBAAqB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACrE,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC;;;OAGG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,WAAW,CAAC;IAElB;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAEzB;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA4FD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,OAAoB,EACpB,GAAG,EACH,KAAgB,EAChB,WAAmB,EACnB,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,EACH,GAAG,IAAI,EACR,EAAE,oBAAoB,+BAsGtB;yBApHe,eAAe"}
1
+ {"version":3,"file":"ChatMessageList.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatMessageList.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAC,KAAK,SAAS,EAA4C,MAAM,OAAO,CAAC;AAIhF,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAWhD,MAAM,WAAW,oBAAqB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACrE,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC;;;OAGG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,WAAW,CAAC;IAElB;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAEzB;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAoGD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,OAAoB,EACpB,GAAG,EACH,KAAgB,EAChB,WAAmB,EACnB,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,EACH,GAAG,IAAI,EACR,EAAE,oBAAoB,+BA6GtB;yBA3He,eAAe"}
@@ -26,7 +26,8 @@
26
26
  import { useEffect, useMemo, useRef, useTransition } from 'react';
27
27
  import * as stylex from '@stylexjs/stylex';
28
28
  import "../theme/tokens.stylex.js";
29
- import { spacingVars } from "../theme/tokens.stylex.js";
29
+ import { focusVars, spacingVars } from "../theme/tokens.stylex.js";
30
+ import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
30
31
  import { ChatListContext, useChatLayoutContext } from "./ChatContext.js";
31
32
  import { isRenderable, mergeProps } from "../utils/index.js";
32
33
  import { Spinner } from "../Spinner/index.js";
@@ -48,6 +49,10 @@ const styles = {
48
49
  kAzted: "x2lwn1j",
49
50
  $$css: true
50
51
  },
52
+ focusRingInset: {
53
+ kInvED: "x1nw7mhf",
54
+ $$css: true
55
+ },
51
56
  inner: {
52
57
  k1xSpc: "x78zum5",
53
58
  kXwgrk: "xdt5ytf",
@@ -218,7 +223,10 @@ export function ChatMessageList({
218
223
  "data-testid": testId,
219
224
  ...mergeProps(themeProps('chat-message-list', {
220
225
  density
221
- }), stylex.props(styles.root, xstyle), className, style),
226
+ }),
227
+ // A tab stop: the shared ring, which a theme restyles through the
228
+ // focus-outline tokens.
229
+ stylex.props(styles.root, focusOutlineStyles.focusVisible, styles.focusRingInset, xstyle), className, style),
222
230
  children: /*#__PURE__*/_jsxs("div", {
223
231
  ref: innerRef,
224
232
  ...stylex.props(styles.inner, densityGapStyle, gapOverrideStyle),
@@ -1 +1 @@
1
- {"version":3,"file":"useChatDictation.d.ts","sourceRoot":"","sources":["../../src/Chat/useChatDictation.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,qBAAqB,CAAC;AAOjE,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IACrD,2DAA2D;IAC3D,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9D,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,8CAA8C;IAC9C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAC,KAAK,IAAI,CAAC;IAC7D,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,sBAAsB;IACrC,sDAAsD;IACtD,WAAW,EAAE,OAAO,CAAC;IACrB,+CAA+C;IAC/C,WAAW,EAAE,OAAO,CAAC;IACrB,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gCAAgC;IAChC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mEAAmE;IACnE,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,qCAAqC;IACrC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAgMD,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CA6NxB"}
1
+ {"version":3,"file":"useChatDictation.d.ts","sourceRoot":"","sources":["../../src/Chat/useChatDictation.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,qBAAqB,CAAC;AAQjE,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IACrD,2DAA2D;IAC3D,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9D,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,8CAA8C;IAC9C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAC,KAAK,IAAI,CAAC;IAC7D,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,sBAAsB;IACrC,sDAAsD;IACtD,WAAW,EAAE,OAAO,CAAC;IACrB,+CAA+C;IAC/C,WAAW,EAAE,OAAO,CAAC;IACrB,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gCAAgC;IAChC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mEAAmE;IACnE,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,qCAAqC;IACrC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAgMD,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAkOxB"}
@@ -14,6 +14,7 @@
14
14
  */
15
15
  import { useState, useCallback, useEffect, useRef } from 'react';
16
16
  import { useSpeechRecognition } from "./useSpeechRecognition.js";
17
+ import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
17
18
 
18
19
  // =============================================================================
19
20
  // Types
@@ -197,7 +198,6 @@ export function useChatDictation(options = {}) {
197
198
  const [rawBands, setRawBands] = useState([0, 0, 0, 0, 0]);
198
199
  const volumeHistoryRef = useRef([]);
199
200
  const getAudioContextRef = useRef(getAudioContext);
200
- getAudioContextRef.current = getAudioContext;
201
201
  const analyserRef = useRef(null);
202
202
  const rafRef = useRef(0);
203
203
  const interimSpanRef = useRef(null);
@@ -207,12 +207,18 @@ export function useChatDictation(options = {}) {
207
207
  onStartProp,
208
208
  onEndProp
209
209
  });
210
- callbacksRef.current = {
211
- onTranscriptProp,
212
- onResultProp,
213
- onStartProp,
214
- onEndProp
215
- };
210
+ // Recognition events read the latest callbacks and audio context. Write
211
+ // them at commit: a render React discards, as a suspended transition does,
212
+ // must not leave its values behind.
213
+ useIsomorphicLayoutEffect(() => {
214
+ getAudioContextRef.current = getAudioContext;
215
+ callbacksRef.current = {
216
+ onTranscriptProp,
217
+ onResultProp,
218
+ onStartProp,
219
+ onEndProp
220
+ };
221
+ });
216
222
  const startVolumePolling = useCallback(() => {
217
223
  const poll = () => {
218
224
  const analyser = analyserRef.current;
@@ -1 +1 @@
1
- {"version":3,"file":"useChatNewMessages.d.ts","sourceRoot":"","sources":["../../src/Chat/useChatNewMessages.ts"],"names":[],"mappings":"AAgCA,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,kEAAkE;IAClE,cAAc,EAAE,OAAO,CAAC;IAExB,qCAAqC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB;;;OAGG;IACH,UAAU,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;CAC9C;AAMD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,GACT,EAAE,yBAAyB,GAAG,wBAAwB,CAkEtD"}
1
+ {"version":3,"file":"useChatNewMessages.d.ts","sourceRoot":"","sources":["../../src/Chat/useChatNewMessages.ts"],"names":[],"mappings":"AAsCA,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,kEAAkE;IAClE,cAAc,EAAE,OAAO,CAAC;IAExB,qCAAqC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB;;;OAGG;IACH,UAAU,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;CAC9C;AAMD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,GACT,EAAE,yBAAyB,GAAG,wBAAwB,CAoEtD"}