@astryxdesign/core 0.3.0 → 0.4.0

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 (551) hide show
  1. package/CHANGELOG.md +156 -0
  2. package/dist/AlertDialog/AlertDialog.d.ts +10 -2
  3. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  4. package/dist/AlertDialog/AlertDialog.js +22 -3
  5. package/dist/AppShell/AppShell.d.ts +2 -2
  6. package/dist/AppShell/AppShell.d.ts.map +1 -1
  7. package/dist/AppShell/AppShell.js +40 -9
  8. package/dist/AspectRatio/AspectRatio.d.ts +13 -0
  9. package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
  10. package/dist/AspectRatio/AspectRatio.js +9 -0
  11. package/dist/Avatar/Avatar.d.ts.map +1 -1
  12. package/dist/Avatar/Avatar.js +33 -20
  13. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
  14. package/dist/AvatarGroup/AvatarGroupOverflow.js +2 -3
  15. package/dist/Banner/Banner.d.ts.map +1 -1
  16. package/dist/Banner/Banner.js +15 -14
  17. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  18. package/dist/Breadcrumbs/BreadcrumbItem.js +21 -8
  19. package/dist/Breadcrumbs/index.d.ts +2 -1
  20. package/dist/Breadcrumbs/index.d.ts.map +1 -1
  21. package/dist/Breadcrumbs/index.js +1 -0
  22. package/dist/Button/Button.d.ts.map +1 -1
  23. package/dist/Button/Button.js +11 -15
  24. package/dist/Calendar/Calendar.d.ts.map +1 -1
  25. package/dist/Calendar/Calendar.js +2 -1
  26. package/dist/Calendar/styles.d.ts +0 -2
  27. package/dist/Calendar/styles.d.ts.map +1 -1
  28. package/dist/Calendar/styles.js +0 -2
  29. package/dist/Carousel/Carousel.d.ts.map +1 -1
  30. package/dist/Carousel/Carousel.js +8 -12
  31. package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
  32. package/dist/Chat/ChatDictationButton.js +2 -1
  33. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  34. package/dist/Chat/ChatLayoutScrollButton.js +3 -1
  35. package/dist/Chat/ChatSendButton.d.ts.map +1 -1
  36. package/dist/Chat/ChatSendButton.js +4 -3
  37. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  38. package/dist/Chat/ChatToolCalls.js +17 -17
  39. package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
  40. package/dist/Chat/useTriggerMenu.js +2 -6
  41. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  42. package/dist/CheckboxInput/CheckboxInput.js +36 -125
  43. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  44. package/dist/ClickableCard/ClickableCard.js +3 -11
  45. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  46. package/dist/CodeBlock/CodeBlock.js +84 -67
  47. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  48. package/dist/Collapsible/Collapsible.js +35 -15
  49. package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
  50. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  51. package/dist/CommandPalette/CommandPaletteItem.js +6 -3
  52. package/dist/CommandPalette/CommandPaletteList.js +1 -1
  53. package/dist/ComplexSelector/ComplexSelector.d.ts +1 -1
  54. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  55. package/dist/ComplexSelector/ComplexSelector.js +35 -33
  56. package/dist/ContextMenu/ContextMenu.d.ts +2 -2
  57. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  58. package/dist/ContextMenu/ContextMenu.js +1 -1
  59. package/dist/ContextMenu/index.d.ts +2 -1
  60. package/dist/ContextMenu/index.d.ts.map +1 -1
  61. package/dist/ContextMenu/index.js +1 -0
  62. package/dist/DateInput/DateInput.d.ts +9 -2
  63. package/dist/DateInput/DateInput.d.ts.map +1 -1
  64. package/dist/DateInput/DateInput.js +24 -23
  65. package/dist/DateRangeInput/DateRangeInput.d.ts +9 -2
  66. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  67. package/dist/DateRangeInput/DateRangeInput.js +11 -16
  68. package/dist/DateTimeInput/DateTimeInput.d.ts +9 -1
  69. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  70. package/dist/DateTimeInput/DateTimeInput.js +22 -17
  71. package/dist/Dialog/Dialog.d.ts.map +1 -1
  72. package/dist/Dialog/Dialog.js +4 -4
  73. package/dist/DropdownMenu/DropdownMenu.d.ts +33 -8
  74. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  75. package/dist/DropdownMenu/DropdownMenu.js +62 -20
  76. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +8 -11
  77. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
  78. package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +32 -31
  79. package/dist/DropdownMenu/DropdownMenuDivider.d.ts +25 -0
  80. package/dist/DropdownMenu/DropdownMenuDivider.d.ts.map +1 -0
  81. package/dist/DropdownMenu/DropdownMenuDivider.js +66 -0
  82. package/dist/DropdownMenu/DropdownMenuItem.d.ts +15 -2
  83. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  84. package/dist/DropdownMenu/DropdownMenuItem.js +20 -8
  85. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +5 -5
  86. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
  87. package/dist/DropdownMenu/DropdownMenuRadioItem.js +24 -67
  88. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
  89. package/dist/DropdownMenu/DropdownMenuSubMenu.js +2 -8
  90. package/dist/DropdownMenu/index.d.ts +2 -1
  91. package/dist/DropdownMenu/index.d.ts.map +1 -1
  92. package/dist/DropdownMenu/index.js +4 -0
  93. package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
  94. package/dist/DropdownMenu/renderDropdownItems.js +35 -27
  95. package/dist/EmptyState/EmptyState.d.ts.map +1 -1
  96. package/dist/EmptyState/EmptyState.js +9 -5
  97. package/dist/Field/InputClearButton.d.ts +16 -3
  98. package/dist/Field/InputClearButton.d.ts.map +1 -1
  99. package/dist/Field/InputClearButton.js +15 -4
  100. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  101. package/dist/HoverCard/useHoverCard.js +3 -19
  102. package/dist/Indicator/CheckIndicator.d.ts +25 -0
  103. package/dist/Indicator/CheckIndicator.d.ts.map +1 -0
  104. package/dist/Indicator/CheckIndicator.js +155 -0
  105. package/dist/Indicator/CheckboxIndicator.d.ts +22 -0
  106. package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -0
  107. package/dist/Indicator/CheckboxIndicator.js +173 -0
  108. package/dist/Indicator/RadioIndicator.d.ts +23 -0
  109. package/dist/Indicator/RadioIndicator.d.ts.map +1 -0
  110. package/dist/Indicator/RadioIndicator.js +137 -0
  111. package/dist/Indicator/index.d.ts +24 -0
  112. package/dist/Indicator/index.d.ts.map +1 -0
  113. package/dist/Indicator/index.js +26 -0
  114. package/dist/Indicator/indicator.markers.stylex.d.ts +16 -0
  115. package/dist/Indicator/indicator.markers.stylex.d.ts.map +1 -0
  116. package/dist/Indicator/indicator.markers.stylex.js +21 -0
  117. package/dist/Indicator/indicatorRegistry.d.ts +71 -0
  118. package/dist/Indicator/indicatorRegistry.d.ts.map +1 -0
  119. package/dist/Indicator/indicatorRegistry.js +93 -0
  120. package/dist/Indicator/types.d.ts +167 -0
  121. package/dist/Indicator/types.d.ts.map +1 -0
  122. package/dist/Indicator/types.js +1 -0
  123. package/dist/Indicator/useIndicator.d.ts +18 -0
  124. package/dist/Indicator/useIndicator.d.ts.map +1 -0
  125. package/dist/Indicator/useIndicator.js +30 -0
  126. package/dist/Item/Item.d.ts.map +1 -1
  127. package/dist/Item/Item.js +4 -8
  128. package/dist/Layer/useLayer.d.ts +14 -0
  129. package/dist/Layer/useLayer.d.ts.map +1 -1
  130. package/dist/Layer/useLayer.js +25 -2
  131. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  132. package/dist/Lightbox/Lightbox.js +56 -53
  133. package/dist/Link/Link.d.ts.map +1 -1
  134. package/dist/Link/Link.js +4 -5
  135. package/dist/MobileNav/MobileNav.js +8 -8
  136. package/dist/MoreMenu/MoreMenu.d.ts +14 -1
  137. package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
  138. package/dist/MoreMenu/MoreMenu.js +4 -0
  139. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  140. package/dist/MultiSelector/MultiSelector.js +78 -75
  141. package/dist/NumberInput/NumberInput.d.ts +27 -1
  142. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  143. package/dist/NumberInput/NumberInput.js +230 -42
  144. package/dist/Outline/Outline.d.ts.map +1 -1
  145. package/dist/Outline/Outline.js +2 -3
  146. package/dist/Pagination/Pagination.d.ts.map +1 -1
  147. package/dist/Pagination/Pagination.js +61 -63
  148. package/dist/Popover/Popover.d.ts.map +1 -1
  149. package/dist/Popover/Popover.js +6 -8
  150. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  151. package/dist/PowerSearch/PowerSearch.js +1 -1
  152. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  153. package/dist/PowerSearch/PowerSearchEditPopover.js +7 -0
  154. package/dist/ProgressBar/ProgressBar.d.ts +11 -4
  155. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  156. package/dist/ProgressBar/ProgressBar.js +96 -6
  157. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  158. package/dist/RadioList/RadioListItem.js +29 -84
  159. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  160. package/dist/Resizable/ResizeHandle.js +2 -3
  161. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  162. package/dist/SegmentedControl/SegmentedControlItem.js +2 -3
  163. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  164. package/dist/SelectableCard/SelectableCard.js +3 -11
  165. package/dist/Selector/Selector.d.ts +2 -1
  166. package/dist/Selector/Selector.d.ts.map +1 -1
  167. package/dist/Selector/Selector.js +164 -94
  168. package/dist/Selector/hooks.d.ts +18 -6
  169. package/dist/Selector/hooks.d.ts.map +1 -1
  170. package/dist/Selector/hooks.js +57 -40
  171. package/dist/SideNav/SideNav.d.ts.map +1 -1
  172. package/dist/SideNav/SideNav.js +1 -1
  173. package/dist/SideNav/SideNavCollapseButton.d.ts +1 -1
  174. package/dist/SideNav/SideNavCollapseButton.d.ts.map +1 -1
  175. package/dist/SideNav/SideNavCollapseButton.js +29 -14
  176. package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
  177. package/dist/SideNav/SideNavHeading.js +56 -20
  178. package/dist/SideNav/SideNavItem.d.ts.map +1 -1
  179. package/dist/SideNav/SideNavItem.js +28 -22
  180. package/dist/Stack/stack.stylex.d.ts +3 -3
  181. package/dist/Switch/Switch.js +11 -10
  182. package/dist/TabList/Tab.d.ts.map +1 -1
  183. package/dist/TabList/Tab.js +2 -3
  184. package/dist/TabList/TabMenu.d.ts.map +1 -1
  185. package/dist/TabList/TabMenu.js +41 -19
  186. package/dist/Table/BaseTable.d.ts.map +1 -1
  187. package/dist/Table/BaseTable.js +8 -0
  188. package/dist/Table/index.d.ts +1 -1
  189. package/dist/Table/index.d.ts.map +1 -1
  190. package/dist/Table/index.js +1 -1
  191. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
  192. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
  193. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +22 -18
  194. package/dist/Table/plugins/rowExpansion/index.d.ts +1 -1
  195. package/dist/Table/plugins/rowExpansion/index.d.ts.map +1 -1
  196. package/dist/Table/plugins/rowExpansion/index.js +1 -1
  197. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +41 -76
  198. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  199. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +94 -345
  200. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  201. package/dist/Table/plugins/sortable/useTableSortable.js +23 -4
  202. package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
  203. package/dist/Table/plugins/tree/useTableTreeData.js +29 -33
  204. package/dist/Table/tableContextMenu.d.ts.map +1 -1
  205. package/dist/Table/tableContextMenu.js +2 -1
  206. package/dist/Table/types.d.ts +11 -0
  207. package/dist/Table/types.d.ts.map +1 -1
  208. package/dist/TextArea/TextArea.d.ts +10 -1
  209. package/dist/TextArea/TextArea.d.ts.map +1 -1
  210. package/dist/TextArea/TextArea.js +16 -6
  211. package/dist/TextInput/TextInput.d.ts +10 -1
  212. package/dist/TextInput/TextInput.d.ts.map +1 -1
  213. package/dist/TextInput/TextInput.js +13 -19
  214. package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
  215. package/dist/Thumbnail/Thumbnail.js +32 -26
  216. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  217. package/dist/TimeInput/TimeInput.js +7 -15
  218. package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -1
  219. package/dist/Timestamp/TimestampHoverCard.js +16 -34
  220. package/dist/Token/Token.d.ts.map +1 -1
  221. package/dist/Token/Token.js +20 -11
  222. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  223. package/dist/Tokenizer/Tokenizer.js +4 -2
  224. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  225. package/dist/Tooltip/useTooltip.js +3 -19
  226. package/dist/TopNav/TopNav.d.ts.map +1 -1
  227. package/dist/TopNav/TopNav.js +6 -5
  228. package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
  229. package/dist/TopNav/TopNavHeading.js +54 -16
  230. package/dist/TopNav/TopNavItem.d.ts.map +1 -1
  231. package/dist/TopNav/TopNavItem.js +3 -9
  232. package/dist/TopNav/TopNavMegaMenu.d.ts +7 -0
  233. package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
  234. package/dist/TopNav/TopNavMegaMenu.js +146 -60
  235. package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
  236. package/dist/TopNav/TopNavMegaMenuItem.js +22 -3
  237. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  238. package/dist/TopNav/TopNavMenu.js +83 -38
  239. package/dist/TreeList/TreeList.d.ts.map +1 -1
  240. package/dist/TreeList/TreeList.js +13 -0
  241. package/dist/TreeList/TreeListBranches.d.ts +1 -1
  242. package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
  243. package/dist/TreeList/TreeListBranches.js +14 -4
  244. package/dist/TreeList/TreeListItem.d.ts +11 -1
  245. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  246. package/dist/TreeList/TreeListItem.js +57 -30
  247. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  248. package/dist/Typeahead/BaseTypeahead.js +16 -8
  249. package/dist/astryx.css +74 -85
  250. package/dist/astryx.umd.js +56 -56
  251. package/dist/astryx.umd.js.map +4 -4
  252. package/dist/hooks/containerReveal.stylex.d.ts +61 -0
  253. package/dist/hooks/containerReveal.stylex.d.ts.map +1 -0
  254. package/dist/hooks/containerReveal.stylex.js +63 -0
  255. package/dist/hooks/index.d.ts +3 -0
  256. package/dist/hooks/index.d.ts.map +1 -1
  257. package/dist/hooks/index.js +2 -0
  258. package/dist/hooks/useClipboard.d.ts +59 -0
  259. package/dist/hooks/useClipboard.d.ts.map +1 -0
  260. package/dist/hooks/useClipboard.js +106 -0
  261. package/dist/hooks/useContainerReveal.d.ts +14 -8
  262. package/dist/hooks/useContainerReveal.d.ts.map +1 -1
  263. package/dist/hooks/useContainerReveal.js +28 -69
  264. package/dist/hooks/useIndicatorFocusRing.d.ts +28 -0
  265. package/dist/hooks/useIndicatorFocusRing.d.ts.map +1 -0
  266. package/dist/hooks/useIndicatorFocusRing.js +96 -0
  267. package/dist/hooks/useLongPress.d.ts.map +1 -1
  268. package/dist/hooks/useLongPress.js +12 -2
  269. package/dist/hooks/useScrollLock.d.ts.map +1 -1
  270. package/dist/hooks/useScrollLock.js +33 -18
  271. package/dist/hooks/useStreamingText.d.ts +18 -3
  272. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  273. package/dist/hooks/useStreamingText.js +47 -7
  274. package/dist/hooks/useTreeFocus.d.ts.map +1 -1
  275. package/dist/hooks/useTreeFocus.js +9 -3
  276. package/dist/hooks/useTypeahead.d.ts +3 -2
  277. package/dist/hooks/useTypeahead.d.ts.map +1 -1
  278. package/dist/hooks/useTypeahead.js +19 -7
  279. package/dist/index.d.ts +1 -0
  280. package/dist/index.d.ts.map +1 -1
  281. package/dist/index.js +1 -0
  282. package/dist/theme/defineTheme.d.ts +16 -0
  283. package/dist/theme/defineTheme.d.ts.map +1 -1
  284. package/dist/theme/defineTheme.js +8 -0
  285. package/dist/theme/derivedVarRegistry.d.ts +8 -0
  286. package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
  287. package/dist/theme/derivedVarRegistry.js +14 -13
  288. package/dist/theme/expandColorScale.d.ts +3 -1
  289. package/dist/theme/expandColorScale.d.ts.map +1 -1
  290. package/dist/theme/expandColorScale.js +17 -7
  291. package/dist/theme/expandTypeScale.d.ts.map +1 -1
  292. package/dist/theme/expandTypeScale.js +17 -0
  293. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  294. package/dist/theme/generateThemeRules.js +11 -0
  295. package/dist/theme/index.d.ts +1 -0
  296. package/dist/theme/index.d.ts.map +1 -1
  297. package/dist/utils/focusOutline.stylex.d.ts +107 -0
  298. package/dist/utils/focusOutline.stylex.d.ts.map +1 -0
  299. package/dist/utils/focusOutline.stylex.js +130 -0
  300. package/dist/utils/focusReturn.d.ts +24 -0
  301. package/dist/utils/focusReturn.d.ts.map +1 -0
  302. package/dist/utils/focusReturn.js +29 -0
  303. package/dist/utils/index.d.ts +1 -0
  304. package/dist/utils/index.d.ts.map +1 -1
  305. package/dist/utils/index.js +1 -0
  306. package/dist/utils/mergeRefs.d.ts.map +1 -1
  307. package/dist/utils/mergeRefs.js +7 -5
  308. package/dist/utils/rtlStyles.d.ts +2 -2
  309. package/dist/utils/rtlStyles.js +2 -2
  310. package/dist/utils/themeProps.d.ts +20 -1
  311. package/dist/utils/themeProps.d.ts.map +1 -1
  312. package/dist/utils/themeProps.js +8 -2
  313. package/locales/en.json +12 -0
  314. package/locales/pseudo.json +9 -0
  315. package/package.json +7 -2
  316. package/src/AlertDialog/AlertDialog.doc.mjs +16 -3
  317. package/src/AlertDialog/AlertDialog.test.tsx +208 -1
  318. package/src/AlertDialog/AlertDialog.tsx +21 -3
  319. package/src/AppShell/AppShell.doc.mjs +11 -0
  320. package/src/AppShell/AppShell.test.tsx +139 -0
  321. package/src/AppShell/AppShell.tsx +32 -22
  322. package/src/AspectRatio/AspectRatio.doc.mjs +27 -3
  323. package/src/AspectRatio/AspectRatio.test.tsx +30 -0
  324. package/src/AspectRatio/AspectRatio.tsx +13 -0
  325. package/src/Avatar/Avatar.doc.mjs +2 -13
  326. package/src/Avatar/Avatar.test.tsx +33 -8
  327. package/src/Avatar/Avatar.tsx +52 -50
  328. package/src/AvatarGroup/AvatarGroupOverflow.tsx +2 -9
  329. package/src/Banner/Banner.tsx +9 -6
  330. package/src/Breadcrumbs/BreadcrumbItem.tsx +16 -6
  331. package/src/Breadcrumbs/index.ts +5 -1
  332. package/src/Button/Button.tsx +21 -41
  333. package/src/Calendar/Calendar.tsx +2 -1
  334. package/src/Calendar/styles.ts +0 -8
  335. package/src/Carousel/Carousel.doc.mjs +3 -0
  336. package/src/Carousel/Carousel.tsx +10 -6
  337. package/src/Chat/Chat.doc.mjs +2 -0
  338. package/src/Chat/ChatDictationButton.tsx +7 -1
  339. package/src/Chat/ChatLayoutScrollButton.test.tsx +22 -0
  340. package/src/Chat/ChatLayoutScrollButton.tsx +8 -1
  341. package/src/Chat/ChatSendButton.tsx +2 -3
  342. package/src/Chat/ChatToolCalls.test.tsx +35 -0
  343. package/src/Chat/ChatToolCalls.tsx +36 -16
  344. package/src/Chat/useTriggerMenu.tsx +2 -5
  345. package/src/CheckboxInput/CheckboxInput.doc.mjs +4 -2
  346. package/src/CheckboxInput/CheckboxInput.test.tsx +115 -0
  347. package/src/CheckboxInput/CheckboxInput.tsx +45 -202
  348. package/src/ClickableCard/ClickableCard.tsx +6 -11
  349. package/src/CodeBlock/CodeBlock.doc.mjs +3 -0
  350. package/src/CodeBlock/CodeBlock.test.tsx +91 -0
  351. package/src/CodeBlock/CodeBlock.tsx +57 -80
  352. package/src/Collapsible/Collapsible.tsx +22 -18
  353. package/src/CommandPalette/CommandPalette.test.tsx +29 -0
  354. package/src/CommandPalette/CommandPaletteItem.tsx +7 -4
  355. package/src/CommandPalette/CommandPaletteList.tsx +2 -2
  356. package/src/ComplexSelector/ComplexSelector.doc.mjs +42 -0
  357. package/src/ComplexSelector/ComplexSelector.test.tsx +64 -0
  358. package/src/ComplexSelector/ComplexSelector.tsx +46 -29
  359. package/src/ContextMenu/ContextMenu.doc.mjs +1 -1
  360. package/src/ContextMenu/ContextMenu.test.tsx +41 -0
  361. package/src/ContextMenu/ContextMenu.tsx +3 -3
  362. package/src/ContextMenu/index.ts +5 -1
  363. package/src/DateInput/DateInput.doc.mjs +18 -3
  364. package/src/DateInput/DateInput.test.tsx +93 -11
  365. package/src/DateInput/DateInput.tsx +41 -19
  366. package/src/DateRangeInput/DateRangeInput.doc.mjs +10 -2
  367. package/src/DateRangeInput/DateRangeInput.test.tsx +110 -14
  368. package/src/DateRangeInput/DateRangeInput.tsx +24 -12
  369. package/src/DateTimeInput/DateTimeInput.doc.mjs +16 -2
  370. package/src/DateTimeInput/DateTimeInput.test.tsx +75 -0
  371. package/src/DateTimeInput/DateTimeInput.tsx +35 -8
  372. package/src/Dialog/Dialog.tsx +2 -9
  373. package/src/DropdownMenu/DropdownMenu.doc.mjs +5 -9
  374. package/src/DropdownMenu/DropdownMenu.test.tsx +534 -4
  375. package/src/DropdownMenu/DropdownMenu.tsx +113 -52
  376. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +27 -30
  377. package/src/DropdownMenu/DropdownMenuDivider.doc.mjs +34 -0
  378. package/src/DropdownMenu/DropdownMenuDivider.tsx +81 -0
  379. package/src/DropdownMenu/DropdownMenuItem.doc.mjs +39 -4
  380. package/src/DropdownMenu/DropdownMenuItem.tsx +48 -10
  381. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +30 -76
  382. package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +25 -19
  383. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +44 -14
  384. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +1 -5
  385. package/src/DropdownMenu/index.ts +8 -1
  386. package/src/DropdownMenu/renderDropdownItems.tsx +33 -34
  387. package/src/EmptyState/EmptyState.doc.mjs +4 -0
  388. package/src/EmptyState/EmptyState.test.tsx +62 -0
  389. package/src/EmptyState/EmptyState.tsx +16 -6
  390. package/src/Field/Field.doc.mjs +1 -0
  391. package/src/Field/InputClearButton.test.tsx +117 -0
  392. package/src/Field/InputClearButton.tsx +30 -3
  393. package/src/HoverCard/useHoverCard.tsx +2 -23
  394. package/src/Icon/Icon.doc.mjs +2 -1
  395. package/src/Indicator/CheckIndicator.tsx +174 -0
  396. package/src/Indicator/CheckboxIndicator.tsx +257 -0
  397. package/src/Indicator/Indicator.doc.mjs +344 -0
  398. package/src/Indicator/Indicator.test.tsx +393 -0
  399. package/src/Indicator/RadioIndicator.tsx +206 -0
  400. package/src/Indicator/index.ts +45 -0
  401. package/src/Indicator/indicator.markers.stylex.ts +19 -0
  402. package/src/Indicator/indicatorRegistry.test.tsx +106 -0
  403. package/src/Indicator/indicatorRegistry.ts +120 -0
  404. package/src/Indicator/types.ts +186 -0
  405. package/src/Indicator/useIndicator.ts +39 -0
  406. package/src/Item/Item.doc.mjs +1 -1
  407. package/src/Item/Item.tsx +7 -14
  408. package/src/Layer/useLayer.doc.mjs +2 -2
  409. package/src/Layer/useLayer.test.tsx +85 -0
  410. package/src/Layer/useLayer.tsx +39 -1
  411. package/src/Lightbox/Lightbox.doc.mjs +1 -1
  412. package/src/Lightbox/Lightbox.tsx +43 -38
  413. package/src/Link/Link.tsx +4 -11
  414. package/src/MobileNav/MobileNav.tsx +3 -3
  415. package/src/MoreMenu/MoreMenu.doc.mjs +31 -0
  416. package/src/MoreMenu/MoreMenu.test.tsx +68 -1
  417. package/src/MoreMenu/MoreMenu.tsx +19 -0
  418. package/src/MultiSelector/MultiSelector.doc.mjs +9 -1
  419. package/src/MultiSelector/MultiSelector.test.tsx +255 -16
  420. package/src/MultiSelector/MultiSelector.tsx +103 -99
  421. package/src/NumberInput/NumberInput.doc.mjs +265 -50
  422. package/src/NumberInput/NumberInput.test.tsx +726 -21
  423. package/src/NumberInput/NumberInput.tsx +353 -59
  424. package/src/Outline/Outline.tsx +2 -5
  425. package/src/Pagination/Pagination.doc.mjs +1 -1
  426. package/src/Pagination/Pagination.test.tsx +22 -7
  427. package/src/Pagination/Pagination.tsx +38 -35
  428. package/src/Popover/Popover.tsx +6 -7
  429. package/src/PowerSearch/PowerSearch.tsx +1 -1
  430. package/src/PowerSearch/PowerSearchEditPopover.test.tsx +42 -0
  431. package/src/PowerSearch/PowerSearchEditPopover.tsx +7 -0
  432. package/src/ProgressBar/ProgressBar.doc.mjs +27 -5
  433. package/src/ProgressBar/ProgressBar.test.tsx +224 -1
  434. package/src/ProgressBar/ProgressBar.tsx +124 -22
  435. package/src/RadioList/RadioList.doc.mjs +4 -2
  436. package/src/RadioList/RadioListItem.tsx +31 -130
  437. package/src/Resizable/ResizeHandle.tsx +2 -9
  438. package/src/SegmentedControl/SegmentedControlItem.tsx +2 -9
  439. package/src/SelectableCard/SelectableCard.tsx +4 -9
  440. package/src/Selector/Selector.doc.mjs +7 -4
  441. package/src/Selector/Selector.test.tsx +935 -25
  442. package/src/Selector/Selector.tsx +189 -106
  443. package/src/Selector/hooks.ts +77 -50
  444. package/src/SideNav/SideNav.test.tsx +46 -0
  445. package/src/SideNav/SideNav.tsx +1 -0
  446. package/src/SideNav/SideNavCollapseButton.tsx +15 -10
  447. package/src/SideNav/SideNavHeading.tsx +48 -10
  448. package/src/SideNav/SideNavItem.tsx +20 -12
  449. package/src/Stack/Stack.doc.mjs +110 -0
  450. package/src/StatusDot/StatusDot.doc.mjs +12 -3
  451. package/src/Switch/Switch.test.tsx +32 -0
  452. package/src/Switch/Switch.tsx +8 -8
  453. package/src/TabList/Tab.tsx +2 -9
  454. package/src/TabList/TabMenu.tsx +14 -21
  455. package/src/Table/BaseTable.tsx +11 -0
  456. package/src/Table/index.ts +1 -4
  457. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +30 -14
  458. package/src/Table/plugins/rowExpansion/index.ts +1 -4
  459. package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +125 -175
  460. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +115 -458
  461. package/src/Table/plugins/sortable/useTableSortable.tsx +2 -6
  462. package/src/Table/plugins/tree/useTableTreeData.tsx +43 -24
  463. package/src/Table/tableContextMenu.test.tsx +27 -0
  464. package/src/Table/tableContextMenu.tsx +1 -0
  465. package/src/Table/types.ts +11 -0
  466. package/src/Table/useTableGroupedRows.doc.mjs +1 -1
  467. package/src/Table/useTableRowExpansion.doc.mjs +43 -66
  468. package/src/TextArea/TextArea.doc.mjs +42 -2
  469. package/src/TextArea/TextArea.test.tsx +219 -0
  470. package/src/TextArea/TextArea.tsx +34 -7
  471. package/src/TextInput/TextInput.doc.mjs +18 -2
  472. package/src/TextInput/TextInput.test.tsx +189 -0
  473. package/src/TextInput/TextInput.tsx +25 -31
  474. package/src/Thumbnail/Thumbnail.tsx +2 -9
  475. package/src/TimeInput/TimeInput.doc.mjs +2 -2
  476. package/src/TimeInput/TimeInput.test.tsx +30 -3
  477. package/src/TimeInput/TimeInput.tsx +9 -26
  478. package/src/Timestamp/Timestamp.doc.mjs +4 -3
  479. package/src/Timestamp/TimestampHoverCard.tsx +13 -35
  480. package/src/Token/Token.tsx +5 -28
  481. package/src/Tokenizer/Tokenizer.doc.mjs +2 -2
  482. package/src/Tokenizer/Tokenizer.test.tsx +45 -3
  483. package/src/Tokenizer/Tokenizer.tsx +10 -2
  484. package/src/Tooltip/useTooltip.tsx +2 -23
  485. package/src/TopNav/TopNav.tsx +1 -3
  486. package/src/TopNav/TopNavHeading.tsx +42 -13
  487. package/src/TopNav/TopNavItem.tsx +3 -21
  488. package/src/TopNav/TopNavMegaMenu.test.tsx +433 -33
  489. package/src/TopNav/TopNavMegaMenu.tsx +118 -53
  490. package/src/TopNav/TopNavMegaMenuItem.tsx +2 -9
  491. package/src/TopNav/TopNavMenu.tsx +34 -37
  492. package/src/TreeList/TreeList.doc.mjs +5 -0
  493. package/src/TreeList/TreeList.test.tsx +206 -7
  494. package/src/TreeList/TreeList.tsx +22 -0
  495. package/src/TreeList/TreeListBranches.tsx +25 -2
  496. package/src/TreeList/TreeListItem.tsx +89 -52
  497. package/src/Typeahead/BaseTypeahead.tsx +19 -6
  498. package/src/Typeahead/Typeahead.doc.mjs +1 -0
  499. package/src/Typeahead/Typeahead.test.tsx +76 -3
  500. package/src/hooks/containerReveal.stylex.ts +102 -0
  501. package/src/hooks/index.ts +4 -0
  502. package/src/hooks/useClipboard.doc.mjs +87 -0
  503. package/src/hooks/useClipboard.test.tsx +151 -0
  504. package/src/hooks/useClipboard.ts +135 -0
  505. package/src/hooks/useContainerReveal.doc.mjs +7 -7
  506. package/src/hooks/useContainerReveal.test.tsx +42 -62
  507. package/src/hooks/useContainerReveal.ts +36 -91
  508. package/src/hooks/useImageMode.test.ts +1 -1
  509. package/src/hooks/useIndicatorFocusRing.tsx +120 -0
  510. package/src/hooks/useLongPress.test.tsx +18 -0
  511. package/src/hooks/useLongPress.ts +12 -2
  512. package/src/hooks/useScrollLock.test.ts +72 -0
  513. package/src/hooks/useScrollLock.ts +51 -19
  514. package/src/hooks/useStreamingText.test.ts +46 -1
  515. package/src/hooks/useStreamingText.ts +49 -7
  516. package/src/hooks/useTreeFocus.test.tsx +50 -0
  517. package/src/hooks/useTreeFocus.ts +14 -3
  518. package/src/hooks/useTypeahead.test.tsx +150 -0
  519. package/src/hooks/useTypeahead.ts +24 -9
  520. package/src/i18n/InternationalizationProvider.doc.mjs +7 -2
  521. package/src/index.ts +1 -0
  522. package/src/theme/defineTheme.ts +24 -0
  523. package/src/theme/derivedVarRegistry.test.ts +21 -1
  524. package/src/theme/derivedVarRegistry.ts +19 -6
  525. package/src/theme/expandColorScale.test.ts +14 -0
  526. package/src/theme/expandColorScale.ts +24 -9
  527. package/src/theme/expandTypeScale.test.ts +43 -0
  528. package/src/theme/expandTypeScale.ts +17 -0
  529. package/src/theme/generateThemeRules.test.ts +61 -20
  530. package/src/theme/generateThemeRules.ts +11 -0
  531. package/src/theme/index.ts +13 -0
  532. package/src/utils/focusOutline.stylex.ts +163 -0
  533. package/src/utils/focusReturn.test.ts +42 -0
  534. package/src/utils/focusReturn.ts +31 -0
  535. package/src/utils/index.ts +1 -0
  536. package/src/utils/mergeRefs.test.ts +48 -0
  537. package/src/utils/mergeRefs.ts +12 -6
  538. package/src/utils/rtlStyles.ts +2 -2
  539. package/src/utils/themeProps.ts +26 -4
  540. package/dist/CheckboxInput/checkbox.markers.stylex.d.ts +0 -9
  541. package/dist/CheckboxInput/checkbox.markers.stylex.d.ts.map +0 -1
  542. package/dist/CheckboxInput/checkbox.markers.stylex.js +0 -14
  543. package/dist/RadioList/radio.markers.stylex.d.ts +0 -7
  544. package/dist/RadioList/radio.markers.stylex.d.ts.map +0 -1
  545. package/dist/RadioList/radio.markers.stylex.js +0 -12
  546. package/dist/hooks/containerReveal.pool.stylex.d.ts +0 -303
  547. package/dist/hooks/containerReveal.pool.stylex.d.ts.map +0 -1
  548. package/dist/hooks/containerReveal.pool.stylex.js +0 -292
  549. package/src/CheckboxInput/checkbox.markers.stylex.ts +0 -12
  550. package/src/RadioList/radio.markers.stylex.ts +0 -10
  551. package/src/hooks/containerReveal.pool.stylex.ts +0 -571
@@ -12,6 +12,13 @@
12
12
  * eliminating z-index stacking. CSS anchor positioning places the panel below
13
13
  * the nav wrapper.
14
14
  *
15
+ * The default (desktop) trigger opens on hover and click. Hover opens are
16
+ * transient; click/keyboard opens are pinned. A click shortly after hover-open
17
+ * confirms and pins the panel instead of closing it. The panel remains an auto
18
+ * popover for native dismissal and sibling exclusivity; `popoverTarget`
19
+ * registers the trigger as its native invoker so the guard runs before any
20
+ * dismiss.
21
+ *
15
22
  * Supports three render modes via TopNavRenderContext:
16
23
  * - 'default': desktop popover mega menu (hover/click triggered)
17
24
  * - 'mobile-bar': returns null (hidden in compact mobile bar)
@@ -28,18 +35,59 @@ import "../theme/tokens.stylex.js";
28
35
  import { colorVars, spacingVars, radiusVars, durationVars, easeVars, fontWeightVars, shadowVars, typeScaleVars, borderVars } from "../theme/tokens.stylex.js";
29
36
  import { usePopover } from "../Popover/usePopover.js";
30
37
  import { Grid } from "../Grid/Grid.js";
31
- import { useIcon } from "../Icon/index.js";
38
+ import { Icon } from "../Icon/index.js";
32
39
  import { mergeProps, mergeRefs } from "../utils/index.js";
33
40
  import { navItemStyles } from "../NavItem/navItemStyles.stylex.js";
34
41
  import { useTopNavSlot } from "./TopNavContext.js";
35
42
  import { useTopNavRenderMode } from "./TopNavRenderContext.js";
36
43
  import { themeProps } from "../utils/themeProps.js";
44
+ import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
37
45
 
38
46
  // =============================================================================
39
47
  // Styles
40
48
  // =============================================================================
41
49
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
42
50
  const styles = {
51
+ trigger: {
52
+ k1xSpc: "x3nfvp2",
53
+ kGNEyG: "x6s0dn4",
54
+ kOIVth: "x1txdalj",
55
+ k8WAf4: "x1vofgu7",
56
+ kg3NbH: "xrrkdod",
57
+ kaIpWk: "xh6dtrn",
58
+ kGuDYH: "xcr08ib",
59
+ kLWn49: "x1kq96og",
60
+ k63SB2: "x1e4wzip",
61
+ kMwMTN: "xv1l7n4",
62
+ kybGjl: "x1hl2dhg",
63
+ kkrTdU: "x1ypdohk",
64
+ k1ekBW: "xs2xxs2",
65
+ kIyJzY: "xuedmi6",
66
+ kAMwcw: "xlr8y92",
67
+ kWkggS: "xjbqb8w xe9uy6x",
68
+ kMv6JI: "xjb2p0i",
69
+ $$css: true
70
+ },
71
+ triggerOpen: {
72
+ kMwMTN: "x1tgivj0",
73
+ kWkggS: "x1lmrjuc",
74
+ $$css: true
75
+ },
76
+ chevron: {
77
+ k1xSpc: "x3nfvp2",
78
+ kGNEyG: "x6s0dn4",
79
+ kzqmXN: "x15vhz18",
80
+ kZKoxP: "xlzyvqe",
81
+ kGuDYH: "x1qlqyl8",
82
+ k1ekBW: "x11xpdln",
83
+ kIyJzY: "xuedmi6",
84
+ kAMwcw: "xlr8y92",
85
+ $$css: true
86
+ },
87
+ chevronOpen: {
88
+ k3aq6I: "x19jd1h0",
89
+ $$css: true
90
+ },
43
91
  panelAnimation: {
44
92
  kSiTet: "xg01cxk xofkqq2",
45
93
  k3aq6I: "x1bvilyr x9cjr8z",
@@ -52,14 +100,35 @@ const styles = {
52
100
  $$css: true
53
101
  },
54
102
  panelViewportFit: {
55
- k1xSpc: "x78zum5",
103
+ k1xSpc: "x1s85apg x1y40yee",
56
104
  kXwgrk: "xdt5ytf",
57
105
  kskxy: "xbhvqqn",
58
106
  $$css: true
59
107
  },
108
+ menuWrapper: {
109
+ kzQI83: "xgyuaek",
110
+ kmuXW: "xs83m0k",
111
+ kCS8Yb: "xchdapg",
112
+ k7Eaqz: "xeuugli",
113
+ $$css: true
114
+ },
60
115
  drawerHeader: {
61
116
  kjj79g: "x1qughib",
62
117
  $$css: true
118
+ },
119
+ drawerChevron: {
120
+ k1xSpc: "x3nfvp2",
121
+ kzqmXN: "x15vhz18",
122
+ kZKoxP: "xlzyvqe",
123
+ kGuDYH: "x1qlqyl8",
124
+ k1ekBW: "x11xpdln",
125
+ kIyJzY: "xuedmi6",
126
+ kAMwcw: "xlr8y92",
127
+ $$css: true
128
+ },
129
+ drawerChevronExpanded: {
130
+ k3aq6I: "x19jd1h0",
131
+ $$css: true
63
132
  }
64
133
  };
65
134
 
@@ -164,6 +233,7 @@ TopNavMegaMenu.displayName = 'TopNavMegaMenu';
164
233
  // DefaultMegaMenu — desktop popover mode
165
234
  // =============================================================================
166
235
 
236
+ const CLICK_GUARD_MS = 500;
167
237
  function DefaultMegaMenu({
168
238
  ref,
169
239
  label,
@@ -174,27 +244,36 @@ function DefaultMegaMenu({
174
244
  onOpenChange
175
245
  }) {
176
246
  const slot = useTopNavSlot();
177
- const chevronDownIcon = useIcon('chevronDown');
178
247
  const showTimeoutRef = useRef(null);
179
248
  const hideTimeoutRef = useRef(null);
180
249
  const triggerButtonRef = useRef(null);
181
- const clickLockedRef = useRef(false);
250
+ const hoverOpenedAtRef = useRef(0);
251
+ const stickyRef = useRef(false);
182
252
  const handlePopoverShow = useCallback(() => {
183
253
  onOpenChange?.(true);
184
254
  }, [onOpenChange]);
185
255
  const handlePopoverHide = useCallback(() => {
256
+ hoverOpenedAtRef.current = 0;
257
+ stickyRef.current = false;
186
258
  onOpenChange?.(false);
187
259
  }, [onOpenChange]);
188
260
  const popover = usePopover({
189
261
  // role: 'none' — the panel exposes its own role="group" labeled by
190
- // `label`. Focus stays on the trigger while the panel is open, so a
191
- // role="dialog" aria-modal="true" wrapper would announce an unnamed
192
- // modal dialog around a grid of links.
262
+ // `label`. Pointer/hover opens keep focus on the trigger; keyboard and
263
+ // assistive-tech opens move focus into the panel (a labeled group you exit
264
+ // with Escape or by tabbing out). Either way role="dialog"
265
+ // aria-modal="true" would be wrong: it announces an unnamed modal dialog
266
+ // around a grid of links (and, when focus stays on the trigger, marks the
267
+ // focused control inert).
193
268
  role: 'none',
194
269
  // hasSurface: false — mega menu provides its own surface (panelContainer)
195
270
  // with border-top and custom overflow. Animation is applied via the
196
271
  // render() call's xstyle prop (panelAnimation), not the hook options.
197
272
  hasSurface: false,
273
+ // Keep native outside-click/Escape dismissal and sibling exclusivity.
274
+ // The trigger's popoverTarget association prevents its activation from
275
+ // being treated as an ordinary outside interaction.
276
+ hasLightDismiss: true,
198
277
  onShow: handlePopoverShow,
199
278
  onHide: handlePopoverHide
200
279
  });
@@ -222,38 +301,65 @@ function DefaultMegaMenu({
222
301
  const scheduleShow = useCallback(() => {
223
302
  clearTimeouts();
224
303
  showTimeoutRef.current = setTimeout(() => {
304
+ hoverOpenedAtRef.current = Date.now();
225
305
  popover.show({
226
306
  skipAutoFocus: true
227
307
  });
228
308
  }, delay);
229
- }, [clearTimeouts, popover, delay]);
309
+ }, [clearTimeouts, delay, popover]);
230
310
  const scheduleHide = useCallback(() => {
231
311
  clearTimeouts();
232
312
  hideTimeoutRef.current = setTimeout(() => {
233
313
  popover.hide();
234
314
  }, hideDelay);
235
- }, [clearTimeouts, popover, hideDelay]);
236
- const handleMouseEnter = useCallback(() => {
237
- if (!clickLockedRef.current) {
315
+ }, [clearTimeouts, hideDelay, popover]);
316
+ const focusFirstPanelItem = useCallback(() => {
317
+ popover.contentRef.current?.querySelector('a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])')?.focus();
318
+ }, [popover.contentRef]);
319
+ const handleTriggerMouseEnter = useCallback(() => {
320
+ clearTimeouts();
321
+ if (!popover.isOpen) {
238
322
  scheduleShow();
239
323
  }
240
- }, [scheduleShow]);
324
+ }, [clearTimeouts, popover.isOpen, scheduleShow]);
325
+ const handlePanelMouseEnter = useCallback(() => {
326
+ clearTimeouts();
327
+ }, [clearTimeouts]);
241
328
  const handleMouseLeave = useCallback(() => {
242
- if (!clickLockedRef.current) {
329
+ if (!stickyRef.current) {
243
330
  scheduleHide();
244
331
  }
245
332
  }, [scheduleHide]);
246
- const handleClick = useCallback(() => {
333
+ const handleClick = useCallback(event => {
334
+ // Cancel the native invoker toggle so this guard is the single source of
335
+ // truth for trigger activation. popoverTarget still establishes the
336
+ // invoker relationship used by native light-dismiss and stacking.
337
+ event.preventDefault();
247
338
  clearTimeouts();
248
- if (popover.isOpen) {
249
- clickLockedRef.current = false;
339
+ if (event.detail === 0) {
340
+ stickyRef.current = true;
341
+ hoverOpenedAtRef.current = 0;
342
+ if (popover.isOpen) {
343
+ focusFirstPanelItem();
344
+ } else {
345
+ popover.show();
346
+ }
347
+ } else if (!popover.isOpen) {
348
+ stickyRef.current = true;
349
+ popover.show({
350
+ skipAutoFocus: true
351
+ });
352
+ } else if (Date.now() - hoverOpenedAtRef.current < CLICK_GUARD_MS) {
353
+ // A click that naturally follows a hover-open confirms the open state
354
+ // instead of toggling the panel shut. From here it behaves like any
355
+ // other click-open and stays pinned until explicit dismissal.
356
+ stickyRef.current = true;
357
+ hoverOpenedAtRef.current = 0;
358
+ } else {
250
359
  popover.hide();
251
360
  triggerButtonRef.current?.focus();
252
- } else {
253
- clickLockedRef.current = true;
254
- popover.show();
255
361
  }
256
- }, [popover, clearTimeouts]);
362
+ }, [clearTimeouts, focusFirstPanelItem, popover]);
257
363
  useEffect(() => {
258
364
  return () => {
259
365
  clearTimeouts();
@@ -264,27 +370,17 @@ function DefaultMegaMenu({
264
370
  ref: mergeRefs(triggerButtonRef, ref),
265
371
  type: "button",
266
372
  ...popover.triggerProps,
373
+ // Native invoker prevents trigger light-dismiss.
374
+ popoverTarget: popover.id,
267
375
  onClick: handleClick,
268
- onMouseEnter: handleMouseEnter,
376
+ onMouseEnter: handleTriggerMouseEnter,
269
377
  onMouseLeave: handleMouseLeave,
270
- ...mergeProps(themeProps('top-nav-mega-menu'), {
271
- 0: {
272
- className: "x3nfvp2 x6s0dn4 x1txdalj x1vofgu7 xrrkdod xh6dtrn xcr08ib x1kq96og x1e4wzip xv1l7n4 x1hl2dhg x1ypdohk xs2xxs2 xuedmi6 xlr8y92 xjbqb8w xe9uy6x x17nn4n9 x1wfwxd8 x7s97pk xjb2p0i"
273
- },
274
- 1: {
275
- className: "x3nfvp2 x6s0dn4 x1txdalj x1vofgu7 xrrkdod xh6dtrn xcr08ib x1kq96og x1e4wzip x1hl2dhg x1ypdohk xs2xxs2 xuedmi6 xlr8y92 x17nn4n9 x1wfwxd8 x7s97pk xjb2p0i x1tgivj0 x1lmrjuc"
276
- }
277
- }[!!popover.isOpen << 0]),
278
- children: [label, /*#__PURE__*/_jsx("span", {
279
- ...{
280
- 0: {
281
- className: "x3nfvp2 x6s0dn4 x11xpdln xuedmi6 xlr8y92"
282
- },
283
- 1: {
284
- className: "x3nfvp2 x6s0dn4 x11xpdln xuedmi6 xlr8y92 x19jd1h0"
285
- }
286
- }[!!popover.isOpen << 0],
287
- children: chevronDownIcon
378
+ ...mergeProps(themeProps('top-nav-mega-menu'), focusOutlineProps.focusVisible(styles.trigger, popover.isOpen && styles.triggerOpen)),
379
+ children: [label, /*#__PURE__*/_jsx(Icon, {
380
+ icon: "chevronDown",
381
+ size: "sm",
382
+ color: "inherit",
383
+ xstyle: [styles.chevron, popover.isOpen && styles.chevronOpen]
288
384
  })]
289
385
  }), popover.render(/*#__PURE__*/_jsx("div", {
290
386
  // role="group" — a mega menu is a browsing grid of links, not an
@@ -292,7 +388,7 @@ function DefaultMegaMenu({
292
388
  // for action menus; link mega menus are the documented anti-case).
293
389
  role: "group",
294
390
  "aria-label": label,
295
- onMouseEnter: handleMouseEnter,
391
+ onMouseEnter: handlePanelMouseEnter,
296
392
  onMouseLeave: handleMouseLeave,
297
393
  ...{
298
394
  className: "x1prclbq x11xkdxz x13fuv20 x1pc3f07 x1hviunn x1i5ehqx xb3r6kr x78zum5 xdt5ytf x2lwn1j"
@@ -301,15 +397,11 @@ function DefaultMegaMenu({
301
397
  ...{
302
398
  className: "x78zum5 x1a02dak x1qh66ti x8o8v82 xrrkdod x1m1aaou x9f619 x1odjw0f xish69e"
303
399
  },
304
- children: [items != null && /*#__PURE__*/_jsx("div", {
305
- ...{
306
- className: "xgyuaek xs83m0k xchdapg xeuugli"
307
- },
308
- children: /*#__PURE__*/_jsx(Grid, {
309
- columns: 2,
310
- gap: 2,
311
- children: items
312
- })
400
+ children: [items != null && /*#__PURE__*/_jsx(Grid, {
401
+ columns: 2,
402
+ gap: 2,
403
+ xstyle: styles.menuWrapper,
404
+ children: items
313
405
  }), featured != null && /*#__PURE__*/_jsx("div", {
314
406
  ...{
315
407
  className: "x1iyjqo2 xs83m0k xjpgo6f x1hviunn xwmxj5m xb3r6kr x78zum5 xdt5ytf"
@@ -335,7 +427,6 @@ function DrawerMegaMenu({
335
427
  featured
336
428
  }) {
337
429
  const [isExpanded, setIsExpanded] = useState(false);
338
- const chevronDownIcon = useIcon('chevronDown');
339
430
  const menuId = `mega-menu-${label.toLowerCase().replace(/\s+/g, '-')}`;
340
431
  return /*#__PURE__*/_jsxs("div", {
341
432
  ...{
@@ -349,16 +440,11 @@ function DrawerMegaMenu({
349
440
  ...mergeProps(themeProps('top-nav-mega-menu', {
350
441
  mode: 'drawer'
351
442
  }), stylex.props(navItemStyles.item, styles.drawerHeader)),
352
- children: [label, /*#__PURE__*/_jsx("span", {
353
- ...{
354
- 0: {
355
- className: "x3nfvp2 x11xpdln xuedmi6 xlr8y92"
356
- },
357
- 1: {
358
- className: "x3nfvp2 x11xpdln xuedmi6 xlr8y92 x19jd1h0"
359
- }
360
- }[!!isExpanded << 0],
361
- children: chevronDownIcon
443
+ children: [label, /*#__PURE__*/_jsx(Icon, {
444
+ icon: "chevronDown",
445
+ size: "sm",
446
+ color: "inherit",
447
+ xstyle: [styles.drawerChevron, isExpanded && styles.drawerChevronExpanded]
362
448
  })]
363
449
  }), /*#__PURE__*/_jsx("div", {
364
450
  id: `${menuId}-items`,
@@ -1 +1 @@
1
- {"version":3,"file":"TopNavMegaMenuItem.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavMegaMenuItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAa5C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAGrD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA6G5C,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CACnD,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;CACxB;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,GAAG,EACH,KAAK,EACL,WAAW,EACX,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,EAAE,EACF,QAAQ,GACT,EAAE,uBAAuB,qBA+DzB;yBAxEe,kBAAkB"}
1
+ {"version":3,"file":"TopNavMegaMenuItem.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavMegaMenuItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAa5C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAGrD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAsG5C,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CACnD,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,CACV;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;CACxB;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,GAAG,EACH,KAAK,EACL,WAAW,EACX,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,EAAE,EACF,QAAQ,GACT,EAAE,uBAAuB,qBA+DzB;yBAxEe,kBAAkB"}
@@ -24,12 +24,33 @@ import { useTopNavRenderMode } from "./TopNavRenderContext.js";
24
24
  import { mergeProps } from "../utils/index.js";
25
25
  import { useAppShellMobile } from "../AppShell/AppShellMobileContext.js";
26
26
  import { themeProps } from "../utils/themeProps.js";
27
+ import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
27
28
 
28
29
  // =============================================================================
29
30
  // Styles
30
31
  // =============================================================================
31
32
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
32
33
  const styles = {
34
+ desktop: {
35
+ k1xSpc: "x78zum5",
36
+ kGNEyG: "x1cy8zhl",
37
+ kOIVth: "xjcht0a",
38
+ k8WAf4: "x8o8v82",
39
+ kg3NbH: "xrrkdod",
40
+ kaIpWk: "xh6dtrn",
41
+ kybGjl: "x1hl2dhg",
42
+ kkrTdU: "x1ypdohk",
43
+ k1ekBW: "x15406qy",
44
+ kIyJzY: "xuedmi6",
45
+ kAMwcw: "xlr8y92",
46
+ kWkggS: "xjbqb8w xe9uy6x xyxi2l3",
47
+ kMwMTN: "x1heor9g",
48
+ kMv6JI: "xjb2p0i",
49
+ k9WMMc: "x1yc453h",
50
+ kB7OPa: "x9f619",
51
+ kzqmXN: "xh8yej3",
52
+ $$css: true
53
+ },
33
54
  drawerItem: {
34
55
  kZCmMZ: "x31w388",
35
56
  kGNEyG: "x1cy8zhl",
@@ -134,9 +155,7 @@ export function TopNavMegaMenuItem({
134
155
  href: href,
135
156
  onClick: onClick,
136
157
  tabIndex: tabIndex,
137
- ...mergeProps(themeProps('top-nav-mega-menu-item'), {
138
- className: "x78zum5 x1cy8zhl xjcht0a x8o8v82 xrrkdod xh6dtrn x1hl2dhg x1ypdohk x15406qy xuedmi6 xlr8y92 xjbqb8w xe9uy6x xyxi2l3 x17nn4n9 x1wfwxd8 x7s97pk x1heor9g xjb2p0i x1yc453h x9f619 xh8yej3"
139
- }),
158
+ ...mergeProps(themeProps('top-nav-mega-menu-item'), focusOutlineProps.focusVisible(styles.desktop)),
140
159
  children: [icon && /*#__PURE__*/_jsx("div", {
141
160
  ...{
142
161
  className: "x78zum5 x6s0dn4 xl56j7k x100vrsf x1vqgdyp xh6dtrn x17x4s8c x2lah0s xv9yike"
@@ -1 +1 @@
1
- {"version":3,"file":"TopNavMenu.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavMenu.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,EAKZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAQf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAmM5C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAMD,MAAM,WAAW,eAAgB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACnE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAE5B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,wBAAgB,UAAU,CAAC,EACzB,GAAG,EACH,KAAK,EACL,KAAK,EACL,KAAW,EACX,SAAe,GAChB,EAAE,eAAe,4BAgOjB;yBAtOe,UAAU"}
1
+ {"version":3,"file":"TopNavMenu.d.ts","sourceRoot":"","sources":["../../src/TopNav/TopNavMenu.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,EAKZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAQf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA8L5C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAMD,MAAM,WAAW,eAAgB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACnE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAE5B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,wBAAgB,UAAU,CAAC,EACzB,GAAG,EACH,KAAK,EACL,KAAK,EACL,KAAW,EACX,SAAe,GAChB,EAAE,eAAe,4BAkOjB;yBAxOe,UAAU"}
@@ -21,7 +21,7 @@ import { usePopover } from "../Popover/usePopover.js";
21
21
  import { useMenuHover } from "../hooks/useMenuHover.js";
22
22
  import { useListFocus } from "../hooks/useListFocus.js";
23
23
  import { useTypeahead } from "../hooks/useTypeahead.js";
24
- import { useIcon } from "../Icon/index.js";
24
+ import { Icon } from "../Icon/index.js";
25
25
  import { mergeProps, mergeRefs } from "../utils/index.js";
26
26
  import { navItemStyles } from "../NavItem/navItemStyles.stylex.js";
27
27
  import { useTopNavSlot } from "./TopNavContext.js";
@@ -29,6 +29,7 @@ import { useTopNavRenderMode } from "./TopNavRenderContext.js";
29
29
  import { useAppShellMobile } from "../AppShell/AppShellMobileContext.js";
30
30
  import { useLinkComponent } from "../Link/useLinkComponent.js";
31
31
  import { themeProps } from "../utils/themeProps.js";
32
+ import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
32
33
  import "../theme/tokens.stylex.js";
33
34
  import { colorVars, spacingVars, radiusVars, durationVars, easeVars, fontWeightVars, typeScaleVars } from "../theme/tokens.stylex.js";
34
35
 
@@ -37,8 +38,59 @@ import { colorVars, spacingVars, radiusVars, durationVars, easeVars, fontWeightV
37
38
  // =============================================================================
38
39
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
39
40
  const styles = {
40
- menuOffset: {
41
- keoZOQ: "xcsaf9d",
41
+ trigger: {
42
+ k1xSpc: "x3nfvp2",
43
+ kGNEyG: "x6s0dn4",
44
+ kOIVth: "x1txdalj",
45
+ k8WAf4: "x1vofgu7",
46
+ kg3NbH: "xrrkdod",
47
+ kaIpWk: "xh6dtrn",
48
+ kGuDYH: "xcr08ib",
49
+ kLWn49: "x1kq96og",
50
+ k63SB2: "x1e4wzip",
51
+ kMwMTN: "xv1l7n4",
52
+ kybGjl: "x1hl2dhg",
53
+ kkrTdU: "x1ypdohk",
54
+ k1ekBW: "xs2xxs2",
55
+ kIyJzY: "xuedmi6",
56
+ kAMwcw: "xlr8y92",
57
+ kWkggS: "xjbqb8w xe9uy6x",
58
+ kMv6JI: "xjb2p0i",
59
+ $$css: true
60
+ },
61
+ triggerOpen: {
62
+ kMwMTN: "x1tgivj0",
63
+ kWkggS: "x1lmrjuc",
64
+ $$css: true
65
+ },
66
+ chevron: {
67
+ k1xSpc: "x3nfvp2",
68
+ kGNEyG: "x6s0dn4",
69
+ kzqmXN: "x15vhz18",
70
+ kZKoxP: "xlzyvqe",
71
+ kGuDYH: "x1qlqyl8",
72
+ k1ekBW: "x11xpdln",
73
+ kIyJzY: "xuedmi6",
74
+ kAMwcw: "xlr8y92",
75
+ $$css: true
76
+ },
77
+ chevronOpen: {
78
+ k3aq6I: "x19jd1h0",
79
+ $$css: true
80
+ },
81
+ menuItem: {
82
+ k1xSpc: "x78zum5",
83
+ kGNEyG: "x6s0dn4",
84
+ kOIVth: "xjcht0a",
85
+ k8WAf4: "x8o8v82",
86
+ kg3NbH: "xrrkdod",
87
+ kaIpWk: "xh6dtrn",
88
+ kybGjl: "x1hl2dhg",
89
+ kkrTdU: "x1ypdohk",
90
+ k1ekBW: "x15406qy",
91
+ kIyJzY: "xuedmi6",
92
+ kAMwcw: "xlr8y92",
93
+ kWkggS: "xjbqb8w xe9uy6x",
42
94
  $$css: true
43
95
  }
44
96
  };
@@ -47,6 +99,20 @@ const drawerStyles = {
47
99
  kjj79g: "x1qughib",
48
100
  $$css: true
49
101
  },
102
+ chevron: {
103
+ k1xSpc: "x3nfvp2",
104
+ kzqmXN: "x15vhz18",
105
+ kZKoxP: "xlzyvqe",
106
+ kGuDYH: "x1qlqyl8",
107
+ k1ekBW: "x11xpdln",
108
+ kIyJzY: "xuedmi6",
109
+ kAMwcw: "xlr8y92",
110
+ $$css: true
111
+ },
112
+ chevronExpanded: {
113
+ k3aq6I: "x19jd1h0",
114
+ $$css: true
115
+ },
50
116
  item: {
51
117
  kZCmMZ: "x31w388",
52
118
  kybGjl: "x1hl2dhg",
@@ -113,7 +179,6 @@ export function TopNavMenu({
113
179
  hideDelay = 200
114
180
  }) {
115
181
  const renderMode = useTopNavRenderMode();
116
- const chevronDownIcon = useIcon('chevronDown');
117
182
  const {
118
183
  closeMobileNav
119
184
  } = useAppShellMobile();
@@ -126,8 +191,7 @@ export function TopNavMenu({
126
191
  // The popup's own role="menu" is the exposed semantics; a modal dialog
127
192
  // wrapper would announce an unnamed dialog around the menu and make the
128
193
  // trigger claim aria-haspopup="dialog" for menu content (see TabMenu).
129
- role: 'none',
130
- xstyle: styles.menuOffset
194
+ role: 'none'
131
195
  });
132
196
  const {
133
197
  triggerProps,
@@ -209,16 +273,11 @@ export function TopNavMenu({
209
273
  "aria-expanded": drawerExpanded,
210
274
  "aria-controls": `${menuId}-items`,
211
275
  ...stylex.props(navItemStyles.item, drawerStyles.header),
212
- children: [label, /*#__PURE__*/_jsx("span", {
213
- ...{
214
- 0: {
215
- className: "x3nfvp2 x11xpdln xuedmi6 xlr8y92"
216
- },
217
- 1: {
218
- className: "x3nfvp2 x11xpdln xuedmi6 xlr8y92 x19jd1h0"
219
- }
220
- }[!!drawerExpanded << 0],
221
- children: chevronDownIcon
276
+ children: [label, /*#__PURE__*/_jsx(Icon, {
277
+ icon: "chevronDown",
278
+ size: "sm",
279
+ color: "inherit",
280
+ xstyle: [drawerStyles.chevron, drawerExpanded && drawerStyles.chevronExpanded]
222
281
  })]
223
282
  }), /*#__PURE__*/_jsx("div", {
224
283
  id: `${menuId}-items`,
@@ -270,24 +329,12 @@ export function TopNavMenu({
270
329
  type: "button",
271
330
  ...popover.triggerProps,
272
331
  ...triggerProps,
273
- ...mergeProps(themeProps('top-nav-menu'), {
274
- 0: {
275
- className: "x3nfvp2 x6s0dn4 x1txdalj x1vofgu7 xrrkdod xh6dtrn xcr08ib x1kq96og x1e4wzip xv1l7n4 x1hl2dhg x1ypdohk xs2xxs2 xuedmi6 xlr8y92 xjbqb8w xe9uy6x x17nn4n9 x1wfwxd8 x7s97pk xjb2p0i"
276
- },
277
- 1: {
278
- className: "x3nfvp2 x6s0dn4 x1txdalj x1vofgu7 xrrkdod xh6dtrn xcr08ib x1kq96og x1e4wzip x1hl2dhg x1ypdohk xs2xxs2 xuedmi6 xlr8y92 x17nn4n9 x1wfwxd8 x7s97pk xjb2p0i x1tgivj0 x1lmrjuc"
279
- }
280
- }[!!popover.isOpen << 0]),
281
- children: [label, /*#__PURE__*/_jsx("span", {
282
- ...{
283
- 0: {
284
- className: "x3nfvp2 x6s0dn4 x11xpdln xuedmi6 xlr8y92"
285
- },
286
- 1: {
287
- className: "x3nfvp2 x6s0dn4 x11xpdln xuedmi6 xlr8y92 x19jd1h0"
288
- }
289
- }[!!popover.isOpen << 0],
290
- children: chevronDownIcon
332
+ ...mergeProps(themeProps('top-nav-menu'), focusOutlineProps.focusVisible(styles.trigger, popover.isOpen && styles.triggerOpen)),
333
+ children: [label, /*#__PURE__*/_jsx(Icon, {
334
+ icon: "chevronDown",
335
+ size: "sm",
336
+ color: "inherit",
337
+ xstyle: [styles.chevron, popover.isOpen && styles.chevronOpen]
291
338
  })]
292
339
  }), popover.render(/*#__PURE__*/_jsx("div", {
293
340
  ref: setMenuRef,
@@ -312,9 +359,7 @@ export function TopNavMenu({
312
359
  tabIndex: -1,
313
360
  href: item.href,
314
361
  onClick: item.onClick,
315
- ...{
316
- className: "x78zum5 x6s0dn4 xjcht0a x8o8v82 xrrkdod xh6dtrn x1hl2dhg x1ypdohk x15406qy xuedmi6 xlr8y92 xjbqb8w xe9uy6x x17nn4n9 x1wfwxd8 x7s97pk"
317
- },
362
+ ...focusOutlineProps.focusVisible(styles.menuItem),
318
363
  children: [/*#__PURE__*/_jsx("div", {
319
364
  ...{
320
365
  className: "x78zum5 x6s0dn4 xl56j7k x100vrsf x1vqgdyp xh6dtrn x17x4s8c x2lah0s"
@@ -341,7 +386,7 @@ export function TopNavMenu({
341
386
  }), {
342
387
  placement: 'below',
343
388
  alignment: slot,
344
- xstyle: styles.menuOffset
389
+ offset: spacingVars['--spacing-1']
345
390
  })]
346
391
  });
347
392
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TreeList.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeList.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAwC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAI5E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAC,KAAK,eAAe,EAAE,KAAK,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAE3E,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC;;;OAGG;IACH,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAE1B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA4ED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,OAAoB,EACpB,OAAsB,EACtB,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,GACJ,EAAE,aAAa,+BAqJf;yBA/Je,QAAQ"}
1
+ {"version":3,"file":"TreeList.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeList.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAwC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAI5E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAC,KAAK,eAAe,EAAE,KAAK,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAE3E,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC;;;OAGG;IACH,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAE1B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAmFD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,OAAoB,EACpB,OAAsB,EACtB,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,GACJ,EAAE,aAAa,+BAoKf;yBA9Ke,QAAQ"}
@@ -35,6 +35,7 @@ const styles = {
35
35
  root: {
36
36
  kVAEAm: "x1n2onr6",
37
37
  "--tree-list-indent": "xpa4xmd",
38
+ "--tree-list-row-gap": "x1xbi2jf",
38
39
  $$css: true
39
40
  }
40
41
  };
@@ -176,7 +177,18 @@ export function TreeList({
176
177
  onActivate: activateItem,
177
178
  hasRovingTabIndex: true
178
179
  });
180
+ const hasExpandableItems = items.some(item => item.children != null && item.children.length > 0);
179
181
  function renderItems(items, nestedLevel, ancestorsIsLast) {
182
+ // A leaf reserves the chevron column (so its label lines up under a parent's
183
+ // caret) whenever the tree contains ANY expandable item — i.e. whenever a
184
+ // caret exists somewhere to align under. This is a whole-tree property, not
185
+ // a per-group one: a leaf nested under an expandable ancestor must still
186
+ // reserve the column so it stays indented past its parent's label, even if
187
+ // its own immediate group happens to be all leaves. Only a fully flat tree
188
+ // (no expandable items anywhere) has no caret to align under, so its rows
189
+ // sit flush. Because any expandable descendant forces its whole ancestor
190
+ // chain to be expandable, "the tree has an expandable item" is equivalent to
191
+ // "the root group has an expandable item" — checked once at the root.
180
192
  return items.map((item, index) => {
181
193
  const isLast = index === items.length - 1;
182
194
  const isExpanded = expandedKeysOverride.has(item.id) ? expandedKeysOverride.get(item.id) ?? false : expandedKeysFromProps.has(item.id);
@@ -190,6 +202,7 @@ export function TreeList({
190
202
  startContent: item.startContent,
191
203
  endContent: item.endContent,
192
204
  hasChildren: hasChildren,
205
+ hasExpandableItems: hasExpandableItems,
193
206
  onClick: item.onClick,
194
207
  href: item.href,
195
208
  target: item.target,
@@ -12,7 +12,7 @@ interface TreeListBranchesProps {
12
12
  * `backgroundColor` or `display: 'none'`) instead of hiding the built-in guides
13
13
  * and reimplementing them.
14
14
  */
15
- export declare function TreeListBranches({ ancestorsIsLast, isLast: _isLast, nestedLevel, }: TreeListBranchesProps): import("react").JSX.Element;
15
+ export declare function TreeListBranches({ ancestorsIsLast, isLast, nestedLevel, }: TreeListBranchesProps): import("react").JSX.Element;
16
16
  export declare namespace TreeListBranches {
17
17
  var displayName: string;
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TreeListBranches.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeListBranches.tsx"],"names":[],"mappings":"AAyDA,UAAU,qBAAqB;IAC7B,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,eAAe,EACf,MAAM,EAAE,OAAO,EACf,WAAW,GACZ,EAAE,qBAAqB,+BA8CvB;yBAlDe,gBAAgB"}
1
+ {"version":3,"file":"TreeListBranches.d.ts","sourceRoot":"","sources":["../../src/TreeList/TreeListBranches.tsx"],"names":[],"mappings":"AAwEA,UAAU,qBAAqB;IAC7B,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,eAAe,EACf,MAAM,EACN,WAAW,GACZ,EAAE,qBAAqB,+BAsDvB;yBA1De,gBAAgB"}