@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
@@ -0,0 +1,35 @@
1
+ /**
2
+ * How long a tap's lift waits for the browser's own click, ms. The browser
3
+ * sends that click with the lift when the page has no double-tap delay. The
4
+ * wait runs out for a lift that the browser does not count as a click, such
5
+ * as a hold. It also runs out when a busy main thread holds the click back.
6
+ */
7
+ export declare const BROWSER_CLICK_WAIT_MS = 300;
8
+ /** What a control does when the browser's click comes, or does not. */
9
+ export interface BrowserClickWaitHandlers {
10
+ /** The browser's click ran its handlers. `isCancelled`: one cancelled it. */
11
+ readonly onClicked: (isCancelled: boolean) => void;
12
+ /** No browser click came in time. */
13
+ readonly onNoClick: () => void;
14
+ }
15
+ /**
16
+ * Waits for the browser's own click inside `target` after a tap's lift. That
17
+ * click is the activation: `onClicked` runs once its handlers have run. With
18
+ * no click in time, `onNoClick` runs. The returned call ends the wait at once
19
+ * and leaves no listener or timer behind.
20
+ */
21
+ export declare function awaitBrowserClick(target: Element, { onClicked, onNoClick }: BrowserClickWaitHandlers): () => void;
22
+ /**
23
+ * Click `element` (its own `click()`, so its activation behavior and every
24
+ * handler run as for any click) and report whether a handler cancelled it.
25
+ * The event is read from a capture listener that exists only for the call.
26
+ */
27
+ export declare function clickAndReport(element: HTMLElement): boolean;
28
+ /**
29
+ * Clicks `element` for a lift the control decided itself, and reports
30
+ * whether a handler cancelled the click. The shared click guard swallows the
31
+ * browser's own click for the same lift, if it comes later, so the lift
32
+ * activates once.
33
+ */
34
+ export declare function clickForLift(element: HTMLElement): boolean;
35
+ //# sourceMappingURL=browserClickWait.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserClickWait.d.ts","sourceRoot":"","sources":["../../src/utils/browserClickWait.ts"],"names":[],"mappings":"AAkBA;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,uEAAuE;AACvE,MAAM,WAAW,wBAAwB;IACvC,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,qCAAqC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,EACf,EAAC,SAAS,EAAE,SAAS,EAAC,EAAE,wBAAwB,GAC/C,MAAM,IAAI,CAwDZ;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAe5D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAG1D"}
@@ -0,0 +1,123 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file browserClickWait.ts
5
+ * @input An element a tap's lift released on, and the control that acts on
6
+ * its click
7
+ * @output BROWSER_CLICK_WAIT_MS, awaitBrowserClick, clickForLift and
8
+ * clickAndReport
9
+ * @position The one wait for the browser's click after a tap, shared by
10
+ * Switch/useSwitchTouch.ts and SegmentedControl/useSegmentedTouchTracking.ts.
11
+ * It swallows nothing: utils/clickGuard.ts is the one guard for a late click.
12
+ *
13
+ * SYNC: When modified, update browserClickWait.test.ts.
14
+ */
15
+
16
+ import { armClickGuard, withoutClickGuard } from "./clickGuard.js";
17
+ import { subscribeInput } from "./inputStream.js";
18
+
19
+ /**
20
+ * How long a tap's lift waits for the browser's own click, ms. The browser
21
+ * sends that click with the lift when the page has no double-tap delay. The
22
+ * wait runs out for a lift that the browser does not count as a click, such
23
+ * as a hold. It also runs out when a busy main thread holds the click back.
24
+ */
25
+ export const BROWSER_CLICK_WAIT_MS = 300;
26
+
27
+ /** What a control does when the browser's click comes, or does not. */
28
+
29
+ /**
30
+ * Waits for the browser's own click inside `target` after a tap's lift. That
31
+ * click is the activation: `onClicked` runs once its handlers have run. With
32
+ * no click in time, `onNoClick` runs. The returned call ends the wait at once
33
+ * and leaves no listener or timer behind.
34
+ */
35
+ export function awaitBrowserClick(target, {
36
+ onClicked,
37
+ onNoClick
38
+ }) {
39
+ const view = target.ownerDocument.defaultView;
40
+ if (view == null) {
41
+ // A document with no window gets no click: the wait runs out at once.
42
+ let isEnded = false;
43
+ queueMicrotask(() => {
44
+ if (!isEnded) {
45
+ onNoClick();
46
+ }
47
+ });
48
+ return () => {
49
+ isEnded = true;
50
+ };
51
+ }
52
+ let isDone = false;
53
+ let report = null;
54
+ let timer = null;
55
+ let stopListening = null;
56
+ const stop = () => {
57
+ isDone = true;
58
+ stopListening?.();
59
+ stopListening = null;
60
+ if (timer != null) {
61
+ view.clearTimeout(timer);
62
+ timer = null;
63
+ }
64
+ };
65
+ stopListening = subscribeInput(view, 'click', event => {
66
+ if (isDone || !event.isTrusted || !target.contains(event.target)) {
67
+ return;
68
+ }
69
+ stop();
70
+ // After every handler has run: was it cancelled?
71
+ report = view.setTimeout(() => {
72
+ report = null;
73
+ onClicked(event.defaultPrevented);
74
+ }, 0);
75
+ });
76
+ timer = view.setTimeout(() => {
77
+ if (isDone) {
78
+ return;
79
+ }
80
+ stop();
81
+ onNoClick();
82
+ }, BROWSER_CLICK_WAIT_MS);
83
+ return () => {
84
+ stop();
85
+ if (report != null) {
86
+ view.clearTimeout(report);
87
+ report = null;
88
+ }
89
+ };
90
+ }
91
+
92
+ /**
93
+ * Click `element` (its own `click()`, so its activation behavior and every
94
+ * handler run as for any click) and report whether a handler cancelled it.
95
+ * The event is read from a capture listener that exists only for the call.
96
+ */
97
+ export function clickAndReport(element) {
98
+ const view = element.ownerDocument.defaultView;
99
+ let clicked = null;
100
+ const grab = event => {
101
+ if (clicked == null && event.target === element) {
102
+ clicked = event;
103
+ }
104
+ };
105
+ view?.addEventListener('click', grab, true);
106
+ try {
107
+ element.click();
108
+ } finally {
109
+ view?.removeEventListener('click', grab, true);
110
+ }
111
+ return clicked?.defaultPrevented === true;
112
+ }
113
+
114
+ /**
115
+ * Clicks `element` for a lift the control decided itself, and reports
116
+ * whether a handler cancelled the click. The shared click guard swallows the
117
+ * browser's own click for the same lift, if it comes later, so the lift
118
+ * activates once.
119
+ */
120
+ export function clickForLift(element) {
121
+ armClickGuard(element.ownerDocument);
122
+ return withoutClickGuard(() => clickAndReport(element));
123
+ }
@@ -12,9 +12,22 @@ export interface ClickGuardOptions {
12
12
  * @default false
13
13
  */
14
14
  readonly staysInstalled?: boolean;
15
+ /**
16
+ * The gesture host's arm at a claimed touch's lift: the guard also takes
17
+ * that touch's late `mousedown` and `mouseup` while it is armed.
18
+ * @default false
19
+ */
20
+ readonly takesLateMouse?: boolean;
21
+ /**
22
+ * The menu press model's arm at a finger's release: the guard also cancels
23
+ * that touch's `touchend`, so the browser creates no click for it. A
24
+ * cancelled `touchend` disarms the guard.
25
+ * @default false
26
+ */
27
+ readonly cancelsTouchEnd?: boolean;
15
28
  }
16
29
  /** Swallow the browser's next click on `doc` (see the file header). */
17
- export declare function armClickGuard(doc: Document, { staysInstalled }?: ClickGuardOptions): void;
30
+ export declare function armClickGuard(doc: Document, { staysInstalled, takesLateMouse, cancelsTouchEnd, }?: ClickGuardOptions): void;
18
31
  /** Stop swallowing on `doc`; idempotent. */
19
32
  export declare function disarmClickGuard(doc: Document): void;
20
33
  /** Whether the guard on `doc` would swallow the next click. */
@@ -1 +1 @@
1
- {"version":3,"file":"clickGuard.d.ts","sourceRoot":"","sources":["../../src/utils/clickGuard.ts"],"names":[],"mappings":"AAgCA;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,yCAAyC;AACzC,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AA8BD,uEAAuE;AACvE,wBAAgB,aAAa,CAC3B,GAAG,EAAE,QAAQ,EACb,EAAC,cAAsB,EAAC,GAAE,iBAAsB,GAC/C,IAAI,CAoBN;AAED,4CAA4C;AAC5C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAYpD;AAED,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAOzD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAQ/C"}
1
+ {"version":3,"file":"clickGuard.d.ts","sourceRoot":"","sources":["../../src/utils/clickGuard.ts"],"names":[],"mappings":"AA0CA;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,yCAAyC;AACzC,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AA8BD,uEAAuE;AACvE,wBAAgB,aAAa,CAC3B,GAAG,EAAE,QAAQ,EACb,EACE,cAAsB,EACtB,cAAsB,EACtB,eAAuB,GACxB,GAAE,iBAAsB,GACxB,IAAI,CA+CN;AAED,4CAA4C;AAC5C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAYpD;AAED,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAOzD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAQ/C"}
@@ -21,6 +21,16 @@
21
21
  // page adds later (AST-057, AST-094). If only the gesture host arms it, the
22
22
  // click listener stays only while the guard is armed.
23
23
  //
24
+ // An arm at a claimed touch's lift also takes that touch's late `mousedown`
25
+ // and `mouseup`. WebKit sends them a few ms after a held tap's cancelled
26
+ // `touchend`, aimed at whatever is under the finger by then. They go with
27
+ // the click, the next `pointerdown` or the window, as the guard does.
28
+ //
29
+ // The menu press model's arm at a finger's release also cancels that touch's
30
+ // `touchend`, so the browser creates no click and no compatibility mouse
31
+ // events. A busy main thread can otherwise hold that click past the window,
32
+ // when a drill-in has put another row under the finger.
33
+ //
24
34
  // Some clicks always pass:
25
35
  // - a click with `detail` 0: a keyboard's, a screen reader's, or one that the
26
36
  // page dispatches;
@@ -61,7 +71,9 @@ function listenForClicks(view) {
61
71
 
62
72
  /** Swallow the browser's next click on `doc` (see the file header). */
63
73
  export function armClickGuard(doc, {
64
- staysInstalled = false
74
+ staysInstalled = false,
75
+ takesLateMouse = false,
76
+ cancelsTouchEnd = false
65
77
  } = {}) {
66
78
  const view = doc.defaultView;
67
79
  if (view == null) {
@@ -83,6 +95,30 @@ export function armClickGuard(doc, {
83
95
  guard.unsubscribers.push(
84
96
  // The next press is a new gesture: its click must never be eaten.
85
97
  subscribeInput(view, 'pointerdown', () => disarmClickGuard(doc)));
98
+ if (takesLateMouse) {
99
+ for (const type of ['mousedown', 'mouseup']) {
100
+ guard.unsubscribers.push(subscribeInput(view, type, swallowLateMouse, {
101
+ cancels: true
102
+ }));
103
+ }
104
+ }
105
+ if (cancelsTouchEnd) {
106
+ // A touch sends its pointerup before its touchend, so the next touchend is
107
+ // that touch's own. The next pointerdown disarms the guard first.
108
+ const stopTouchEnd = subscribeInput(view, 'touchend', event => {
109
+ stopTouchEnd();
110
+ // A touchend that the browser took for a scroll is not cancelable.
111
+ // The guard stays armed for a click that may follow it.
112
+ if (event.cancelable) {
113
+ event.preventDefault();
114
+ // No click follows a cancelled touchend.
115
+ disarmClickGuard(doc);
116
+ }
117
+ }, {
118
+ cancels: true
119
+ });
120
+ guard.unsubscribers.push(stopTouchEnd);
121
+ }
86
122
  guard.timer = setTimeout(() => disarmClickGuard(doc), CLICK_GUARD_WINDOW_MS);
87
123
  }
88
124
 
@@ -133,6 +169,15 @@ export function __resetClickGuardForTest() {
133
169
  stayingClickListeners.delete(window);
134
170
  }
135
171
  }
172
+
173
+ /** Swallows a claimed touch's late `mousedown` or `mouseup`. */
174
+ function swallowLateMouse(event) {
175
+ if (isExempt(event)) {
176
+ return;
177
+ }
178
+ event.preventDefault();
179
+ event.stopImmediatePropagation();
180
+ }
136
181
  function isExempt(event) {
137
182
  if (event.detail === 0 || unguardedDepth > 0) {
138
183
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"dateParser.d.ts","sourceRoot":"","sources":["../../src/utils/dateParser.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAC,KAAK,SAAS,EAAqC,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,EACL,gBAAgB,IAAI,QAAQ,EAC5B,cAAc,IAAI,SAAS,GAC5B,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,MAAa,GAAG,OAAO,CAO/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAa,GACpB,SAAS,GAAG,IAAI,CAsGlB"}
1
+ {"version":3,"file":"dateParser.d.ts","sourceRoot":"","sources":["../../src/utils/dateParser.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAC,KAAK,SAAS,EAAqC,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,EACL,gBAAgB,IAAI,QAAQ,EAC5B,cAAc,IAAI,SAAS,GAC5B,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,MAAa,GAAG,OAAO,CAO/D;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAa,GACpB,SAAS,GAAG,IAAI,CAiHlB"}
@@ -27,6 +27,11 @@ export function isLocaleDayFirst(locale = 'en') {
27
27
  return dayIndex < monthIndex;
28
28
  }
29
29
 
30
+ // Built at run time: a Unicode property escape in a literal fails a source
31
+ // build whose Babel lacks the Unicode data.
32
+ const LETTER_FREE = new RegExp('^[^\\p{L}]+$', 'u');
33
+ const YEAR_FIRST = new RegExp('^\\d{4}[^\\p{L}\\d]', 'u');
34
+
30
35
  /**
31
36
  * Parses user input into a PlainDate.
32
37
  *
@@ -122,6 +127,13 @@ export function parseDateInput(input, locale = 'en') {
122
127
  if (/^\d+$/.test(trimmed)) {
123
128
  return null;
124
129
  }
130
+ // In a day-first locale, letter-free text that no form above matched is not
131
+ // a date. Native `Date` reads `a/b/c` month first. It also takes a year of
132
+ // one to three digits. So "12/01/2" gives a wrong date. A four-digit year
133
+ // written first is not ambiguous.
134
+ if (isLocaleDayFirst(locale) && LETTER_FREE.test(trimmed) && !YEAR_FIRST.test(trimmed)) {
135
+ return null;
136
+ }
125
137
  const parsed = new Date(trimmed);
126
138
  if (!isNaN(parsed.getTime())) {
127
139
  const fromDate = plainDateFromDate(parsed);
@@ -9,8 +9,9 @@
9
9
  * SYNC: When modified, update pressFeedback.ts, pressGesture.ts (the fade
10
10
  * clock), hooks/usePressFeedback.doc.mjs, the components that paint the touch
11
11
  * press off an ancestor scope or a pseudo-element (Switch, Tab,
12
- * CheckboxInput, RadioListItem, ClickableCard, SelectableCard, Thumbnail)
13
- * and scripts/build-css.test.mjs.
12
+ * CheckboxInput, RadioListItem, ClickableCard, SelectableCard, Thumbnail),
13
+ * Button (a tracked action sizes its `:active` image to zero) and
14
+ * scripts/build-css.test.mjs.
14
15
  */
15
16
  import * as stylex from '@stylexjs/stylex';
16
17
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"interactionOverlay.stylex.d.ts","sourceRoot":"","sources":["../../src/utils/interactionOverlay.stylex.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;GAaG;AAmCH,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAG3C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS;;WAEpB,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW;IACtB,iEAAiE;;CAEjE,CAAC;AA8HH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8HnC,CAAC"}
1
+ {"version":3,"file":"interactionOverlay.stylex.d.ts","sourceRoot":"","sources":["../../src/utils/interactionOverlay.stylex.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;GAcG;AAmCH,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAG3C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS;;WAEpB,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW;IACtB,iEAAiE;;CAEjE,CAAC;AA8HH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8HnC,CAAC"}
@@ -15,8 +15,9 @@
15
15
  * SYNC: When modified, update pressFeedback.ts, pressGesture.ts (the fade
16
16
  * clock), hooks/usePressFeedback.doc.mjs, the components that paint the touch
17
17
  * press off an ancestor scope or a pseudo-element (Switch, Tab,
18
- * CheckboxInput, RadioListItem, ClickableCard, SelectableCard, Thumbnail)
19
- * and scripts/build-css.test.mjs.
18
+ * CheckboxInput, RadioListItem, ClickableCard, SelectableCard, Thumbnail),
19
+ * Button (a tracked action sizes its `:active` image to zero) and
20
+ * scripts/build-css.test.mjs.
20
21
  */
21
22
 
22
23
  // Every surface that paints a press uses one of these styles, so a change to
@@ -1 +1 @@
1
- {"version":3,"file":"pressFeedback.d.ts","sourceRoot":"","sources":["../../src/utils/pressFeedback.ts"],"names":[],"mappings":"AAgDA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD,qDAAqD;AACrD,eAAO,MAAM,cAAc,EAAE;IAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAA;CAE/D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAwnB5C;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,IAAI,CA0BjD"}
1
+ {"version":3,"file":"pressFeedback.d.ts","sourceRoot":"","sources":["../../src/utils/pressFeedback.ts"],"names":[],"mappings":"AAkDA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD,qDAAqD;AACrD,eAAO,MAAM,cAAc,EAAE;IAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAA;CAE/D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAwoB5C;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,IAAI,CA0BjD"}
@@ -2,8 +2,8 @@
2
2
 
3
3
  /**
4
4
  * @file pressFeedback.ts
5
- * @input The press state machine (pressGesture.ts), the menu-press marker
6
- * (hooks/menuPressMarker.ts) and the document's pointer, keyboard, scroll and
5
+ * @input The press state machine (pressGesture.ts), the menu-press and
6
+ * press-group markers and the document's pointer, keyboard, scroll and
7
7
  * visibility events
8
8
  * @output PRESSABLE_ATTRIBUTE, PRESSED_ATTRIBUTE, pressableProps and
9
9
  * installPressFeedback
@@ -37,6 +37,8 @@ import { idlePressGesture, PRESS_FADE_MS, PRESS_FLASH_MS, PRESS_ONSET_MS, PRESS_
37
37
  import { isCoarsePointer, watchCoarsePointer } from "./coarsePointer.js";
38
38
  import { subscribeInput } from "./inputStream.js";
39
39
  import { TOUCH_QUERY } from "./touchPresentation.js";
40
+ import { holdsPressThroughDrag } from "../privateAttributes/pressHoldsDrag.stylex.js";
41
+ import { isTrackedByGroup } from "../privateAttributes/pressGroupItem.stylex.js";
40
42
 
41
43
  /**
42
44
  * The marker the controller finds with `closest()`. Every Astryx component
@@ -287,14 +289,19 @@ function stylesheetDroppedActive() {
287
289
 
288
290
  /**
289
291
  * The surface a mouse button's or the Space key's press paints, if any: the
290
- * innermost marked surface, outside a menu. A key's press paints only a
291
- * focused element that is itself the surface, as `:active` does.
292
+ * innermost marked surface, outside a menu and off a tracked action. A key's
293
+ * press paints only a focused element that is itself the surface, as
294
+ * `:active` does.
292
295
  */
293
296
  function buttonSurfaceAt(target, pointerId) {
294
297
  const element = surfaceAt(target);
295
298
  if (element == null || element.closest(MENU_PRESS_ROOT) != null) {
296
299
  return null;
297
300
  }
301
+ // A group's tracker follows pointers only, so a key's press stays here.
302
+ if (pointerId != null && isTrackedByGroup(element)) {
303
+ return null;
304
+ }
298
305
  if (pointerId == null && element !== target) {
299
306
  return null;
300
307
  }
@@ -378,7 +385,9 @@ function onPointerDown(event) {
378
385
  const braking = element != null && scrollerIsBraking(element);
379
386
  lastTouchAt = Date.now();
380
387
  lastTouchTarget = event.target instanceof Node ? event.target : null;
381
- if (element == null || braking) {
388
+ // A group's tracker paints a tracked action, so two writers would erase each
389
+ // other's paint. The touch still counts for the brake above.
390
+ if (element == null || braking || isTrackedByGroup(element)) {
382
391
  return;
383
392
  }
384
393
  takeOver(button, element);
@@ -399,6 +408,10 @@ function onPointerMove(event) {
399
408
  if (live == null || live.pointerId != null && event.pointerId !== live.pointerId) {
400
409
  return;
401
410
  }
411
+ // The finger drags the surface's own control: its travel keeps the press.
412
+ if (holdsPressThroughDrag(live.element)) {
413
+ return;
414
+ }
402
415
  apply(finger, pressGestureStep(live.gesture, {
403
416
  kind: 'move',
404
417
  x: event.clientX,
@@ -504,6 +517,11 @@ function activatesOnSpace(target) {
504
517
  return target instanceof HTMLInputElement && SPACE_ACTIVATED_INPUT_TYPES.has(target.type);
505
518
  }
506
519
 
520
+ /** A tracked action takes no `:active` paint, so a key's press paints here. */
521
+ function isTrackedAction(target) {
522
+ return target instanceof Element && isTrackedByGroup(target);
523
+ }
524
+
507
525
  /**
508
526
  * Space went down on a focused button that is itself a pressable surface.
509
527
  * Heard in the BUBBLE phase, after the page's own handlers, so a press the
@@ -511,7 +529,7 @@ function activatesOnSpace(target) {
511
529
  * not engage for one.
512
530
  */
513
531
  function onKeyDown(event) {
514
- if (event.key !== ' ' || event.repeat || event.isComposing || event.defaultPrevented || !activatesOnSpace(event.target) || !stylesheetDroppedActive()) {
532
+ if (event.key !== ' ' || event.repeat || event.isComposing || event.defaultPrevented || !activatesOnSpace(event.target) || !(stylesheetDroppedActive() || isTrackedAction(event.target))) {
515
533
  return;
516
534
  }
517
535
  pressButton(event.target, null);
package/locales/en.json CHANGED
@@ -255,6 +255,126 @@
255
255
  "defaultMessage": "{count, number} {count, plural, one {result} other {results}}",
256
256
  "description": "Live result-count text next to the PowerSearch input, announced to screen readers on change. Example: `12 results`, `1 result`; keep compact."
257
257
  },
258
+ "@astryx.powersearch.sheet.filtersTitle": {
259
+ "defaultMessage": "Filters",
260
+ "description": "Heading and accessible name of the PowerSearch touch sheet that lists the active filters (experimental bottom-sheet presentation). Plural noun."
261
+ },
262
+ "@astryx.powersearch.sheet.addFilter": {
263
+ "defaultMessage": "Add filter",
264
+ "description": "Button label in the PowerSearch touch flow: in the Filters sheet header it opens the field list; in the value step it confirms a new filter. Imperative verb; no leading plus sign."
265
+ },
266
+ "@astryx.powersearch.sheet.noFilters": {
267
+ "defaultMessage": "No filters applied",
268
+ "description": "Heading of the PowerSearch Filters sheet empty state when no filter is active (experimental bottom-sheet presentation). Neutral tone."
269
+ },
270
+ "@astryx.powersearch.sheet.noFiltersDescription": {
271
+ "defaultMessage": "Add a filter to narrow your results and find what you need faster.",
272
+ "description": "Guidance line under the PowerSearch Filters sheet empty state, above its Add filter action. One short sentence."
273
+ },
274
+ "@astryx.powersearch.sheet.clearAll": {
275
+ "defaultMessage": "Clear all",
276
+ "description": "Button label in the PowerSearch Filters sheet footer that asks to remove every editable filter. Imperative verb + determiner."
277
+ },
278
+ "@astryx.powersearch.sheet.clearAllTitle": {
279
+ "defaultMessage": "Clear all filters?",
280
+ "description": "Title and accessible name of the confirmation dialog that Clear all opens in the PowerSearch touch flow. A short question."
281
+ },
282
+ "@astryx.powersearch.sheet.clearAllDescription": {
283
+ "defaultMessage": "This removes all editable filters from this search.",
284
+ "description": "Body text of the PowerSearch Clear all confirmation dialog. Read-only filters stay, so it names editable filters."
285
+ },
286
+ "@astryx.powersearch.sheet.clearAllConfirm": {
287
+ "defaultMessage": "Clear filters",
288
+ "description": "Destructive action of the PowerSearch Clear all confirmation dialog: removes the editable filters. Imperative verb + plural noun."
289
+ },
290
+ "@astryx.powersearch.sheet.clearAllCancel": {
291
+ "defaultMessage": "Keep filters",
292
+ "description": "Safe action of the PowerSearch Clear all confirmation dialog: closes it and changes nothing. Imperative verb + plural noun."
293
+ },
294
+ "@astryx.powersearch.sheet.done": {
295
+ "defaultMessage": "Done",
296
+ "description": "Primary button label in the PowerSearch Filters sheet footer that closes the sheet. Short; marks the end of the filtering task."
297
+ },
298
+ "@astryx.powersearch.sheet.search": {
299
+ "defaultMessage": "Search",
300
+ "description": "Screen-reader-only label of the content-search box at the top of the PowerSearch Add filter sheet; its suggestions list inline below it. Noun or verb as reads best."
301
+ },
302
+ "@astryx.powersearch.sheet.searchResults": {
303
+ "defaultMessage": "Search results",
304
+ "description": "Screen-reader-only name of the inline suggestion list under the PowerSearch Add filter sheet's content search. Plural noun."
305
+ },
306
+ "@astryx.powersearch.sheet.searchFields": {
307
+ "defaultMessage": "Search filters",
308
+ "description": "Screen-reader-only label of the field-list filter box in the PowerSearch Add filter sheet, shown once the config has eight or more fields. Imperative verb + plural noun."
309
+ },
310
+ "@astryx.powersearch.sheet.searchFieldsPlaceholder": {
311
+ "defaultMessage": "Search filters…",
312
+ "description": "Placeholder inside the field-list filter box in the PowerSearch Add filter sheet. Imperative verb; trailing `…` is one character."
313
+ },
314
+ "@astryx.powersearch.sheet.ungroupedFields": {
315
+ "defaultMessage": "General",
316
+ "description": "Heading of the PowerSearch Add filter sheet's list of fields that belong to no group, shown before the named groups. A short noun."
317
+ },
318
+ "@astryx.powersearch.sheet.noMatchingFields": {
319
+ "defaultMessage": "No filters match your search",
320
+ "description": "Empty-state text in the PowerSearch Add filter sheet when the field-list filter matches no field. Neutral tone."
321
+ },
322
+ "@astryx.powersearch.sheet.tryDifferentSearch": {
323
+ "defaultMessage": "Try a different search.",
324
+ "description": "Guidance line under the PowerSearch Add filter sheet's empty search result (\"No results found\", \"No filters match your search\"). One short sentence."
325
+ },
326
+ "@astryx.powersearch.sheet.noResults": {
327
+ "defaultMessage": "No results found",
328
+ "description": "Empty-state text in the PowerSearch Add filter sheet when the content search has no suggestion for the typed query. Neutral tone (not error-y)."
329
+ },
330
+ "@astryx.powersearch.sheet.filterUnavailable": {
331
+ "defaultMessage": "This filter is no longer available",
332
+ "description": "Message in the PowerSearch value step when a config update removed the field or operator being edited; Cancel remains as the way out, and the Filters row keeps its remove action."
333
+ },
334
+ "@astryx.powersearch.sheet.removeFilter": {
335
+ "defaultMessage": "Remove {field} filter",
336
+ "description": "Accessible name and tooltip of the trailing remove button on a PowerSearch Filters sheet row; field is the filter's field label (for example \"Remove Status filter\")."
337
+ },
338
+ "@astryx.powersearch.sheet.relativeDaysAgo": {
339
+ "defaultMessage": "{count, number} {count, plural, one {day} other {days}} ago",
340
+ "description": "A relative-date choice row in the PowerSearch touch sheet, in the past (for example \"3 days ago\"). The popover editor lists the same choices."
341
+ },
342
+ "@astryx.powersearch.sheet.relativeDaysFromNow": {
343
+ "defaultMessage": "{count, number} {count, plural, one {day} other {days}} from now",
344
+ "description": "A relative-date choice row in the PowerSearch touch sheet, in the future (for example \"3 days from now\"). The popover editor lists the same choices."
345
+ },
346
+ "@astryx.powersearch.sheet.relativeWeeksAgo": {
347
+ "defaultMessage": "{count, number} {count, plural, one {week} other {weeks}} ago",
348
+ "description": "A relative-date choice row in the PowerSearch touch sheet, in the past (for example \"3 weeks ago\"). The popover editor lists the same choices."
349
+ },
350
+ "@astryx.powersearch.sheet.relativeWeeksFromNow": {
351
+ "defaultMessage": "{count, number} {count, plural, one {week} other {weeks}} from now",
352
+ "description": "A relative-date choice row in the PowerSearch touch sheet, in the future (for example \"3 weeks from now\"). The popover editor lists the same choices."
353
+ },
354
+ "@astryx.powersearch.sheet.relativeMonthsAgo": {
355
+ "defaultMessage": "{count, number} {count, plural, one {month} other {months}} ago",
356
+ "description": "A relative-date choice row in the PowerSearch touch sheet, in the past (for example \"3 months ago\"). The popover editor lists the same choices."
357
+ },
358
+ "@astryx.powersearch.sheet.relativeMonthsFromNow": {
359
+ "defaultMessage": "{count, number} {count, plural, one {month} other {months}} from now",
360
+ "description": "A relative-date choice row in the PowerSearch touch sheet, in the future (for example \"3 months from now\"). The popover editor lists the same choices."
361
+ },
362
+ "@astryx.powersearch.sheet.fieldOperator": {
363
+ "defaultMessage": "{field} {operator}",
364
+ "description": "A field label joined with an operator label in the PowerSearch touch sheet: the value step's title, an operator radio's name, and the first part of a Filters row (for example \"Status is\"). Translators may reorder the two parts."
365
+ },
366
+ "@astryx.powersearch.sheet.labelValue": {
367
+ "defaultMessage": "{label} {value}",
368
+ "description": "A Filters row's \"field operator\" text joined with its value, as the removal announcement reads it (for example \"Status is Open\"). Translators may reorder the two parts."
369
+ },
370
+ "@astryx.powersearch.sheet.filtersClearedWithCount": {
371
+ "defaultMessage": "All filters removed. {resultCount}",
372
+ "description": "Polite screen-reader announcement after Clear all in the PowerSearch touch sheet when the result count changed with it; resultCount is the field's already formatted result count (for example \"240 results\"). Live-region text, never shown on screen."
373
+ },
374
+ "@astryx.powersearch.sheet.editableFiltersClearedWithCount": {
375
+ "defaultMessage": "Editable filters removed. {resultCount}",
376
+ "description": "Polite screen-reader announcement after Clear all in the PowerSearch touch sheet removes the editable filters, keeps read-only ones, and the result count changed with it; resultCount is the field's already formatted result count (for example \"240 results\"). Live-region text, never shown on screen."
377
+ },
258
378
  "@astryx.alertDialog.cancel": {
259
379
  "defaultMessage": "Cancel",
260
380
  "description": "Button label on the secondary/dismiss button of an AlertDialog (modal confirmation). Imperative verb; consumers usually override with task-specific text."
@@ -1123,6 +1243,10 @@
1123
1243
  "defaultMessage": "All filters removed",
1124
1244
  "description": "Screen-reader announcement after a PowerSearch field's Clear all removes every filter. Distinct from @astryx.tokenizer.allRemoved: PowerSearch words its items as filters."
1125
1245
  },
1246
+ "@astryx.powersearch.editableFiltersRemoved": {
1247
+ "defaultMessage": "Editable filters removed",
1248
+ "description": "Screen-reader announcement after a PowerSearch field's Clear all removes the filters the user can edit and keeps its read-only filters. Used instead of @astryx.powersearch.allFiltersRemoved while a read-only filter remains."
1249
+ },
1126
1250
  "@astryx.resizable.collapsed": {
1127
1251
  "defaultMessage": "Collapsed",
1128
1252
  "description": "aria-valuetext for the Resizable drag handle (role=separator) while its panel is collapsed to zero size. Replaces the numeric value announcement, since the numeric value is clamped to the minimum while collapsed. Adjective describing the panel state, not a verb/command."
@@ -2270,5 +2394,9 @@
2270
2394
  "@astryx.comments.postFailed": {
2271
2395
  "defaultMessage": "Your comment couldn't be posted.",
2272
2396
  "description": "Error shown above the new-comment composer of a lab Comments panel when posting failed; the draft is kept and a Retry action follows."
2397
+ },
2398
+ "@astryx.infoTip.label": {
2399
+ "defaultMessage": "More information",
2400
+ "description": "Default accessible name of an InfoTip, the small info-icon button whose press reveals help about the label, value, or metric beside it."
2273
2401
  }
2274
2402
  }