@astryxdesign/core 0.7.7-canary.550ff21 → 0.7.7-canary.58c5b8a

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 (504) hide show
  1. package/dist/AlertDialog/AlertDialog.d.ts +4 -1
  2. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  3. package/dist/AlertDialog/AlertDialog.js +36 -6
  4. package/dist/AppShell/useCloseMobileDrawerOnActivate.d.ts +13 -0
  5. package/dist/AppShell/useCloseMobileDrawerOnActivate.d.ts.map +1 -0
  6. package/dist/AppShell/useCloseMobileDrawerOnActivate.js +45 -0
  7. package/dist/Avatar/Avatar.d.ts.map +1 -1
  8. package/dist/Avatar/Avatar.js +1 -1
  9. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  10. package/dist/BottomSheet/BottomSheet.js +79 -9
  11. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  12. package/dist/BottomSheet/BottomSheetPanel.js +23 -4
  13. package/dist/BottomSheet/bottomSheetStack.d.ts.map +1 -1
  14. package/dist/BottomSheet/bottomSheetStack.js +5 -4
  15. package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
  16. package/dist/BottomSheet/useSheetGestures.js +3 -1
  17. package/dist/Breadcrumbs/BreadcrumbItem.d.ts +2 -1
  18. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  19. package/dist/Breadcrumbs/BreadcrumbItem.js +9 -4
  20. package/dist/Button/Button.d.ts.map +1 -1
  21. package/dist/Button/Button.js +50 -5
  22. package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
  23. package/dist/CheckboxList/CheckboxList.js +7 -1
  24. package/dist/CheckboxList/CheckboxListContext.d.ts +6 -0
  25. package/dist/CheckboxList/CheckboxListContext.d.ts.map +1 -1
  26. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  27. package/dist/CheckboxList/CheckboxListItem.js +10 -2
  28. package/dist/ComplexSelector/ComplexSelector.d.ts +4 -1
  29. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  30. package/dist/ComplexSelector/ComplexSelector.js +14 -4
  31. package/dist/DateInput/DateInput.d.ts.map +1 -1
  32. package/dist/DateInput/DateInput.js +5 -2
  33. package/dist/DateInput/MonthScroller.d.ts.map +1 -1
  34. package/dist/DateInput/MonthScroller.js +13 -27
  35. package/dist/DateInput/Wheel.d.ts +17 -1
  36. package/dist/DateInput/Wheel.d.ts.map +1 -1
  37. package/dist/DateInput/Wheel.js +161 -20
  38. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  39. package/dist/DateRangeInput/DateRangeInput.js +63 -49
  40. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  41. package/dist/DateTimeInput/DateTimeInput.js +5 -2
  42. package/dist/Dialog/Dialog.d.ts.map +1 -1
  43. package/dist/Dialog/Dialog.js +53 -15
  44. package/dist/Drawer/Drawer.d.ts.map +1 -1
  45. package/dist/Drawer/Drawer.js +15 -11
  46. package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
  47. package/dist/Drawer/useDrawerDialogPresence.js +9 -1
  48. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  49. package/dist/DropdownMenu/DropdownMenu.js +20 -4
  50. package/dist/Field/Field.js +2 -2
  51. package/dist/Field/PanelSearchInput.d.ts +9 -1
  52. package/dist/Field/PanelSearchInput.d.ts.map +1 -1
  53. package/dist/Field/PanelSearchInput.js +3 -1
  54. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  55. package/dist/HoverCard/HoverCard.js +27 -2
  56. package/dist/Icon/Icon.d.ts +5 -1
  57. package/dist/Icon/Icon.d.ts.map +1 -1
  58. package/dist/Icon/Icon.js +5 -2
  59. package/dist/InfoTip/InfoTip.d.ts +63 -0
  60. package/dist/InfoTip/InfoTip.d.ts.map +1 -0
  61. package/dist/InfoTip/InfoTip.js +126 -0
  62. package/dist/InfoTip/index.d.ts +10 -0
  63. package/dist/InfoTip/index.d.ts.map +1 -0
  64. package/dist/InfoTip/index.js +12 -0
  65. package/dist/Layer/layerAnimations.stylex.d.ts +7 -8
  66. package/dist/Layer/layerAnimations.stylex.d.ts.map +1 -1
  67. package/dist/Layer/layerAnimations.stylex.js +25 -20
  68. package/dist/Layer/layerClickBoundary.d.ts +7 -1
  69. package/dist/Layer/layerClickBoundary.d.ts.map +1 -1
  70. package/dist/Layer/layerClickBoundary.js +2 -2
  71. package/dist/Layer/useBackdropPress.d.ts +27 -0
  72. package/dist/Layer/useBackdropPress.d.ts.map +1 -0
  73. package/dist/Layer/useBackdropPress.js +53 -0
  74. package/dist/Layer/usePressPin.d.ts +105 -0
  75. package/dist/Layer/usePressPin.d.ts.map +1 -0
  76. package/dist/Layer/usePressPin.js +413 -0
  77. package/dist/Layer/useTouchTrigger.d.ts +23 -1
  78. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  79. package/dist/Layer/useTouchTrigger.js +45 -7
  80. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  81. package/dist/Lightbox/Lightbox.js +2 -1
  82. package/dist/MobileNav/MobileNav.js +0 -1
  83. package/dist/MultiSelector/hooks.d.ts.map +1 -1
  84. package/dist/MultiSelector/hooks.js +2 -4
  85. package/dist/Outline/Outline.d.ts +2 -4
  86. package/dist/Outline/Outline.d.ts.map +1 -1
  87. package/dist/Outline/Outline.js +4 -52
  88. package/dist/Outline/useOutlineFromMarkdown.d.ts.map +1 -1
  89. package/dist/Outline/useOutlineFromMarkdown.js +1 -0
  90. package/dist/Outline/useScrollSpy.js +3 -3
  91. package/dist/Popover/usePopover.d.ts.map +1 -1
  92. package/dist/Popover/usePopover.js +56 -7
  93. package/dist/PowerSearch/PowerSearch.d.ts +36 -3
  94. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  95. package/dist/PowerSearch/PowerSearch.js +571 -302
  96. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts +100 -0
  97. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -0
  98. package/dist/PowerSearch/PowerSearchBottomSheet.js +1913 -0
  99. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +32 -1
  100. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  101. package/dist/PowerSearch/PowerSearchEditPopover.js +17 -6
  102. package/dist/PowerSearch/PowerSearchValueEditor.d.ts +38 -3
  103. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  104. package/dist/PowerSearch/PowerSearchValueEditor.js +170 -61
  105. package/dist/PowerSearch/formatFilterValue.d.ts +7 -0
  106. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  107. package/dist/PowerSearch/formatFilterValue.js +11 -1
  108. package/dist/PowerSearch/formatTokenValue.d.ts +28 -0
  109. package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -0
  110. package/dist/PowerSearch/formatTokenValue.js +160 -0
  111. package/dist/PowerSearch/powerSearchSheetUtils.d.ts +65 -0
  112. package/dist/PowerSearch/powerSearchSheetUtils.d.ts.map +1 -0
  113. package/dist/PowerSearch/powerSearchSheetUtils.js +168 -0
  114. package/dist/ProgressBar/ProgressBar.d.ts +1 -1
  115. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  116. package/dist/ProgressBar/ProgressBar.js +33 -6
  117. package/dist/RadioList/RadioList.d.ts.map +1 -1
  118. package/dist/RadioList/RadioList.js +8 -2
  119. package/dist/RadioList/RadioListItem.d.ts +1 -1
  120. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  121. package/dist/RadioList/RadioListItem.js +5 -3
  122. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  123. package/dist/Resizable/ResizeHandle.js +118 -260
  124. package/dist/Resizable/resizeGesture.d.ts +91 -0
  125. package/dist/Resizable/resizeGesture.d.ts.map +1 -0
  126. package/dist/Resizable/resizeGesture.js +251 -0
  127. package/dist/SegmentedControl/SegmentedControl.d.ts +3 -1
  128. package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  129. package/dist/SegmentedControl/SegmentedControl.js +115 -8
  130. package/dist/SegmentedControl/SegmentedControlContext.d.ts +6 -0
  131. package/dist/SegmentedControl/SegmentedControlContext.d.ts.map +1 -1
  132. package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -0
  133. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  134. package/dist/SegmentedControl/SegmentedControlItem.js +10 -2
  135. package/dist/SegmentedControl/useSegmentedSelectionMotion.d.ts +357 -0
  136. package/dist/SegmentedControl/useSegmentedSelectionMotion.d.ts.map +1 -0
  137. package/dist/SegmentedControl/useSegmentedSelectionMotion.js +1349 -0
  138. package/dist/SegmentedControl/useSegmentedTouchTracking.d.ts +70 -0
  139. package/dist/SegmentedControl/useSegmentedTouchTracking.d.ts.map +1 -0
  140. package/dist/SegmentedControl/useSegmentedTouchTracking.js +264 -0
  141. package/dist/Selector/Selector.d.ts.map +1 -1
  142. package/dist/Selector/Selector.js +96 -67
  143. package/dist/Selector/optionShape.d.ts +24 -0
  144. package/dist/Selector/optionShape.d.ts.map +1 -0
  145. package/dist/Selector/optionShape.js +48 -0
  146. package/dist/Selector/selectableOptionEntries.d.ts +20 -0
  147. package/dist/Selector/selectableOptionEntries.d.ts.map +1 -0
  148. package/dist/Selector/selectableOptionEntries.js +38 -0
  149. package/dist/Selector/utils.d.ts +2 -17
  150. package/dist/Selector/utils.d.ts.map +1 -1
  151. package/dist/Selector/utils.js +3 -51
  152. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  153. package/dist/SideNav/SideNavItem.js +3 -9
  154. package/dist/Slider/sliderTouchController.js +2 -2
  155. package/dist/Switch/Switch.d.ts +1 -1
  156. package/dist/Switch/Switch.d.ts.map +1 -1
  157. package/dist/Switch/Switch.js +200 -46
  158. package/dist/Switch/switchFill.d.ts +31 -0
  159. package/dist/Switch/switchFill.d.ts.map +1 -0
  160. package/dist/Switch/switchFill.js +88 -0
  161. package/dist/Switch/switchTouch.d.ts +74 -0
  162. package/dist/Switch/switchTouch.d.ts.map +1 -0
  163. package/dist/Switch/switchTouch.js +125 -0
  164. package/dist/Switch/useSwitchTouch.d.ts +276 -0
  165. package/dist/Switch/useSwitchTouch.d.ts.map +1 -0
  166. package/dist/Switch/useSwitchTouch.js +939 -0
  167. package/dist/TabList/Tab.d.ts.map +1 -1
  168. package/dist/TabList/Tab.js +4 -3
  169. package/dist/Table/BaseTable.d.ts.map +1 -1
  170. package/dist/Table/BaseTable.js +29 -8
  171. package/dist/TextInput/TextInput.d.ts +2 -2
  172. package/dist/TextInput/TextInput.d.ts.map +1 -1
  173. package/dist/TextInput/TextInput.js +10 -7
  174. package/dist/Toast/Toast.d.ts.map +1 -1
  175. package/dist/Toast/Toast.js +5 -0
  176. package/dist/Token/Token.d.ts +2 -2
  177. package/dist/Token/Token.d.ts.map +1 -1
  178. package/dist/Token/Token.js +13 -4
  179. package/dist/Token/TokenNamingContext.d.ts +14 -0
  180. package/dist/Token/TokenNamingContext.d.ts.map +1 -0
  181. package/dist/Token/TokenNamingContext.js +23 -0
  182. package/dist/Tokenizer/Tokenizer.d.ts +46 -59
  183. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  184. package/dist/Tokenizer/Tokenizer.js +44 -60
  185. package/dist/Tokenizer/TokenizerBottomSheet.d.ts +25 -28
  186. package/dist/Tokenizer/TokenizerBottomSheet.d.ts.map +1 -1
  187. package/dist/Tokenizer/TokenizerBottomSheet.js +157 -54
  188. package/dist/Tokenizer/TokenizerItemRemovableContext.d.ts +3 -0
  189. package/dist/Tokenizer/TokenizerItemRemovableContext.d.ts.map +1 -0
  190. package/dist/Tokenizer/TokenizerItemRemovableContext.js +19 -0
  191. package/dist/Tooltip/Tooltip.d.ts +24 -5
  192. package/dist/Tooltip/Tooltip.d.ts.map +1 -1
  193. package/dist/Tooltip/Tooltip.js +29 -5
  194. package/dist/Tooltip/useTooltip.d.ts +48 -5
  195. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  196. package/dist/Tooltip/useTooltip.js +90 -20
  197. package/dist/TopNav/TopNavItem.d.ts.map +1 -1
  198. package/dist/TopNav/TopNavItem.js +4 -7
  199. package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
  200. package/dist/TopNav/TopNavMegaMenuItem.js +4 -7
  201. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  202. package/dist/TopNav/TopNavMenu.js +4 -7
  203. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  204. package/dist/Typeahead/Typeahead.js +26 -15
  205. package/dist/animator/createAnimator.d.ts +98 -0
  206. package/dist/animator/createAnimator.d.ts.map +1 -0
  207. package/dist/animator/createAnimator.js +259 -0
  208. package/dist/astryx.css +142 -7
  209. package/dist/gestures/GestureHost.d.ts +27 -1
  210. package/dist/gestures/GestureHost.d.ts.map +1 -1
  211. package/dist/gestures/GestureHost.js +161 -22
  212. package/dist/gestures/PressTracker.d.ts +6 -0
  213. package/dist/gestures/PressTracker.d.ts.map +1 -1
  214. package/dist/gestures/PressTracker.js +3 -0
  215. package/dist/gestures/types.d.ts +6 -0
  216. package/dist/gestures/types.d.ts.map +1 -1
  217. package/dist/gestures/usePressTracker.d.ts.map +1 -1
  218. package/dist/gestures/usePressTracker.js +1 -0
  219. package/dist/gestures/wheelSegmenter.d.ts +14 -3
  220. package/dist/gestures/wheelSegmenter.d.ts.map +1 -1
  221. package/dist/gestures/wheelSegmenter.js +32 -8
  222. package/dist/hooks/actionGroupTracker.d.ts +7 -4
  223. package/dist/hooks/actionGroupTracker.d.ts.map +1 -1
  224. package/dist/hooks/actionGroupTracker.js +19 -56
  225. package/dist/hooks/index.d.ts +1 -0
  226. package/dist/hooks/index.d.ts.map +1 -1
  227. package/dist/hooks/index.js +1 -0
  228. package/dist/hooks/pressGroupContext.d.ts +6 -0
  229. package/dist/hooks/pressGroupContext.d.ts.map +1 -0
  230. package/dist/hooks/pressGroupContext.js +20 -0
  231. package/dist/hooks/useActionGroupTracking.d.ts +53 -0
  232. package/dist/hooks/useActionGroupTracking.d.ts.map +1 -0
  233. package/dist/hooks/useActionGroupTracking.js +174 -0
  234. package/dist/hooks/useAnimator.d.ts +41 -0
  235. package/dist/hooks/useAnimator.d.ts.map +1 -0
  236. package/dist/hooks/useAnimator.js +70 -0
  237. package/dist/hooks/useAttachment.d.ts +16 -8
  238. package/dist/hooks/useAttachment.d.ts.map +1 -1
  239. package/dist/hooks/useAttachment.js +35 -15
  240. package/dist/hooks/useFocusTrap.d.ts +15 -0
  241. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  242. package/dist/hooks/useFocusTrap.js +13 -2
  243. package/dist/hooks/useHighlightedOptionScroll.d.ts +11 -1
  244. package/dist/hooks/useHighlightedOptionScroll.d.ts.map +1 -1
  245. package/dist/hooks/useHighlightedOptionScroll.js +112 -11
  246. package/dist/hooks/useInputStatusIcon.d.ts +1 -1
  247. package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
  248. package/dist/hooks/useInputStatusIcon.js +2 -2
  249. package/dist/hooks/useMediaQuery.d.ts +2 -1
  250. package/dist/hooks/useMediaQuery.d.ts.map +1 -1
  251. package/dist/hooks/useMediaQuery.js +7 -4
  252. package/dist/hooks/useMenuPress.d.ts.map +1 -1
  253. package/dist/hooks/useMenuPress.js +4 -2
  254. package/dist/hooks/usePager.d.ts +261 -0
  255. package/dist/hooks/usePager.d.ts.map +1 -0
  256. package/dist/hooks/usePager.js +1169 -0
  257. package/dist/i18n/generated-english/InfoTip/InfoTip.generated.d.ts +8 -0
  258. package/dist/i18n/generated-english/InfoTip/InfoTip.generated.d.ts.map +1 -0
  259. package/dist/i18n/generated-english/InfoTip/InfoTip.generated.js +12 -0
  260. package/dist/i18n/generated-english/PowerSearch/PowerSearch.generated.d.ts.map +1 -1
  261. package/dist/i18n/generated-english/PowerSearch/PowerSearch.generated.js +1 -0
  262. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts +8 -0
  263. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts.map +1 -0
  264. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.js +42 -0
  265. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.d.ts.map +1 -1
  266. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.js +6 -0
  267. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts +8 -0
  268. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts.map +1 -0
  269. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.js +14 -0
  270. package/dist/i18n/generated-english/Tokenizer/TokenizerBottomSheet.generated.d.ts.map +1 -1
  271. package/dist/i18n/generated-english/Tokenizer/TokenizerBottomSheet.generated.js +7 -1
  272. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  273. package/dist/i18n/generated-locales/en.generated.js +33 -1
  274. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  275. package/dist/i18n/generated-locales/pseudo.generated.js +33 -1
  276. package/dist/index.d.ts +2 -0
  277. package/dist/index.d.ts.map +1 -1
  278. package/dist/index.js +5 -0
  279. package/dist/internal/SheetConfirmation.d.ts +11 -0
  280. package/dist/internal/SheetConfirmation.d.ts.map +1 -0
  281. package/dist/internal/SheetConfirmation.js +92 -0
  282. package/dist/internal/sheetDraft.d.ts +35 -0
  283. package/dist/internal/sheetDraft.d.ts.map +1 -0
  284. package/dist/internal/sheetDraft.js +65 -0
  285. package/dist/internal/touch-sheet.d.ts +21 -0
  286. package/dist/internal/touch-sheet.d.ts.map +1 -0
  287. package/dist/internal/touch-sheet.js +19 -0
  288. package/dist/internal/useDismissSearchOnTouchDrag.d.ts +24 -0
  289. package/dist/internal/useDismissSearchOnTouchDrag.d.ts.map +1 -0
  290. package/dist/internal/useDismissSearchOnTouchDrag.js +56 -0
  291. package/dist/motion/animator.d.ts +14 -14
  292. package/dist/motion/animator.d.ts.map +1 -1
  293. package/dist/motion/animator.js +41 -18
  294. package/dist/motion/paging.d.ts +16 -5
  295. package/dist/motion/paging.d.ts.map +1 -1
  296. package/dist/motion/paging.js +34 -14
  297. package/dist/motion/reducedMotion.d.ts +24 -0
  298. package/dist/motion/reducedMotion.d.ts.map +1 -1
  299. package/dist/motion/reducedMotion.js +78 -1
  300. package/dist/motion/roles.d.ts +7 -1
  301. package/dist/motion/roles.d.ts.map +1 -1
  302. package/dist/motion/roles.js +20 -1
  303. package/dist/motion/uikit/alert.d.ts +41 -0
  304. package/dist/motion/uikit/alert.d.ts.map +1 -0
  305. package/dist/motion/uikit/alert.js +43 -0
  306. package/dist/motion/uikit/index.d.ts +7 -4
  307. package/dist/motion/uikit/index.d.ts.map +1 -1
  308. package/dist/motion/uikit/index.js +7 -4
  309. package/dist/motion/uikit/paging.d.ts +31 -20
  310. package/dist/motion/uikit/paging.d.ts.map +1 -1
  311. package/dist/motion/uikit/paging.js +41 -11
  312. package/dist/motion/uikit/progressBar.d.ts +27 -7
  313. package/dist/motion/uikit/progressBar.d.ts.map +1 -1
  314. package/dist/motion/uikit/progressBar.js +31 -11
  315. package/dist/motion/uikit/segmented.d.ts +55 -0
  316. package/dist/motion/uikit/segmented.d.ts.map +1 -0
  317. package/dist/motion/uikit/segmented.js +77 -0
  318. package/dist/motion/uikit/springs.d.ts +8 -42
  319. package/dist/motion/uikit/springs.d.ts.map +1 -1
  320. package/dist/motion/uikit/springs.js +12 -42
  321. package/dist/motion/uikit/switch.d.ts +166 -0
  322. package/dist/motion/uikit/switch.d.ts.map +1 -0
  323. package/dist/motion/uikit/switch.js +186 -0
  324. package/dist/privateAttributes/pressGroupItem.stylex.d.ts +15 -0
  325. package/dist/privateAttributes/pressGroupItem.stylex.d.ts.map +1 -0
  326. package/dist/privateAttributes/pressGroupItem.stylex.js +23 -0
  327. package/dist/privateAttributes/pressHoldsDrag.stylex.d.ts +18 -0
  328. package/dist/privateAttributes/pressHoldsDrag.stylex.d.ts.map +1 -0
  329. package/dist/privateAttributes/pressHoldsDrag.stylex.js +28 -0
  330. package/dist/privateAttributes/segmentTitle.stylex.d.ts +5 -0
  331. package/dist/privateAttributes/segmentTitle.stylex.d.ts.map +1 -0
  332. package/dist/privateAttributes/segmentTitle.stylex.js +22 -0
  333. package/dist/utils/browserClickWait.d.ts +35 -0
  334. package/dist/utils/browserClickWait.d.ts.map +1 -0
  335. package/dist/utils/browserClickWait.js +123 -0
  336. package/dist/utils/clickGuard.d.ts +14 -1
  337. package/dist/utils/clickGuard.d.ts.map +1 -1
  338. package/dist/utils/clickGuard.js +46 -1
  339. package/dist/utils/dateParser.d.ts.map +1 -1
  340. package/dist/utils/dateParser.js +12 -0
  341. package/dist/utils/interactionOverlay.stylex.d.ts +3 -2
  342. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  343. package/dist/utils/interactionOverlay.stylex.js +3 -2
  344. package/dist/utils/pressFeedback.d.ts.map +1 -1
  345. package/dist/utils/pressFeedback.js +24 -6
  346. package/locales/en.json +128 -0
  347. package/locales/pseudo.json +96 -0
  348. package/package.json +13 -8
  349. package/src/AlertDialog/AlertDialog.doc.mjs +2 -2
  350. package/src/AlertDialog/AlertDialog.tsx +37 -5
  351. package/src/AppShell/useCloseMobileDrawerOnActivate.ts +52 -0
  352. package/src/Avatar/Avatar.tsx +3 -1
  353. package/src/BottomSheet/BottomSheet.tsx +95 -10
  354. package/src/BottomSheet/BottomSheetPanel.tsx +40 -5
  355. package/src/BottomSheet/bottomSheetStack.ts +8 -4
  356. package/src/BottomSheet/useSheetGestures.ts +3 -1
  357. package/src/Breadcrumbs/BreadcrumbItem.tsx +17 -4
  358. package/src/Button/Button.tsx +66 -7
  359. package/src/CheckboxList/CheckboxList.doc.mjs +4 -2
  360. package/src/CheckboxList/CheckboxList.tsx +6 -0
  361. package/src/CheckboxList/CheckboxListContext.tsx +6 -0
  362. package/src/CheckboxList/CheckboxListItem.tsx +11 -2
  363. package/src/ComplexSelector/ComplexSelector.tsx +20 -5
  364. package/src/DateInput/DateInput.tsx +8 -2
  365. package/src/DateInput/MonthScroller.tsx +18 -22
  366. package/src/DateInput/Wheel.tsx +172 -14
  367. package/src/DateRangeInput/DateRangeInput.doc.mjs +3 -2
  368. package/src/DateRangeInput/DateRangeInput.tsx +117 -71
  369. package/src/DateTimeInput/DateTimeInput.tsx +8 -2
  370. package/src/Dialog/Dialog.tsx +81 -15
  371. package/src/Drawer/Drawer.tsx +28 -11
  372. package/src/Drawer/useDrawerDialogPresence.ts +9 -1
  373. package/src/DropdownMenu/DropdownMenu.tsx +28 -6
  374. package/src/Field/Field.tsx +2 -2
  375. package/src/Field/PanelSearchInput.tsx +11 -0
  376. package/src/HoverCard/HoverCard.tsx +31 -1
  377. package/src/Icon/Icon.doc.mjs +49 -8
  378. package/src/Icon/Icon.tsx +15 -7
  379. package/src/InfoTip/InfoTip.doc.mjs +192 -0
  380. package/src/InfoTip/InfoTip.tsx +186 -0
  381. package/src/InfoTip/index.ts +14 -0
  382. package/src/Layer/layerAnimations.stylex.ts +24 -16
  383. package/src/Layer/layerClickBoundary.ts +2 -2
  384. package/src/Layer/useBackdropPress.ts +81 -0
  385. package/src/Layer/usePressPin.ts +576 -0
  386. package/src/Layer/useTouchTrigger.ts +56 -6
  387. package/src/Lightbox/Lightbox.tsx +2 -1
  388. package/src/MobileNav/MobileNav.tsx +1 -1
  389. package/src/MultiSelector/hooks.ts +2 -4
  390. package/src/Outline/Outline.doc.mjs +177 -51
  391. package/src/Outline/Outline.tsx +5 -57
  392. package/src/Outline/useOutlineFromMarkdown.doc.mjs +157 -0
  393. package/src/Outline/useOutlineFromMarkdown.ts +1 -0
  394. package/src/Outline/useScrollSpy.ts +3 -3
  395. package/src/Popover/usePopover.tsx +71 -9
  396. package/src/PowerSearch/PowerSearch.doc.mjs +55 -6
  397. package/src/PowerSearch/PowerSearch.tsx +798 -324
  398. package/src/PowerSearch/PowerSearchBottomSheet.tsx +2515 -0
  399. package/src/PowerSearch/PowerSearchEditPopover.tsx +28 -6
  400. package/src/PowerSearch/PowerSearchValueEditor.tsx +203 -38
  401. package/src/PowerSearch/formatFilterValue.ts +18 -1
  402. package/src/PowerSearch/formatTokenValue.ts +215 -0
  403. package/src/PowerSearch/powerSearchSheetUtils.ts +224 -0
  404. package/src/ProgressBar/ProgressBar.doc.mjs +4 -2
  405. package/src/ProgressBar/ProgressBar.tsx +67 -7
  406. package/src/RadioList/RadioList.doc.mjs +4 -2
  407. package/src/RadioList/RadioList.tsx +7 -2
  408. package/src/RadioList/RadioListItem.tsx +5 -3
  409. package/src/Resizable/ResizeHandle.tsx +133 -328
  410. package/src/Resizable/resizeGesture.ts +368 -0
  411. package/src/SegmentedControl/SegmentedControl.doc.mjs +3 -3
  412. package/src/SegmentedControl/SegmentedControl.tsx +179 -5
  413. package/src/SegmentedControl/SegmentedControlContext.ts +6 -0
  414. package/src/SegmentedControl/SegmentedControlItem.tsx +14 -2
  415. package/src/SegmentedControl/useSegmentedSelectionMotion.ts +1640 -0
  416. package/src/SegmentedControl/useSegmentedTouchTracking.ts +308 -0
  417. package/src/Selector/Selector.tsx +136 -89
  418. package/src/Selector/optionShape.ts +64 -0
  419. package/src/Selector/selectableOptionEntries.ts +39 -0
  420. package/src/Selector/utils.ts +9 -68
  421. package/src/SideNav/SideNavItem.tsx +3 -7
  422. package/src/Slider/sliderTouchController.ts +2 -2
  423. package/src/Switch/Switch.doc.mjs +3 -3
  424. package/src/Switch/Switch.tsx +412 -86
  425. package/src/Switch/switchFill.ts +106 -0
  426. package/src/Switch/switchTouch.ts +186 -0
  427. package/src/Switch/useSwitchTouch.ts +1051 -0
  428. package/src/TabList/Tab.tsx +5 -3
  429. package/src/Table/BaseTable.tsx +46 -12
  430. package/src/TextInput/TextInput.tsx +11 -10
  431. package/src/Toast/Toast.tsx +5 -0
  432. package/src/Token/Token.tsx +15 -4
  433. package/src/Token/TokenNamingContext.ts +28 -0
  434. package/src/Tokenizer/Tokenizer.doc.mjs +16 -0
  435. package/src/Tokenizer/Tokenizer.tsx +93 -88
  436. package/src/Tokenizer/TokenizerBottomSheet.tsx +219 -93
  437. package/src/Tokenizer/TokenizerItemRemovableContext.ts +24 -0
  438. package/src/Tooltip/Tooltip.doc.mjs +123 -39
  439. package/src/Tooltip/Tooltip.tsx +43 -9
  440. package/src/Tooltip/useTooltip.doc.mjs +171 -31
  441. package/src/Tooltip/useTooltip.tsx +137 -22
  442. package/src/TopNav/TopNavItem.tsx +6 -5
  443. package/src/TopNav/TopNavMegaMenuItem.tsx +6 -5
  444. package/src/TopNav/TopNavMenu.tsx +6 -5
  445. package/src/Typeahead/Typeahead.tsx +29 -15
  446. package/src/animator/createAnimator.doc.mjs +153 -0
  447. package/src/animator/createAnimator.ts +324 -0
  448. package/src/gestures/GestureHost.ts +205 -21
  449. package/src/gestures/PressTracker.ts +10 -0
  450. package/src/gestures/types.ts +6 -0
  451. package/src/gestures/usePressTracker.ts +2 -0
  452. package/src/gestures/wheelSegmenter.ts +36 -7
  453. package/src/hooks/actionGroupTracker.ts +32 -61
  454. package/src/hooks/index.ts +2 -0
  455. package/src/hooks/pressGroupContext.ts +21 -0
  456. package/src/hooks/useActionGroupTracking.ts +224 -0
  457. package/src/hooks/useAnimator.doc.mjs +109 -0
  458. package/src/hooks/useAnimator.ts +67 -0
  459. package/src/hooks/useAttachment.ts +56 -14
  460. package/src/hooks/useFocusTrap.ts +26 -2
  461. package/src/hooks/useHighlightedOptionScroll.ts +123 -15
  462. package/src/hooks/useInputStatusIcon.tsx +3 -2
  463. package/src/hooks/useMediaQuery.doc.mjs +2 -2
  464. package/src/hooks/useMediaQuery.ts +13 -4
  465. package/src/hooks/useMenuPress.ts +8 -2
  466. package/src/hooks/usePager.ts +1446 -0
  467. package/src/i18n/generated-english/InfoTip/InfoTip.generated.ts +13 -0
  468. package/src/i18n/generated-english/PowerSearch/PowerSearch.generated.ts +1 -0
  469. package/src/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.ts +43 -0
  470. package/src/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.ts +6 -0
  471. package/src/i18n/generated-english/PowerSearch/formatTokenValue.generated.ts +15 -0
  472. package/src/i18n/generated-english/Tokenizer/TokenizerBottomSheet.generated.ts +7 -1
  473. package/src/i18n/generated-locales/en.generated.ts +43 -0
  474. package/src/i18n/generated-locales/pseudo.generated.ts +44 -0
  475. package/src/index.ts +14 -0
  476. package/src/internal/SheetConfirmation.tsx +101 -0
  477. package/src/internal/sheetDraft.ts +80 -0
  478. package/src/internal/touch-sheet.ts +21 -0
  479. package/src/internal/useDismissSearchOnTouchDrag.ts +69 -0
  480. package/src/motion/MEASUREMENTS.md +36 -27
  481. package/src/motion/README.md +11 -6
  482. package/src/motion/animator.ts +61 -29
  483. package/src/motion/paging.ts +37 -14
  484. package/src/motion/reducedMotion.ts +79 -1
  485. package/src/motion/roles.ts +20 -1
  486. package/src/motion/uikit/alert.ts +43 -0
  487. package/src/motion/uikit/index.ts +6 -5
  488. package/src/motion/uikit/paging.ts +41 -10
  489. package/src/motion/uikit/progressBar.ts +31 -11
  490. package/src/motion/uikit/segmented.ts +74 -0
  491. package/src/motion/uikit/springs.ts +12 -42
  492. package/src/motion/uikit/switch.ts +174 -0
  493. package/src/privateAttributes/pressGroupItem.stylex.ts +23 -0
  494. package/src/privateAttributes/pressHoldsDrag.stylex.ts +28 -0
  495. package/src/privateAttributes/segmentTitle.stylex.ts +22 -0
  496. package/src/utils/browserClickWait.ts +133 -0
  497. package/src/utils/clickGuard.ts +64 -1
  498. package/src/utils/dateParser.ts +16 -0
  499. package/src/utils/interactionOverlay.stylex.ts +3 -2
  500. package/src/utils/pressFeedback.ts +24 -6
  501. package/dist/internal/tokenizer-presentation.d.ts +0 -21
  502. package/dist/internal/tokenizer-presentation.d.ts.map +0 -1
  503. package/dist/internal/tokenizer-presentation.js +0 -21
  504. package/src/internal/tokenizer-presentation.ts +0 -25
@@ -24,16 +24,29 @@ export const docs = {
24
24
  playground: {
25
25
  defaults: {
26
26
  content: 'Helpful tooltip text',
27
- children: {__element: 'Button', props: {label: 'Hover me', variant: 'secondary'}},
27
+ children: {
28
+ __element: 'Button',
29
+ props: {label: 'Hover me', variant: 'secondary'},
30
+ },
28
31
  },
29
32
  },
30
- keywords: ["tooltip","hint","infotip","title","hover","flyout","balloon","helpertext"],
33
+ keywords: [
34
+ 'tooltip',
35
+ 'hint',
36
+ 'infotip',
37
+ 'title',
38
+ 'hover',
39
+ 'flyout',
40
+ 'balloon',
41
+ 'helpertext',
42
+ ],
31
43
  components: [
32
44
  {
33
45
  name: 'Tooltip',
34
46
  displayName: 'Tooltip',
35
47
  description:
36
- 'Component wrapper for tooltip display triggered on hover or focus.', props: [
48
+ 'Component wrapper for tooltip display triggered on hover or focus.',
49
+ props: [
37
50
  {
38
51
  name: 'children',
39
52
  type: 'ReactNode',
@@ -48,18 +61,26 @@ export const docs = {
48
61
  name: 'content',
49
62
  type: 'ReactNode',
50
63
  description: 'Tooltip content, typically short text.',
51
- slotElements: [{__element: 'Text', props: {type: 'body'}, children: 'Content text'}],
64
+ slotElements: [
65
+ {
66
+ __element: 'Text',
67
+ props: {type: 'body'},
68
+ children: 'Content text',
69
+ },
70
+ ],
52
71
  },
53
72
  {
54
73
  name: 'placement',
55
74
  type: "'above' | 'below' | 'start' | 'end'",
56
- description: "Position relative to the anchor element. Logical: start/end resolve against the popover\'s own inherited direction (RTL mirrors in pure CSS).",
75
+ description:
76
+ "Position relative to the anchor element. Logical: start/end resolve against the popover\'s own inherited direction (RTL mirrors in pure CSS).",
57
77
  default: "'above'",
58
78
  },
59
79
  {
60
80
  name: 'alignment',
61
81
  type: "'start' | 'center' | 'end'",
62
- description: "Alignment along the placement axis. Logical: start/end resolve against the popover\'s own inherited direction (RTL mirrors in pure CSS).",
82
+ description:
83
+ "Alignment along the placement axis. Logical: start/end resolve against the popover\'s own inherited direction (RTL mirrors in pure CSS).",
63
84
  default: "'center'",
64
85
  },
65
86
  {
@@ -84,7 +105,7 @@ export const docs = {
84
105
  name: 'touchTrigger',
85
106
  type: "'auto' | 'tap' | 'none'",
86
107
  description:
87
- 'What a tap does where there is no hover. auto opens on tap unless the trigger performs an action of its own (a button, link, or form control), whose tap belongs to the control; an aria-disabled control performs none, so a tap on it opens its reason. tap always opens; use it for an info icon rendered as a button, whose only job is to reveal the tooltip. none never opens on touch.',
108
+ 'What a tap does where there is no hover. auto opens on tap unless the trigger performs an action of its own (a button, link, or form control), whose tap belongs to the control; an aria-disabled control performs none, so a tap on it opens its reason. tap always opens, for a button whose only job is to reveal the tooltip; for an info icon, use InfoTip. none never opens on touch.',
88
109
  default: "'auto'",
89
110
  },
90
111
  {
@@ -108,7 +129,8 @@ export const docs = {
108
129
  {
109
130
  name: 'isDefaultOpen',
110
131
  type: 'boolean',
111
- description: 'Whether the tooltip should be shown on mount. Still dismissible.',
132
+ description:
133
+ 'Whether the tooltip should be shown on mount. Still dismissible.',
112
134
  },
113
135
  {
114
136
  name: 'isOpen',
@@ -119,20 +141,38 @@ export const docs = {
119
141
  },
120
142
  ],
121
143
  theming: {
122
- targets: [
123
- {className: 'astryx-tooltip'},
124
- ],
144
+ targets: [{className: 'astryx-tooltip'}],
125
145
  },
126
146
  usage: {
127
147
  anatomy,
128
148
  description:
129
149
  'A short text hint that appears on hover or focus, anchored to a trigger element. Use it to describe icon-only buttons, show the full text of truncated labels, or provide supplementary context without cluttering the UI.',
130
150
  bestPractices: [
131
- {guidance: true, description: 'Keep tooltip content concise: aim for under 140 characters of plain text.'},
132
- {guidance: true, description: 'Add a tooltip to icon-only buttons and controls that lack a visible label.'},
133
- {guidance: true, description: 'Set touchTrigger to tap when the trigger is a button whose only job is revealing the tooltip, such as an info icon: touch has no hover, and auto keeps the tap for triggers that perform an action.'},
134
- {guidance: false, description: 'Place interactive elements like links or buttons inside a tooltip; use HoverCard or Popover instead.'},
135
- {guidance: false, description: 'Use tooltips for essential information that users must see to complete a task.'},
151
+ {
152
+ guidance: true,
153
+ description:
154
+ 'Keep tooltip content concise: aim for under 140 characters of plain text.',
155
+ },
156
+ {
157
+ guidance: true,
158
+ description:
159
+ 'Add a tooltip to icon-only buttons and controls that lack a visible label.',
160
+ },
161
+ {
162
+ guidance: true,
163
+ description:
164
+ 'Set touchTrigger to tap when the trigger is a button whose only job is revealing the tooltip: touch has no hover, and auto keeps the tap for triggers that perform an action. For an info icon, use InfoTip, which also pins its help on a press.',
165
+ },
166
+ {
167
+ guidance: false,
168
+ description:
169
+ 'Place interactive elements like links or buttons inside a tooltip; use HoverCard or Popover instead.',
170
+ },
171
+ {
172
+ guidance: false,
173
+ description:
174
+ 'Use tooltips for essential information that users must see to complete a task.',
175
+ },
136
176
  ],
137
177
  },
138
178
  };
@@ -145,8 +185,7 @@ export const docsZh = {
145
185
  {
146
186
  name: 'Tooltip',
147
187
  displayName: 'Tooltip',
148
- description:
149
- '工具提示显示的组件包装器,通过悬停或聚焦触发。',
188
+ description: '工具提示显示的组件包装器,通过悬停或聚焦触发。',
150
189
  props: [
151
190
  {
152
191
  name: 'children',
@@ -166,13 +205,15 @@ export const docsZh = {
166
205
  {
167
206
  name: 'placement',
168
207
  type: "'above' | 'below' | 'start' | 'end'",
169
- description: '相对于锚点元素的位置。逻辑值:start/end 根据弹出层自身继承的方向解析(RTL 镜像)。',
208
+ description:
209
+ '相对于锚点元素的位置。逻辑值:start/end 根据弹出层自身继承的方向解析(RTL 镜像)。',
170
210
  default: "'above'",
171
211
  },
172
212
  {
173
213
  name: 'alignment',
174
214
  type: "'start' | 'center' | 'end'",
175
- description: '沿放置轴的对齐方式。逻辑值:start/end 根据弹出层自身继承的方向解析(RTL 镜像)。',
215
+ description:
216
+ '沿放置轴的对齐方式。逻辑值:start/end 根据弹出层自身继承的方向解析(RTL 镜像)。',
176
217
  default: "'center'",
177
218
  },
178
219
  {
@@ -197,7 +238,7 @@ export const docsZh = {
197
238
  name: 'touchTrigger',
198
239
  type: "'auto' | 'tap' | 'none'",
199
240
  description:
200
- '在没有悬停的触摸设备上,轻点的行为。auto:轻点即打开,除非触发元素本身会执行操作(按钮、链接、表单控件),此时轻点归该控件所有;设置了 aria-disabled 的控件不执行操作,因此轻点它会显示其原因。tap:始终轻点打开——适用于以按钮形式呈现、唯一作用就是显示工具提示的信息图标。none:触摸永不打开。',
241
+ '在没有悬停的触摸设备上,轻点的行为。auto:轻点即打开,除非触发元素本身会执行操作(按钮、链接、表单控件),此时轻点归该控件所有;设置了 aria-disabled 的控件不执行操作,因此轻点它会显示其原因。tap:始终轻点打开,适用于唯一作用是显示工具提示的按钮;信息图标请使用 InfoTip。none:触摸永不打开。',
201
242
  default: "'auto'",
202
243
  },
203
244
  {
@@ -227,37 +268,76 @@ export const docsZh = {
227
268
  },
228
269
  ],
229
270
  theming: {
230
- targets: [
231
- {className: 'astryx-tooltip'},
232
- ],
271
+ targets: [{className: 'astryx-tooltip'}],
233
272
  },
234
273
  usage: {
235
274
  anatomy,
236
275
  description:
237
276
  'A short text hint that appears on hover or focus, anchored to a trigger element. Use it to describe icon-only buttons, show the full text of truncated labels, or provide supplementary context without cluttering the UI.',
238
277
  bestPractices: [
239
- {guidance: true, description: 'Keep tooltip content concise: aim for under 140 characters of plain text.'},
240
- {guidance: true, description: 'Add a tooltip to icon-only buttons and controls that lack a visible label.'},
241
- {guidance: true, description: 'Set touchTrigger to tap when the trigger is a button whose only job is revealing the tooltip, such as an info icon: touch has no hover, and auto keeps the tap for triggers that perform an action.'},
242
- {guidance: false, description: 'Place interactive elements like links or buttons inside a tooltip; use HoverCard or Popover instead.'},
243
- {guidance: false, description: 'Use tooltips for essential information that users must see to complete a task.'},
278
+ {
279
+ guidance: true,
280
+ description:
281
+ 'Keep tooltip content concise: aim for under 140 characters of plain text.',
282
+ },
283
+ {
284
+ guidance: true,
285
+ description:
286
+ 'Add a tooltip to icon-only buttons and controls that lack a visible label.',
287
+ },
288
+ {
289
+ guidance: true,
290
+ description:
291
+ 'Set touchTrigger to tap when the trigger is a button whose only job is revealing the tooltip: touch has no hover, and auto keeps the tap for triggers that perform an action. For an info icon, use InfoTip, which also pins its help on a press.',
292
+ },
293
+ {
294
+ guidance: false,
295
+ description:
296
+ 'Place interactive elements like links or buttons inside a tooltip; use HoverCard or Popover instead.',
297
+ },
298
+ {
299
+ guidance: false,
300
+ description:
301
+ 'Use tooltips for essential information that users must see to complete a task.',
302
+ },
244
303
  ],
245
304
  },
246
305
  };
247
306
 
248
307
  /** @type {import('@astryxdesign/cli/authoring').ComponentTranslationDoc} */
249
308
  export const docsDense = {
250
- description: 'Hover/focus triggered tooltip for displaying short, non-interactive text anchored to trigger element.',
309
+ description:
310
+ 'Hover/focus triggered tooltip for displaying short, non-interactive text anchored to trigger element.',
251
311
  usage: {
252
312
  anatomy,
253
313
  description:
254
314
  'A short text hint that appears on hover or focus, anchored to a trigger element. Use it to describe icon-only buttons, show the full text of truncated labels, or provide supplementary context without cluttering the UI.',
255
315
  bestPractices: [
256
- {guidance: true, description: 'Keep tooltip content concise: aim for under 140 characters of plain text.'},
257
- {guidance: true, description: 'Add a tooltip to icon-only buttons and controls that lack a visible label.'},
258
- {guidance: true, description: 'Set touchTrigger to tap when the trigger is a button whose only job is revealing the tooltip, such as an info icon: touch has no hover, and auto keeps the tap for triggers that perform an action.'},
259
- {guidance: false, description: 'Place interactive elements like links or buttons inside a tooltip; use HoverCard or Popover instead.'},
260
- {guidance: false, description: 'Use tooltips for essential information that users must see to complete a task.'},
316
+ {
317
+ guidance: true,
318
+ description:
319
+ 'Keep tooltip content concise: aim for under 140 characters of plain text.',
320
+ },
321
+ {
322
+ guidance: true,
323
+ description:
324
+ 'Add a tooltip to icon-only buttons and controls that lack a visible label.',
325
+ },
326
+ {
327
+ guidance: true,
328
+ description:
329
+ 'Set touchTrigger to tap when the trigger is a button whose only job is revealing the tooltip: touch has no hover, and auto keeps the tap for triggers that perform an action. For an info icon, use InfoTip, which also pins its help on a press.',
330
+ },
331
+ {
332
+ guidance: false,
333
+ description:
334
+ 'Place interactive elements like links or buttons inside a tooltip; use HoverCard or Popover instead.',
335
+ },
336
+ {
337
+ guidance: false,
338
+ description:
339
+ 'Use tooltips for essential information that users must see to complete a task.',
340
+ },
261
341
  ],
262
342
  },
263
343
  components: [
@@ -269,14 +349,18 @@ export const docsDense = {
269
349
  children: 'Trigger element(s) that activate tooltip.',
270
350
  anchorRef: 'External anchor ref for sibling mode.',
271
351
  content: 'Tooltip content, typically short text.',
272
- placement: 'Position relative to anchor. Logical: start/end follow the popover\'s inherited direction (RTL mirrors).',
273
- alignment: 'Alignment along placement axis. Logical: start/end follow the popover\'s inherited direction (RTL mirrors).',
352
+ placement:
353
+ "Position relative to anchor. Logical: start/end follow the popover's inherited direction (RTL mirrors).",
354
+ alignment:
355
+ "Alignment along placement axis. Logical: start/end follow the popover's inherited direction (RTL mirrors).",
274
356
  delay: 'Show delay in ms.',
275
357
  hideDelay: 'Hide delay in ms.',
276
358
  focusTrigger: 'Controls when focus events trigger tooltip.',
277
- touchTrigger: 'Tap behavior where there is no hover. auto = tap opens unless the trigger acts (button/link/control; an aria-disabled control does not act); tap = always opens (info icon rendered as a button); none = never on touch.',
359
+ touchTrigger:
360
+ 'Tap behavior where there is no hover. auto = tap opens unless the trigger acts (button/link/control; an aria-disabled control does not act); tap = always opens (a button whose only job is the tooltip; for an info icon use InfoTip); none = never on touch.',
278
361
  isEnabled: 'Enables/disables tooltip triggers.',
279
- onOpenChange: 'Callback when visibility changes; true=shown, false=hidden.',
362
+ onOpenChange:
363
+ 'Callback when visibility changes; true=shown, false=hidden.',
280
364
  hasHoverIndication: 'Dashed underline on trigger element.',
281
365
  isDefaultOpen: 'Show tooltip on mount. Still dismissible.',
282
366
  },
@@ -5,7 +5,8 @@
5
5
  /**
6
6
  * @file Tooltip.tsx
7
7
  * @input Uses React, useTooltip hook
8
- * @output Exports Tooltip component for hover/focus triggered tooltips
8
+ * @output Exports Tooltip component for hover/focus triggered tooltips, and the
9
+ * module-only TooltipWithTriggerBehavior that InfoTip's press-to-pin uses
9
10
  * @position Layer component; uses display:contents wrapper to avoid cloneElement
10
11
  *
11
12
  * SYNC: When modified, update these files to stay in sync:
@@ -23,10 +24,14 @@ import React, {
23
24
  import {useIsomorphicLayoutEffect} from '../hooks/useIsomorphicLayoutEffect';
24
25
  import * as stylex from '@stylexjs/stylex';
25
26
  import {
26
- useTooltip,
27
+ useTooltipWithTriggerBehavior,
27
28
  type TooltipFocusTrigger,
28
29
  type TooltipTouchTrigger,
29
30
  } from './useTooltip';
31
+ import {
32
+ stopPressPinClick,
33
+ type LayerTriggerBehavior,
34
+ } from '../Layer/usePressPin';
30
35
  import type {LayerAlignment, LayerPlacement} from '../Layer/useLayer';
31
36
  import {colorVars} from '../theme/tokens.stylex';
32
37
 
@@ -109,9 +114,7 @@ export interface TooltipProps {
109
114
  * - `auto`: tap opens the tooltip, unless the trigger performs an action of
110
115
  * its own (a button, a link, a form control) — that tap belongs to the
111
116
  * control, and a hint about a control the user just operated is noise
112
- * - `tap`: tap always opens the tooltip. This is what an info icon rendered
113
- * as a button wants: it looks like an action to the DOM, but revealing the
114
- * tooltip is the only thing it does
117
+ * - `tap`: tap always opens the tooltip, even on a trigger that acts
115
118
  * - `none`: touch never opens the tooltip
116
119
  *
117
120
  * @default 'auto'
@@ -191,7 +194,32 @@ function mergeIds(...ids: (string | undefined | null)[]): string | undefined {
191
194
  * </Tooltip>
192
195
  * ```
193
196
  */
194
- export function Tooltip({
197
+ export function Tooltip(props: TooltipProps): ReactElement {
198
+ // The option is fixed to `adaptive`, so a spread object that carries it at
199
+ // runtime cannot reach the press-to-pin path.
200
+ return <TooltipWithTriggerBehavior {...props} triggerBehavior="adaptive" />;
201
+ }
202
+
203
+ /**
204
+ * Module-only props for `TooltipWithTriggerBehavior`. Not exported from the
205
+ * package.
206
+ */
207
+ export interface TooltipWithTriggerBehaviorProps extends TooltipProps {
208
+ /**
209
+ * How the trigger opens the tooltip. `toggle` pins it on a click, a tap,
210
+ * Enter, or Space on a button trigger, and stops that press at the trigger
211
+ * (see `useTooltipWithTriggerBehavior`). InfoTip uses it.
212
+ *
213
+ * @default 'adaptive'
214
+ */
215
+ triggerBehavior?: LayerTriggerBehavior;
216
+ }
217
+
218
+ /**
219
+ * `Tooltip` with a trigger behavior. Module-only: InfoTip's press-to-pin goes
220
+ * through it, and the package does not export it.
221
+ */
222
+ export function TooltipWithTriggerBehavior({
195
223
  children,
196
224
  anchorRef,
197
225
  content,
@@ -201,12 +229,13 @@ export function Tooltip({
201
229
  hideDelay = 0,
202
230
  focusTrigger = 'auto',
203
231
  touchTrigger = 'auto',
232
+ triggerBehavior = 'adaptive',
204
233
  isEnabled = true,
205
234
  onOpenChange,
206
235
  hasHoverIndication = 'auto',
207
236
  isOpen,
208
237
  isDefaultOpen,
209
- }: TooltipProps): ReactElement {
238
+ }: TooltipWithTriggerBehaviorProps): ReactElement {
210
239
  const wrapperRef = useRef<HTMLDivElement>(null);
211
240
  const textOnly = children != null ? isTextOnly(children) : false;
212
241
 
@@ -223,13 +252,14 @@ export function Tooltip({
223
252
  }, [onOpenChange]);
224
253
 
225
254
  // Use the hook for all tooltip behavior
226
- const tooltip = useTooltip({
255
+ const tooltip = useTooltipWithTriggerBehavior({
227
256
  placement,
228
257
  alignment,
229
258
  delay,
230
259
  hideDelay,
231
260
  focusTrigger,
232
261
  touchTrigger,
262
+ triggerBehavior,
233
263
  isEnabled,
234
264
  isOpen,
235
265
  isDefaultOpen,
@@ -343,6 +373,7 @@ export function Tooltip({
343
373
  ref={tooltip.ref}
344
374
  tabIndex={0}
345
375
  aria-describedby={tooltip.describedBy}
376
+ onClick={stopPressPinClick}
346
377
  {...stylex.props(
347
378
  styles.wrapperInline,
348
379
  showHoverIndication && styles.hoverIndication,
@@ -357,7 +388,10 @@ export function Tooltip({
357
388
  // For element children: use display:contents, ref on first child
358
389
  return (
359
390
  <>
360
- <div ref={wrapperRef} {...stylex.props(styles.wrapperContents)}>
391
+ <div
392
+ ref={wrapperRef}
393
+ onClick={stopPressPinClick}
394
+ {...stylex.props(styles.wrapperContents)}>
361
395
  {children}
362
396
  </div>
363
397
  {tooltip.renderTooltip(content)}
@@ -7,32 +7,146 @@ export const docs = {
7
7
  group: 'Tooltip',
8
8
  keywords: ['tooltip', 'hint', 'label', 'hover', 'info', 'title', 'floating'],
9
9
  params: [
10
- {name: 'placement', type: "'above' | 'below' | 'start' | 'end'", description: "Position relative to the trigger. Logical: start/end resolve against the popover\'s own inherited direction (RTL mirrors in pure CSS).", default: "'above'"},
11
- {name: 'alignment', type: "'start' | 'center' | 'end'", description: "Alignment along the placement axis. Logical: start/end resolve against the popover\'s own inherited direction (RTL mirrors in pure CSS).", default: "'center'"},
12
- {name: 'delay', type: 'number', description: 'Delay before showing on hover, in milliseconds.', default: '200'},
13
- {name: 'hideDelay', type: 'number', description: 'Delay before hiding after mouse or focus leaves, in milliseconds.', default: '0'},
14
- {name: 'focusTrigger', type: "'auto' | 'always' | 'never'", description: 'When focus should open the tooltip. auto opens when the trigger itself takes focus, or focus lands inside a trigger that is focusable at that moment, so a roving-tabindex member opens when the arrow keys reach it.', default: "'auto'"},
15
- {name: 'touchTrigger', type: "'auto' | 'tap' | 'none'", description: 'What a tap does where there is no hover. auto opens on tap unless the trigger performs an action of its own (an aria-disabled control performs none); tap always opens (an info icon rendered as a button); none never opens on touch.', default: "'auto'"},
16
- {name: 'isEnabled', type: 'boolean', description: 'Whether hover and focus triggers are enabled.', default: 'true'},
17
- {name: 'isOpen', type: 'boolean', description: 'Controlled open state. true force-shows, false force-hides, undefined lets hover/focus manage visibility.'},
18
- {name: 'isDefaultOpen', type: 'boolean', description: 'Whether the tooltip should be shown on mount.', default: 'false'},
19
- {name: 'onShow', type: '() => void', description: 'Callback fired when the tooltip becomes visible.'},
20
- {name: 'onHide', type: '() => void', description: 'Callback fired when the tooltip is hidden.'},
10
+ {
11
+ name: 'placement',
12
+ type: "'above' | 'below' | 'start' | 'end'",
13
+ description:
14
+ "Position relative to the trigger. Logical: start/end resolve against the popover\'s own inherited direction (RTL mirrors in pure CSS).",
15
+ default: "'above'",
16
+ },
17
+ {
18
+ name: 'alignment',
19
+ type: "'start' | 'center' | 'end'",
20
+ description:
21
+ "Alignment along the placement axis. Logical: start/end resolve against the popover\'s own inherited direction (RTL mirrors in pure CSS).",
22
+ default: "'center'",
23
+ },
24
+ {
25
+ name: 'delay',
26
+ type: 'number',
27
+ description: 'Delay before showing on hover, in milliseconds.',
28
+ default: '200',
29
+ },
30
+ {
31
+ name: 'hideDelay',
32
+ type: 'number',
33
+ description:
34
+ 'Delay before hiding after mouse or focus leaves, in milliseconds.',
35
+ default: '0',
36
+ },
37
+ {
38
+ name: 'focusTrigger',
39
+ type: "'auto' | 'always' | 'never'",
40
+ description:
41
+ 'When focus should open the tooltip. auto opens when the trigger itself takes focus, or focus lands inside a trigger that is focusable at that moment, so a roving-tabindex member opens when the arrow keys reach it.',
42
+ default: "'auto'",
43
+ },
44
+ {
45
+ name: 'touchTrigger',
46
+ type: "'auto' | 'tap' | 'none'",
47
+ description:
48
+ 'What a tap does where there is no hover. auto opens on tap unless the trigger performs an action of its own (an aria-disabled control performs none); tap always opens (a button whose only job is revealing the tooltip); none never opens on touch.',
49
+ default: "'auto'",
50
+ },
51
+ {
52
+ name: 'isEnabled',
53
+ type: 'boolean',
54
+ description: 'Whether hover and focus triggers are enabled.',
55
+ default: 'true',
56
+ },
57
+ {
58
+ name: 'isOpen',
59
+ type: 'boolean',
60
+ description:
61
+ 'Controlled open state. true force-shows, false force-hides, undefined lets hover/focus manage visibility.',
62
+ },
63
+ {
64
+ name: 'isDefaultOpen',
65
+ type: 'boolean',
66
+ description: 'Whether the tooltip should be shown on mount.',
67
+ default: 'false',
68
+ },
69
+ {
70
+ name: 'onShow',
71
+ type: '() => void',
72
+ description: 'Callback fired when the tooltip becomes visible.',
73
+ },
74
+ {
75
+ name: 'onHide',
76
+ type: '() => void',
77
+ description: 'Callback fired when the tooltip is hidden.',
78
+ },
21
79
  ],
22
80
  returns: [
23
- {name: 'ref', type: 'RefCallback<HTMLElement>', description: 'Combined ref that sets both position and interaction on the same trigger element.'},
24
- {name: 'positionRef', type: 'RefCallback<HTMLElement>', description: 'Ref for the positioning anchor element.'},
25
- {name: 'interactionRef', type: 'RefCallback<HTMLElement>', description: 'Ref for the hover/focus interaction element.'},
26
- {name: 'anchorId', type: 'string', description: 'CSS anchor name for advanced positioning cases.'},
27
- {name: 'describedBy', type: 'string', description: 'ID to compose into aria-describedby on the trigger.'},
28
- {name: 'renderTooltip', type: "(children: ReactNode, props?: Omit<ContextRenderProps, 'positioning'>) => ReactNode", description: 'Render function for the anchor-positioned tooltip content. The positioning opt-out is excluded: the tooltip always derives its position from placement/alignment.'},
81
+ {
82
+ name: 'ref',
83
+ type: 'RefCallback<HTMLElement>',
84
+ description:
85
+ 'Combined ref that sets both position and interaction on the same trigger element.',
86
+ },
87
+ {
88
+ name: 'positionRef',
89
+ type: 'RefCallback<HTMLElement>',
90
+ description: 'Ref for the positioning anchor element.',
91
+ },
92
+ {
93
+ name: 'interactionRef',
94
+ type: 'RefCallback<HTMLElement>',
95
+ description: 'Ref for the hover/focus interaction element.',
96
+ },
97
+ {
98
+ name: 'anchorId',
99
+ type: 'string',
100
+ description: 'CSS anchor name for advanced positioning cases.',
101
+ },
102
+ {
103
+ name: 'describedBy',
104
+ type: 'string',
105
+ description: 'ID to compose into aria-describedby on the trigger.',
106
+ },
107
+ {
108
+ name: 'renderTooltip',
109
+ type: "(children: ReactNode, props?: Omit<ContextRenderProps, 'positioning'>) => ReactNode",
110
+ description:
111
+ 'Render function for the anchor-positioned tooltip content. The positioning opt-out is excluded: the tooltip always derives its position from placement/alignment.',
112
+ },
113
+ {
114
+ name: 'show',
115
+ type: '() => void',
116
+ description:
117
+ 'Opens the tooltip now and keeps it open until hide(), Escape, a press outside, or focus leaving its trigger. Its text is announced once, and onShow fires. Under a controlled isOpen it only calls onShow. Does nothing while isEnabled is false.',
118
+ },
119
+ {
120
+ name: 'hide',
121
+ type: '() => void',
122
+ description:
123
+ 'Closes the tooltip now, and onHide fires. Under a controlled isOpen it only calls onHide.',
124
+ },
29
125
  ],
30
126
  usage: {
31
- description: 'Headless hook for hover/focus-triggered tooltips. Builds on useLayer with hover intent, keyboard focus handling, and accessible aria-describedby linking. Use for custom trigger elements that need tooltip behavior without the wrapper component.',
127
+ description:
128
+ 'Headless hook for hover/focus-triggered tooltips. Builds on useLayer with hover intent, keyboard focus handling, and accessible aria-describedby linking. Use for custom trigger elements that need tooltip behavior without the wrapper component.',
32
129
  bestPractices: [
33
- {guidance: true, description: 'Use for brief text labels that describe icon buttons, truncated text, abbreviations, or compact controls.'},
34
- {guidance: true, description: 'Prefer the Tooltip component for standard wrapping; use the hook when the trigger is not a simple child.'},
35
- {guidance: false, description: 'Put interactive content inside tooltips: use Popover or HoverCard instead.'},
130
+ {
131
+ guidance: true,
132
+ description:
133
+ 'Use for brief text labels that describe icon buttons, truncated text, abbreviations, or compact controls.',
134
+ },
135
+ {
136
+ guidance: true,
137
+ description:
138
+ 'Prefer the Tooltip component for standard wrapping; use the hook when the trigger is not a simple child.',
139
+ },
140
+ {
141
+ guidance: true,
142
+ description:
143
+ 'For a toggle-style trigger, have your own button call show() and hide() on each press. Give it aria-describedby and aria-controls set to describedBy, and aria-expanded (true while show() holds the tooltip, false after hide() or onHide), and keep its own accessible name. For an info icon, use InfoTip instead.',
144
+ },
145
+ {
146
+ guidance: false,
147
+ description:
148
+ 'Put interactive content inside tooltips: use Popover or HoverCard instead.',
149
+ },
36
150
  ],
37
151
  },
38
152
  relatedComponents: ['Tooltip', 'HoverCard', 'Popover'],
@@ -43,16 +157,22 @@ export const docs = {
43
157
 
44
158
  /** @type {import('@astryxdesign/cli/authoring').HookTranslationDoc} */
45
159
  export const docsDense = {
46
- description: 'Headless hover/focus tooltip hook. Builds on useLayer w/ hover intent, keyboard focus handling, aria-describedby. Use for custom triggers without wrapper component.',
160
+ description:
161
+ 'Headless hover/focus tooltip hook. Builds on useLayer w/ hover intent, keyboard focus handling, aria-describedby. Use for custom triggers without wrapper component.',
47
162
  paramDescriptions: {
48
- placement: 'position relative to trigger. logical: start/end follow the popover\'s inherited direction (RTL mirrors).',
49
- alignment: 'alignment along placement axis. logical: start/end follow the popover\'s inherited direction (RTL mirrors).',
163
+ placement:
164
+ "position relative to trigger. logical: start/end follow the popover's inherited direction (RTL mirrors).",
165
+ alignment:
166
+ "alignment along placement axis. logical: start/end follow the popover's inherited direction (RTL mirrors).",
50
167
  delay: 'show delay in ms.',
51
168
  hideDelay: 'hide delay after mouse/focus leave in ms.',
52
- focusTrigger: 'when focus opens tooltip; auto = focus on the trigger, or inside a trigger focusable when focus arrives.',
53
- touchTrigger: 'tap behavior with no hover; auto = tap unless trigger acts, tap = always, none = never.',
169
+ focusTrigger:
170
+ 'when focus opens tooltip; auto = focus on the trigger, or inside a trigger focusable when focus arrives.',
171
+ touchTrigger:
172
+ 'tap behavior with no hover; auto = tap unless trigger acts, tap = always, none = never.',
54
173
  isEnabled: 'whether hover/focus triggers are enabled.',
55
- isOpen: 'controlled open state: true force-show, false force-hide, undefined unmanaged.',
174
+ isOpen:
175
+ 'controlled open state: true force-show, false force-hide, undefined unmanaged.',
56
176
  isDefaultOpen: 'show on mount.',
57
177
  onShow: 'fires when tooltip becomes visible.',
58
178
  onHide: 'fires when tooltip hides.',
@@ -64,13 +184,33 @@ export const docsDense = {
64
184
  anchorId: 'CSS anchor name.',
65
185
  describedBy: 'ID for aria-describedby.',
66
186
  renderTooltip: 'renders anchor-positioned tooltip content.',
187
+ show: 'opens + holds until hide()/Escape/outside press/focus leave; announces once; onShow. Controlled: onShow only. No-op when disabled.',
188
+ hide: 'closes; onHide. Controlled: onHide only.',
67
189
  },
68
190
  usage: {
69
- description: 'Headless hover/focus tooltip hook. Builds on useLayer w/ hover intent, keyboard focus handling, aria-describedby. Use for custom triggers without wrapper component.',
191
+ description:
192
+ 'Headless hover/focus tooltip hook. Builds on useLayer w/ hover intent, keyboard focus handling, aria-describedby. Use for custom triggers without wrapper component.',
70
193
  bestPractices: [
71
- {guidance: true, description: 'Use for brief text labels describing icon buttons, truncated text, abbreviations, compact controls.'},
72
- {guidance: true, description: 'Prefer Tooltip for standard wrapping; use hook when trigger is not simple child.'},
73
- {guidance: false, description: 'Put interactive content in tooltips: use Popover / HoverCard instead.'},
194
+ {
195
+ guidance: true,
196
+ description:
197
+ 'Use for brief text labels describing icon buttons, truncated text, abbreviations, compact controls.',
198
+ },
199
+ {
200
+ guidance: true,
201
+ description:
202
+ 'Prefer Tooltip for standard wrapping; use hook when trigger is not simple child.',
203
+ },
204
+ {
205
+ guidance: true,
206
+ description:
207
+ 'Toggle-style trigger: own button calls show()/hide() per press, sets aria-describedby + aria-controls={describedBy}, aria-expanded (true while held), keeps its own name. Info icon: use InfoTip.',
208
+ },
209
+ {
210
+ guidance: false,
211
+ description:
212
+ 'Put interactive content in tooltips: use Popover / HoverCard instead.',
213
+ },
74
214
  ],
75
215
  },
76
216
  };