@astryxdesign/core 0.7.8 → 0.7.9-canary.07992bb

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 (403) 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 +5 -0
  5. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  6. package/dist/BottomSheet/BottomSheetPanel.js +40 -8
  7. package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
  8. package/dist/BottomSheet/useSheetGestures.js +61 -21
  9. package/dist/Calendar/Calendar.d.ts +14 -2
  10. package/dist/Calendar/Calendar.d.ts.map +1 -1
  11. package/dist/Calendar/Calendar.js +63 -74
  12. package/dist/Calendar/getInitialFocusDate.d.ts +4 -1
  13. package/dist/Calendar/getInitialFocusDate.d.ts.map +1 -1
  14. package/dist/Calendar/getInitialFocusDate.js +7 -5
  15. package/dist/Calendar/hooks/useCalendarDays.d.ts +19 -2
  16. package/dist/Calendar/hooks/useCalendarDays.d.ts.map +1 -1
  17. package/dist/Calendar/hooks/useCalendarDays.js +57 -64
  18. package/dist/Calendar/hooks/useCalendarNavigation.d.ts +28 -3
  19. package/dist/Calendar/hooks/useCalendarNavigation.d.ts.map +1 -1
  20. package/dist/Calendar/hooks/useCalendarNavigation.js +33 -22
  21. package/dist/Calendar/styles.d.ts +1 -1
  22. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  23. package/dist/CheckboxInput/CheckboxInput.js +54 -11
  24. package/dist/ClickableCard/ClickableCard.d.ts +1 -1
  25. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  26. package/dist/ClickableCard/ClickableCard.js +5 -1
  27. package/dist/DateInput/DateInput.d.ts.map +1 -1
  28. package/dist/DateInput/DateInput.js +4 -1
  29. package/dist/DateInput/PickerWheel.d.ts.map +1 -1
  30. package/dist/DateInput/PickerWheel.js +7 -1
  31. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  32. package/dist/DateRangeInput/DateRangeInput.js +5 -2
  33. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  34. package/dist/DateTimeInput/DateTimeInput.js +4 -1
  35. package/dist/Dialog/Dialog.d.ts +2 -1
  36. package/dist/Dialog/Dialog.d.ts.map +1 -1
  37. package/dist/Dialog/Dialog.js +12 -1
  38. package/dist/Drawer/useDrawerDialogPresence.d.ts +2 -1
  39. package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
  40. package/dist/Drawer/useDrawerDialogPresence.js +11 -2
  41. package/dist/DropdownMenu/DropdownMenu.d.ts +9 -1
  42. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  43. package/dist/DropdownMenu/DropdownMenu.js +9 -4
  44. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
  45. package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +3 -2
  46. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  47. package/dist/DropdownMenu/DropdownMenuItem.js +3 -2
  48. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
  49. package/dist/DropdownMenu/DropdownMenuRadioItem.js +3 -2
  50. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
  51. package/dist/DropdownMenu/DropdownMenuSubMenu.js +3 -2
  52. package/dist/Field/inputDisabledFocus.d.ts +4 -4
  53. package/dist/Field/inputStyles.stylex.d.ts +1 -1
  54. package/dist/FileInput/FileInput.d.ts.map +1 -1
  55. package/dist/FileInput/FileInput.js +16 -2
  56. package/dist/HoverCard/useHoverCard.d.ts +3 -1
  57. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  58. package/dist/Icon/Icon.d.ts +1 -1
  59. package/dist/InfoTip/InfoTip.d.ts +1 -0
  60. package/dist/InfoTip/InfoTip.d.ts.map +1 -1
  61. package/dist/InfoTip/InfoTip.js +1 -0
  62. package/dist/InputGroup/InputGroup.d.ts +4 -3
  63. package/dist/InputGroup/InputGroup.d.ts.map +1 -1
  64. package/dist/InputGroup/InputGroup.js +2 -2
  65. package/dist/InputGroup/groupStyles.d.ts +1 -1
  66. package/dist/InputGroup/groupStyles.d.ts.map +1 -1
  67. package/dist/InputGroup/groupStyles.js +1 -1
  68. package/dist/Item/Item.d.ts +2 -1
  69. package/dist/Item/Item.d.ts.map +1 -1
  70. package/dist/Item/Item.js +29 -6
  71. package/dist/Layer/holdEntranceInput.d.ts +24 -0
  72. package/dist/Layer/holdEntranceInput.d.ts.map +1 -0
  73. package/dist/Layer/holdEntranceInput.js +65 -0
  74. package/dist/Layer/inputHold.d.ts +49 -0
  75. package/dist/Layer/inputHold.d.ts.map +1 -0
  76. package/dist/Layer/inputHold.js +636 -0
  77. package/dist/Layer/preserveAnimations.d.ts +1 -5
  78. package/dist/Layer/preserveAnimations.d.ts.map +1 -1
  79. package/dist/Layer/preserveAnimations.js +12 -214
  80. package/dist/Layer/useLayer.d.ts +3 -1
  81. package/dist/Layer/useLayer.d.ts.map +1 -1
  82. package/dist/Layer/useLayer.js +64 -4
  83. package/dist/Layout/LayoutContent.d.ts +3 -1
  84. package/dist/Layout/LayoutContent.d.ts.map +1 -1
  85. package/dist/Layout/LayoutContent.js +12 -4
  86. package/dist/Layout/LayoutPanel.d.ts +4 -1
  87. package/dist/Layout/LayoutPanel.d.ts.map +1 -1
  88. package/dist/Layout/LayoutPanel.js +13 -4
  89. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  90. package/dist/Lightbox/Lightbox.js +4 -0
  91. package/dist/MetadataList/MetadataList.js +1 -1
  92. package/dist/MobileNav/MobileNav.d.ts +11 -1
  93. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  94. package/dist/MobileNav/MobileNav.js +39 -1
  95. package/dist/MoreMenu/MoreMenu.d.ts +5 -3
  96. package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
  97. package/dist/NumberInput/NumberInput.d.ts +4 -2
  98. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  99. package/dist/NumberInput/NumberInput.js +244 -11
  100. package/dist/Popover/usePopover.d.ts +1 -0
  101. package/dist/Popover/usePopover.d.ts.map +1 -1
  102. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  103. package/dist/PowerSearch/PowerSearch.js +12 -5
  104. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -1
  105. package/dist/PowerSearch/PowerSearchBottomSheet.js +4 -2
  106. package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
  107. package/dist/PowerSearch/PowerSearchToken.js +3 -1
  108. package/dist/PowerSearch/formatFilterValue.d.ts +9 -3
  109. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  110. package/dist/PowerSearch/formatFilterValue.js +14 -11
  111. package/dist/PowerSearch/formatTokenValue.d.ts +6 -2
  112. package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -1
  113. package/dist/PowerSearch/formatTokenValue.js +6 -3
  114. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  115. package/dist/RadioList/RadioListItem.js +22 -4
  116. package/dist/SelectableCard/SelectableCard.d.ts +1 -1
  117. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  118. package/dist/SelectableCard/SelectableCard.js +5 -1
  119. package/dist/Spinner/Spinner.d.ts.map +1 -1
  120. package/dist/Spinner/Spinner.js +14 -71
  121. package/dist/Spinner/index.d.ts +1 -1
  122. package/dist/Spinner/index.d.ts.map +1 -1
  123. package/dist/Spinner/spinnerRotor.d.ts +28 -0
  124. package/dist/Spinner/spinnerRotor.d.ts.map +1 -0
  125. package/dist/Spinner/spinnerRotor.js +98 -0
  126. package/dist/Stack/StackItem.d.ts +8 -4
  127. package/dist/Stack/StackItem.d.ts.map +1 -1
  128. package/dist/Stack/StackItem.js +17 -4
  129. package/dist/Switch/Switch.d.ts.map +1 -1
  130. package/dist/Switch/Switch.js +13 -10
  131. package/dist/Table/plugins/sortable/useTableSortable.js +1 -1
  132. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  133. package/dist/Timestamp/Timestamp.js +14 -8
  134. package/dist/Timestamp/formatInstant.d.ts +10 -1
  135. package/dist/Timestamp/formatInstant.d.ts.map +1 -1
  136. package/dist/Timestamp/formatInstant.js +13 -27
  137. package/dist/Timestamp/tooltipEntries.d.ts +5 -3
  138. package/dist/Timestamp/tooltipEntries.d.ts.map +1 -1
  139. package/dist/Timestamp/tooltipEntries.js +6 -4
  140. package/dist/Token/Token.d.ts.map +1 -1
  141. package/dist/Token/Token.js +9 -0
  142. package/dist/Token/TokenLink.d.ts +1 -1
  143. package/dist/Token/TokenLink.d.ts.map +1 -1
  144. package/dist/Token/TokenLink.js +4 -1
  145. package/dist/Tokenizer/Tokenizer.d.ts +14 -10
  146. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  147. package/dist/Tokenizer/Tokenizer.js +189 -89
  148. package/dist/Tooltip/useTooltip.d.ts +3 -1
  149. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  150. package/dist/Tooltip/useTooltip.js +162 -59
  151. package/dist/TreeList/TreeListItem.d.ts +2 -1
  152. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  153. package/dist/TreeList/TreeListItem.js +27 -3
  154. package/dist/astryx.css +45 -18
  155. package/dist/gestures/GestureHost.d.ts +2 -2
  156. package/dist/gestures/GestureHost.d.ts.map +1 -1
  157. package/dist/gestures/GestureHost.js +21 -6
  158. package/dist/gestures/PanGestureRecognizer.d.ts +11 -1
  159. package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -1
  160. package/dist/gestures/PanGestureRecognizer.js +15 -1
  161. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts +6 -1
  162. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -1
  163. package/dist/gestures/nativeScroll.d.ts +3 -6
  164. package/dist/gestures/nativeScroll.d.ts.map +1 -1
  165. package/dist/gestures/nativeScroll.js +7 -52
  166. package/dist/gestures/wheelSegmenter.d.ts +68 -1
  167. package/dist/gestures/wheelSegmenter.d.ts.map +1 -1
  168. package/dist/gestures/wheelSegmenter.js +199 -10
  169. package/dist/hooks/StackItemScrollRegion.d.ts +31 -0
  170. package/dist/hooks/StackItemScrollRegion.d.ts.map +1 -0
  171. package/dist/hooks/StackItemScrollRegion.js +40 -0
  172. package/dist/hooks/menuPressGesture.d.ts +133 -21
  173. package/dist/hooks/menuPressGesture.d.ts.map +1 -1
  174. package/dist/hooks/menuPressGesture.js +155 -30
  175. package/dist/hooks/menuPressValues.d.ts +16 -0
  176. package/dist/hooks/menuPressValues.d.ts.map +1 -0
  177. package/dist/hooks/menuPressValues.js +18 -0
  178. package/dist/hooks/useClickableContainer.d.ts +27 -5
  179. package/dist/hooks/useClickableContainer.d.ts.map +1 -1
  180. package/dist/hooks/useClickableContainer.js +41 -5
  181. package/dist/hooks/useFocusTrap.d.ts +10 -0
  182. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  183. package/dist/hooks/useFocusTrap.js +225 -132
  184. package/dist/hooks/useMenuPress.d.ts +34 -1
  185. package/dist/hooks/useMenuPress.d.ts.map +1 -1
  186. package/dist/hooks/useMenuPress.js +93 -5
  187. package/dist/hooks/usePressFeedback.d.ts +6 -6
  188. package/dist/hooks/usePressFeedback.js +6 -6
  189. package/dist/hooks/useScrollRegionProps.d.ts +35 -0
  190. package/dist/hooks/useScrollRegionProps.d.ts.map +1 -0
  191. package/dist/hooks/useScrollRegionProps.js +51 -0
  192. package/dist/i18n/InternationalizationContext.d.ts +6 -0
  193. package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
  194. package/dist/i18n/InternationalizationProvider.d.ts +21 -3
  195. package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
  196. package/dist/i18n/InternationalizationProvider.js +8 -3
  197. package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.d.ts +8 -0
  198. package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.d.ts.map +1 -0
  199. package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.js +12 -0
  200. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  201. package/dist/i18n/generated-locales/en.generated.js +1 -0
  202. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  203. package/dist/i18n/generated-locales/pseudo.generated.js +1 -0
  204. package/dist/i18n/index.d.ts +2 -0
  205. package/dist/i18n/index.d.ts.map +1 -1
  206. package/dist/i18n/index.js +1 -0
  207. package/dist/i18n/useCalendarSystem.d.ts +19 -0
  208. package/dist/i18n/useCalendarSystem.d.ts.map +1 -0
  209. package/dist/i18n/useCalendarSystem.js +61 -0
  210. package/dist/internal/spinner-rotor.d.ts +16 -0
  211. package/dist/internal/spinner-rotor.d.ts.map +1 -0
  212. package/dist/internal/spinner-rotor.js +16 -0
  213. package/dist/internal/touch.d.ts +14 -1
  214. package/dist/internal/touch.d.ts.map +1 -1
  215. package/dist/internal/touch.js +20 -2
  216. package/dist/motion/carryAnimations.d.ts +58 -0
  217. package/dist/motion/carryAnimations.d.ts.map +1 -0
  218. package/dist/motion/carryAnimations.js +305 -0
  219. package/dist/motion/transientCopy.d.ts +4 -2
  220. package/dist/motion/transientCopy.d.ts.map +1 -1
  221. package/dist/motion/transientCopy.js +34 -5
  222. package/dist/motion/uikit/gestures.d.ts +41 -0
  223. package/dist/motion/uikit/gestures.d.ts.map +1 -1
  224. package/dist/motion/uikit/gestures.js +25 -0
  225. package/dist/motion/uikit/index.d.ts +1 -1
  226. package/dist/motion/uikit/index.d.ts.map +1 -1
  227. package/dist/motion/uikit/index.js +1 -1
  228. package/dist/motion/uikit/timing.d.ts +14 -10
  229. package/dist/motion/uikit/timing.d.ts.map +1 -1
  230. package/dist/motion/uikit/timing.js +7 -5
  231. package/dist/privateAttributes/menuPressLit.stylex.d.ts +52 -0
  232. package/dist/privateAttributes/menuPressLit.stylex.d.ts.map +1 -0
  233. package/dist/privateAttributes/menuPressLit.stylex.js +99 -0
  234. package/dist/privateAttributes/press.stylex.d.ts +139 -0
  235. package/dist/privateAttributes/press.stylex.d.ts.map +1 -0
  236. package/dist/privateAttributes/press.stylex.js +97 -0
  237. package/dist/theme/themeMotion.d.ts +3 -2
  238. package/dist/theme/themeMotion.d.ts.map +1 -1
  239. package/dist/theme/themeMotion.js +3 -2
  240. package/dist/theme/tokens.stylex.d.ts +2 -2
  241. package/dist/theme/tokens.stylex.js +1 -1
  242. package/dist/utils/calendarSystem.d.ts +114 -0
  243. package/dist/utils/calendarSystem.d.ts.map +1 -0
  244. package/dist/utils/calendarSystem.js +386 -0
  245. package/dist/utils/flatTree.d.ts +6 -3
  246. package/dist/utils/flatTree.d.ts.map +1 -1
  247. package/dist/utils/flatTree.js +13 -3
  248. package/dist/utils/hitArea.d.ts.map +1 -1
  249. package/dist/utils/hitArea.js +82 -5
  250. package/dist/utils/inputStream.d.ts +14 -1
  251. package/dist/utils/inputStream.d.ts.map +1 -1
  252. package/dist/utils/inputStream.js +40 -9
  253. package/dist/utils/interactionOverlay.stylex.d.ts +5 -9
  254. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  255. package/dist/utils/interactionOverlay.stylex.js +29 -31
  256. package/dist/utils/plainDate.d.ts +23 -7
  257. package/dist/utils/plainDate.d.ts.map +1 -1
  258. package/dist/utils/plainDate.js +57 -18
  259. package/dist/utils/pressFeedback.d.ts +10 -2
  260. package/dist/utils/pressFeedback.d.ts.map +1 -1
  261. package/dist/utils/pressFeedback.js +40 -15
  262. package/dist/utils/pressGesture.d.ts +12 -6
  263. package/dist/utils/pressGesture.d.ts.map +1 -1
  264. package/dist/utils/pressGesture.js +26 -8
  265. package/dist/utils/scrollView.d.ts +25 -0
  266. package/dist/utils/scrollView.d.ts.map +1 -0
  267. package/dist/utils/scrollView.js +108 -0
  268. package/dist/utils/selectionLock.d.ts.map +1 -1
  269. package/dist/utils/selectionLock.js +1 -10
  270. package/dist/utils/touchHitArea.stylex.d.ts +35 -0
  271. package/dist/utils/touchHitArea.stylex.d.ts.map +1 -0
  272. package/dist/utils/touchHitArea.stylex.js +32 -0
  273. package/dist/utils/triggerFocus.d.ts +5 -0
  274. package/dist/utils/triggerFocus.d.ts.map +1 -1
  275. package/dist/utils/triggerFocus.js +9 -2
  276. package/locales/en.json +4 -0
  277. package/locales/pseudo.json +3 -0
  278. package/package.json +10 -4
  279. package/src/AppShell/observeMainOverflow.ts +9 -6
  280. package/src/BottomSheet/BottomSheet.tsx +5 -0
  281. package/src/BottomSheet/BottomSheetPanel.tsx +64 -7
  282. package/src/BottomSheet/useSheetGestures.ts +83 -20
  283. package/src/Calendar/Calendar.doc.mjs +76 -6
  284. package/src/Calendar/Calendar.tsx +123 -104
  285. package/src/Calendar/getInitialFocusDate.ts +22 -8
  286. package/src/Calendar/hooks/useCalendarDays.ts +89 -63
  287. package/src/Calendar/hooks/useCalendarNavigation.ts +68 -26
  288. package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -2
  289. package/src/CheckboxInput/CheckboxInput.tsx +71 -9
  290. package/src/ClickableCard/ClickableCard.tsx +8 -1
  291. package/src/DateInput/DateInput.tsx +2 -0
  292. package/src/DateInput/PickerWheel.tsx +7 -2
  293. package/src/DateRangeInput/DateRangeInput.tsx +3 -1
  294. package/src/DateTimeInput/DateTimeInput.tsx +2 -0
  295. package/src/Dialog/Dialog.doc.mjs +1 -1
  296. package/src/Dialog/Dialog.tsx +12 -1
  297. package/src/Drawer/Drawer.doc.mjs +1 -1
  298. package/src/Drawer/useDrawerDialogPresence.ts +9 -2
  299. package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -2
  300. package/src/DropdownMenu/DropdownMenu.tsx +29 -5
  301. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +5 -1
  302. package/src/DropdownMenu/DropdownMenuItem.tsx +8 -4
  303. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +5 -1
  304. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +5 -1
  305. package/src/FileInput/FileInput.tsx +16 -2
  306. package/src/HoverCard/useHoverCard.tsx +3 -1
  307. package/src/InfoTip/InfoTip.doc.mjs +26 -2
  308. package/src/InfoTip/InfoTip.tsx +1 -0
  309. package/src/InputGroup/InputGroup.doc.mjs +4 -3
  310. package/src/InputGroup/InputGroup.tsx +4 -3
  311. package/src/InputGroup/groupStyles.ts +3 -1
  312. package/src/Item/Item.tsx +51 -9
  313. package/src/Layer/holdEntranceInput.ts +84 -0
  314. package/src/Layer/inputHold.ts +734 -0
  315. package/src/Layer/preserveAnimations.ts +12 -275
  316. package/src/Layer/useLayer.tsx +77 -4
  317. package/src/Layout/LayoutContent.doc.mjs +6 -3
  318. package/src/Layout/LayoutContent.tsx +10 -4
  319. package/src/Layout/LayoutPanel.doc.mjs +6 -3
  320. package/src/Layout/LayoutPanel.tsx +11 -4
  321. package/src/Lightbox/Lightbox.tsx +4 -0
  322. package/src/MetadataList/MetadataList.tsx +1 -1
  323. package/src/MobileNav/MobileNav.doc.mjs +3 -3
  324. package/src/MobileNav/MobileNav.tsx +39 -1
  325. package/src/MoreMenu/MoreMenu.doc.mjs +2 -4
  326. package/src/MoreMenu/MoreMenu.tsx +5 -3
  327. package/src/NumberInput/NumberInput.doc.mjs +1 -1
  328. package/src/NumberInput/NumberInput.tsx +259 -11
  329. package/src/Popover/usePopover.tsx +1 -0
  330. package/src/PowerSearch/PowerSearch.doc.mjs +3 -3
  331. package/src/PowerSearch/PowerSearch.tsx +20 -3
  332. package/src/PowerSearch/PowerSearchBottomSheet.tsx +4 -1
  333. package/src/PowerSearch/PowerSearchToken.tsx +3 -0
  334. package/src/PowerSearch/formatFilterValue.ts +21 -11
  335. package/src/PowerSearch/formatTokenValue.ts +7 -1
  336. package/src/RadioList/RadioListItem.doc.mjs +3 -2
  337. package/src/RadioList/RadioListItem.tsx +25 -7
  338. package/src/SelectableCard/SelectableCard.tsx +8 -1
  339. package/src/Spinner/Spinner.tsx +7 -89
  340. package/src/Spinner/index.ts +1 -5
  341. package/src/Spinner/spinnerRotor.ts +113 -0
  342. package/src/Stack/Stack.doc.mjs +1 -1
  343. package/src/Stack/StackItem.tsx +27 -13
  344. package/src/Switch/Switch.tsx +7 -6
  345. package/src/Table/plugins/sortable/useTableSortable.tsx +1 -1
  346. package/src/Timestamp/Timestamp.doc.mjs +3 -3
  347. package/src/Timestamp/Timestamp.tsx +13 -8
  348. package/src/Timestamp/formatInstant.ts +49 -28
  349. package/src/Timestamp/tooltipEntries.ts +7 -3
  350. package/src/Token/Token.tsx +18 -1
  351. package/src/Token/TokenLink.tsx +7 -1
  352. package/src/Tokenizer/Tokenizer.doc.mjs +3 -3
  353. package/src/Tokenizer/Tokenizer.tsx +252 -115
  354. package/src/Tooltip/useTooltip.tsx +178 -80
  355. package/src/TreeList/TreeListItem.tsx +36 -2
  356. package/src/gestures/GestureHost.ts +21 -5
  357. package/src/gestures/PanGestureRecognizer.ts +19 -2
  358. package/src/gestures/README.md +14 -5
  359. package/src/gestures/ScreenEdgePanGestureRecognizer.ts +6 -1
  360. package/src/gestures/nativeScroll.ts +12 -68
  361. package/src/gestures/wheelSegmenter.ts +243 -10
  362. package/src/hooks/StackItemScrollRegion.tsx +57 -0
  363. package/src/hooks/menuPressGesture.ts +244 -38
  364. package/src/hooks/menuPressValues.ts +18 -0
  365. package/src/hooks/useClickableContainer.doc.mjs +8 -2
  366. package/src/hooks/useClickableContainer.ts +72 -6
  367. package/src/hooks/useFocusTrap.ts +268 -151
  368. package/src/hooks/useMenuPress.ts +118 -11
  369. package/src/hooks/usePressFeedback.doc.mjs +3 -3
  370. package/src/hooks/usePressFeedback.ts +6 -6
  371. package/src/hooks/useScrollRegionProps.ts +76 -0
  372. package/src/i18n/InternationalizationContext.ts +6 -0
  373. package/src/i18n/InternationalizationProvider.doc.mjs +29 -1
  374. package/src/i18n/InternationalizationProvider.tsx +33 -3
  375. package/src/i18n/generated-english/hooks/useScrollRegionProps.generated.ts +13 -0
  376. package/src/i18n/generated-locales/en.generated.ts +1 -0
  377. package/src/i18n/generated-locales/pseudo.generated.ts +1 -0
  378. package/src/i18n/index.ts +2 -0
  379. package/src/i18n/useCalendarSystem.ts +95 -0
  380. package/src/internal/spinner-rotor.ts +20 -0
  381. package/src/internal/touch.ts +34 -1
  382. package/src/motion/MEASUREMENTS.md +11 -0
  383. package/src/motion/carryAnimations.ts +389 -0
  384. package/src/motion/transientCopy.ts +45 -5
  385. package/src/motion/uikit/gestures.ts +22 -0
  386. package/src/motion/uikit/index.ts +1 -0
  387. package/src/motion/uikit/timing.ts +7 -5
  388. package/src/privateAttributes/menuPressLit.stylex.ts +104 -0
  389. package/src/privateAttributes/press.stylex.ts +243 -0
  390. package/src/theme/themeMotion.ts +3 -2
  391. package/src/theme/tokens.stylex.ts +1 -1
  392. package/src/utils/calendarSystem.ts +548 -0
  393. package/src/utils/flatTree.ts +15 -3
  394. package/src/utils/hitArea.ts +107 -5
  395. package/src/utils/inputStream.ts +47 -10
  396. package/src/utils/interactionOverlay.stylex.ts +19 -22
  397. package/src/utils/plainDate.ts +84 -19
  398. package/src/utils/pressFeedback.ts +46 -14
  399. package/src/utils/pressGesture.ts +35 -9
  400. package/src/utils/scrollView.ts +135 -0
  401. package/src/utils/selectionLock.ts +5 -10
  402. package/src/utils/touchHitArea.stylex.ts +41 -0
  403. package/src/utils/triggerFocus.ts +17 -4
@@ -13,7 +13,7 @@
13
13
  * - /packages/core/src/Tooltip/index.ts
14
14
  */
15
15
  import { useCallback, useEffect, useRef, useState } from 'react';
16
- import { createTriggerFocusGate } from "../utils/triggerFocus.js";
16
+ import { createTriggerFocusGate, isFocusOnTrigger } from "../utils/triggerFocus.js";
17
17
  import * as stylex from '@stylexjs/stylex';
18
18
  import { useLayerInternal } from "../Layer/useLayer.js";
19
19
  import { useTouchTriggerInternal } from "../Layer/useTouchTrigger.js";
@@ -116,6 +116,17 @@ export function useTooltip(options = {}) {
116
116
  const showTimeoutRef = useRef(null);
117
117
  const hideTimeoutRef = useRef(null);
118
118
  const triggerRef = useRef(null);
119
+ // Whether the tooltip is enabled now, for a show that runs after a render
120
+ // (a pending hover show) and for the trigger ref callback.
121
+ const isEnabledRef = useRef(isEnabled);
122
+ isEnabledRef.current = isEnabled;
123
+ // Counts the renders in which the tooltip is disabled. A pending show
124
+ // records it, so a show scheduled before a disable is dropped even when
125
+ // the tooltip is enabled again before the timer fires.
126
+ const disabledRendersRef = useRef(0);
127
+ if (!isEnabled) {
128
+ disabledRendersRef.current += 1;
129
+ }
119
130
 
120
131
  // Clear all timeouts
121
132
  const clearTimeouts = useCallback(() => {
@@ -260,22 +271,16 @@ export function useTooltip(options = {}) {
260
271
  return;
261
272
  }
262
273
  clearTimeouts();
274
+ const disabledRenders = disabledRendersRef.current;
263
275
  showTimeoutRef.current = setTimeout(() => {
264
- showLayer();
276
+ // A show runs only if the tooltip stayed enabled since it was
277
+ // scheduled: nothing would close a tooltip that opens after a disable.
278
+ if (disabledRendersRef.current === disabledRenders) {
279
+ showLayer();
280
+ }
265
281
  }, delay);
266
282
  }, [isEnabled, isOpen, clearTimeouts, showLayer, delay]);
267
283
 
268
- // A show scheduled while the triggers were enabled must not outlive them:
269
- // disabling also detaches the leave listener that would have cancelled it,
270
- // so the timer would open a tooltip that nothing ever closes. Only the
271
- // pending show is dropped; a pending hide still runs.
272
- useEffect(() => {
273
- if (!isEnabled && showTimeoutRef.current) {
274
- clearTimeout(showTimeoutRef.current);
275
- showTimeoutRef.current = null;
276
- }
277
- }, [isEnabled]);
278
-
279
284
  // Schedule hide with delay (suppressed when isOpen is true).
280
285
  // A small hover bridge (when hideDelay is 0) lets the pointer travel from the
281
286
  // trigger onto the tooltip surface without the tooltip vanishing — required
@@ -331,27 +336,26 @@ export function useTooltip(options = {}) {
331
336
  // Under `auto`, whether focus counts is decided when it arrives, and a
332
337
  // focus that counted still hides on blur (utils/triggerFocus.ts).
333
338
  const [focusGate] = useState(createTriggerFocusGate);
339
+
340
+ // Whether focus on `target` opens the tooltip. With a `trigger`, its
341
+ // `focusTrigger` rule applies too. Only `:focus-visible` focus opens it, and
342
+ // a tap never does: a tapped `<input>` also matches `:focus-visible`.
343
+ const opensOnFocus = useCallback((target, trigger) => {
344
+ if (trigger != null && !isFocusOnTrigger(target, trigger, focusTrigger)) {
345
+ return false;
346
+ }
347
+ return !isTouchInteraction() && target.matches(':focus-visible');
348
+ }, [focusTrigger, isTouchInteraction]);
334
349
  const handleFocusIn = useCallback(e => {
335
350
  if (!focusGate.focusIn(e, focusTrigger) || !isEnabled) {
336
351
  return;
337
352
  }
338
- // A tap focuses the trigger it activates, and `:focus-visible` does not
339
- // filter that out on every element: a tapped `<input>` or contenteditable
340
- // matches it. Those are exactly the action triggers `auto` just decided
341
- // to keep shut, so without this the focus reopens what the tap
342
- // suppressed, over the field the user is trying to type into.
343
- if (isTouchInteraction()) {
344
- return;
345
- }
346
- // Only show tooltip for keyboard focus (:focus-visible),
347
- // not programmatic focus (e.g. dialog auto-focus, touch tap)
348
- const target = e.target;
349
- if (!target.matches(':focus-visible')) {
353
+ if (!opensOnFocus(e.target, null)) {
350
354
  return;
351
355
  }
352
356
  clearTimeouts();
353
357
  showLayer();
354
- }, [focusGate, focusTrigger, isEnabled, isTouchInteraction, clearTimeouts, showLayer]);
358
+ }, [focusGate, focusTrigger, isEnabled, opensOnFocus, clearTimeouts, showLayer]);
355
359
 
356
360
  // A held tooltip's focus-leave close is the hold's own: it listens on the
357
361
  // trigger whatever `focusTrigger` is. This schedules the unheld hide, which
@@ -423,46 +427,145 @@ export function useTooltip(options = {}) {
423
427
  hideLayer();
424
428
  }, [handleTouchPointerDown, trackTriggerPress, isOpen, clearTimeouts, hideLayer]);
425
429
 
426
- // Interaction ref that handles event listeners only
430
+ // The trigger's listeners call the latest handlers through this ref, so the
431
+ // trigger ref callback keeps one identity.
432
+ const handlersRef = useRef({
433
+ handleMouseEnter,
434
+ handleMouseLeave,
435
+ handleFocusIn,
436
+ handleFocusOut,
437
+ handleHeldFocusOut,
438
+ handlePointerEnter,
439
+ handlePointerDown,
440
+ focusTrigger,
441
+ isOpen,
442
+ dropHold,
443
+ hideNow,
444
+ showNow,
445
+ opensOnFocus
446
+ });
447
+ handlersRef.current = {
448
+ handleMouseEnter,
449
+ handleMouseLeave,
450
+ handleFocusIn,
451
+ handleFocusOut,
452
+ handleHeldFocusOut,
453
+ handlePointerEnter,
454
+ handlePointerDown,
455
+ focusTrigger,
456
+ isOpen,
457
+ dropHold,
458
+ hideNow,
459
+ showNow,
460
+ opensOnFocus
461
+ };
462
+
463
+ // Removes the attached trigger's listeners (the trigger ref callback's
464
+ // cleanup).
465
+ const detachTriggerRef = useRef(null);
466
+ // Set when the trigger detached while the tooltip was disabled: the
467
+ // caller removed the wiring (DropdownMenu's Button while its menu is
468
+ // open), so the next enabled attach reads the focus that arrived meanwhile.
469
+ const wasSuppressedRef = useRef(false);
470
+
471
+ // The trigger's ref callback owns every trigger listener, and reads the
472
+ // trigger's state when it attaches and detaches.
427
473
  const interactionRef = useCallback(el => {
428
- // Cleanup previous element
429
- if (triggerRef.current) {
430
- triggerRef.current.removeEventListener('mouseenter', handleMouseEnter);
431
- triggerRef.current.removeEventListener('mouseleave', handleMouseLeave);
432
- triggerRef.current.removeEventListener('focusin', handleFocusIn);
433
- triggerRef.current.removeEventListener('focusout', handleFocusOut);
434
- triggerRef.current.removeEventListener('focusout', handleHeldFocusOut);
435
- stopPressTrackingRef.current?.();
436
- triggerRef.current.removeEventListener('pointerenter', handlePointerEnter);
437
- triggerRef.current.removeEventListener('pointerdown', handlePointerDown);
438
- }
439
- if (el) {
440
- // Attach hover listeners. `pointerenter` runs before the synthesized
441
- // `mouseenter` a tap produces, which is what lets the hover path know
442
- // it is looking at a finger.
443
- el.addEventListener('pointerenter', handlePointerEnter);
444
- el.addEventListener('mouseenter', handleMouseEnter);
445
- el.addEventListener('mouseleave', handleMouseLeave);
446
- // Press-to-dismiss on a mouse; tap-to-open on a touch pointer.
447
- el.addEventListener('pointerdown', handlePointerDown);
448
-
449
- // Focus listeners unless focus never opens the tooltip; `auto` decides
450
- // per event (utils/triggerFocus.ts).
451
- if (focusTrigger !== 'never') {
452
- el.addEventListener('focusin', handleFocusIn);
453
- el.addEventListener('focusout', handleFocusOut);
454
- }
474
+ // A caller that reports `null` by hand detaches the trigger, as the
475
+ // returned cleanup does.
476
+ if (el == null) {
477
+ detachTriggerRef.current?.();
478
+ return;
455
479
  }
456
-
457
- // Its own focus-leave listener: `focusTrigger="never"` attaches none.
458
- el?.addEventListener('focusout', handleHeldFocusOut);
480
+ if (el === triggerRef.current) {
481
+ return;
482
+ }
483
+ detachTriggerRef.current?.();
484
+ const latest = () => handlersRef.current;
485
+ // `pointerenter` runs before the synthesized `mouseenter` a tap produces,
486
+ // which is what lets the hover path know it is looking at a finger.
487
+ const onPointerEnter = e => latest().handlePointerEnter(e);
488
+ const onMouseEnter = () => latest().handleMouseEnter();
489
+ const onMouseLeave = e => latest().handleMouseLeave(e);
490
+ // Press-to-dismiss on a mouse; tap-to-open on a touch pointer.
491
+ const onPointerDown = e => latest().handlePointerDown(e);
492
+ // Focus counts unless focus never opens the tooltip; `auto` decides per
493
+ // event (isFocusForTrigger).
494
+ const onFocusIn = e => {
495
+ if (latest().focusTrigger !== 'never') {
496
+ latest().handleFocusIn(e);
497
+ }
498
+ };
499
+ const onFocusOut = e => {
500
+ if (latest().focusTrigger !== 'never') {
501
+ latest().handleFocusOut(e);
502
+ }
503
+ };
504
+ // A held tooltip's own focus-leave close, whatever `focusTrigger` is.
505
+ const onHeldFocusOut = e => latest().handleHeldFocusOut(e);
506
+ el.addEventListener('pointerenter', onPointerEnter);
507
+ el.addEventListener('mouseenter', onMouseEnter);
508
+ el.addEventListener('mouseleave', onMouseLeave);
509
+ el.addEventListener('pointerdown', onPointerDown);
510
+ el.addEventListener('focusin', onFocusIn);
511
+ el.addEventListener('focusout', onFocusOut);
512
+ el.addEventListener('focusout', onHeldFocusOut);
459
513
  triggerRef.current = el;
460
- }, [handleHeldFocusOut, focusTrigger, handleMouseEnter, handleMouseLeave, handleFocusIn, handleFocusOut, handlePointerEnter, handlePointerDown]);
514
+
515
+ // A trigger that attaches again after its wiring was removed
516
+ // (DropdownMenu's Button as its menu closes) missed the focus that
517
+ // arrived meanwhile. Show for it only if it would open the tooltip:
518
+ // returned keyboard focus does, focus returned after a pointer pick does
519
+ // not. Any other attach leaves the tooltip as it is, so a tooltip
520
+ // dismissed with Escape stays closed.
521
+ const focused = el.ownerDocument.activeElement;
522
+ const wasSuppressed = wasSuppressedRef.current;
523
+ if (isEnabledRef.current) {
524
+ wasSuppressedRef.current = false;
525
+ }
526
+ if (wasSuppressed && isEnabledRef.current && latest().isOpen === undefined && latest().focusTrigger !== 'never' && focused instanceof HTMLElement && el.contains(focused) && latest().opensOnFocus(focused, el)) {
527
+ latest().showNow();
528
+ }
529
+ const detach = () => {
530
+ if (detachTriggerRef.current === detach) {
531
+ detachTriggerRef.current = null;
532
+ }
533
+ el.removeEventListener('pointerenter', onPointerEnter);
534
+ el.removeEventListener('mouseenter', onMouseEnter);
535
+ el.removeEventListener('mouseleave', onMouseLeave);
536
+ el.removeEventListener('pointerdown', onPointerDown);
537
+ el.removeEventListener('focusin', onFocusIn);
538
+ el.removeEventListener('focusout', onFocusOut);
539
+ el.removeEventListener('focusout', onHeldFocusOut);
540
+ stopPressTrackingRef.current?.();
541
+ if (triggerRef.current === el) {
542
+ triggerRef.current = null;
543
+ }
544
+ // A caller removes the wiring as it disables the tooltip. Close an
545
+ // uncontrolled tooltip then, or the next attach shows a stale tooltip.
546
+ // A detach while enabled, such as a merged ref that changes identity
547
+ // on a re-render, keeps a hovered or held tooltip open.
548
+ if (!isEnabledRef.current && latest().isOpen === undefined) {
549
+ wasSuppressedRef.current = true;
550
+ latest().dropHold();
551
+ latest().hideNow();
552
+ }
553
+ };
554
+ detachTriggerRef.current = detach;
555
+ return detach;
556
+ }, []);
461
557
 
462
558
  // Combined ref - shorthand for calling both positionRef and interactionRef
463
559
  const ref = useCallback(el => {
464
560
  layerRef(el);
465
- interactionRef(el);
561
+ const detachInteraction = interactionRef(el);
562
+ if (el == null) {
563
+ return;
564
+ }
565
+ return () => {
566
+ detachInteraction?.();
567
+ layerRef(null);
568
+ };
466
569
  }, [layerRef, interactionRef]);
467
570
 
468
571
  // Cleanup on unmount
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @file TreeListItem.tsx
3
- * @input Uses React, StyleX, theme tokens, TreeListBranches
3
+ * @input Uses React, StyleX, theme tokens, TreeListBranches, the shared press
4
+ * overlays and the compositor press layer
4
5
  * @output Exports TreeListItem component (internal, not publicly exported)
5
6
  * @position Internal implementation; consumed by TreeList.tsx
6
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"TreeListItem.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeListItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,EAAyB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAE7D,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAqB3C,OAAO,KAAK,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAgStE,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;;;;OAQG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB;;;;OAIG;IACH,OAAO,EAAE,eAAe,CAAC;IACzB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AASD,wBAAgB,YAAY,CAAC,EAC3B,EAAE,EACF,KAAK,EACL,WAAW,EACX,YAAY,EACZ,UAAU,EACV,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EACP,IAAI,EACJ,MAAM,EACN,UAAkB,EAClB,UAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,MAAM,EACN,eAAe,EACf,UAAU,EACV,SAAiB,EACjB,QAAQ,EACR,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,OAAO,EACP,UAAU,GACX,EAAE,yBAAyB,+BAwU3B;yBApWe,YAAY"}
1
+ {"version":3,"file":"TreeListItem.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeListItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAyB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAE7D,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAuB3C,OAAO,KAAK,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAgStE,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;;;;OAQG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB;;;;OAIG;IACH,OAAO,EAAE,eAAe,CAAC;IACzB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AASD,wBAAgB,YAAY,CAAC,EAC3B,EAAE,EACF,KAAK,EACL,WAAW,EACX,YAAY,EACZ,UAAU,EACV,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EACP,IAAI,EACJ,MAAM,EACN,UAAkB,EAClB,UAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,MAAM,EACN,eAAe,EACf,UAAU,EACV,SAAiB,EACjB,QAAQ,EACR,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,OAAO,EACP,UAAU,GACX,EAAE,yBAAyB,+BAuW3B;yBAnYe,YAAY"}
@@ -4,7 +4,8 @@
4
4
 
5
5
  /**
6
6
  * @file TreeListItem.tsx
7
- * @input Uses React, StyleX, theme tokens, TreeListBranches
7
+ * @input Uses React, StyleX, theme tokens, TreeListBranches, the shared press
8
+ * overlays and the compositor press layer
8
9
  * @output Exports TreeListItem component (internal, not publicly exported)
9
10
  * @position Internal implementation; consumed by TreeList.tsx
10
11
  *
@@ -20,8 +21,9 @@ import "../theme/tokens.stylex.js";
20
21
  import { colorVars, radiusVars, spacingVars, durationVars, easeVars, typeScaleVars } from "../theme/tokens.stylex.js";
21
22
  import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
22
23
  import { interactionOverlayStyles } from "../utils/interactionOverlay.stylex.js";
24
+ import { rowPressLayerStyles } from "../privateAttributes/press.stylex.js";
23
25
  import { usePressFeedback } from "../hooks/usePressFeedback.js";
24
- import { hasInteractiveAncestor, useClickableContainer } from "../hooks/useClickableContainer.js";
26
+ import { cancelNestedTouchPress, hasInteractiveAncestor, useClickableContainer } from "../hooks/useClickableContainer.js";
25
27
  import { Icon } from "../Icon/index.js";
26
28
  import { mergeProps } from "../utils/mergeProps.js";
27
29
  import { useFocusAcrossSwap } from "../utils/useFocusAcrossSwap.js";
@@ -246,6 +248,22 @@ export function TreeListItem({
246
248
  interactiveRef: linkRef,
247
249
  disabled: isDisabled || !forwardsToLink
248
250
  });
251
+
252
+ // A finger press that starts on a control inside the row does not activate
253
+ // the row, so the row shows no press for it. The row's own action, its link
254
+ // or invisible button, activates it. The Chevron does too when the row's
255
+ // surface toggles, since it runs that same toggle.
256
+ const actionButtonRef = useRef(null);
257
+ const chevronRef = useRef(null);
258
+ const surfaceToggles = onClick == null && handleClick != null;
259
+ const pressOnRow = event => {
260
+ if (isDisabled) {
261
+ return;
262
+ }
263
+ const chevron = chevronRef.current;
264
+ const ownAction = surfaceToggles && chevron != null && event.target instanceof Node && chevron.contains(event.target) ? chevron : linkRef.current ?? actionButtonRef.current;
265
+ cancelNestedTouchPress(event, event.currentTarget, ownAction);
266
+ };
249
267
  const {
250
268
  onMouseUp: openLinkOnMiddleClick
251
269
  } = useClickableContainer({
@@ -318,6 +336,7 @@ export function TreeListItem({
318
336
  // focusable element to receive Enter/Space). The row's handleClick ignores
319
337
  // clicks originating inside a <button>, so this never double-toggles.
320
338
  _jsx("button", {
339
+ ref: chevronRef,
321
340
  type: "button",
322
341
  "aria-expanded": isExpanded,
323
342
  "aria-label": t('@astryx.treeList.toggleChildren')
@@ -395,6 +414,7 @@ export function TreeListItem({
395
414
  },
396
415
  children: labelAndDescription
397
416
  }) : onClick != null ? /*#__PURE__*/_jsx("button", {
417
+ ref: actionButtonRef,
398
418
  type: "button",
399
419
  onClick: onClick,
400
420
  "aria-disabled": isDisabled || undefined,
@@ -463,7 +483,10 @@ export function TreeListItem({
463
483
  density,
464
484
  selected: isSelected ? 'selected' : null,
465
485
  disabled: isDisabled ? 'disabled' : null
466
- }), isInteractive || hasChildren && onClick == null ? focusOutlineProps.focusWithinOrPublished(styles.contentWrapper, styles.focusLift, densityStyles[density], styles.interactive, interactionOverlayStyles.backgroundImage, isDisabled && styles.disabled, isSelected && styles.selected, xstyle) : stylex.props(styles.contentWrapper, densityStyles[density], isDisabled && styles.disabled, isSelected && styles.selected, xstyle),
486
+ }), isInteractive || hasChildren && onClick == null ? focusOutlineProps.focusWithinOrPublished(styles.contentWrapper, styles.focusLift, densityStyles[density], styles.interactive, interactionOverlayStyles.backgroundImage,
487
+ // The touch press on a compositor layer (after the
488
+ // overlay, whose own touch paint it turns off).
489
+ rowPressLayerStyles.cell, rowPressLayerStyles.cellOnImage, isDisabled && styles.disabled, isSelected && styles.selected, xstyle) : stylex.props(styles.contentWrapper, densityStyles[density], isDisabled && styles.disabled, isSelected && styles.selected, xstyle),
467
490
  // Consumer row props are merged last so useContainerReveal can
468
491
  // publish both its classes and inline custom properties. Seed the
469
492
  // private indent first, then preserve the standard inline-style
@@ -475,6 +498,7 @@ export function TreeListItem({
475
498
  ref: forwardsToLink ? linkRowRef : undefined,
476
499
  onClick: forwardsToLink ? delegateToLink : handleClick,
477
500
  onMouseUp: forwardsToLink ? openLinkOnMiddleClick : undefined,
501
+ onPointerDown: forwardsToLink || handleClick != null ? pressOnRow : undefined,
478
502
  children: /*#__PURE__*/_jsx("div", {
479
503
  ...{
480
504
  className: "x78zum5 x98rzlu xeuugli x1h91t0o x14kbac9 xw2xrtw"