@astryxdesign/core 0.5.2-canary.2da7a39 → 0.5.2-canary.2e51213

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 (375) hide show
  1. package/dist/AppShell/AppShell.d.ts +2 -2
  2. package/dist/AppShell/AppShell.d.ts.map +1 -1
  3. package/dist/AppShell/AppShell.js +10 -7
  4. package/dist/Banner/Banner.d.ts +5 -0
  5. package/dist/Banner/Banner.d.ts.map +1 -1
  6. package/dist/Banner/Banner.js +7 -2
  7. package/dist/Breadcrumbs/BreadcrumbItem.d.ts +3 -2
  8. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  9. package/dist/Breadcrumbs/BreadcrumbItem.js +22 -15
  10. package/dist/Carousel/Carousel.d.ts.map +1 -1
  11. package/dist/Carousel/Carousel.js +2 -2
  12. package/dist/Chat/ChatComposer.d.ts +2 -2
  13. package/dist/Chat/ChatComposer.d.ts.map +1 -1
  14. package/dist/Chat/ChatComposer.js +21 -2
  15. package/dist/Chat/ChatToolCalls.d.ts +1 -1
  16. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  17. package/dist/Chat/ChatToolCalls.js +12 -34
  18. package/dist/Chat/useChatNewMessages.js +3 -3
  19. package/dist/CheckboxList/CheckboxListItem.d.ts +5 -3
  20. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  21. package/dist/DateTimeInput/DateTimeInput.d.ts +47 -13
  22. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  23. package/dist/DateTimeInput/DateTimeInput.js +269 -162
  24. package/dist/DateTimeInput/NativeDateSegment.d.ts +24 -0
  25. package/dist/DateTimeInput/NativeDateSegment.d.ts.map +1 -0
  26. package/dist/DateTimeInput/NativeDateSegment.js +235 -0
  27. package/dist/DateTimeInput/NativeTimeSegment.d.ts +30 -0
  28. package/dist/DateTimeInput/NativeTimeSegment.d.ts.map +1 -0
  29. package/dist/DateTimeInput/NativeTimeSegment.js +248 -0
  30. package/dist/DateTimeInput/index.d.ts +1 -1
  31. package/dist/DateTimeInput/index.d.ts.map +1 -1
  32. package/dist/DateTimeInput/nativePickerSegmentStyles.d.ts +95 -0
  33. package/dist/DateTimeInput/nativePickerSegmentStyles.d.ts.map +1 -0
  34. package/dist/DateTimeInput/nativePickerSegmentStyles.js +103 -0
  35. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  36. package/dist/DropdownMenu/DropdownMenu.js +2 -4
  37. package/dist/Field/Field.d.ts.map +1 -1
  38. package/dist/Field/Field.js +10 -4
  39. package/dist/Field/PanelSearchInput.d.ts.map +1 -1
  40. package/dist/Field/PanelSearchInput.js +3 -5
  41. package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
  42. package/dist/FieldStatus/FieldStatus.js +4 -2
  43. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  44. package/dist/Layer/useTouchTrigger.js +2 -4
  45. package/dist/Layout/Layout.d.ts +7 -8
  46. package/dist/Layout/Layout.d.ts.map +1 -1
  47. package/dist/Layout/Layout.js +7 -8
  48. package/dist/MultiSelector/MultiSelector.d.ts +11 -1
  49. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  50. package/dist/MultiSelector/MultiSelector.js +89 -45
  51. package/dist/RadioList/RadioListItem.d.ts +30 -5
  52. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  53. package/dist/RadioList/RadioListItem.js +17 -4
  54. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  55. package/dist/Resizable/ResizeHandle.js +102 -44
  56. package/dist/Resizable/index.d.ts +2 -0
  57. package/dist/Resizable/index.d.ts.map +1 -1
  58. package/dist/Resizable/index.js +1 -0
  59. package/dist/Resizable/useResizable.d.ts +89 -8
  60. package/dist/Resizable/useResizable.d.ts.map +1 -1
  61. package/dist/Resizable/useResizable.js +521 -38
  62. package/dist/Resizable/utils.d.ts +35 -0
  63. package/dist/Resizable/utils.d.ts.map +1 -0
  64. package/dist/Resizable/utils.js +27 -0
  65. package/dist/Selector/Selector.d.ts +10 -0
  66. package/dist/Selector/Selector.d.ts.map +1 -1
  67. package/dist/Selector/Selector.js +105 -57
  68. package/dist/Selector/useSelectorPresentation.d.ts +1 -0
  69. package/dist/Selector/useSelectorPresentation.d.ts.map +1 -1
  70. package/dist/Selector/useSelectorPresentation.js +17 -2
  71. package/dist/Slider/Slider.d.ts.map +1 -1
  72. package/dist/Slider/Slider.js +3 -5
  73. package/dist/Spinner/Spinner.d.ts.map +1 -1
  74. package/dist/Spinner/Spinner.js +9 -10
  75. package/dist/Stepper/Step.d.ts +2 -1
  76. package/dist/Stepper/Step.d.ts.map +1 -1
  77. package/dist/Stepper/Step.js +75 -11
  78. package/dist/Stepper/Stepper.d.ts.map +1 -1
  79. package/dist/Stepper/Stepper.js +1 -0
  80. package/dist/TabList/TabList.d.ts.map +1 -1
  81. package/dist/TabList/TabList.js +2 -3
  82. package/dist/Table/index.d.ts +16 -1
  83. package/dist/Table/index.d.ts.map +1 -1
  84. package/dist/Table/index.js +4 -0
  85. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  86. package/dist/Table/plugins/columnResize/useTableColumnResize.js +8 -9
  87. package/dist/Table/plugins/rowStatus/index.d.ts +1 -1
  88. package/dist/Table/plugins/rowStatus/index.d.ts.map +1 -1
  89. package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts +11 -30
  90. package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts.map +1 -1
  91. package/dist/Table/plugins/rowStatus/useTableRowStatus.js +108 -62
  92. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  93. package/dist/Table/plugins/sortable/useTableSortable.js +9 -1
  94. package/dist/Text/useTruncation.d.ts +1 -1
  95. package/dist/Text/useTruncation.d.ts.map +1 -1
  96. package/dist/Text/useTruncation.js +8 -7
  97. package/dist/TimeInput/TimeInput.d.ts +16 -1
  98. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  99. package/dist/TimeInput/TimeInput.js +98 -60
  100. package/dist/TimeInput/index.d.ts +1 -1
  101. package/dist/TimeInput/index.d.ts.map +1 -1
  102. package/dist/Timestamp/Timestamp.d.ts +2 -2
  103. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  104. package/dist/Timestamp/Timestamp.js +4 -145
  105. package/dist/Timestamp/formatRelativeTime.d.ts +20 -0
  106. package/dist/Timestamp/formatRelativeTime.d.ts.map +1 -0
  107. package/dist/Timestamp/formatRelativeTime.js +81 -0
  108. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  109. package/dist/Toast/ToastViewport.js +125 -77
  110. package/dist/Tokenizer/Tokenizer.d.ts +0 -38
  111. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  112. package/dist/Tokenizer/Tokenizer.js +94 -26
  113. package/dist/Tokenizer/useEndLaneReserve.d.ts +31 -0
  114. package/dist/Tokenizer/useEndLaneReserve.d.ts.map +1 -0
  115. package/dist/Tokenizer/useEndLaneReserve.js +136 -0
  116. package/dist/Tooltip/useTooltip.d.ts +1 -1
  117. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  118. package/dist/Tooltip/useTooltip.js +53 -42
  119. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  120. package/dist/Typeahead/BaseTypeahead.js +85 -30
  121. package/dist/Typeahead/Typeahead.d.ts +0 -21
  122. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  123. package/dist/Typeahead/Typeahead.js +108 -67
  124. package/dist/Typeahead/busyIndicatorLane.d.ts +62 -0
  125. package/dist/Typeahead/busyIndicatorLane.d.ts.map +1 -0
  126. package/dist/Typeahead/busyIndicatorLane.js +98 -0
  127. package/dist/astryx.css +25 -7
  128. package/dist/hooks/useFocusReturnVisibility.d.ts.map +1 -1
  129. package/dist/hooks/useFocusReturnVisibility.js +3 -5
  130. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  131. package/dist/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
  132. package/dist/hooks/useOverflow.js +11 -11
  133. package/dist/hooks/useScrollOverflow.d.ts.map +1 -1
  134. package/dist/hooks/useScrollOverflow.js +7 -4
  135. package/dist/theme/defineTheme.d.ts +13 -0
  136. package/dist/theme/defineTheme.d.ts.map +1 -1
  137. package/dist/theme/defineTheme.js +7 -0
  138. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  139. package/dist/theme/generateThemeRules.js +1 -1
  140. package/dist/theme/localTokens.d.ts +18 -0
  141. package/dist/theme/localTokens.d.ts.map +1 -0
  142. package/dist/theme/localTokens.js +162 -0
  143. package/dist/utils/interactionModality.d.ts +6 -28
  144. package/dist/utils/interactionModality.d.ts.map +1 -1
  145. package/dist/utils/interactionModality.js +72 -37
  146. package/dist/utils/sharedResizeObserver.d.ts +17 -9
  147. package/dist/utils/sharedResizeObserver.d.ts.map +1 -1
  148. package/dist/utils/sharedResizeObserver.js +54 -12
  149. package/locales/en.json +8 -0
  150. package/locales/pseudo.json +6 -0
  151. package/package.json +7 -2
  152. package/src/AlertDialog/useImperativeAlertDialog.test.tsx +163 -0
  153. package/src/AppShell/AppShell.doc.mjs +4 -3
  154. package/src/AppShell/AppShell.test.tsx +21 -0
  155. package/src/AppShell/AppShell.tsx +12 -7
  156. package/src/Banner/Banner.doc.mjs +5 -1
  157. package/src/Banner/Banner.tsx +12 -1
  158. package/src/BottomSheet/BottomSheet.doc.mjs +31 -0
  159. package/src/BottomSheet/BottomSheet.spec.md +178 -0
  160. package/src/Breadcrumbs/BreadcrumbItem.tsx +18 -9
  161. package/src/Breadcrumbs/Breadcrumbs.doc.mjs +4 -1
  162. package/src/Breadcrumbs/Breadcrumbs.test.tsx +12 -0
  163. package/src/Button/Button.doc.mjs +56 -0
  164. package/src/ButtonGroup/ButtonGroup.doc.mjs +47 -0
  165. package/src/Calendar/hooks/useCalendarConstraints.test.ts +153 -0
  166. package/src/Calendar/hooks/useCalendarDays.test.ts +265 -0
  167. package/src/Calendar/hooks/useCalendarNavigation.test.ts +252 -0
  168. package/src/Carousel/Carousel.test.tsx +83 -0
  169. package/src/Carousel/Carousel.tsx +8 -2
  170. package/src/Chat/ChatComposer.doc.mjs +7 -4
  171. package/src/Chat/ChatComposer.test.tsx +84 -2
  172. package/src/Chat/ChatComposer.tsx +45 -3
  173. package/src/Chat/ChatSendButton.test.tsx +189 -0
  174. package/src/Chat/ChatToolCalls.doc.mjs +1 -1
  175. package/src/Chat/ChatToolCalls.test.tsx +33 -1
  176. package/src/Chat/ChatToolCalls.tsx +13 -34
  177. package/src/Chat/useChatNewMessages.ts +3 -3
  178. package/src/Chat/useChatPasteAsToken.test.ts +191 -0
  179. package/src/CheckboxList/CheckboxList.doc.mjs +172 -31
  180. package/src/CheckboxList/CheckboxList.spec.md +215 -0
  181. package/src/CheckboxList/CheckboxList.test.tsx +45 -0
  182. package/src/CheckboxList/CheckboxListItem.doc.mjs +11 -9
  183. package/src/CheckboxList/CheckboxListItem.tsx +5 -3
  184. package/src/Collapsible/useCollapsible.test.tsx +236 -0
  185. package/src/CommandPalette/CommandPalette.doc.mjs +72 -0
  186. package/src/CommandPalette/CommandPalette.spec.md +224 -0
  187. package/src/CommandPalette/CommandPaletteEmpty.test.tsx +101 -0
  188. package/src/ComplexSelector/ComplexSelector.doc.mjs +42 -0
  189. package/src/ComplexSelector/ComplexSelector.spec.md +190 -0
  190. package/src/ContextMenu/ContextMenu.doc.mjs +48 -0
  191. package/src/ContextMenu/ContextMenu.spec.md +207 -0
  192. package/src/DateTimeInput/DateTimeInput.doc.mjs +43 -23
  193. package/src/DateTimeInput/DateTimeInput.tsx +388 -181
  194. package/src/DateTimeInput/DateTimeInputTouch.test.tsx +10 -2
  195. package/src/DateTimeInput/NativeDateSegment.tsx +308 -0
  196. package/src/DateTimeInput/NativePickerSegments.test.tsx +626 -0
  197. package/src/DateTimeInput/NativeTimeSegment.tsx +331 -0
  198. package/src/DateTimeInput/index.ts +1 -0
  199. package/src/DateTimeInput/nativePickerSegmentStyles.ts +120 -0
  200. package/src/Divider/Divider.doc.mjs +24 -0
  201. package/src/Divider/Divider.spec.md +157 -0
  202. package/src/DropdownMenu/DropdownMenu.doc.mjs +104 -0
  203. package/src/DropdownMenu/DropdownMenu.spec.md +246 -0
  204. package/src/DropdownMenu/DropdownMenu.tsx +2 -4
  205. package/src/Field/Field.doc.mjs +1 -0
  206. package/src/Field/Field.test.tsx +39 -0
  207. package/src/Field/Field.tsx +18 -1
  208. package/src/Field/InputClearButton.test.tsx +68 -6
  209. package/src/Field/PanelSearchInput.tsx +3 -5
  210. package/src/FieldStatus/FieldStatus.doc.mjs +21 -0
  211. package/src/FieldStatus/FieldStatus.spec.md +213 -0
  212. package/src/FieldStatus/FieldStatus.test.tsx +17 -0
  213. package/src/FieldStatus/FieldStatus.tsx +7 -2
  214. package/src/Grid/Grid.doc.mjs +19 -0
  215. package/src/Grid/Grid.spec.md +162 -0
  216. package/src/Icon/Icon.doc.mjs +196 -48
  217. package/src/Icon/Icon.spec.md +192 -0
  218. package/src/IconButton/IconButton.doc.mjs +38 -0
  219. package/src/Kbd/Kbd.doc.mjs +18 -0
  220. package/src/Kbd/Kbd.spec.md +142 -0
  221. package/src/Layer/useTouchTrigger.ts +2 -4
  222. package/src/Layout/Layout.doc.mjs +57 -17
  223. package/src/Layout/Layout.spec.md +235 -0
  224. package/src/Layout/Layout.test.tsx +1 -1
  225. package/src/Layout/Layout.tsx +7 -8
  226. package/src/Layout/LayoutHeader.doc.mjs +9 -0
  227. package/src/Layout/LayoutPanel.doc.mjs +4 -3
  228. package/src/Lightbox/Lightbox.doc.mjs +149 -33
  229. package/src/Lightbox/Lightbox.spec.md +198 -0
  230. package/src/Lightbox/useLightbox.test.tsx +263 -0
  231. package/src/Markdown/Markdown.doc.mjs +60 -0
  232. package/src/Markdown/Markdown.spec.md +207 -0
  233. package/src/MobileNav/MobileNav.doc.mjs +140 -32
  234. package/src/MobileNav/MobileNav.spec.md +209 -0
  235. package/src/MoreMenu/MoreMenu.doc.mjs +42 -0
  236. package/src/MoreMenu/MoreMenu.spec.md +222 -0
  237. package/src/MultiSelector/MultiSelector.doc.mjs +124 -1
  238. package/src/MultiSelector/MultiSelector.spec.md +293 -0
  239. package/src/MultiSelector/MultiSelector.test.tsx +305 -2
  240. package/src/MultiSelector/MultiSelector.tsx +124 -55
  241. package/src/NavIcon/NavIcon.doc.mjs +17 -0
  242. package/src/NavIcon/NavIcon.spec.md +134 -0
  243. package/src/NavMenu/NavHeadingMenu.spec.md +210 -0
  244. package/src/NavMenu/NavMenu.doc.mjs +37 -0
  245. package/src/Outline/Outline.doc.mjs +35 -0
  246. package/src/Outline/Outline.spec.md +162 -0
  247. package/src/OverflowList/OverflowList.doc.mjs +24 -0
  248. package/src/OverflowList/OverflowList.spec.md +157 -0
  249. package/src/Pagination/Pagination.doc.mjs +74 -0
  250. package/src/Pagination/Pagination.spec.md +226 -0
  251. package/src/Popover/Popover.doc.mjs +264 -65
  252. package/src/Popover/Popover.spec.md +421 -0
  253. package/src/Popover/usePopover.doc.mjs +208 -33
  254. package/src/PowerSearch/PowerSearch.spec.md +291 -0
  255. package/src/PowerSearch/PowerSearchFilterEditor.test.tsx +253 -0
  256. package/src/PowerSearch/PowerSearchToken.test.tsx +228 -0
  257. package/src/ProgressBar/ProgressBar.doc.mjs +198 -38
  258. package/src/ProgressBar/ProgressBar.spec.md +261 -0
  259. package/src/RadioList/RadioList.test.tsx +136 -2
  260. package/src/RadioList/RadioListItem.doc.mjs +30 -11
  261. package/src/RadioList/RadioListItem.tsx +44 -8
  262. package/src/Resizable/Resizable.doc.mjs +130 -24
  263. package/src/Resizable/Resizable.spec.md +246 -0
  264. package/src/Resizable/ResizeHandle.test.tsx +177 -56
  265. package/src/Resizable/ResizeHandle.tsx +128 -45
  266. package/src/Resizable/index.ts +2 -0
  267. package/src/Resizable/shippedDirections.test.ts +462 -0
  268. package/src/Resizable/useResizable.doc.mjs +124 -29
  269. package/src/Resizable/useResizable.test.ts +1277 -3
  270. package/src/Resizable/useResizable.ts +760 -48
  271. package/src/Resizable/utils.test.ts +74 -0
  272. package/src/Resizable/utils.ts +35 -0
  273. package/src/Section/Section.doc.mjs +17 -0
  274. package/src/Section/Section.spec.md +139 -0
  275. package/src/SegmentedControl/SegmentedControl.doc.mjs +83 -0
  276. package/src/SegmentedControl/SegmentedControl.spec.md +152 -0
  277. package/src/Selector/Selector.doc.mjs +133 -97
  278. package/src/Selector/Selector.spec.md +300 -0
  279. package/src/Selector/Selector.test.tsx +318 -1
  280. package/src/Selector/Selector.tsx +127 -60
  281. package/src/Selector/useSelectorPresentation.ts +24 -4
  282. package/src/SideNav/SideNav.test.tsx +3 -3
  283. package/src/SideNav/SideNavCollapseButton.doc.mjs +8 -0
  284. package/src/SideNav/SideNavItem.doc.mjs +1 -1
  285. package/src/Skeleton/Skeleton.doc.mjs +12 -0
  286. package/src/Skeleton/Skeleton.spec.md +127 -0
  287. package/src/Slider/Slider.doc.mjs +184 -30
  288. package/src/Slider/Slider.spec.md +224 -0
  289. package/src/Slider/Slider.tsx +2 -5
  290. package/src/Spinner/Spinner.doc.mjs +5 -5
  291. package/src/Spinner/Spinner.test.tsx +32 -7
  292. package/src/Spinner/Spinner.tsx +46 -14
  293. package/src/Stack/Stack.doc.mjs +22 -0
  294. package/src/Stack/Stack.spec.md +155 -0
  295. package/src/StatusDot/StatusDot.doc.mjs +17 -0
  296. package/src/StatusDot/StatusDot.spec.md +138 -0
  297. package/src/Stepper/Step.doc.mjs +1 -1
  298. package/src/Stepper/Step.tsx +118 -5
  299. package/src/Stepper/Stepper.doc.mjs +51 -1
  300. package/src/Stepper/Stepper.spec.md +245 -0
  301. package/src/Stepper/Stepper.test.tsx +315 -0
  302. package/src/Stepper/Stepper.tsx +8 -0
  303. package/src/Switch/Switch.doc.mjs +40 -0
  304. package/src/Switch/Switch.spec.md +175 -0
  305. package/src/TabList/TabList.tsx +2 -3
  306. package/src/Table/Table.doc.mjs +102 -24
  307. package/src/Table/Table.perf.test.tsx +51 -1
  308. package/src/Table/Table.spec.md +325 -0
  309. package/src/Table/TableHeaderCell.test.tsx +291 -0
  310. package/src/Table/index.ts +19 -4
  311. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -12
  312. package/src/Table/plugins/filtering/useTableFilterState.test.tsx +143 -0
  313. package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +2 -1
  314. package/src/Table/plugins/rowStatus/index.ts +1 -4
  315. package/src/Table/plugins/rowStatus/useTableRowStatus.public.test.ts +92 -0
  316. package/src/Table/plugins/rowStatus/useTableRowStatus.spec.md +354 -0
  317. package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +431 -56
  318. package/src/Table/plugins/rowStatus/useTableRowStatus.tsx +155 -84
  319. package/src/Table/plugins/sortable/useTableSortable.test.tsx +72 -0
  320. package/src/Table/plugins/sortable/useTableSortable.tsx +18 -1
  321. package/src/Table/useTableGroupedRows.doc.mjs +2 -2
  322. package/src/Table/useTableRowStatus.doc.mjs +5 -5
  323. package/src/Text/Text.doc.mjs +190 -43
  324. package/src/Text/Text.spec.md +206 -0
  325. package/src/Text/useTruncation.ts +8 -7
  326. package/src/TextArea/TextArea.doc.mjs +255 -45
  327. package/src/TextArea/TextArea.spec.md +205 -0
  328. package/src/TimeInput/NativeTimeInput.test.tsx +269 -0
  329. package/src/TimeInput/TimeInput.doc.mjs +47 -23
  330. package/src/TimeInput/TimeInput.tsx +109 -50
  331. package/src/TimeInput/index.ts +1 -0
  332. package/src/Timestamp/Timestamp.doc.mjs +2 -2
  333. package/src/Timestamp/Timestamp.test.tsx +75 -3
  334. package/src/Timestamp/Timestamp.tsx +7 -153
  335. package/src/Timestamp/formatRelativeTime.ts +96 -0
  336. package/src/Toast/ToastViewport.test.tsx +194 -0
  337. package/src/Toast/ToastViewport.tsx +136 -58
  338. package/src/ToggleButton/ToggleButton.doc.mjs +56 -0
  339. package/src/Tokenizer/Tokenizer.doc.mjs +2 -0
  340. package/src/Tokenizer/Tokenizer.spec.md +293 -0
  341. package/src/Tokenizer/Tokenizer.test.tsx +335 -1
  342. package/src/Tokenizer/Tokenizer.tsx +129 -46
  343. package/src/Tokenizer/useEndLaneReserve.ts +146 -0
  344. package/src/Toolbar/Toolbar.doc.mjs +19 -0
  345. package/src/Toolbar/Toolbar.spec.md +174 -0
  346. package/src/Tooltip/Tooltip.doc.mjs +17 -0
  347. package/src/Tooltip/Tooltip.spec.md +142 -0
  348. package/src/Tooltip/Tooltip.test.tsx +21 -1
  349. package/src/Tooltip/useTooltip.test.tsx +318 -0
  350. package/src/Tooltip/useTooltip.tsx +60 -39
  351. package/src/TreeList/TreeList.doc.mjs +58 -0
  352. package/src/TreeList/TreeList.spec.md +224 -0
  353. package/src/Typeahead/BaseTypeahead.tsx +96 -25
  354. package/src/Typeahead/Typeahead.doc.mjs +89 -1
  355. package/src/Typeahead/Typeahead.spec.md +257 -0
  356. package/src/Typeahead/Typeahead.test.tsx +502 -1
  357. package/src/Typeahead/Typeahead.tsx +187 -69
  358. package/src/Typeahead/TypeaheadItem.test.tsx +93 -2
  359. package/src/Typeahead/busyIndicatorLane.tsx +109 -0
  360. package/src/__tests__/stylexDeclarations.ts +51 -0
  361. package/src/hooks/useFocusReturnVisibility.ts +3 -5
  362. package/src/hooks/useOverflow.ts +11 -11
  363. package/src/hooks/useScrollLock.test.ts +103 -0
  364. package/src/hooks/useScrollOverflow.ts +7 -4
  365. package/src/i18n/useTranslator.test.tsx +197 -0
  366. package/src/theme/defineTheme.test.ts +227 -0
  367. package/src/theme/defineTheme.ts +30 -0
  368. package/src/theme/derivedVarRegistry.test.ts +6 -0
  369. package/src/theme/generateThemeRules.ts +4 -1
  370. package/src/theme/localTokens.ts +272 -0
  371. package/src/theme/themingTargets.test.ts +126 -28
  372. package/src/utils/interactionModality.test.ts +83 -0
  373. package/src/utils/interactionModality.ts +88 -36
  374. package/src/utils/sharedResizeObserver.test.ts +124 -5
  375. package/src/utils/sharedResizeObserver.ts +60 -14
@@ -7,13 +7,26 @@ export const docs = {
7
7
  displayName: 'Popover',
8
8
  group: 'Popover',
9
9
  category: 'Overlay',
10
- keywords: ["popover","popup","dropdown","tooltip","overlay","flyout","callout","popper","anchor","floating","bubble"],
10
+ keywords: [
11
+ 'popover',
12
+ 'popup',
13
+ 'dropdown',
14
+ 'tooltip',
15
+ 'overlay',
16
+ 'flyout',
17
+ 'callout',
18
+ 'popper',
19
+ 'anchor',
20
+ 'floating',
21
+ 'bubble',
22
+ ],
11
23
  components: [
12
24
  {
13
25
  name: 'Popover',
14
26
  displayName: 'Popover',
15
27
  description:
16
- 'A click-triggered popover for displaying interactive content anchored to a trigger element.', props: [
28
+ 'A click-triggered popover for displaying interactive content anchored to a trigger element.',
29
+ props: [
17
30
  {
18
31
  name: 'children',
19
32
  type: 'ReactNode',
@@ -31,18 +44,26 @@ export const docs = {
31
44
  type: 'ReactNode',
32
45
  description: 'Content to display inside the popover.',
33
46
  required: true,
34
- slotElements: [{__element: 'Text', props: {type: 'body'}, children: 'Content text'}],
47
+ slotElements: [
48
+ {
49
+ __element: 'Text',
50
+ props: {type: 'body'},
51
+ children: 'Content text',
52
+ },
53
+ ],
35
54
  },
36
55
  {
37
56
  name: 'placement',
38
57
  type: "'above' | 'below' | 'start' | 'end'",
39
- description: 'Position placement relative to the trigger. Logical: start/end resolve against the popover\'s own inherited direction, so RTL contexts mirror automatically in pure CSS.',
58
+ description:
59
+ "Position placement relative to the trigger. Logical: start/end resolve against the popover's own inherited direction, so RTL contexts mirror automatically in pure CSS.",
40
60
  default: "'below'",
41
61
  },
42
62
  {
43
63
  name: 'alignment',
44
64
  type: "'start' | 'center' | 'end'",
45
- description: 'Alignment along the placement axis. Logical: start/end follow the popover\'s own inherited direction (RTL mirrors).',
65
+ description:
66
+ "Alignment along the placement axis. Logical: start/end follow the popover's own inherited direction (RTL mirrors).",
46
67
  default: "'start'",
47
68
  },
48
69
  {
@@ -64,7 +85,8 @@ export const docs = {
64
85
  {
65
86
  name: 'width',
66
87
  type: 'number | string',
67
- description: 'Width of the popover container. The layer still caps to the viewport with alignment-aware safe-area gutters before scrolling long content.',
88
+ description:
89
+ 'Width of the popover container. The layer still caps to the viewport with alignment-aware safe-area gutters before scrolling long content.',
68
90
  default: "'auto'",
69
91
  },
70
92
  {
@@ -89,7 +111,8 @@ export const docs = {
89
111
  {
90
112
  name: 'hasCloseButton',
91
113
  type: 'boolean',
92
- description: 'Whether to include a hidden close button for accessibility.',
114
+ description:
115
+ 'Whether to include a hidden close button for accessibility.',
93
116
  default: 'true',
94
117
  },
95
118
  {
@@ -101,61 +124,126 @@ export const docs = {
101
124
  {
102
125
  name: 'hasAutoFocus',
103
126
  type: 'boolean',
104
- description: 'Whether to move focus into the popover when it opens. Keyboard activation focuses the first content control; pointer activation focuses the labeled dialog container so an action does not appear preselected. Set to false for inline showcases or documentation previews.',
127
+ description:
128
+ 'Whether to move focus into the popover when it opens. Keyboard activation focuses the first content control; pointer activation focuses the labeled dialog container so an action does not appear preselected. Set to false for inline showcases or documentation previews.',
105
129
  default: 'true',
106
130
  },
107
131
  {
108
132
  name: 'hasLightDismiss',
109
133
  type: 'boolean',
110
- description: 'Whether clicking outside dismisses the popover. Set to false for surfaces that stay open until explicitly dismissed, like onboarding coachmarks.',
134
+ description:
135
+ 'Whether clicking outside dismisses the popover. Set to false for surfaces that stay open until explicitly dismissed, like onboarding coachmarks.',
111
136
  default: 'true',
112
137
  },
113
138
  {
114
139
  name: 'hasEscapeDismiss',
115
140
  type: 'boolean',
116
- description: 'Whether pressing Escape dismisses the popover. Only takes full effect together with hasLightDismiss={false}, since native light dismiss also closes on Escape.',
141
+ description:
142
+ 'Whether pressing Escape dismisses the popover. Only takes full effect together with hasLightDismiss={false}, since native light dismiss also closes on Escape.',
117
143
  default: 'true',
118
144
  },
119
145
  {
120
146
  name: 'xstyle',
121
147
  type: 'StyleXStyles',
122
- description: 'StyleX styles for layout customization (margins, positioning, sizing). Must be a stylex.create() value, not an inline style object like style={{}}.',
148
+ description:
149
+ 'StyleX styles for layout customization (margins, positioning, sizing). Must be a stylex.create() value, not an inline style object like style={{}}.',
123
150
  },
124
151
  ],
125
152
  },
126
153
  ],
127
154
  playground: {
128
155
  defaults: {
129
- content: {__element: 'Text', props: {type: 'body'}, children: 'Popover content goes here.'},
130
- children: {__element: 'Button', props: {label: 'Open popover', variant: 'secondary'}},
156
+ content: {
157
+ __element: 'Text',
158
+ props: {type: 'body'},
159
+ children: 'Popover content goes here.',
160
+ },
161
+ children: {
162
+ __element: 'Button',
163
+ props: {label: 'Open popover', variant: 'secondary'},
164
+ },
131
165
  },
132
166
  },
133
167
  theming: {
134
168
  targets: [
169
+ // Canonical broad target for the painted Popover surface.
135
170
  {className: 'astryx-popover'},
136
- {className: 'astryx-popover-surface'},
171
+ // Deprecated compatibility alias. Existing themes keep working during
172
+ // migration; new themes target `popover`.
173
+ {
174
+ className: 'astryx-popover-surface',
175
+ deprecatedFor: 'popover',
176
+ },
137
177
  ],
138
178
  vars: [
139
- {name: '--_popover-radius', description: 'Border radius of the popover surface', default: 'var(--radius-container)', private: true},
140
- ],
141
- derived: [
142
- {property: 'borderRadius', vars: ['--_popover-radius']},
179
+ {
180
+ name: '--_popover-radius',
181
+ description: 'Border radius of the popover surface',
182
+ default: 'var(--radius-container)',
183
+ private: true,
184
+ },
143
185
  ],
186
+ derived: [{property: 'borderRadius', vars: ['--_popover-radius']}],
144
187
  },
145
188
  usage: {
146
189
  description:
147
190
  'A click-triggered overlay anchored to a button or trigger element. Use it for secondary actions, inline confirmations, or supplementary information that does not warrant a full dialog. For hover previews use HoverCard, for brief helper text use Tooltip.',
148
191
  bestPractices: [
149
- { guidance: true, description: 'Keep popover content focused on a single task or piece of information.' },
150
- { guidance: true, description: 'Provide a clear way to close: either by clicking outside or with an explicit close button.' },
151
- { guidance: false, description: 'Nest popovers inside other popovers; it creates confusing focus and navigation.' },
152
- { guidance: false, description: 'Assume input complexity alone determines the presentation; evaluate the task’s focus, space, and interaction requirements.' },
153
- { guidance: false, description: 'Assume scrolling alone means Popover is the wrong component; a bounded Popover may scroll while a focused anchored interaction remains appropriate.' },
192
+ {
193
+ guidance: true,
194
+ description:
195
+ 'Keep popover content focused on a single task or piece of information.',
196
+ },
197
+ {
198
+ guidance: true,
199
+ description:
200
+ 'Provide a clear way to close: either by clicking outside or with an explicit close button.',
201
+ },
202
+ {
203
+ guidance: true,
204
+ description:
205
+ 'Theme the painted surface through popover. Existing popover-surface overrides remain supported during migration, but new themes should not depend on that deprecated alias.',
206
+ },
207
+ {
208
+ guidance: false,
209
+ description:
210
+ 'Nest popovers inside other popovers; it creates confusing focus and navigation.',
211
+ },
212
+ {
213
+ guidance: false,
214
+ description:
215
+ "Assume input complexity alone determines the presentation; evaluate the task's focus, space, and interaction requirements.",
216
+ },
217
+ {
218
+ guidance: false,
219
+ description:
220
+ 'Assume scrolling alone means Popover is the wrong component; a bounded Popover may scroll while a focused anchored interaction remains appropriate.',
221
+ },
154
222
  ],
155
223
  anatomy: [
156
- {name: 'Header', required: true, description: 'Contains the title, optional subheader, and close button.'},
157
- {name: 'Body', required: true, description: 'Main content area of the popover.'},
158
- {name: 'Trigger Element', required: true, description: 'The button or link that toggles the popover open.'},
224
+ {
225
+ name: 'Trigger element',
226
+ required: true,
227
+ description:
228
+ 'Caller-supplied or externally referenced control that anchors and toggles the popover.',
229
+ },
230
+ {
231
+ name: 'Popover surface',
232
+ required: true,
233
+ description:
234
+ 'Painted surface owned by Popover. Theme it through the canonical popover target; popover-surface remains only as a deprecated compatibility alias during migration.',
235
+ },
236
+ {
237
+ name: 'Popover content',
238
+ required: true,
239
+ description: 'Caller-supplied content rendered inside the surface.',
240
+ },
241
+ {
242
+ name: 'Fallback close control',
243
+ required: false,
244
+ description:
245
+ 'Keyboard-reachable close affordance appended by usePopover when enabled.',
246
+ },
159
247
  ],
160
248
  },
161
249
  };
@@ -168,8 +256,7 @@ export const docsZh = {
168
256
  {
169
257
  name: 'Popover',
170
258
  displayName: 'Popover',
171
- description:
172
- '一个点击触发的弹出框,用于显示锚定到触发元素的交互式内容。',
259
+ description: '一个点击触发的弹出框,用于显示锚定到触发元素的交互式内容。',
173
260
  props: [
174
261
  {
175
262
  name: 'children',
@@ -180,8 +267,7 @@ export const docsZh = {
180
267
  {
181
268
  name: 'anchorRef',
182
269
  type: 'React.RefObject<HTMLElement>',
183
- description:
184
- '在兄弟模式下用作弹出框锚点的外部 ref。',
270
+ description: '在兄弟模式下用作弹出框锚点的外部 ref。',
185
271
  },
186
272
  {
187
273
  name: 'content',
@@ -192,13 +278,15 @@ export const docsZh = {
192
278
  {
193
279
  name: 'placement',
194
280
  type: "'above' | 'below' | 'start' | 'end'",
195
- description: '相对于触发器的位置放置方式。逻辑值:start/end 根据弹出层自身继承的方向解析,RTL 环境通过纯 CSS 自动镜像。',
281
+ description:
282
+ '相对于触发器的位置放置方式。逻辑值:start/end 根据弹出层自身继承的方向解析,RTL 环境通过纯 CSS 自动镜像。',
196
283
  default: "'below'",
197
284
  },
198
285
  {
199
286
  name: 'alignment',
200
287
  type: "'start' | 'center' | 'end'",
201
- description: '沿放置轴的对齐方式。逻辑值:start/end 跟随弹出层自身继承的方向(RTL 镜像)。',
288
+ description:
289
+ '沿放置轴的对齐方式。逻辑值:start/end 跟随弹出层自身继承的方向(RTL 镜像)。',
202
290
  default: "'start'",
203
291
  },
204
292
  {
@@ -220,7 +308,8 @@ export const docsZh = {
220
308
  {
221
309
  name: 'width',
222
310
  type: 'number | string',
223
- description: '弹出框容器的宽度。弹出层仍会限制在视口和安全区域留白内,长内容再滚动。',
311
+ description:
312
+ '弹出框容器的宽度。弹出层仍会限制在视口和安全区域留白内,长内容再滚动。',
224
313
  default: "'auto'",
225
314
  },
226
315
  {
@@ -257,19 +346,22 @@ export const docsZh = {
257
346
  {
258
347
  name: 'hasAutoFocus',
259
348
  type: 'boolean',
260
- description: '弹出框打开时是否自动聚焦第一个可聚焦元素。内联展示或文档预览设为 false。',
349
+ description:
350
+ '弹出框打开时是否自动聚焦第一个可聚焦元素。内联展示或文档预览设为 false。',
261
351
  default: 'true',
262
352
  },
263
353
  {
264
354
  name: 'hasLightDismiss',
265
355
  type: 'boolean',
266
- description: '点击外部是否关闭弹出框。需要显式关闭的界面(如新手引导提示)设为 false。',
356
+ description:
357
+ '点击外部是否关闭弹出框。需要显式关闭的界面(如新手引导提示)设为 false。',
267
358
  default: 'true',
268
359
  },
269
360
  {
270
361
  name: 'hasEscapeDismiss',
271
362
  type: 'boolean',
272
- description: '按 Escape 是否关闭弹出框。仅在 hasLightDismiss={false} 时生效,因为原生 light dismiss 行为同样响应 Escape。',
363
+ description:
364
+ '按 Escape 是否关闭弹出框。仅在 hasLightDismiss={false} 时生效,因为原生 light dismiss 行为同样响应 Escape。',
273
365
  default: 'true',
274
366
  },
275
367
  ],
@@ -277,30 +369,84 @@ export const docsZh = {
277
369
  ],
278
370
  theming: {
279
371
  targets: [
372
+ // Canonical broad target for the painted Popover surface.
280
373
  {className: 'astryx-popover'},
281
- {className: 'astryx-popover-surface'},
374
+ // Deprecated compatibility alias. Existing themes keep working during
375
+ // migration; new themes target `popover`.
376
+ {
377
+ className: 'astryx-popover-surface',
378
+ deprecatedFor: 'popover',
379
+ },
282
380
  ],
283
381
  vars: [
284
- {name: '--_popover-radius', description: 'Border radius of the popover surface', default: 'var(--radius-container)', private: true},
285
- ],
286
- derived: [
287
- {property: 'borderRadius', vars: ['--_popover-radius']},
382
+ {
383
+ name: '--_popover-radius',
384
+ description: 'Border radius of the popover surface',
385
+ default: 'var(--radius-container)',
386
+ private: true,
387
+ },
288
388
  ],
389
+ derived: [{property: 'borderRadius', vars: ['--_popover-radius']}],
289
390
  },
290
391
  usage: {
291
392
  description:
292
393
  'A click-triggered overlay anchored to a button or trigger element. Use it for secondary actions, inline confirmations, or supplementary information that does not warrant a full dialog. For hover previews use HoverCard, for brief helper text use Tooltip.',
293
394
  bestPractices: [
294
- { guidance: true, description: 'Keep popover content focused on a single task or piece of information.' },
295
- { guidance: true, description: 'Provide a clear way to close: either by clicking outside or with an explicit close button.' },
296
- { guidance: false, description: 'Nest popovers inside other popovers; it creates confusing focus and navigation.' },
297
- { guidance: false, description: 'Assume input complexity alone determines the presentation; evaluate the task’s focus, space, and interaction requirements.' },
298
- { guidance: false, description: 'Assume scrolling alone means Popover is the wrong component; a bounded Popover may scroll while a focused anchored interaction remains appropriate.' },
395
+ {
396
+ guidance: true,
397
+ description:
398
+ 'Keep popover content focused on a single task or piece of information.',
399
+ },
400
+ {
401
+ guidance: true,
402
+ description:
403
+ 'Provide a clear way to close: either by clicking outside or with an explicit close button.',
404
+ },
405
+ {
406
+ guidance: true,
407
+ description:
408
+ 'Theme the painted surface through popover. Existing popover-surface overrides remain supported during migration, but new themes should not depend on that deprecated alias.',
409
+ },
410
+ {
411
+ guidance: false,
412
+ description:
413
+ 'Nest popovers inside other popovers; it creates confusing focus and navigation.',
414
+ },
415
+ {
416
+ guidance: false,
417
+ description:
418
+ "Assume input complexity alone determines the presentation; evaluate the task's focus, space, and interaction requirements.",
419
+ },
420
+ {
421
+ guidance: false,
422
+ description:
423
+ 'Assume scrolling alone means Popover is the wrong component; a bounded Popover may scroll while a focused anchored interaction remains appropriate.',
424
+ },
299
425
  ],
300
426
  anatomy: [
301
- {name: 'Header', required: true, description: 'Contains the title, optional subheader, and close button.'},
302
- {name: 'Body', required: true, description: 'Main content area of the popover.'},
303
- {name: 'Trigger Element', required: true, description: 'The button or link that toggles the popover open.'},
427
+ {
428
+ name: 'Trigger element',
429
+ required: true,
430
+ description:
431
+ 'Caller-supplied or externally referenced control that anchors and toggles the popover.',
432
+ },
433
+ {
434
+ name: 'Popover surface',
435
+ required: true,
436
+ description:
437
+ 'Painted surface owned by Popover. Theme it through the canonical popover target; popover-surface remains only as a deprecated compatibility alias during migration.',
438
+ },
439
+ {
440
+ name: 'Popover content',
441
+ required: true,
442
+ description: 'Caller-supplied content rendered inside the surface.',
443
+ },
444
+ {
445
+ name: 'Fallback close control',
446
+ required: false,
447
+ description:
448
+ 'Keyboard-reachable close affordance appended by usePopover when enabled.',
449
+ },
304
450
  ],
305
451
  },
306
452
  };
@@ -313,16 +459,61 @@ export const docsDense = {
313
459
  description:
314
460
  'A click-triggered overlay anchored to a button or trigger element. Use it for secondary actions, inline confirmations, or supplementary information that does not warrant a full dialog. For hover previews use HoverCard, for brief helper text use Tooltip.',
315
461
  bestPractices: [
316
- { guidance: true, description: 'Keep popover content focused on a single task or piece of information.' },
317
- { guidance: true, description: 'Provide a clear way to close: either by clicking outside or with an explicit close button.' },
318
- { guidance: false, description: 'Nest popovers inside other popovers; it creates confusing focus and navigation.' },
319
- { guidance: false, description: 'Assume input complexity alone determines the presentation; evaluate the task’s focus, space, and interaction requirements.' },
320
- { guidance: false, description: 'Assume scrolling alone means Popover is the wrong component; a bounded Popover may scroll while a focused anchored interaction remains appropriate.' },
462
+ {
463
+ guidance: true,
464
+ description:
465
+ 'Keep popover content focused on a single task or piece of information.',
466
+ },
467
+ {
468
+ guidance: true,
469
+ description:
470
+ 'Provide a clear way to close: either by clicking outside or with an explicit close button.',
471
+ },
472
+ {
473
+ guidance: true,
474
+ description:
475
+ 'Theme the painted surface through popover. Existing popover-surface overrides remain supported during migration, but new themes should not depend on that deprecated alias.',
476
+ },
477
+ {
478
+ guidance: false,
479
+ description:
480
+ 'Nest popovers inside other popovers; it creates confusing focus and navigation.',
481
+ },
482
+ {
483
+ guidance: false,
484
+ description:
485
+ "Assume input complexity alone determines the presentation; evaluate the task's focus, space, and interaction requirements.",
486
+ },
487
+ {
488
+ guidance: false,
489
+ description:
490
+ 'Assume scrolling alone means Popover is the wrong component; a bounded Popover may scroll while a focused anchored interaction remains appropriate.',
491
+ },
321
492
  ],
322
493
  anatomy: [
323
- {name: 'Header', required: true, description: 'Contains the title, optional subheader, and close button.'},
324
- {name: 'Body', required: true, description: 'Main content area of the popover.'},
325
- {name: 'Trigger Element', required: true, description: 'The button or link that toggles the popover open.'},
494
+ {
495
+ name: 'Trigger element',
496
+ required: true,
497
+ description:
498
+ 'Caller-supplied or externally referenced control that anchors and toggles the popover.',
499
+ },
500
+ {
501
+ name: 'Popover surface',
502
+ required: true,
503
+ description:
504
+ 'Painted surface owned by Popover. Theme it through the canonical popover target; popover-surface remains only as a deprecated compatibility alias during migration.',
505
+ },
506
+ {
507
+ name: 'Popover content',
508
+ required: true,
509
+ description: 'Caller-supplied content rendered inside the surface.',
510
+ },
511
+ {
512
+ name: 'Fallback close control',
513
+ required: false,
514
+ description:
515
+ 'Keyboard-reachable close affordance appended by usePopover when enabled.',
516
+ },
326
517
  ],
327
518
  },
328
519
  components: [
@@ -332,21 +523,29 @@ export const docsDense = {
332
523
  description:
333
524
  'Click-triggered popover for interactive content anchored to trigger element.',
334
525
  propDescriptions: {
335
- children: 'Trigger element. Must contain <button> or [role="button"] element.',
526
+ children:
527
+ 'Trigger element. Must contain <button> or [role="button"] element.',
336
528
  anchorRef: 'External ref for popover anchor in sibling mode.',
337
529
  content: 'Content displayed inside popover.',
338
- placement: 'Position relative to trigger. Logical: start/end resolve against the popover\'s inherited direction (RTL mirrors).',
339
- alignment: 'Alignment along placement axis. Logical: start/end follow the popover\'s inherited direction (RTL mirrors).',
530
+ placement:
531
+ "Position relative to trigger. Logical: start/end resolve against the popover's inherited direction (RTL mirrors).",
532
+ alignment:
533
+ "Alignment along placement axis. Logical: start/end follow the popover's inherited direction (RTL mirrors).",
340
534
  isOpen: 'Whether popover shown in controlled mode.',
341
535
  onOpenChange: 'Callback fired when popover visibility changes.',
342
536
  isEnabled: 'When false, trigger interactions ignored.',
343
- width: 'Popover container width; capped to alignment-aware viewport/safe-area gutters before long content scrolls.',
537
+ width:
538
+ 'Popover container width; capped to alignment-aware viewport/safe-area gutters before long content scrolls.',
344
539
  label: 'Accessible label for popover dialog.',
345
- hasCloseButton: 'Whether to include hidden close button for accessibility.',
540
+ hasCloseButton:
541
+ 'Whether to include hidden close button for accessibility.',
346
542
  closeButtonLabel: 'Label for hidden close button.',
347
- hasAutoFocus: 'Move focus into the popover on open; keyboard targets the first control and pointer targets the dialog container.',
348
- hasLightDismiss: 'Outside click dismisses; false for explicit-dismiss surfaces (coachmarks).',
349
- hasEscapeDismiss: 'Escape dismisses; full effect only with hasLightDismiss=false.',
543
+ hasAutoFocus:
544
+ 'Move focus into the popover on open; keyboard targets the first control and pointer targets the dialog container.',
545
+ hasLightDismiss:
546
+ 'Outside click dismisses; false for explicit-dismiss surfaces (coachmarks).',
547
+ hasEscapeDismiss:
548
+ 'Escape dismisses; full effect only with hasLightDismiss=false.',
350
549
  },
351
550
  },
352
551
  ],