@fragments-sdk/ui 0.11.1 → 0.13.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 (303) hide show
  1. package/README.md +15 -0
  2. package/dist/assets/ui.css +25 -18
  3. package/dist/blocks/AccountSettings.block.d.ts +1 -1
  4. package/dist/blocks/ActivityFeed.block.d.ts +1 -1
  5. package/dist/blocks/ActivityFeedSkeleton.block.d.ts +1 -1
  6. package/dist/blocks/BlogEditor.block.d.ts +1 -1
  7. package/dist/blocks/ChatInterface.block.d.ts +1 -1
  8. package/dist/blocks/ChatMessages.block.d.ts +1 -1
  9. package/dist/blocks/CheckoutForm.block.d.ts +1 -1
  10. package/dist/blocks/CommandPalette.block.d.ts +1 -1
  11. package/dist/blocks/ContactForm.block.d.ts +1 -1
  12. package/dist/blocks/DashboardLayout.block.d.ts +1 -1
  13. package/dist/blocks/DashboardPage.block.d.ts +1 -1
  14. package/dist/blocks/DashboardSkeleton.block.d.ts +1 -1
  15. package/dist/blocks/DataTable.block.d.ts +1 -1
  16. package/dist/blocks/EmptyState.block.d.ts +1 -1
  17. package/dist/blocks/FAQSection.block.d.ts +1 -1
  18. package/dist/blocks/FeatureGrid.block.d.ts +1 -1
  19. package/dist/blocks/HeroSection.block.d.ts +1 -1
  20. package/dist/blocks/LoginForm.block.d.ts +1 -1
  21. package/dist/blocks/NavigationHeader.block.d.ts +1 -1
  22. package/dist/blocks/PaginatedTable.block.d.ts +1 -1
  23. package/dist/blocks/PricingComparison.block.d.ts +1 -1
  24. package/dist/blocks/ProductCard.block.d.ts +1 -1
  25. package/dist/blocks/RegistrationForm.block.d.ts +1 -1
  26. package/dist/blocks/SettingsDrawer.block.d.ts +1 -1
  27. package/dist/blocks/SettingsPanel.block.d.ts +1 -1
  28. package/dist/blocks/ShoppingCart.block.d.ts +1 -1
  29. package/dist/blocks/StatsCard.block.d.ts +1 -1
  30. package/dist/blocks/StatsCardSkeleton.block.d.ts +1 -1
  31. package/dist/blocks/TableSkeleton.block.d.ts +1 -1
  32. package/dist/blocks/ThinkingStates.block.d.ts +1 -1
  33. package/dist/codeblock.cjs +7 -1
  34. package/dist/codeblock.cjs.map +1 -1
  35. package/dist/codeblock.js +7 -1
  36. package/dist/codeblock.js.map +1 -1
  37. package/dist/components/Accordion/index.cjs +11 -4
  38. package/dist/components/Accordion/index.cjs.map +1 -1
  39. package/dist/components/Accordion/index.d.ts +3 -3
  40. package/dist/components/Accordion/index.d.ts.map +1 -1
  41. package/dist/components/Accordion/index.js +11 -4
  42. package/dist/components/Accordion/index.js.map +1 -1
  43. package/dist/components/Alert/index.cjs.map +1 -1
  44. package/dist/components/Alert/index.d.ts +7 -0
  45. package/dist/components/Alert/index.d.ts.map +1 -1
  46. package/dist/components/Alert/index.js.map +1 -1
  47. package/dist/components/Avatar/index.cjs.map +1 -1
  48. package/dist/components/Avatar/index.d.ts +4 -0
  49. package/dist/components/Avatar/index.d.ts.map +1 -1
  50. package/dist/components/Avatar/index.js.map +1 -1
  51. package/dist/components/Badge/index.cjs.map +1 -1
  52. package/dist/components/Badge/index.d.ts +12 -0
  53. package/dist/components/Badge/index.d.ts.map +1 -1
  54. package/dist/components/Badge/index.js.map +1 -1
  55. package/dist/components/Button/index.cjs +9 -1
  56. package/dist/components/Button/index.cjs.map +1 -1
  57. package/dist/components/Button/index.d.ts +14 -1
  58. package/dist/components/Button/index.d.ts.map +1 -1
  59. package/dist/components/Button/index.js +9 -1
  60. package/dist/components/Button/index.js.map +1 -1
  61. package/dist/components/Card/index.cjs +2 -1
  62. package/dist/components/Card/index.cjs.map +1 -1
  63. package/dist/components/Card/index.d.ts +12 -2
  64. package/dist/components/Card/index.d.ts.map +1 -1
  65. package/dist/components/Card/index.js +2 -1
  66. package/dist/components/Card/index.js.map +1 -1
  67. package/dist/components/Checkbox/index.cjs.map +1 -1
  68. package/dist/components/Checkbox/index.d.ts +6 -1
  69. package/dist/components/Checkbox/index.d.ts.map +1 -1
  70. package/dist/components/Checkbox/index.js.map +1 -1
  71. package/dist/components/Chip/index.cjs +2 -1
  72. package/dist/components/Chip/index.cjs.map +1 -1
  73. package/dist/components/Chip/index.d.ts +10 -3
  74. package/dist/components/Chip/index.d.ts.map +1 -1
  75. package/dist/components/Chip/index.js +2 -1
  76. package/dist/components/Chip/index.js.map +1 -1
  77. package/dist/components/CodeBlock/index.d.ts +1 -1
  78. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  79. package/dist/components/Collapsible/index.cjs +45 -10
  80. package/dist/components/Collapsible/index.cjs.map +1 -1
  81. package/dist/components/Collapsible/index.d.ts +6 -12
  82. package/dist/components/Collapsible/index.d.ts.map +1 -1
  83. package/dist/components/Collapsible/index.js +45 -10
  84. package/dist/components/Collapsible/index.js.map +1 -1
  85. package/dist/components/Combobox/index.cjs +18 -9
  86. package/dist/components/Combobox/index.cjs.map +1 -1
  87. package/dist/components/Combobox/index.d.ts +8 -12
  88. package/dist/components/Combobox/index.d.ts.map +1 -1
  89. package/dist/components/Combobox/index.js +18 -9
  90. package/dist/components/Combobox/index.js.map +1 -1
  91. package/dist/components/Command/index.cjs +54 -21
  92. package/dist/components/Command/index.cjs.map +1 -1
  93. package/dist/components/Command/index.d.ts +2 -2
  94. package/dist/components/Command/index.d.ts.map +1 -1
  95. package/dist/components/Command/index.js +54 -21
  96. package/dist/components/Command/index.js.map +1 -1
  97. package/dist/components/DataTable/index.cjs +13 -1
  98. package/dist/components/DataTable/index.cjs.map +1 -1
  99. package/dist/components/DataTable/index.d.ts.map +1 -1
  100. package/dist/components/DataTable/index.js +13 -1
  101. package/dist/components/DataTable/index.js.map +1 -1
  102. package/dist/components/DatePicker/index.d.ts +2 -3
  103. package/dist/components/DatePicker/index.d.ts.map +1 -1
  104. package/dist/components/Dialog/index.cjs +12 -9
  105. package/dist/components/Dialog/index.cjs.map +1 -1
  106. package/dist/components/Dialog/index.d.ts +20 -12
  107. package/dist/components/Dialog/index.d.ts.map +1 -1
  108. package/dist/components/Dialog/index.js +12 -9
  109. package/dist/components/Dialog/index.js.map +1 -1
  110. package/dist/components/Drawer/index.cjs +12 -9
  111. package/dist/components/Drawer/index.cjs.map +1 -1
  112. package/dist/components/Drawer/index.d.ts +22 -12
  113. package/dist/components/Drawer/index.d.ts.map +1 -1
  114. package/dist/components/Drawer/index.js +12 -9
  115. package/dist/components/Drawer/index.js.map +1 -1
  116. package/dist/components/Grid/index.cjs +4 -1
  117. package/dist/components/Grid/index.cjs.map +1 -1
  118. package/dist/components/Grid/index.d.ts +6 -2
  119. package/dist/components/Grid/index.d.ts.map +1 -1
  120. package/dist/components/Grid/index.js +4 -1
  121. package/dist/components/Grid/index.js.map +1 -1
  122. package/dist/components/Input/index.cjs.map +1 -1
  123. package/dist/components/Input/index.d.ts +15 -1
  124. package/dist/components/Input/index.d.ts.map +1 -1
  125. package/dist/components/Input/index.js.map +1 -1
  126. package/dist/components/Menu/index.cjs +30 -16
  127. package/dist/components/Menu/index.cjs.map +1 -1
  128. package/dist/components/Menu/index.d.ts +17 -25
  129. package/dist/components/Menu/index.d.ts.map +1 -1
  130. package/dist/components/Menu/index.js +30 -16
  131. package/dist/components/Menu/index.js.map +1 -1
  132. package/dist/components/NavigationMenu/NavigationMenuContext.cjs.map +1 -1
  133. package/dist/components/NavigationMenu/NavigationMenuContext.d.ts +1 -0
  134. package/dist/components/NavigationMenu/NavigationMenuContext.d.ts.map +1 -1
  135. package/dist/components/NavigationMenu/NavigationMenuContext.js.map +1 -1
  136. package/dist/components/NavigationMenu/index.cjs +43 -11
  137. package/dist/components/NavigationMenu/index.cjs.map +1 -1
  138. package/dist/components/NavigationMenu/index.d.ts.map +1 -1
  139. package/dist/components/NavigationMenu/index.js +43 -11
  140. package/dist/components/NavigationMenu/index.js.map +1 -1
  141. package/dist/components/NavigationMenu/useNavigationMenu.cjs +2 -0
  142. package/dist/components/NavigationMenu/useNavigationMenu.cjs.map +1 -1
  143. package/dist/components/NavigationMenu/useNavigationMenu.d.ts +1 -0
  144. package/dist/components/NavigationMenu/useNavigationMenu.d.ts.map +1 -1
  145. package/dist/components/NavigationMenu/useNavigationMenu.js +2 -0
  146. package/dist/components/NavigationMenu/useNavigationMenu.js.map +1 -1
  147. package/dist/components/Popover/index.cjs +11 -10
  148. package/dist/components/Popover/index.cjs.map +1 -1
  149. package/dist/components/Popover/index.d.ts +17 -12
  150. package/dist/components/Popover/index.d.ts.map +1 -1
  151. package/dist/components/Popover/index.js +11 -10
  152. package/dist/components/Popover/index.js.map +1 -1
  153. package/dist/components/RadioGroup/index.cjs.map +1 -1
  154. package/dist/components/RadioGroup/index.d.ts +4 -0
  155. package/dist/components/RadioGroup/index.d.ts.map +1 -1
  156. package/dist/components/RadioGroup/index.js.map +1 -1
  157. package/dist/components/Select/index.cjs +7 -6
  158. package/dist/components/Select/index.cjs.map +1 -1
  159. package/dist/components/Select/index.d.ts +20 -9
  160. package/dist/components/Select/index.d.ts.map +1 -1
  161. package/dist/components/Select/index.js +7 -6
  162. package/dist/components/Select/index.js.map +1 -1
  163. package/dist/components/Sidebar/index.cjs +71 -24
  164. package/dist/components/Sidebar/index.cjs.map +1 -1
  165. package/dist/components/Sidebar/index.d.ts +21 -33
  166. package/dist/components/Sidebar/index.d.ts.map +1 -1
  167. package/dist/components/Sidebar/index.js +71 -24
  168. package/dist/components/Sidebar/index.js.map +1 -1
  169. package/dist/components/Slider/index.cjs +3 -1
  170. package/dist/components/Slider/index.cjs.map +1 -1
  171. package/dist/components/Slider/index.d.ts +10 -0
  172. package/dist/components/Slider/index.d.ts.map +1 -1
  173. package/dist/components/Slider/index.js +3 -1
  174. package/dist/components/Slider/index.js.map +1 -1
  175. package/dist/components/Stack/index.cjs +6 -0
  176. package/dist/components/Stack/index.cjs.map +1 -1
  177. package/dist/components/Stack/index.d.ts +12 -6
  178. package/dist/components/Stack/index.d.ts.map +1 -1
  179. package/dist/components/Stack/index.js +6 -0
  180. package/dist/components/Stack/index.js.map +1 -1
  181. package/dist/components/Tabs/index.cjs.map +1 -1
  182. package/dist/components/Tabs/index.d.ts +13 -1
  183. package/dist/components/Tabs/index.d.ts.map +1 -1
  184. package/dist/components/Tabs/index.js.map +1 -1
  185. package/dist/components/Text/Text.module.scss.cjs +44 -32
  186. package/dist/components/Text/Text.module.scss.cjs.map +1 -1
  187. package/dist/components/Text/Text.module.scss.js +44 -32
  188. package/dist/components/Text/Text.module.scss.js.map +1 -1
  189. package/dist/components/Text/index.cjs.map +1 -1
  190. package/dist/components/Text/index.d.ts +18 -3
  191. package/dist/components/Text/index.d.ts.map +1 -1
  192. package/dist/components/Text/index.js.map +1 -1
  193. package/dist/components/Theme/index.cjs.map +1 -1
  194. package/dist/components/Theme/index.d.ts +12 -0
  195. package/dist/components/Theme/index.d.ts.map +1 -1
  196. package/dist/components/Theme/index.js.map +1 -1
  197. package/dist/components/Toggle/index.cjs +2 -1
  198. package/dist/components/Toggle/index.cjs.map +1 -1
  199. package/dist/components/Toggle/index.d.ts +9 -0
  200. package/dist/components/Toggle/index.d.ts.map +1 -1
  201. package/dist/components/Toggle/index.js +2 -1
  202. package/dist/components/Toggle/index.js.map +1 -1
  203. package/dist/components/ToggleGroup/index.cjs +4 -1
  204. package/dist/components/ToggleGroup/index.cjs.map +1 -1
  205. package/dist/components/ToggleGroup/index.d.ts +13 -4
  206. package/dist/components/ToggleGroup/index.d.ts.map +1 -1
  207. package/dist/components/ToggleGroup/index.js +4 -1
  208. package/dist/components/ToggleGroup/index.js.map +1 -1
  209. package/dist/components/Tooltip/index.cjs +20 -10
  210. package/dist/components/Tooltip/index.cjs.map +1 -1
  211. package/dist/components/Tooltip/index.d.ts +5 -1
  212. package/dist/components/Tooltip/index.d.ts.map +1 -1
  213. package/dist/components/Tooltip/index.js +20 -10
  214. package/dist/components/Tooltip/index.js.map +1 -1
  215. package/dist/datepicker.cjs +24 -10
  216. package/dist/datepicker.cjs.map +1 -1
  217. package/dist/datepicker.js +24 -10
  218. package/dist/datepicker.js.map +1 -1
  219. package/dist/index.cjs +4 -0
  220. package/dist/index.cjs.map +1 -1
  221. package/dist/index.d.ts.map +1 -1
  222. package/dist/index.js +4 -0
  223. package/dist/index.js.map +1 -1
  224. package/dist/utils/css-warning.cjs +18 -0
  225. package/dist/utils/css-warning.cjs.map +1 -0
  226. package/dist/utils/css-warning.d.ts +2 -0
  227. package/dist/utils/css-warning.d.ts.map +1 -0
  228. package/dist/utils/css-warning.js +18 -0
  229. package/dist/utils/css-warning.js.map +1 -0
  230. package/fragments.json +1 -1
  231. package/package.json +2 -2
  232. package/src/components/Accordion/Accordion.test.tsx +33 -0
  233. package/src/components/Accordion/index.tsx +10 -3
  234. package/src/components/Alert/index.tsx +7 -0
  235. package/src/components/Avatar/index.tsx +4 -0
  236. package/src/components/Badge/Badge.fragment.tsx +10 -2
  237. package/src/components/Badge/index.tsx +12 -0
  238. package/src/components/Button/Button.fragment.tsx +12 -2
  239. package/src/components/Button/Button.test.tsx +16 -0
  240. package/src/components/Button/index.tsx +27 -2
  241. package/src/components/Card/Card.fragment.tsx +14 -2
  242. package/src/components/Card/Card.test.tsx +5 -0
  243. package/src/components/Card/index.tsx +15 -2
  244. package/src/components/Checkbox/index.tsx +6 -1
  245. package/src/components/Chip/Chip.fragment.tsx +12 -2
  246. package/src/components/Chip/Chip.test.tsx +5 -0
  247. package/src/components/Chip/index.tsx +14 -4
  248. package/src/components/CodeBlock/index.tsx +13 -2
  249. package/src/components/Collapsible/Collapsible.test.tsx +41 -0
  250. package/src/components/Collapsible/index.tsx +53 -16
  251. package/src/components/Combobox/Combobox.test.tsx +55 -0
  252. package/src/components/Combobox/index.tsx +23 -17
  253. package/src/components/Command/Command.test.tsx +93 -0
  254. package/src/components/Command/index.tsx +61 -18
  255. package/src/components/DataTable/DataTable.test.tsx +11 -2
  256. package/src/components/DataTable/index.tsx +22 -2
  257. package/src/components/DatePicker/DatePicker.test.tsx +79 -0
  258. package/src/components/DatePicker/index.tsx +29 -14
  259. package/src/components/Dialog/Dialog.test.tsx +23 -0
  260. package/src/components/Dialog/index.tsx +27 -16
  261. package/src/components/Drawer/Drawer.test.tsx +27 -0
  262. package/src/components/Drawer/index.tsx +29 -16
  263. package/src/components/Grid/Grid.fragment.tsx +14 -2
  264. package/src/components/Grid/Grid.test.tsx +6 -0
  265. package/src/components/Grid/index.tsx +12 -3
  266. package/src/components/Input/index.tsx +15 -1
  267. package/src/components/Menu/index.tsx +35 -30
  268. package/src/components/NavigationMenu/NavigationMenu.fragment.tsx +1 -1
  269. package/src/components/NavigationMenu/NavigationMenu.test.tsx +40 -4
  270. package/src/components/NavigationMenu/NavigationMenuContext.ts +3 -0
  271. package/src/components/NavigationMenu/index.tsx +49 -13
  272. package/src/components/NavigationMenu/useNavigationMenu.ts +4 -0
  273. package/src/components/Popover/Popover.test.tsx +23 -0
  274. package/src/components/Popover/index.tsx +24 -18
  275. package/src/components/RadioGroup/index.tsx +4 -0
  276. package/src/components/Select/Select.test.tsx +41 -0
  277. package/src/components/Select/index.tsx +24 -12
  278. package/src/components/Sidebar/Sidebar.test.tsx +83 -4
  279. package/src/components/Sidebar/index.tsx +87 -45
  280. package/src/components/Slider/Slider.fragment.tsx +5 -1
  281. package/src/components/Slider/Slider.test.tsx +6 -0
  282. package/src/components/Slider/index.tsx +13 -1
  283. package/src/components/Stack/Stack.fragment.tsx +22 -2
  284. package/src/components/Stack/Stack.test.tsx +6 -0
  285. package/src/components/Stack/index.tsx +20 -6
  286. package/src/components/Tabs/index.tsx +13 -1
  287. package/src/components/Text/Text.fragment.tsx +10 -8
  288. package/src/components/Text/Text.module.scss +8 -2
  289. package/src/components/Text/Text.test.tsx +15 -0
  290. package/src/components/Text/index.tsx +18 -3
  291. package/src/components/Theme/index.tsx +12 -0
  292. package/src/components/Toggle/Toggle.fragment.tsx +5 -1
  293. package/src/components/Toggle/Toggle.test.tsx +19 -0
  294. package/src/components/Toggle/index.tsx +11 -1
  295. package/src/components/ToggleGroup/ToggleGroup.fragment.tsx +5 -2
  296. package/src/components/ToggleGroup/ToggleGroup.test.tsx +20 -0
  297. package/src/components/ToggleGroup/index.tsx +15 -4
  298. package/src/components/Tooltip/Tooltip.test.tsx +17 -0
  299. package/src/components/Tooltip/index.tsx +58 -34
  300. package/src/index.ts +6 -0
  301. package/src/tokens/_seeds.scss +5 -3
  302. package/src/tokens/_variables.scss +2 -0
  303. package/src/utils/css-warning.ts +29 -0
@@ -84,8 +84,11 @@ function NavigationMenuList({ children, className }) {
84
84
  const { orientation, triggerOrder, triggerRefs, value } = NavigationMenuContext.useNavigationMenuContext();
85
85
  const listRef = React__namespace.useRef(null);
86
86
  const handleKeyDown = (e) => {
87
+ var _a;
87
88
  const order = triggerOrder.current;
88
- const currentIdx = order.indexOf(value);
89
+ const focusedValue = (_a = document.activeElement) == null ? void 0 : _a.getAttribute("data-navmenu-value");
90
+ const currentValue = focusedValue || value;
91
+ const currentIdx = order.indexOf(currentValue);
89
92
  const newIdx = a11y.handleArrowNavigation(e, order, currentIdx >= 0 ? currentIdx : 0, {
90
93
  orientation: orientation === "horizontal" ? "horizontal" : "vertical",
91
94
  loop: true
@@ -113,12 +116,29 @@ function NavigationMenuList({ children, className }) {
113
116
  }
114
117
  );
115
118
  }
116
- let itemCounter = 0;
117
119
  function NavigationMenuItem({ children, value: valueProp, className }) {
118
120
  const rootCtx = NavigationMenuContext.useNavigationMenuContext();
119
- const [autoValue] = React__namespace.useState(() => valueProp || `navmenu-item-${++itemCounter}`);
121
+ const generatedValue = React__namespace.useId();
122
+ const autoValue = valueProp || `navmenu-item-${generatedValue}`;
120
123
  const triggerId = `${rootCtx.rootId}-trigger-${autoValue}`;
121
124
  const contentId = `${rootCtx.rootId}-content-${autoValue}`;
125
+ React__namespace.useEffect(() => {
126
+ if (!rootCtx.itemOrder.current.includes(autoValue)) {
127
+ rootCtx.itemOrder.current.push(autoValue);
128
+ }
129
+ const existing = rootCtx.itemInfoMap.current.get(autoValue);
130
+ if (!existing) {
131
+ rootCtx.itemInfoMap.current.set(autoValue, {
132
+ value: autoValue,
133
+ triggerLabel: "",
134
+ contentChildren: null
135
+ });
136
+ }
137
+ return () => {
138
+ rootCtx.itemOrder.current = rootCtx.itemOrder.current.filter((v) => v !== autoValue);
139
+ rootCtx.itemInfoMap.current.delete(autoValue);
140
+ };
141
+ }, [autoValue, rootCtx.itemInfoMap, rootCtx.itemOrder]);
122
142
  const itemCtx = React__namespace.useMemo(
123
143
  () => ({
124
144
  value: autoValue,
@@ -200,6 +220,7 @@ function NavigationMenuTrigger({ children, className }) {
200
220
  type: "button",
201
221
  id: itemCtx.triggerId,
202
222
  className: classes,
223
+ "data-navmenu-value": itemCtx.value,
203
224
  "aria-expanded": isOpen,
204
225
  "aria-controls": itemCtx.contentId,
205
226
  "data-state": isOpen ? "open" : "closed",
@@ -305,7 +326,21 @@ function NavigationMenuLink({
305
326
  ...htmlProps
306
327
  }) {
307
328
  const ctx = React__namespace.useContext(NavigationMenuContext.NavigationMenuContext);
329
+ const itemCtx = React__namespace.useContext(NavigationMenuContext.NavigationMenuItemContext);
308
330
  const isStructured = !!(title || description || icon);
331
+ React__namespace.useEffect(() => {
332
+ if (!ctx || !itemCtx) return;
333
+ const existing = ctx.itemInfoMap.current.get(itemCtx.value);
334
+ const fallbackLabel = typeof children === "string" ? children : title || "";
335
+ const resolvedHref = typeof href === "string" ? href : existing == null ? void 0 : existing.linkHref;
336
+ ctx.itemInfoMap.current.set(itemCtx.value, {
337
+ ...existing,
338
+ value: itemCtx.value,
339
+ triggerLabel: (existing == null ? void 0 : existing.triggerLabel) || fallbackLabel || "",
340
+ contentChildren: (existing == null ? void 0 : existing.contentChildren) ?? null,
341
+ linkHref: resolvedHref
342
+ });
343
+ }, [ctx, itemCtx, children, title, href]);
309
344
  const handleClick = (e) => {
310
345
  onClick == null ? void 0 : onClick(e);
311
346
  if ((ctx == null ? void 0 : ctx.isMobile) && ctx.mobileOpen) {
@@ -495,14 +530,11 @@ function MobileDrawer() {
495
530
  document.addEventListener("keydown", handleKeyDown);
496
531
  return () => document.removeEventListener("keydown", handleKeyDown);
497
532
  }, [ctx]);
498
- const autoItems = React__namespace.useMemo(() => {
499
- const items = [];
500
- for (const value of ctx.triggerOrder.current) {
501
- const info = ctx.itemInfoMap.current.get(value);
502
- if (info) items.push(info);
503
- }
504
- return items;
505
- }, [ctx.triggerOrder, ctx.itemInfoMap]);
533
+ const autoItems = [];
534
+ for (const value of ctx.itemOrder.current) {
535
+ const info = ctx.itemInfoMap.current.get(value);
536
+ if (info) autoItems.push(info);
537
+ }
506
538
  const handleLinkClick = () => {
507
539
  ctx.setMobileOpen(false);
508
540
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/components/NavigationMenu/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { CaretDown, CaretRight, List, X } from '@phosphor-icons/react';\nimport { handleArrowNavigation, useFocusTrap } from '../../utils/a11y';\nimport { Collapsible } from '../Collapsible';\nimport { ScrollArea } from '../ScrollArea';\nimport {\n NavigationMenuContext,\n NavigationMenuItemContext,\n useNavigationMenuContext,\n useNavigationMenuItemContext,\n type NavigationMenuItemInfo,\n} from './NavigationMenuContext';\nimport { useNavigationMenu } from './useNavigationMenu';\nimport styles from './NavigationMenu.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface NavigationMenuProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n /** Controlled open item value */\n value?: string;\n /** Default open item value */\n defaultValue?: string;\n /** Callback when open item changes */\n onValueChange?: (value: string) => void;\n /** Menu orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Delay before opening on hover (ms) */\n delayDuration?: number;\n /** Duration to skip delays between triggers (ms) */\n skipDelayDuration?: number;\n}\n\nexport interface NavigationMenuListProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface NavigationMenuItemProps {\n children: React.ReactNode;\n /** Unique item value (required for items with Trigger+Content) */\n value?: string;\n className?: string;\n}\n\nexport interface NavigationMenuTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface NavigationMenuContentProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface NavigationMenuLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /** Simple mode: children as text content */\n children?: React.ReactNode;\n /** Structured mode: title text */\n title?: string;\n /** Structured mode: description text */\n description?: string;\n /** Structured mode: icon element */\n icon?: React.ReactNode;\n /** Whether this link is the current page */\n active?: boolean;\n /** Highlighted card style */\n featured?: boolean;\n /** Render as child element (polymorphic) */\n asChild?: boolean;\n}\n\nexport interface NavigationMenuIndicatorProps {\n className?: string;\n}\n\nexport interface NavigationMenuViewportProps {\n className?: string;\n}\n\nexport interface NavigationMenuMobileContentProps {\n children: React.ReactNode;\n}\n\nexport interface NavigationMenuMobileBrandProps {\n children: React.ReactNode;\n}\n\nexport interface NavigationMenuMobileSectionProps {\n children: React.ReactNode;\n /** Section heading label */\n label?: string;\n}\n\n// ============================================\n// Hooks\n// ============================================\n\nfunction useIsMobile() {\n const [isMobile, setIsMobile] = React.useState(false);\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mq = window.matchMedia('(max-width: 767px)');\n setIsMobile(mq.matches);\n\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n\n return isMobile;\n}\n\n// ============================================\n// Root\n// ============================================\n\nfunction NavigationMenuRoot({\n children,\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n delayDuration = 200,\n skipDelayDuration = 300,\n className,\n 'aria-label': ariaLabel = 'Main navigation',\n ...htmlProps\n}: NavigationMenuProps) {\n const rootId = React.useId();\n const isMobile = useIsMobile();\n\n const state = useNavigationMenu({\n value: controlledValue,\n defaultValue,\n onValueChange,\n delayDuration,\n skipDelayDuration,\n });\n\n const classes = [\n styles.root,\n orientation === 'vertical' && styles.rootVertical,\n className,\n ].filter(Boolean).join(' ');\n\n const contextValue = React.useMemo(\n () => ({\n ...state,\n orientation,\n isMobile,\n rootId,\n }),\n [state, orientation, isMobile, rootId]\n );\n\n return (\n <NavigationMenuContext.Provider value={contextValue}>\n <nav {...htmlProps} className={classes} aria-label={ariaLabel} data-orientation={orientation}>\n {children}\n {isMobile && <MobileHamburger />}\n {isMobile && state.mobileOpen && <MobileDrawer />}\n </nav>\n </NavigationMenuContext.Provider>\n );\n}\n\n// ============================================\n// List\n// ============================================\n\nfunction NavigationMenuList({ children, className }: NavigationMenuListProps) {\n const { orientation, triggerOrder, triggerRefs, value } = useNavigationMenuContext();\n\n const listRef = React.useRef<HTMLUListElement>(null);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n const order = triggerOrder.current;\n const currentIdx = order.indexOf(value);\n\n const newIdx = handleArrowNavigation(e, order, currentIdx >= 0 ? currentIdx : 0, {\n orientation: orientation === 'horizontal' ? 'horizontal' : 'vertical',\n loop: true,\n });\n\n if (newIdx !== undefined) {\n const targetValue = order[newIdx];\n const trigger = triggerRefs.current.get(targetValue);\n trigger?.focus();\n }\n };\n\n const classes = [\n styles.list,\n orientation === 'vertical' && styles.listVertical,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <ul\n ref={listRef}\n className={classes}\n role=\"list\"\n data-orientation={orientation}\n onKeyDown={handleKeyDown}\n >\n {children}\n </ul>\n );\n}\n\n// ============================================\n// Item\n// ============================================\n\nlet itemCounter = 0;\n\nfunction NavigationMenuItem({ children, value: valueProp, className }: NavigationMenuItemProps) {\n const rootCtx = useNavigationMenuContext();\n const [autoValue] = React.useState(() => valueProp || `navmenu-item-${++itemCounter}`);\n const triggerId = `${rootCtx.rootId}-trigger-${autoValue}`;\n const contentId = `${rootCtx.rootId}-content-${autoValue}`;\n\n const itemCtx = React.useMemo(\n () => ({\n value: autoValue,\n triggerId,\n contentId,\n }),\n [autoValue, triggerId, contentId]\n );\n\n return (\n <NavigationMenuItemContext.Provider value={itemCtx}>\n <li className={className}>{children}</li>\n </NavigationMenuItemContext.Provider>\n );\n}\n\n// ============================================\n// Trigger\n// ============================================\n\nfunction NavigationMenuTrigger({ children, className }: NavigationMenuTriggerProps) {\n const ctx = useNavigationMenuContext();\n const itemCtx = useNavigationMenuItemContext();\n const isOpen = ctx.value === itemCtx.value;\n\n // Register trigger\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n React.useEffect(() => {\n if (triggerRef.current) {\n ctx.triggerRefs.current.set(itemCtx.value, triggerRef.current);\n if (!ctx.triggerOrder.current.includes(itemCtx.value)) {\n ctx.triggerOrder.current.push(itemCtx.value);\n }\n }\n return () => {\n ctx.triggerRefs.current.delete(itemCtx.value);\n ctx.triggerOrder.current = ctx.triggerOrder.current.filter(v => v !== itemCtx.value);\n };\n // Only register/unregister on mount/unmount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [itemCtx.value]);\n\n // Register item info for mobile drawer\n React.useEffect(() => {\n const label = typeof children === 'string' ? children : '';\n const existing = ctx.itemInfoMap.current.get(itemCtx.value);\n ctx.itemInfoMap.current.set(itemCtx.value, {\n ...existing,\n value: itemCtx.value,\n triggerLabel: label || existing?.triggerLabel || '',\n } as NavigationMenuItemInfo);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [itemCtx.value, children]);\n\n const handleClick = () => {\n ctx.setValue(isOpen ? '' : itemCtx.value);\n };\n\n const handlePointerEnter = () => {\n if (ctx.closeTimerRef.current) {\n clearTimeout(ctx.closeTimerRef.current);\n ctx.closeTimerRef.current = null;\n }\n\n // Skip delay if recently open\n if (ctx.isRecentlyOpenRef.current) {\n ctx.setValue(itemCtx.value);\n return;\n }\n\n ctx.openTimerRef.current = setTimeout(() => {\n ctx.setValue(itemCtx.value);\n }, ctx.delayDuration);\n };\n\n const handlePointerLeave = () => {\n if (ctx.openTimerRef.current) {\n clearTimeout(ctx.openTimerRef.current);\n ctx.openTimerRef.current = null;\n }\n\n ctx.closeTimerRef.current = setTimeout(() => {\n ctx.setValue('');\n }, ctx.delayDuration);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n ctx.setValue(isOpen ? '' : itemCtx.value);\n }\n if (e.key === 'Escape' && isOpen) {\n e.preventDefault();\n ctx.setValue('');\n triggerRef.current?.focus();\n }\n };\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n return (\n <button\n ref={triggerRef}\n type=\"button\"\n id={itemCtx.triggerId}\n className={classes}\n aria-expanded={isOpen}\n aria-controls={itemCtx.contentId}\n data-state={isOpen ? 'open' : 'closed'}\n onClick={handleClick}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={handlePointerLeave}\n onKeyDown={handleKeyDown}\n >\n {children}\n <CaretDown size={12} className={styles.triggerChevron} aria-hidden />\n </button>\n );\n}\n\n// ============================================\n// Content\n// ============================================\n\nfunction NavigationMenuContent({ children, className }: NavigationMenuContentProps) {\n const ctx = useNavigationMenuContext();\n const itemCtx = useNavigationMenuItemContext();\n const isOpen = ctx.value === itemCtx.value;\n const contentRef = React.useRef<HTMLDivElement>(null);\n\n // Register content children into item info (for mobile drawer)\n React.useEffect(() => {\n const existing = ctx.itemInfoMap.current.get(itemCtx.value);\n ctx.itemInfoMap.current.set(itemCtx.value, {\n ...existing,\n value: itemCtx.value,\n triggerLabel: existing?.triggerLabel || '',\n contentChildren: children,\n } as NavigationMenuItemInfo);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [itemCtx.value, children]);\n\n // Measure content for viewport animation\n React.useEffect(() => {\n if (!isOpen || !contentRef.current) return;\n\n const el = contentRef.current;\n const observer = new ResizeObserver(([entry]) => {\n if (entry) {\n ctx.setViewportSize({\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n });\n }\n });\n observer.observe(el);\n\n // Initial measurement\n ctx.setViewportSize({\n width: el.scrollWidth,\n height: el.scrollHeight,\n });\n\n return () => observer.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n // Determine motion direction\n const prevValue = ctx.previousValue.current;\n const triggerOrder = ctx.triggerOrder.current;\n const prevIdx = triggerOrder.indexOf(prevValue);\n const currentIdx = triggerOrder.indexOf(itemCtx.value);\n let motion: string | undefined;\n if (isOpen && prevValue && prevValue !== itemCtx.value) {\n motion = currentIdx > prevIdx ? 'from-end' : 'from-start';\n }\n\n // Update previousValue when this content becomes active\n React.useEffect(() => {\n if (isOpen) {\n ctx.previousValue.current = itemCtx.value;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, itemCtx.value]);\n\n if (!isOpen) return null;\n\n const classes = [styles.content, className].filter(Boolean).join(' ');\n\n const handlePointerEnter = () => {\n if (ctx.closeTimerRef.current) {\n clearTimeout(ctx.closeTimerRef.current);\n ctx.closeTimerRef.current = null;\n }\n };\n\n const handlePointerLeave = () => {\n ctx.closeTimerRef.current = setTimeout(() => {\n ctx.setValue('');\n }, ctx.delayDuration);\n };\n\n const contentElement = (\n <div\n ref={contentRef}\n id={itemCtx.contentId}\n className={classes}\n role=\"region\"\n aria-labelledby={itemCtx.triggerId}\n data-motion={motion}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={handlePointerLeave}\n >\n {children}\n </div>\n );\n\n // Portal into viewport if it exists\n if (ctx.viewportRef.current) {\n return createPortal(contentElement, ctx.viewportRef.current);\n }\n\n return contentElement;\n}\n\n// ============================================\n// Link\n// ============================================\n\nfunction NavigationMenuLink({\n children,\n title,\n description,\n icon,\n active = false,\n featured = false,\n asChild = false,\n className,\n href,\n onClick,\n ...htmlProps\n}: NavigationMenuLinkProps) {\n const ctx = React.useContext(NavigationMenuContext);\n const isStructured = !!(title || description || icon);\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n onClick?.(e);\n // Close mobile drawer on link click\n if (ctx?.isMobile && ctx.mobileOpen) {\n ctx.setMobileOpen(false);\n }\n // Close desktop menu\n if (ctx) {\n ctx.setValue('');\n }\n };\n\n // Structured mode (title + description + icon)\n if (isStructured) {\n const classes = [\n styles.link,\n styles.linkStructured,\n active && styles.linkActive,\n featured && styles.linkFeatured,\n className,\n ].filter(Boolean).join(' ');\n\n const linkProps = {\n ...htmlProps,\n className: classes,\n href,\n 'aria-current': active ? ('page' as const) : undefined,\n onClick: handleClick,\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...linkProps,\n className: [classes, (children.props as { className?: string }).className].filter(Boolean).join(' '),\n children: (\n <>\n {icon && <span className={styles.linkIcon}>{icon}</span>}\n <span className={styles.linkBody}>\n {title && <span className={styles.linkTitle}>{title}</span>}\n {description && <span className={styles.linkDescription}>{description}</span>}\n </span>\n </>\n ),\n } as React.HTMLAttributes<HTMLElement>);\n }\n\n return (\n <a {...linkProps}>\n {icon && <span className={styles.linkIcon}>{icon}</span>}\n <span className={styles.linkBody}>\n {title && <span className={styles.linkTitle}>{title}</span>}\n {description && <span className={styles.linkDescription}>{description}</span>}\n </span>\n </a>\n );\n }\n\n // Simple link mode\n const classes = [\n styles.link,\n active && styles.linkActive,\n className,\n ].filter(Boolean).join(' ');\n\n const linkProps = {\n ...htmlProps,\n className: classes,\n href,\n 'aria-current': active ? ('page' as const) : undefined,\n onClick: handleClick,\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...linkProps,\n className: [classes, (children.props as { className?: string }).className].filter(Boolean).join(' '),\n } as React.HTMLAttributes<HTMLElement>);\n }\n\n return <a {...linkProps}>{children}</a>;\n}\n\n// ============================================\n// Indicator\n// ============================================\n\nfunction NavigationMenuIndicator({ className }: NavigationMenuIndicatorProps) {\n const { value, triggerRefs } = useNavigationMenuContext();\n const [style, setStyle] = React.useState<React.CSSProperties>({ opacity: 0 });\n\n React.useEffect(() => {\n if (!value) {\n setStyle({ opacity: 0 });\n return;\n }\n const trigger = triggerRefs.current.get(value);\n if (trigger) {\n const parent = trigger.closest('ul');\n if (parent) {\n const parentRect = parent.getBoundingClientRect();\n const triggerRect = trigger.getBoundingClientRect();\n setStyle({\n left: triggerRect.left - parentRect.left,\n width: triggerRect.width,\n opacity: 1,\n });\n }\n }\n }, [value, triggerRefs]);\n\n const classes = [styles.indicator, className].filter(Boolean).join(' ');\n\n return <div className={classes} style={style} aria-hidden />;\n}\n\n// ============================================\n// Viewport\n// ============================================\n\nfunction NavigationMenuViewport({ className }: NavigationMenuViewportProps) {\n const ctx = useNavigationMenuContext();\n const { viewportSize, viewportRef, value, triggerRefs } = ctx;\n const isOpen = !!value;\n\n // Compute the active trigger's left offset relative to the nav root\n const [triggerLeft, setTriggerLeft] = React.useState(0);\n\n React.useEffect(() => {\n if (!isOpen || !value) return;\n const trigger = triggerRefs.current.get(value);\n if (!trigger || !viewportRef.current) return;\n\n const navRoot = viewportRef.current.parentElement;\n if (!navRoot) return;\n\n const navRect = navRoot.getBoundingClientRect();\n const triggerRect = trigger.getBoundingClientRect();\n setTriggerLeft(triggerRect.left - navRect.left);\n }, [isOpen, value, triggerRefs, viewportRef]);\n\n const cssVars = {\n '--fui-navmenu-viewport-width': isOpen ? `${viewportSize.width}px` : '0px',\n '--fui-navmenu-viewport-height': isOpen ? `${viewportSize.height}px` : '0px',\n '--fui-navmenu-viewport-left': `${triggerLeft}px`,\n } as React.CSSProperties;\n\n // Mark skip-delay state\n React.useEffect(() => {\n if (isOpen) {\n ctx.isRecentlyOpenRef.current = true;\n if (ctx.skipDelayTimerRef.current) {\n clearTimeout(ctx.skipDelayTimerRef.current);\n }\n } else {\n ctx.skipDelayTimerRef.current = setTimeout(() => {\n ctx.isRecentlyOpenRef.current = false;\n }, ctx.skipDelayDuration);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const classes = [styles.viewport, className].filter(Boolean).join(' ');\n\n return (\n <div\n ref={viewportRef}\n className={classes}\n style={cssVars}\n data-state={isOpen ? 'open' : 'closed'}\n role=\"presentation\"\n />\n );\n}\n\n// ============================================\n// MobileContent (slot for extra mobile sections)\n// ============================================\n\nfunction NavigationMenuMobileContent({ children }: NavigationMenuMobileContentProps) {\n const ctx = useNavigationMenuContext();\n\n React.useEffect(() => {\n ctx.setMobileContentChildren(children);\n return () => ctx.setMobileContentChildren(null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [children]);\n\n // This component renders nothing visually on desktop or in the tree.\n // Its children are extracted into the mobile drawer via context.\n return null;\n}\n\n// ============================================\n// MobileBrand (slot for brand in mobile drawer header)\n// ============================================\n\nfunction NavigationMenuMobileBrand({ children }: NavigationMenuMobileBrandProps) {\n const ctx = useNavigationMenuContext();\n\n React.useEffect(() => {\n ctx.setMobileBrandChildren(children);\n return () => ctx.setMobileBrandChildren(null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [children]);\n\n return null;\n}\n\n// ============================================\n// MobileSection\n// ============================================\n\nfunction NavigationMenuMobileSection({ children, label }: NavigationMenuMobileSectionProps) {\n return (\n <div role=\"group\" aria-label={label}>\n {label && <div className={styles.drawerSectionLabel}>{label}</div>}\n <div className={styles.drawerNav}>{children}</div>\n </div>\n );\n}\n\n// ============================================\n// Mobile Hamburger Button\n// ============================================\n\nfunction MobileHamburger() {\n const { mobileOpen, setMobileOpen } = useNavigationMenuContext();\n\n return (\n <button\n type=\"button\"\n className={styles.hamburger}\n onClick={() => setMobileOpen(!mobileOpen)}\n aria-label=\"Toggle navigation\"\n aria-expanded={mobileOpen}\n >\n {mobileOpen ? <X size={24} aria-hidden /> : <List size={24} aria-hidden />}\n </button>\n );\n}\n\n// ============================================\n// Mobile Drawer\n// ============================================\n\nfunction MobileDrawer() {\n const ctx = useNavigationMenuContext();\n const drawerRef = React.useRef<HTMLDivElement>(null);\n\n useFocusTrap(drawerRef, true);\n\n // Lock body scroll\n React.useEffect(() => {\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = '';\n };\n }, []);\n\n // Handle Escape\n React.useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n ctx.setMobileOpen(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [ctx]);\n\n // Build auto-converted nav items from item info registry\n const autoItems = React.useMemo(() => {\n const items: NavigationMenuItemInfo[] = [];\n for (const value of ctx.triggerOrder.current) {\n const info = ctx.itemInfoMap.current.get(value);\n if (info) items.push(info);\n }\n return items;\n }, [ctx.triggerOrder, ctx.itemInfoMap]);\n\n const handleLinkClick = () => {\n ctx.setMobileOpen(false);\n };\n\n const drawerContent = (\n <>\n <div\n className={styles.drawerBackdrop}\n onClick={() => ctx.setMobileOpen(false)}\n aria-hidden\n />\n <div\n ref={drawerRef}\n className={styles.drawer}\n role=\"dialog\"\n aria-modal\n aria-label=\"Navigation\"\n >\n <div className={styles.drawerHeader}>\n {ctx.mobileBrandChildren ?? <span />}\n <button\n type=\"button\"\n className={styles.drawerClose}\n onClick={() => ctx.setMobileOpen(false)}\n aria-label=\"Close navigation\"\n >\n <X size={20} aria-hidden />\n </button>\n </div>\n <ScrollArea orientation=\"vertical\" className={styles.drawerBody}>\n {/* When MobileContent is provided, it takes full control of the drawer nav.\n Otherwise, auto-convert registered Trigger+Content items. */}\n {ctx.mobileContentChildren ? (\n ctx.mobileContentChildren\n ) : (\n <div className={styles.drawerNav}>\n {autoItems.map((item) =>\n item.contentChildren ? (\n <MobileCollapsibleSection\n key={item.value}\n label={item.triggerLabel}\n onLinkClick={handleLinkClick}\n >\n {item.contentChildren}\n </MobileCollapsibleSection>\n ) : item.linkHref ? (\n <a\n key={item.value}\n className={styles.drawerLink}\n href={item.linkHref}\n onClick={handleLinkClick}\n >\n {item.triggerLabel}\n </a>\n ) : null\n )}\n </div>\n )}\n </ScrollArea>\n </div>\n </>\n );\n\n if (typeof document === 'undefined') return null;\n return createPortal(drawerContent, document.body);\n}\n\n// ============================================\n// Mobile Collapsible Section (auto-converted)\n// ============================================\n\nfunction MobileCollapsibleSection({\n label,\n children,\n onLinkClick,\n}: {\n label: string;\n children: React.ReactNode;\n onLinkClick: () => void;\n}) {\n return (\n <Collapsible defaultOpen={false}>\n <Collapsible.Trigger className={styles.drawerCollapsibleTrigger}>\n {label}\n </Collapsible.Trigger>\n <Collapsible.Content>\n <div\n className={styles.drawerCollapsibleContent}\n onClick={onLinkClick}\n onKeyDown={(e) => { if (e.key === 'Enter') onLinkClick(); }}\n role=\"group\"\n >\n {children}\n </div>\n </Collapsible.Content>\n </Collapsible>\n );\n}\n\n// ============================================\n// Export Compound Component\n// ============================================\n\nexport const NavigationMenu = Object.assign(NavigationMenuRoot, {\n List: NavigationMenuList,\n Item: NavigationMenuItem,\n Trigger: NavigationMenuTrigger,\n Content: NavigationMenuContent,\n Link: NavigationMenuLink,\n Indicator: NavigationMenuIndicator,\n Viewport: NavigationMenuViewport,\n MobileBrand: NavigationMenuMobileBrand,\n MobileContent: NavigationMenuMobileContent,\n MobileSection: NavigationMenuMobileSection,\n});\n\nexport {\n NavigationMenuRoot,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuTrigger,\n NavigationMenuContent,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n NavigationMenuMobileBrand,\n NavigationMenuMobileContent,\n NavigationMenuMobileSection,\n};\n"],"names":["React","useNavigationMenu","styles","jsx","NavigationMenuContext","jsxs","useNavigationMenuContext","handleArrowNavigation","NavigationMenuItemContext","useNavigationMenuItemContext","CaretDown","createPortal","classes","linkProps","Fragment","X","List","useFocusTrap","ScrollArea","Collapsible"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/NavigationMenu/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { CaretDown, List, X } from '@phosphor-icons/react';\nimport { handleArrowNavigation, useFocusTrap } from '../../utils/a11y';\nimport { Collapsible } from '../Collapsible';\nimport { ScrollArea } from '../ScrollArea';\nimport {\n NavigationMenuContext,\n NavigationMenuItemContext,\n useNavigationMenuContext,\n useNavigationMenuItemContext,\n type NavigationMenuItemInfo,\n} from './NavigationMenuContext';\nimport { useNavigationMenu } from './useNavigationMenu';\nimport styles from './NavigationMenu.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface NavigationMenuProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n /** Controlled open item value */\n value?: string;\n /** Default open item value */\n defaultValue?: string;\n /** Callback when open item changes */\n onValueChange?: (value: string) => void;\n /** Menu orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Delay before opening on hover (ms) */\n delayDuration?: number;\n /** Duration to skip delays between triggers (ms) */\n skipDelayDuration?: number;\n}\n\nexport interface NavigationMenuListProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface NavigationMenuItemProps {\n children: React.ReactNode;\n /** Unique item value (required for items with Trigger+Content) */\n value?: string;\n className?: string;\n}\n\nexport interface NavigationMenuTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface NavigationMenuContentProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface NavigationMenuLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /** Simple mode: children as text content */\n children?: React.ReactNode;\n /** Structured mode: title text */\n title?: string;\n /** Structured mode: description text */\n description?: string;\n /** Structured mode: icon element */\n icon?: React.ReactNode;\n /** Whether this link is the current page */\n active?: boolean;\n /** Highlighted card style */\n featured?: boolean;\n /** Render as child element (polymorphic) */\n asChild?: boolean;\n}\n\nexport interface NavigationMenuIndicatorProps {\n className?: string;\n}\n\nexport interface NavigationMenuViewportProps {\n className?: string;\n}\n\nexport interface NavigationMenuMobileContentProps {\n children: React.ReactNode;\n}\n\nexport interface NavigationMenuMobileBrandProps {\n children: React.ReactNode;\n}\n\nexport interface NavigationMenuMobileSectionProps {\n children: React.ReactNode;\n /** Section heading label */\n label?: string;\n}\n\n// ============================================\n// Hooks\n// ============================================\n\nfunction useIsMobile() {\n const [isMobile, setIsMobile] = React.useState(false);\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mq = window.matchMedia('(max-width: 767px)');\n setIsMobile(mq.matches);\n\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n\n return isMobile;\n}\n\n// ============================================\n// Root\n// ============================================\n\nfunction NavigationMenuRoot({\n children,\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n delayDuration = 200,\n skipDelayDuration = 300,\n className,\n 'aria-label': ariaLabel = 'Main navigation',\n ...htmlProps\n}: NavigationMenuProps) {\n const rootId = React.useId();\n const isMobile = useIsMobile();\n\n const state = useNavigationMenu({\n value: controlledValue,\n defaultValue,\n onValueChange,\n delayDuration,\n skipDelayDuration,\n });\n\n const classes = [\n styles.root,\n orientation === 'vertical' && styles.rootVertical,\n className,\n ].filter(Boolean).join(' ');\n\n const contextValue = React.useMemo(\n () => ({\n ...state,\n orientation,\n isMobile,\n rootId,\n }),\n [state, orientation, isMobile, rootId]\n );\n\n return (\n <NavigationMenuContext.Provider value={contextValue}>\n <nav {...htmlProps} className={classes} aria-label={ariaLabel} data-orientation={orientation}>\n {children}\n {isMobile && <MobileHamburger />}\n {isMobile && state.mobileOpen && <MobileDrawer />}\n </nav>\n </NavigationMenuContext.Provider>\n );\n}\n\n// ============================================\n// List\n// ============================================\n\nfunction NavigationMenuList({ children, className }: NavigationMenuListProps) {\n const { orientation, triggerOrder, triggerRefs, value } = useNavigationMenuContext();\n\n const listRef = React.useRef<HTMLUListElement>(null);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n const order = triggerOrder.current;\n const focusedValue = (document.activeElement as HTMLElement | null)?.getAttribute('data-navmenu-value');\n const currentValue = focusedValue || value;\n const currentIdx = order.indexOf(currentValue);\n\n const newIdx = handleArrowNavigation(e, order, currentIdx >= 0 ? currentIdx : 0, {\n orientation: orientation === 'horizontal' ? 'horizontal' : 'vertical',\n loop: true,\n });\n\n if (newIdx !== undefined) {\n const targetValue = order[newIdx];\n const trigger = triggerRefs.current.get(targetValue);\n trigger?.focus();\n }\n };\n\n const classes = [\n styles.list,\n orientation === 'vertical' && styles.listVertical,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <ul\n ref={listRef}\n className={classes}\n role=\"list\"\n data-orientation={orientation}\n onKeyDown={handleKeyDown}\n >\n {children}\n </ul>\n );\n}\n\n// ============================================\n// Item\n// ============================================\n\nfunction NavigationMenuItem({ children, value: valueProp, className }: NavigationMenuItemProps) {\n const rootCtx = useNavigationMenuContext();\n const generatedValue = React.useId();\n const autoValue = valueProp || `navmenu-item-${generatedValue}`;\n const triggerId = `${rootCtx.rootId}-trigger-${autoValue}`;\n const contentId = `${rootCtx.rootId}-content-${autoValue}`;\n\n React.useEffect(() => {\n if (!rootCtx.itemOrder.current.includes(autoValue)) {\n rootCtx.itemOrder.current.push(autoValue);\n }\n\n const existing = rootCtx.itemInfoMap.current.get(autoValue);\n if (!existing) {\n rootCtx.itemInfoMap.current.set(autoValue, {\n value: autoValue,\n triggerLabel: '',\n contentChildren: null,\n });\n }\n\n return () => {\n rootCtx.itemOrder.current = rootCtx.itemOrder.current.filter(v => v !== autoValue);\n rootCtx.itemInfoMap.current.delete(autoValue);\n };\n }, [autoValue, rootCtx.itemInfoMap, rootCtx.itemOrder]);\n\n const itemCtx = React.useMemo(\n () => ({\n value: autoValue,\n triggerId,\n contentId,\n }),\n [autoValue, triggerId, contentId]\n );\n\n return (\n <NavigationMenuItemContext.Provider value={itemCtx}>\n <li className={className}>{children}</li>\n </NavigationMenuItemContext.Provider>\n );\n}\n\n// ============================================\n// Trigger\n// ============================================\n\nfunction NavigationMenuTrigger({ children, className }: NavigationMenuTriggerProps) {\n const ctx = useNavigationMenuContext();\n const itemCtx = useNavigationMenuItemContext();\n const isOpen = ctx.value === itemCtx.value;\n\n // Register trigger\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n React.useEffect(() => {\n if (triggerRef.current) {\n ctx.triggerRefs.current.set(itemCtx.value, triggerRef.current);\n if (!ctx.triggerOrder.current.includes(itemCtx.value)) {\n ctx.triggerOrder.current.push(itemCtx.value);\n }\n }\n return () => {\n ctx.triggerRefs.current.delete(itemCtx.value);\n ctx.triggerOrder.current = ctx.triggerOrder.current.filter(v => v !== itemCtx.value);\n };\n // Only register/unregister on mount/unmount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [itemCtx.value]);\n\n // Register item info for mobile drawer\n React.useEffect(() => {\n const label = typeof children === 'string' ? children : '';\n const existing = ctx.itemInfoMap.current.get(itemCtx.value);\n ctx.itemInfoMap.current.set(itemCtx.value, {\n ...existing,\n value: itemCtx.value,\n triggerLabel: label || existing?.triggerLabel || '',\n } as NavigationMenuItemInfo);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [itemCtx.value, children]);\n\n const handleClick = () => {\n ctx.setValue(isOpen ? '' : itemCtx.value);\n };\n\n const handlePointerEnter = () => {\n if (ctx.closeTimerRef.current) {\n clearTimeout(ctx.closeTimerRef.current);\n ctx.closeTimerRef.current = null;\n }\n\n // Skip delay if recently open\n if (ctx.isRecentlyOpenRef.current) {\n ctx.setValue(itemCtx.value);\n return;\n }\n\n ctx.openTimerRef.current = setTimeout(() => {\n ctx.setValue(itemCtx.value);\n }, ctx.delayDuration);\n };\n\n const handlePointerLeave = () => {\n if (ctx.openTimerRef.current) {\n clearTimeout(ctx.openTimerRef.current);\n ctx.openTimerRef.current = null;\n }\n\n ctx.closeTimerRef.current = setTimeout(() => {\n ctx.setValue('');\n }, ctx.delayDuration);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n ctx.setValue(isOpen ? '' : itemCtx.value);\n }\n if (e.key === 'Escape' && isOpen) {\n e.preventDefault();\n ctx.setValue('');\n triggerRef.current?.focus();\n }\n };\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n return (\n <button\n ref={triggerRef}\n type=\"button\"\n id={itemCtx.triggerId}\n className={classes}\n data-navmenu-value={itemCtx.value}\n aria-expanded={isOpen}\n aria-controls={itemCtx.contentId}\n data-state={isOpen ? 'open' : 'closed'}\n onClick={handleClick}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={handlePointerLeave}\n onKeyDown={handleKeyDown}\n >\n {children}\n <CaretDown size={12} className={styles.triggerChevron} aria-hidden />\n </button>\n );\n}\n\n// ============================================\n// Content\n// ============================================\n\nfunction NavigationMenuContent({ children, className }: NavigationMenuContentProps) {\n const ctx = useNavigationMenuContext();\n const itemCtx = useNavigationMenuItemContext();\n const isOpen = ctx.value === itemCtx.value;\n const contentRef = React.useRef<HTMLDivElement>(null);\n\n // Register content children into item info (for mobile drawer)\n React.useEffect(() => {\n const existing = ctx.itemInfoMap.current.get(itemCtx.value);\n ctx.itemInfoMap.current.set(itemCtx.value, {\n ...existing,\n value: itemCtx.value,\n triggerLabel: existing?.triggerLabel || '',\n contentChildren: children,\n } as NavigationMenuItemInfo);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [itemCtx.value, children]);\n\n // Measure content for viewport animation\n React.useEffect(() => {\n if (!isOpen || !contentRef.current) return;\n\n const el = contentRef.current;\n const observer = new ResizeObserver(([entry]) => {\n if (entry) {\n ctx.setViewportSize({\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n });\n }\n });\n observer.observe(el);\n\n // Initial measurement\n ctx.setViewportSize({\n width: el.scrollWidth,\n height: el.scrollHeight,\n });\n\n return () => observer.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n // Determine motion direction\n const prevValue = ctx.previousValue.current;\n const triggerOrder = ctx.triggerOrder.current;\n const prevIdx = triggerOrder.indexOf(prevValue);\n const currentIdx = triggerOrder.indexOf(itemCtx.value);\n let motion: string | undefined;\n if (isOpen && prevValue && prevValue !== itemCtx.value) {\n motion = currentIdx > prevIdx ? 'from-end' : 'from-start';\n }\n\n // Update previousValue when this content becomes active\n React.useEffect(() => {\n if (isOpen) {\n ctx.previousValue.current = itemCtx.value;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, itemCtx.value]);\n\n if (!isOpen) return null;\n\n const classes = [styles.content, className].filter(Boolean).join(' ');\n\n const handlePointerEnter = () => {\n if (ctx.closeTimerRef.current) {\n clearTimeout(ctx.closeTimerRef.current);\n ctx.closeTimerRef.current = null;\n }\n };\n\n const handlePointerLeave = () => {\n ctx.closeTimerRef.current = setTimeout(() => {\n ctx.setValue('');\n }, ctx.delayDuration);\n };\n\n const contentElement = (\n <div\n ref={contentRef}\n id={itemCtx.contentId}\n className={classes}\n role=\"region\"\n aria-labelledby={itemCtx.triggerId}\n data-motion={motion}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={handlePointerLeave}\n >\n {children}\n </div>\n );\n\n // Portal into viewport if it exists\n if (ctx.viewportRef.current) {\n return createPortal(contentElement, ctx.viewportRef.current);\n }\n\n return contentElement;\n}\n\n// ============================================\n// Link\n// ============================================\n\nfunction NavigationMenuLink({\n children,\n title,\n description,\n icon,\n active = false,\n featured = false,\n asChild = false,\n className,\n href,\n onClick,\n ...htmlProps\n}: NavigationMenuLinkProps) {\n const ctx = React.useContext(NavigationMenuContext);\n const itemCtx = React.useContext(NavigationMenuItemContext);\n const isStructured = !!(title || description || icon);\n\n React.useEffect(() => {\n if (!ctx || !itemCtx) return;\n\n const existing = ctx.itemInfoMap.current.get(itemCtx.value);\n const fallbackLabel = typeof children === 'string' ? children : title || '';\n const resolvedHref = typeof href === 'string' ? href : existing?.linkHref;\n\n ctx.itemInfoMap.current.set(itemCtx.value, {\n ...existing,\n value: itemCtx.value,\n triggerLabel: existing?.triggerLabel || fallbackLabel || '',\n contentChildren: existing?.contentChildren ?? null,\n linkHref: resolvedHref,\n });\n }, [ctx, itemCtx, children, title, href]);\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n onClick?.(e);\n // Close mobile drawer on link click\n if (ctx?.isMobile && ctx.mobileOpen) {\n ctx.setMobileOpen(false);\n }\n // Close desktop menu\n if (ctx) {\n ctx.setValue('');\n }\n };\n\n // Structured mode (title + description + icon)\n if (isStructured) {\n const classes = [\n styles.link,\n styles.linkStructured,\n active && styles.linkActive,\n featured && styles.linkFeatured,\n className,\n ].filter(Boolean).join(' ');\n\n const linkProps = {\n ...htmlProps,\n className: classes,\n href,\n 'aria-current': active ? ('page' as const) : undefined,\n onClick: handleClick,\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...linkProps,\n className: [classes, (children.props as { className?: string }).className].filter(Boolean).join(' '),\n children: (\n <>\n {icon && <span className={styles.linkIcon}>{icon}</span>}\n <span className={styles.linkBody}>\n {title && <span className={styles.linkTitle}>{title}</span>}\n {description && <span className={styles.linkDescription}>{description}</span>}\n </span>\n </>\n ),\n } as React.HTMLAttributes<HTMLElement>);\n }\n\n return (\n <a {...linkProps}>\n {icon && <span className={styles.linkIcon}>{icon}</span>}\n <span className={styles.linkBody}>\n {title && <span className={styles.linkTitle}>{title}</span>}\n {description && <span className={styles.linkDescription}>{description}</span>}\n </span>\n </a>\n );\n }\n\n // Simple link mode\n const classes = [\n styles.link,\n active && styles.linkActive,\n className,\n ].filter(Boolean).join(' ');\n\n const linkProps = {\n ...htmlProps,\n className: classes,\n href,\n 'aria-current': active ? ('page' as const) : undefined,\n onClick: handleClick,\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...linkProps,\n className: [classes, (children.props as { className?: string }).className].filter(Boolean).join(' '),\n } as React.HTMLAttributes<HTMLElement>);\n }\n\n return <a {...linkProps}>{children}</a>;\n}\n\n// ============================================\n// Indicator\n// ============================================\n\nfunction NavigationMenuIndicator({ className }: NavigationMenuIndicatorProps) {\n const { value, triggerRefs } = useNavigationMenuContext();\n const [style, setStyle] = React.useState<React.CSSProperties>({ opacity: 0 });\n\n React.useEffect(() => {\n if (!value) {\n setStyle({ opacity: 0 });\n return;\n }\n const trigger = triggerRefs.current.get(value);\n if (trigger) {\n const parent = trigger.closest('ul');\n if (parent) {\n const parentRect = parent.getBoundingClientRect();\n const triggerRect = trigger.getBoundingClientRect();\n setStyle({\n left: triggerRect.left - parentRect.left,\n width: triggerRect.width,\n opacity: 1,\n });\n }\n }\n }, [value, triggerRefs]);\n\n const classes = [styles.indicator, className].filter(Boolean).join(' ');\n\n return <div className={classes} style={style} aria-hidden />;\n}\n\n// ============================================\n// Viewport\n// ============================================\n\nfunction NavigationMenuViewport({ className }: NavigationMenuViewportProps) {\n const ctx = useNavigationMenuContext();\n const { viewportSize, viewportRef, value, triggerRefs } = ctx;\n const isOpen = !!value;\n\n // Compute the active trigger's left offset relative to the nav root\n const [triggerLeft, setTriggerLeft] = React.useState(0);\n\n React.useEffect(() => {\n if (!isOpen || !value) return;\n const trigger = triggerRefs.current.get(value);\n if (!trigger || !viewportRef.current) return;\n\n const navRoot = viewportRef.current.parentElement;\n if (!navRoot) return;\n\n const navRect = navRoot.getBoundingClientRect();\n const triggerRect = trigger.getBoundingClientRect();\n setTriggerLeft(triggerRect.left - navRect.left);\n }, [isOpen, value, triggerRefs, viewportRef]);\n\n const cssVars = {\n '--fui-navmenu-viewport-width': isOpen ? `${viewportSize.width}px` : '0px',\n '--fui-navmenu-viewport-height': isOpen ? `${viewportSize.height}px` : '0px',\n '--fui-navmenu-viewport-left': `${triggerLeft}px`,\n } as React.CSSProperties;\n\n // Mark skip-delay state\n React.useEffect(() => {\n if (isOpen) {\n ctx.isRecentlyOpenRef.current = true;\n if (ctx.skipDelayTimerRef.current) {\n clearTimeout(ctx.skipDelayTimerRef.current);\n }\n } else {\n ctx.skipDelayTimerRef.current = setTimeout(() => {\n ctx.isRecentlyOpenRef.current = false;\n }, ctx.skipDelayDuration);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const classes = [styles.viewport, className].filter(Boolean).join(' ');\n\n return (\n <div\n ref={viewportRef}\n className={classes}\n style={cssVars}\n data-state={isOpen ? 'open' : 'closed'}\n role=\"presentation\"\n />\n );\n}\n\n// ============================================\n// MobileContent (slot for extra mobile sections)\n// ============================================\n\nfunction NavigationMenuMobileContent({ children }: NavigationMenuMobileContentProps) {\n const ctx = useNavigationMenuContext();\n\n React.useEffect(() => {\n ctx.setMobileContentChildren(children);\n return () => ctx.setMobileContentChildren(null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [children]);\n\n // This component renders nothing visually on desktop or in the tree.\n // Its children are extracted into the mobile drawer via context.\n return null;\n}\n\n// ============================================\n// MobileBrand (slot for brand in mobile drawer header)\n// ============================================\n\nfunction NavigationMenuMobileBrand({ children }: NavigationMenuMobileBrandProps) {\n const ctx = useNavigationMenuContext();\n\n React.useEffect(() => {\n ctx.setMobileBrandChildren(children);\n return () => ctx.setMobileBrandChildren(null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [children]);\n\n return null;\n}\n\n// ============================================\n// MobileSection\n// ============================================\n\nfunction NavigationMenuMobileSection({ children, label }: NavigationMenuMobileSectionProps) {\n return (\n <div role=\"group\" aria-label={label}>\n {label && <div className={styles.drawerSectionLabel}>{label}</div>}\n <div className={styles.drawerNav}>{children}</div>\n </div>\n );\n}\n\n// ============================================\n// Mobile Hamburger Button\n// ============================================\n\nfunction MobileHamburger() {\n const { mobileOpen, setMobileOpen } = useNavigationMenuContext();\n\n return (\n <button\n type=\"button\"\n className={styles.hamburger}\n onClick={() => setMobileOpen(!mobileOpen)}\n aria-label=\"Toggle navigation\"\n aria-expanded={mobileOpen}\n >\n {mobileOpen ? <X size={24} aria-hidden /> : <List size={24} aria-hidden />}\n </button>\n );\n}\n\n// ============================================\n// Mobile Drawer\n// ============================================\n\nfunction MobileDrawer() {\n const ctx = useNavigationMenuContext();\n const drawerRef = React.useRef<HTMLDivElement>(null);\n\n useFocusTrap(drawerRef, true);\n\n // Lock body scroll\n React.useEffect(() => {\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = '';\n };\n }, []);\n\n // Handle Escape\n React.useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n ctx.setMobileOpen(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [ctx]);\n\n // Build auto-converted nav items from item info registry\n const autoItems: NavigationMenuItemInfo[] = [];\n for (const value of ctx.itemOrder.current) {\n const info = ctx.itemInfoMap.current.get(value);\n if (info) autoItems.push(info);\n }\n\n const handleLinkClick = () => {\n ctx.setMobileOpen(false);\n };\n\n const drawerContent = (\n <>\n <div\n className={styles.drawerBackdrop}\n onClick={() => ctx.setMobileOpen(false)}\n aria-hidden\n />\n <div\n ref={drawerRef}\n className={styles.drawer}\n role=\"dialog\"\n aria-modal\n aria-label=\"Navigation\"\n >\n <div className={styles.drawerHeader}>\n {ctx.mobileBrandChildren ?? <span />}\n <button\n type=\"button\"\n className={styles.drawerClose}\n onClick={() => ctx.setMobileOpen(false)}\n aria-label=\"Close navigation\"\n >\n <X size={20} aria-hidden />\n </button>\n </div>\n <ScrollArea orientation=\"vertical\" className={styles.drawerBody}>\n {/* When MobileContent is provided, it takes full control of the drawer nav.\n Otherwise, auto-convert registered Trigger+Content items. */}\n {ctx.mobileContentChildren ? (\n ctx.mobileContentChildren\n ) : (\n <div className={styles.drawerNav}>\n {autoItems.map((item) =>\n item.contentChildren ? (\n <MobileCollapsibleSection\n key={item.value}\n label={item.triggerLabel}\n onLinkClick={handleLinkClick}\n >\n {item.contentChildren}\n </MobileCollapsibleSection>\n ) : item.linkHref ? (\n <a\n key={item.value}\n className={styles.drawerLink}\n href={item.linkHref}\n onClick={handleLinkClick}\n >\n {item.triggerLabel}\n </a>\n ) : null\n )}\n </div>\n )}\n </ScrollArea>\n </div>\n </>\n );\n\n if (typeof document === 'undefined') return null;\n return createPortal(drawerContent, document.body);\n}\n\n// ============================================\n// Mobile Collapsible Section (auto-converted)\n// ============================================\n\nfunction MobileCollapsibleSection({\n label,\n children,\n onLinkClick,\n}: {\n label: string;\n children: React.ReactNode;\n onLinkClick: () => void;\n}) {\n return (\n <Collapsible defaultOpen={false}>\n <Collapsible.Trigger className={styles.drawerCollapsibleTrigger}>\n {label}\n </Collapsible.Trigger>\n <Collapsible.Content>\n <div\n className={styles.drawerCollapsibleContent}\n onClick={onLinkClick}\n onKeyDown={(e) => { if (e.key === 'Enter') onLinkClick(); }}\n role=\"group\"\n >\n {children}\n </div>\n </Collapsible.Content>\n </Collapsible>\n );\n}\n\n// ============================================\n// Export Compound Component\n// ============================================\n\nexport const NavigationMenu = Object.assign(NavigationMenuRoot, {\n List: NavigationMenuList,\n Item: NavigationMenuItem,\n Trigger: NavigationMenuTrigger,\n Content: NavigationMenuContent,\n Link: NavigationMenuLink,\n Indicator: NavigationMenuIndicator,\n Viewport: NavigationMenuViewport,\n MobileBrand: NavigationMenuMobileBrand,\n MobileContent: NavigationMenuMobileContent,\n MobileSection: NavigationMenuMobileSection,\n});\n\nexport {\n NavigationMenuRoot,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuTrigger,\n NavigationMenuContent,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n NavigationMenuMobileBrand,\n NavigationMenuMobileContent,\n NavigationMenuMobileSection,\n};\n"],"names":["React","useNavigationMenu","styles","jsx","NavigationMenuContext","jsxs","useNavigationMenuContext","handleArrowNavigation","NavigationMenuItemContext","useNavigationMenuItemContext","CaretDown","createPortal","classes","linkProps","Fragment","X","List","useFocusTrap","ScrollArea","Collapsible"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/NavigationMenu/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/NavigationMenu/index.tsx"],"names":[],"mappings":"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"}
@@ -65,8 +65,11 @@ function NavigationMenuList({ children, className }) {
65
65
  const { orientation, triggerOrder, triggerRefs, value } = useNavigationMenuContext();
66
66
  const listRef = React.useRef(null);
67
67
  const handleKeyDown = (e) => {
68
+ var _a;
68
69
  const order = triggerOrder.current;
69
- const currentIdx = order.indexOf(value);
70
+ const focusedValue = (_a = document.activeElement) == null ? void 0 : _a.getAttribute("data-navmenu-value");
71
+ const currentValue = focusedValue || value;
72
+ const currentIdx = order.indexOf(currentValue);
70
73
  const newIdx = handleArrowNavigation(e, order, currentIdx >= 0 ? currentIdx : 0, {
71
74
  orientation: orientation === "horizontal" ? "horizontal" : "vertical",
72
75
  loop: true
@@ -94,12 +97,29 @@ function NavigationMenuList({ children, className }) {
94
97
  }
95
98
  );
96
99
  }
97
- let itemCounter = 0;
98
100
  function NavigationMenuItem({ children, value: valueProp, className }) {
99
101
  const rootCtx = useNavigationMenuContext();
100
- const [autoValue] = React.useState(() => valueProp || `navmenu-item-${++itemCounter}`);
102
+ const generatedValue = React.useId();
103
+ const autoValue = valueProp || `navmenu-item-${generatedValue}`;
101
104
  const triggerId = `${rootCtx.rootId}-trigger-${autoValue}`;
102
105
  const contentId = `${rootCtx.rootId}-content-${autoValue}`;
106
+ React.useEffect(() => {
107
+ if (!rootCtx.itemOrder.current.includes(autoValue)) {
108
+ rootCtx.itemOrder.current.push(autoValue);
109
+ }
110
+ const existing = rootCtx.itemInfoMap.current.get(autoValue);
111
+ if (!existing) {
112
+ rootCtx.itemInfoMap.current.set(autoValue, {
113
+ value: autoValue,
114
+ triggerLabel: "",
115
+ contentChildren: null
116
+ });
117
+ }
118
+ return () => {
119
+ rootCtx.itemOrder.current = rootCtx.itemOrder.current.filter((v) => v !== autoValue);
120
+ rootCtx.itemInfoMap.current.delete(autoValue);
121
+ };
122
+ }, [autoValue, rootCtx.itemInfoMap, rootCtx.itemOrder]);
103
123
  const itemCtx = React.useMemo(
104
124
  () => ({
105
125
  value: autoValue,
@@ -181,6 +201,7 @@ function NavigationMenuTrigger({ children, className }) {
181
201
  type: "button",
182
202
  id: itemCtx.triggerId,
183
203
  className: classes,
204
+ "data-navmenu-value": itemCtx.value,
184
205
  "aria-expanded": isOpen,
185
206
  "aria-controls": itemCtx.contentId,
186
207
  "data-state": isOpen ? "open" : "closed",
@@ -286,7 +307,21 @@ function NavigationMenuLink({
286
307
  ...htmlProps
287
308
  }) {
288
309
  const ctx = React.useContext(NavigationMenuContext);
310
+ const itemCtx = React.useContext(NavigationMenuItemContext);
289
311
  const isStructured = !!(title || description || icon);
312
+ React.useEffect(() => {
313
+ if (!ctx || !itemCtx) return;
314
+ const existing = ctx.itemInfoMap.current.get(itemCtx.value);
315
+ const fallbackLabel = typeof children === "string" ? children : title || "";
316
+ const resolvedHref = typeof href === "string" ? href : existing == null ? void 0 : existing.linkHref;
317
+ ctx.itemInfoMap.current.set(itemCtx.value, {
318
+ ...existing,
319
+ value: itemCtx.value,
320
+ triggerLabel: (existing == null ? void 0 : existing.triggerLabel) || fallbackLabel || "",
321
+ contentChildren: (existing == null ? void 0 : existing.contentChildren) ?? null,
322
+ linkHref: resolvedHref
323
+ });
324
+ }, [ctx, itemCtx, children, title, href]);
290
325
  const handleClick = (e) => {
291
326
  onClick == null ? void 0 : onClick(e);
292
327
  if ((ctx == null ? void 0 : ctx.isMobile) && ctx.mobileOpen) {
@@ -476,14 +511,11 @@ function MobileDrawer() {
476
511
  document.addEventListener("keydown", handleKeyDown);
477
512
  return () => document.removeEventListener("keydown", handleKeyDown);
478
513
  }, [ctx]);
479
- const autoItems = React.useMemo(() => {
480
- const items = [];
481
- for (const value of ctx.triggerOrder.current) {
482
- const info = ctx.itemInfoMap.current.get(value);
483
- if (info) items.push(info);
484
- }
485
- return items;
486
- }, [ctx.triggerOrder, ctx.itemInfoMap]);
514
+ const autoItems = [];
515
+ for (const value of ctx.itemOrder.current) {
516
+ const info = ctx.itemInfoMap.current.get(value);
517
+ if (info) autoItems.push(info);
518
+ }
487
519
  const handleLinkClick = () => {
488
520
  ctx.setMobileOpen(false);
489
521
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/NavigationMenu/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { CaretDown, CaretRight, List, X } from '@phosphor-icons/react';\nimport { handleArrowNavigation, useFocusTrap } from '../../utils/a11y';\nimport { Collapsible } from '../Collapsible';\nimport { ScrollArea } from '../ScrollArea';\nimport {\n NavigationMenuContext,\n NavigationMenuItemContext,\n useNavigationMenuContext,\n useNavigationMenuItemContext,\n type NavigationMenuItemInfo,\n} from './NavigationMenuContext';\nimport { useNavigationMenu } from './useNavigationMenu';\nimport styles from './NavigationMenu.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface NavigationMenuProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n /** Controlled open item value */\n value?: string;\n /** Default open item value */\n defaultValue?: string;\n /** Callback when open item changes */\n onValueChange?: (value: string) => void;\n /** Menu orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Delay before opening on hover (ms) */\n delayDuration?: number;\n /** Duration to skip delays between triggers (ms) */\n skipDelayDuration?: number;\n}\n\nexport interface NavigationMenuListProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface NavigationMenuItemProps {\n children: React.ReactNode;\n /** Unique item value (required for items with Trigger+Content) */\n value?: string;\n className?: string;\n}\n\nexport interface NavigationMenuTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface NavigationMenuContentProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface NavigationMenuLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /** Simple mode: children as text content */\n children?: React.ReactNode;\n /** Structured mode: title text */\n title?: string;\n /** Structured mode: description text */\n description?: string;\n /** Structured mode: icon element */\n icon?: React.ReactNode;\n /** Whether this link is the current page */\n active?: boolean;\n /** Highlighted card style */\n featured?: boolean;\n /** Render as child element (polymorphic) */\n asChild?: boolean;\n}\n\nexport interface NavigationMenuIndicatorProps {\n className?: string;\n}\n\nexport interface NavigationMenuViewportProps {\n className?: string;\n}\n\nexport interface NavigationMenuMobileContentProps {\n children: React.ReactNode;\n}\n\nexport interface NavigationMenuMobileBrandProps {\n children: React.ReactNode;\n}\n\nexport interface NavigationMenuMobileSectionProps {\n children: React.ReactNode;\n /** Section heading label */\n label?: string;\n}\n\n// ============================================\n// Hooks\n// ============================================\n\nfunction useIsMobile() {\n const [isMobile, setIsMobile] = React.useState(false);\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mq = window.matchMedia('(max-width: 767px)');\n setIsMobile(mq.matches);\n\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n\n return isMobile;\n}\n\n// ============================================\n// Root\n// ============================================\n\nfunction NavigationMenuRoot({\n children,\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n delayDuration = 200,\n skipDelayDuration = 300,\n className,\n 'aria-label': ariaLabel = 'Main navigation',\n ...htmlProps\n}: NavigationMenuProps) {\n const rootId = React.useId();\n const isMobile = useIsMobile();\n\n const state = useNavigationMenu({\n value: controlledValue,\n defaultValue,\n onValueChange,\n delayDuration,\n skipDelayDuration,\n });\n\n const classes = [\n styles.root,\n orientation === 'vertical' && styles.rootVertical,\n className,\n ].filter(Boolean).join(' ');\n\n const contextValue = React.useMemo(\n () => ({\n ...state,\n orientation,\n isMobile,\n rootId,\n }),\n [state, orientation, isMobile, rootId]\n );\n\n return (\n <NavigationMenuContext.Provider value={contextValue}>\n <nav {...htmlProps} className={classes} aria-label={ariaLabel} data-orientation={orientation}>\n {children}\n {isMobile && <MobileHamburger />}\n {isMobile && state.mobileOpen && <MobileDrawer />}\n </nav>\n </NavigationMenuContext.Provider>\n );\n}\n\n// ============================================\n// List\n// ============================================\n\nfunction NavigationMenuList({ children, className }: NavigationMenuListProps) {\n const { orientation, triggerOrder, triggerRefs, value } = useNavigationMenuContext();\n\n const listRef = React.useRef<HTMLUListElement>(null);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n const order = triggerOrder.current;\n const currentIdx = order.indexOf(value);\n\n const newIdx = handleArrowNavigation(e, order, currentIdx >= 0 ? currentIdx : 0, {\n orientation: orientation === 'horizontal' ? 'horizontal' : 'vertical',\n loop: true,\n });\n\n if (newIdx !== undefined) {\n const targetValue = order[newIdx];\n const trigger = triggerRefs.current.get(targetValue);\n trigger?.focus();\n }\n };\n\n const classes = [\n styles.list,\n orientation === 'vertical' && styles.listVertical,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <ul\n ref={listRef}\n className={classes}\n role=\"list\"\n data-orientation={orientation}\n onKeyDown={handleKeyDown}\n >\n {children}\n </ul>\n );\n}\n\n// ============================================\n// Item\n// ============================================\n\nlet itemCounter = 0;\n\nfunction NavigationMenuItem({ children, value: valueProp, className }: NavigationMenuItemProps) {\n const rootCtx = useNavigationMenuContext();\n const [autoValue] = React.useState(() => valueProp || `navmenu-item-${++itemCounter}`);\n const triggerId = `${rootCtx.rootId}-trigger-${autoValue}`;\n const contentId = `${rootCtx.rootId}-content-${autoValue}`;\n\n const itemCtx = React.useMemo(\n () => ({\n value: autoValue,\n triggerId,\n contentId,\n }),\n [autoValue, triggerId, contentId]\n );\n\n return (\n <NavigationMenuItemContext.Provider value={itemCtx}>\n <li className={className}>{children}</li>\n </NavigationMenuItemContext.Provider>\n );\n}\n\n// ============================================\n// Trigger\n// ============================================\n\nfunction NavigationMenuTrigger({ children, className }: NavigationMenuTriggerProps) {\n const ctx = useNavigationMenuContext();\n const itemCtx = useNavigationMenuItemContext();\n const isOpen = ctx.value === itemCtx.value;\n\n // Register trigger\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n React.useEffect(() => {\n if (triggerRef.current) {\n ctx.triggerRefs.current.set(itemCtx.value, triggerRef.current);\n if (!ctx.triggerOrder.current.includes(itemCtx.value)) {\n ctx.triggerOrder.current.push(itemCtx.value);\n }\n }\n return () => {\n ctx.triggerRefs.current.delete(itemCtx.value);\n ctx.triggerOrder.current = ctx.triggerOrder.current.filter(v => v !== itemCtx.value);\n };\n // Only register/unregister on mount/unmount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [itemCtx.value]);\n\n // Register item info for mobile drawer\n React.useEffect(() => {\n const label = typeof children === 'string' ? children : '';\n const existing = ctx.itemInfoMap.current.get(itemCtx.value);\n ctx.itemInfoMap.current.set(itemCtx.value, {\n ...existing,\n value: itemCtx.value,\n triggerLabel: label || existing?.triggerLabel || '',\n } as NavigationMenuItemInfo);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [itemCtx.value, children]);\n\n const handleClick = () => {\n ctx.setValue(isOpen ? '' : itemCtx.value);\n };\n\n const handlePointerEnter = () => {\n if (ctx.closeTimerRef.current) {\n clearTimeout(ctx.closeTimerRef.current);\n ctx.closeTimerRef.current = null;\n }\n\n // Skip delay if recently open\n if (ctx.isRecentlyOpenRef.current) {\n ctx.setValue(itemCtx.value);\n return;\n }\n\n ctx.openTimerRef.current = setTimeout(() => {\n ctx.setValue(itemCtx.value);\n }, ctx.delayDuration);\n };\n\n const handlePointerLeave = () => {\n if (ctx.openTimerRef.current) {\n clearTimeout(ctx.openTimerRef.current);\n ctx.openTimerRef.current = null;\n }\n\n ctx.closeTimerRef.current = setTimeout(() => {\n ctx.setValue('');\n }, ctx.delayDuration);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n ctx.setValue(isOpen ? '' : itemCtx.value);\n }\n if (e.key === 'Escape' && isOpen) {\n e.preventDefault();\n ctx.setValue('');\n triggerRef.current?.focus();\n }\n };\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n return (\n <button\n ref={triggerRef}\n type=\"button\"\n id={itemCtx.triggerId}\n className={classes}\n aria-expanded={isOpen}\n aria-controls={itemCtx.contentId}\n data-state={isOpen ? 'open' : 'closed'}\n onClick={handleClick}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={handlePointerLeave}\n onKeyDown={handleKeyDown}\n >\n {children}\n <CaretDown size={12} className={styles.triggerChevron} aria-hidden />\n </button>\n );\n}\n\n// ============================================\n// Content\n// ============================================\n\nfunction NavigationMenuContent({ children, className }: NavigationMenuContentProps) {\n const ctx = useNavigationMenuContext();\n const itemCtx = useNavigationMenuItemContext();\n const isOpen = ctx.value === itemCtx.value;\n const contentRef = React.useRef<HTMLDivElement>(null);\n\n // Register content children into item info (for mobile drawer)\n React.useEffect(() => {\n const existing = ctx.itemInfoMap.current.get(itemCtx.value);\n ctx.itemInfoMap.current.set(itemCtx.value, {\n ...existing,\n value: itemCtx.value,\n triggerLabel: existing?.triggerLabel || '',\n contentChildren: children,\n } as NavigationMenuItemInfo);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [itemCtx.value, children]);\n\n // Measure content for viewport animation\n React.useEffect(() => {\n if (!isOpen || !contentRef.current) return;\n\n const el = contentRef.current;\n const observer = new ResizeObserver(([entry]) => {\n if (entry) {\n ctx.setViewportSize({\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n });\n }\n });\n observer.observe(el);\n\n // Initial measurement\n ctx.setViewportSize({\n width: el.scrollWidth,\n height: el.scrollHeight,\n });\n\n return () => observer.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n // Determine motion direction\n const prevValue = ctx.previousValue.current;\n const triggerOrder = ctx.triggerOrder.current;\n const prevIdx = triggerOrder.indexOf(prevValue);\n const currentIdx = triggerOrder.indexOf(itemCtx.value);\n let motion: string | undefined;\n if (isOpen && prevValue && prevValue !== itemCtx.value) {\n motion = currentIdx > prevIdx ? 'from-end' : 'from-start';\n }\n\n // Update previousValue when this content becomes active\n React.useEffect(() => {\n if (isOpen) {\n ctx.previousValue.current = itemCtx.value;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, itemCtx.value]);\n\n if (!isOpen) return null;\n\n const classes = [styles.content, className].filter(Boolean).join(' ');\n\n const handlePointerEnter = () => {\n if (ctx.closeTimerRef.current) {\n clearTimeout(ctx.closeTimerRef.current);\n ctx.closeTimerRef.current = null;\n }\n };\n\n const handlePointerLeave = () => {\n ctx.closeTimerRef.current = setTimeout(() => {\n ctx.setValue('');\n }, ctx.delayDuration);\n };\n\n const contentElement = (\n <div\n ref={contentRef}\n id={itemCtx.contentId}\n className={classes}\n role=\"region\"\n aria-labelledby={itemCtx.triggerId}\n data-motion={motion}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={handlePointerLeave}\n >\n {children}\n </div>\n );\n\n // Portal into viewport if it exists\n if (ctx.viewportRef.current) {\n return createPortal(contentElement, ctx.viewportRef.current);\n }\n\n return contentElement;\n}\n\n// ============================================\n// Link\n// ============================================\n\nfunction NavigationMenuLink({\n children,\n title,\n description,\n icon,\n active = false,\n featured = false,\n asChild = false,\n className,\n href,\n onClick,\n ...htmlProps\n}: NavigationMenuLinkProps) {\n const ctx = React.useContext(NavigationMenuContext);\n const isStructured = !!(title || description || icon);\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n onClick?.(e);\n // Close mobile drawer on link click\n if (ctx?.isMobile && ctx.mobileOpen) {\n ctx.setMobileOpen(false);\n }\n // Close desktop menu\n if (ctx) {\n ctx.setValue('');\n }\n };\n\n // Structured mode (title + description + icon)\n if (isStructured) {\n const classes = [\n styles.link,\n styles.linkStructured,\n active && styles.linkActive,\n featured && styles.linkFeatured,\n className,\n ].filter(Boolean).join(' ');\n\n const linkProps = {\n ...htmlProps,\n className: classes,\n href,\n 'aria-current': active ? ('page' as const) : undefined,\n onClick: handleClick,\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...linkProps,\n className: [classes, (children.props as { className?: string }).className].filter(Boolean).join(' '),\n children: (\n <>\n {icon && <span className={styles.linkIcon}>{icon}</span>}\n <span className={styles.linkBody}>\n {title && <span className={styles.linkTitle}>{title}</span>}\n {description && <span className={styles.linkDescription}>{description}</span>}\n </span>\n </>\n ),\n } as React.HTMLAttributes<HTMLElement>);\n }\n\n return (\n <a {...linkProps}>\n {icon && <span className={styles.linkIcon}>{icon}</span>}\n <span className={styles.linkBody}>\n {title && <span className={styles.linkTitle}>{title}</span>}\n {description && <span className={styles.linkDescription}>{description}</span>}\n </span>\n </a>\n );\n }\n\n // Simple link mode\n const classes = [\n styles.link,\n active && styles.linkActive,\n className,\n ].filter(Boolean).join(' ');\n\n const linkProps = {\n ...htmlProps,\n className: classes,\n href,\n 'aria-current': active ? ('page' as const) : undefined,\n onClick: handleClick,\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...linkProps,\n className: [classes, (children.props as { className?: string }).className].filter(Boolean).join(' '),\n } as React.HTMLAttributes<HTMLElement>);\n }\n\n return <a {...linkProps}>{children}</a>;\n}\n\n// ============================================\n// Indicator\n// ============================================\n\nfunction NavigationMenuIndicator({ className }: NavigationMenuIndicatorProps) {\n const { value, triggerRefs } = useNavigationMenuContext();\n const [style, setStyle] = React.useState<React.CSSProperties>({ opacity: 0 });\n\n React.useEffect(() => {\n if (!value) {\n setStyle({ opacity: 0 });\n return;\n }\n const trigger = triggerRefs.current.get(value);\n if (trigger) {\n const parent = trigger.closest('ul');\n if (parent) {\n const parentRect = parent.getBoundingClientRect();\n const triggerRect = trigger.getBoundingClientRect();\n setStyle({\n left: triggerRect.left - parentRect.left,\n width: triggerRect.width,\n opacity: 1,\n });\n }\n }\n }, [value, triggerRefs]);\n\n const classes = [styles.indicator, className].filter(Boolean).join(' ');\n\n return <div className={classes} style={style} aria-hidden />;\n}\n\n// ============================================\n// Viewport\n// ============================================\n\nfunction NavigationMenuViewport({ className }: NavigationMenuViewportProps) {\n const ctx = useNavigationMenuContext();\n const { viewportSize, viewportRef, value, triggerRefs } = ctx;\n const isOpen = !!value;\n\n // Compute the active trigger's left offset relative to the nav root\n const [triggerLeft, setTriggerLeft] = React.useState(0);\n\n React.useEffect(() => {\n if (!isOpen || !value) return;\n const trigger = triggerRefs.current.get(value);\n if (!trigger || !viewportRef.current) return;\n\n const navRoot = viewportRef.current.parentElement;\n if (!navRoot) return;\n\n const navRect = navRoot.getBoundingClientRect();\n const triggerRect = trigger.getBoundingClientRect();\n setTriggerLeft(triggerRect.left - navRect.left);\n }, [isOpen, value, triggerRefs, viewportRef]);\n\n const cssVars = {\n '--fui-navmenu-viewport-width': isOpen ? `${viewportSize.width}px` : '0px',\n '--fui-navmenu-viewport-height': isOpen ? `${viewportSize.height}px` : '0px',\n '--fui-navmenu-viewport-left': `${triggerLeft}px`,\n } as React.CSSProperties;\n\n // Mark skip-delay state\n React.useEffect(() => {\n if (isOpen) {\n ctx.isRecentlyOpenRef.current = true;\n if (ctx.skipDelayTimerRef.current) {\n clearTimeout(ctx.skipDelayTimerRef.current);\n }\n } else {\n ctx.skipDelayTimerRef.current = setTimeout(() => {\n ctx.isRecentlyOpenRef.current = false;\n }, ctx.skipDelayDuration);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const classes = [styles.viewport, className].filter(Boolean).join(' ');\n\n return (\n <div\n ref={viewportRef}\n className={classes}\n style={cssVars}\n data-state={isOpen ? 'open' : 'closed'}\n role=\"presentation\"\n />\n );\n}\n\n// ============================================\n// MobileContent (slot for extra mobile sections)\n// ============================================\n\nfunction NavigationMenuMobileContent({ children }: NavigationMenuMobileContentProps) {\n const ctx = useNavigationMenuContext();\n\n React.useEffect(() => {\n ctx.setMobileContentChildren(children);\n return () => ctx.setMobileContentChildren(null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [children]);\n\n // This component renders nothing visually on desktop or in the tree.\n // Its children are extracted into the mobile drawer via context.\n return null;\n}\n\n// ============================================\n// MobileBrand (slot for brand in mobile drawer header)\n// ============================================\n\nfunction NavigationMenuMobileBrand({ children }: NavigationMenuMobileBrandProps) {\n const ctx = useNavigationMenuContext();\n\n React.useEffect(() => {\n ctx.setMobileBrandChildren(children);\n return () => ctx.setMobileBrandChildren(null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [children]);\n\n return null;\n}\n\n// ============================================\n// MobileSection\n// ============================================\n\nfunction NavigationMenuMobileSection({ children, label }: NavigationMenuMobileSectionProps) {\n return (\n <div role=\"group\" aria-label={label}>\n {label && <div className={styles.drawerSectionLabel}>{label}</div>}\n <div className={styles.drawerNav}>{children}</div>\n </div>\n );\n}\n\n// ============================================\n// Mobile Hamburger Button\n// ============================================\n\nfunction MobileHamburger() {\n const { mobileOpen, setMobileOpen } = useNavigationMenuContext();\n\n return (\n <button\n type=\"button\"\n className={styles.hamburger}\n onClick={() => setMobileOpen(!mobileOpen)}\n aria-label=\"Toggle navigation\"\n aria-expanded={mobileOpen}\n >\n {mobileOpen ? <X size={24} aria-hidden /> : <List size={24} aria-hidden />}\n </button>\n );\n}\n\n// ============================================\n// Mobile Drawer\n// ============================================\n\nfunction MobileDrawer() {\n const ctx = useNavigationMenuContext();\n const drawerRef = React.useRef<HTMLDivElement>(null);\n\n useFocusTrap(drawerRef, true);\n\n // Lock body scroll\n React.useEffect(() => {\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = '';\n };\n }, []);\n\n // Handle Escape\n React.useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n ctx.setMobileOpen(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [ctx]);\n\n // Build auto-converted nav items from item info registry\n const autoItems = React.useMemo(() => {\n const items: NavigationMenuItemInfo[] = [];\n for (const value of ctx.triggerOrder.current) {\n const info = ctx.itemInfoMap.current.get(value);\n if (info) items.push(info);\n }\n return items;\n }, [ctx.triggerOrder, ctx.itemInfoMap]);\n\n const handleLinkClick = () => {\n ctx.setMobileOpen(false);\n };\n\n const drawerContent = (\n <>\n <div\n className={styles.drawerBackdrop}\n onClick={() => ctx.setMobileOpen(false)}\n aria-hidden\n />\n <div\n ref={drawerRef}\n className={styles.drawer}\n role=\"dialog\"\n aria-modal\n aria-label=\"Navigation\"\n >\n <div className={styles.drawerHeader}>\n {ctx.mobileBrandChildren ?? <span />}\n <button\n type=\"button\"\n className={styles.drawerClose}\n onClick={() => ctx.setMobileOpen(false)}\n aria-label=\"Close navigation\"\n >\n <X size={20} aria-hidden />\n </button>\n </div>\n <ScrollArea orientation=\"vertical\" className={styles.drawerBody}>\n {/* When MobileContent is provided, it takes full control of the drawer nav.\n Otherwise, auto-convert registered Trigger+Content items. */}\n {ctx.mobileContentChildren ? (\n ctx.mobileContentChildren\n ) : (\n <div className={styles.drawerNav}>\n {autoItems.map((item) =>\n item.contentChildren ? (\n <MobileCollapsibleSection\n key={item.value}\n label={item.triggerLabel}\n onLinkClick={handleLinkClick}\n >\n {item.contentChildren}\n </MobileCollapsibleSection>\n ) : item.linkHref ? (\n <a\n key={item.value}\n className={styles.drawerLink}\n href={item.linkHref}\n onClick={handleLinkClick}\n >\n {item.triggerLabel}\n </a>\n ) : null\n )}\n </div>\n )}\n </ScrollArea>\n </div>\n </>\n );\n\n if (typeof document === 'undefined') return null;\n return createPortal(drawerContent, document.body);\n}\n\n// ============================================\n// Mobile Collapsible Section (auto-converted)\n// ============================================\n\nfunction MobileCollapsibleSection({\n label,\n children,\n onLinkClick,\n}: {\n label: string;\n children: React.ReactNode;\n onLinkClick: () => void;\n}) {\n return (\n <Collapsible defaultOpen={false}>\n <Collapsible.Trigger className={styles.drawerCollapsibleTrigger}>\n {label}\n </Collapsible.Trigger>\n <Collapsible.Content>\n <div\n className={styles.drawerCollapsibleContent}\n onClick={onLinkClick}\n onKeyDown={(e) => { if (e.key === 'Enter') onLinkClick(); }}\n role=\"group\"\n >\n {children}\n </div>\n </Collapsible.Content>\n </Collapsible>\n );\n}\n\n// ============================================\n// Export Compound Component\n// ============================================\n\nexport const NavigationMenu = Object.assign(NavigationMenuRoot, {\n List: NavigationMenuList,\n Item: NavigationMenuItem,\n Trigger: NavigationMenuTrigger,\n Content: NavigationMenuContent,\n Link: NavigationMenuLink,\n Indicator: NavigationMenuIndicator,\n Viewport: NavigationMenuViewport,\n MobileBrand: NavigationMenuMobileBrand,\n MobileContent: NavigationMenuMobileContent,\n MobileSection: NavigationMenuMobileSection,\n});\n\nexport {\n NavigationMenuRoot,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuTrigger,\n NavigationMenuContent,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n NavigationMenuMobileBrand,\n NavigationMenuMobileContent,\n NavigationMenuMobileSection,\n};\n"],"names":["classes","linkProps"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/NavigationMenu/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { CaretDown, List, X } from '@phosphor-icons/react';\nimport { handleArrowNavigation, useFocusTrap } from '../../utils/a11y';\nimport { Collapsible } from '../Collapsible';\nimport { ScrollArea } from '../ScrollArea';\nimport {\n NavigationMenuContext,\n NavigationMenuItemContext,\n useNavigationMenuContext,\n useNavigationMenuItemContext,\n type NavigationMenuItemInfo,\n} from './NavigationMenuContext';\nimport { useNavigationMenu } from './useNavigationMenu';\nimport styles from './NavigationMenu.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface NavigationMenuProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n /** Controlled open item value */\n value?: string;\n /** Default open item value */\n defaultValue?: string;\n /** Callback when open item changes */\n onValueChange?: (value: string) => void;\n /** Menu orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Delay before opening on hover (ms) */\n delayDuration?: number;\n /** Duration to skip delays between triggers (ms) */\n skipDelayDuration?: number;\n}\n\nexport interface NavigationMenuListProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface NavigationMenuItemProps {\n children: React.ReactNode;\n /** Unique item value (required for items with Trigger+Content) */\n value?: string;\n className?: string;\n}\n\nexport interface NavigationMenuTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface NavigationMenuContentProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface NavigationMenuLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /** Simple mode: children as text content */\n children?: React.ReactNode;\n /** Structured mode: title text */\n title?: string;\n /** Structured mode: description text */\n description?: string;\n /** Structured mode: icon element */\n icon?: React.ReactNode;\n /** Whether this link is the current page */\n active?: boolean;\n /** Highlighted card style */\n featured?: boolean;\n /** Render as child element (polymorphic) */\n asChild?: boolean;\n}\n\nexport interface NavigationMenuIndicatorProps {\n className?: string;\n}\n\nexport interface NavigationMenuViewportProps {\n className?: string;\n}\n\nexport interface NavigationMenuMobileContentProps {\n children: React.ReactNode;\n}\n\nexport interface NavigationMenuMobileBrandProps {\n children: React.ReactNode;\n}\n\nexport interface NavigationMenuMobileSectionProps {\n children: React.ReactNode;\n /** Section heading label */\n label?: string;\n}\n\n// ============================================\n// Hooks\n// ============================================\n\nfunction useIsMobile() {\n const [isMobile, setIsMobile] = React.useState(false);\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mq = window.matchMedia('(max-width: 767px)');\n setIsMobile(mq.matches);\n\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n\n return isMobile;\n}\n\n// ============================================\n// Root\n// ============================================\n\nfunction NavigationMenuRoot({\n children,\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n delayDuration = 200,\n skipDelayDuration = 300,\n className,\n 'aria-label': ariaLabel = 'Main navigation',\n ...htmlProps\n}: NavigationMenuProps) {\n const rootId = React.useId();\n const isMobile = useIsMobile();\n\n const state = useNavigationMenu({\n value: controlledValue,\n defaultValue,\n onValueChange,\n delayDuration,\n skipDelayDuration,\n });\n\n const classes = [\n styles.root,\n orientation === 'vertical' && styles.rootVertical,\n className,\n ].filter(Boolean).join(' ');\n\n const contextValue = React.useMemo(\n () => ({\n ...state,\n orientation,\n isMobile,\n rootId,\n }),\n [state, orientation, isMobile, rootId]\n );\n\n return (\n <NavigationMenuContext.Provider value={contextValue}>\n <nav {...htmlProps} className={classes} aria-label={ariaLabel} data-orientation={orientation}>\n {children}\n {isMobile && <MobileHamburger />}\n {isMobile && state.mobileOpen && <MobileDrawer />}\n </nav>\n </NavigationMenuContext.Provider>\n );\n}\n\n// ============================================\n// List\n// ============================================\n\nfunction NavigationMenuList({ children, className }: NavigationMenuListProps) {\n const { orientation, triggerOrder, triggerRefs, value } = useNavigationMenuContext();\n\n const listRef = React.useRef<HTMLUListElement>(null);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n const order = triggerOrder.current;\n const focusedValue = (document.activeElement as HTMLElement | null)?.getAttribute('data-navmenu-value');\n const currentValue = focusedValue || value;\n const currentIdx = order.indexOf(currentValue);\n\n const newIdx = handleArrowNavigation(e, order, currentIdx >= 0 ? currentIdx : 0, {\n orientation: orientation === 'horizontal' ? 'horizontal' : 'vertical',\n loop: true,\n });\n\n if (newIdx !== undefined) {\n const targetValue = order[newIdx];\n const trigger = triggerRefs.current.get(targetValue);\n trigger?.focus();\n }\n };\n\n const classes = [\n styles.list,\n orientation === 'vertical' && styles.listVertical,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <ul\n ref={listRef}\n className={classes}\n role=\"list\"\n data-orientation={orientation}\n onKeyDown={handleKeyDown}\n >\n {children}\n </ul>\n );\n}\n\n// ============================================\n// Item\n// ============================================\n\nfunction NavigationMenuItem({ children, value: valueProp, className }: NavigationMenuItemProps) {\n const rootCtx = useNavigationMenuContext();\n const generatedValue = React.useId();\n const autoValue = valueProp || `navmenu-item-${generatedValue}`;\n const triggerId = `${rootCtx.rootId}-trigger-${autoValue}`;\n const contentId = `${rootCtx.rootId}-content-${autoValue}`;\n\n React.useEffect(() => {\n if (!rootCtx.itemOrder.current.includes(autoValue)) {\n rootCtx.itemOrder.current.push(autoValue);\n }\n\n const existing = rootCtx.itemInfoMap.current.get(autoValue);\n if (!existing) {\n rootCtx.itemInfoMap.current.set(autoValue, {\n value: autoValue,\n triggerLabel: '',\n contentChildren: null,\n });\n }\n\n return () => {\n rootCtx.itemOrder.current = rootCtx.itemOrder.current.filter(v => v !== autoValue);\n rootCtx.itemInfoMap.current.delete(autoValue);\n };\n }, [autoValue, rootCtx.itemInfoMap, rootCtx.itemOrder]);\n\n const itemCtx = React.useMemo(\n () => ({\n value: autoValue,\n triggerId,\n contentId,\n }),\n [autoValue, triggerId, contentId]\n );\n\n return (\n <NavigationMenuItemContext.Provider value={itemCtx}>\n <li className={className}>{children}</li>\n </NavigationMenuItemContext.Provider>\n );\n}\n\n// ============================================\n// Trigger\n// ============================================\n\nfunction NavigationMenuTrigger({ children, className }: NavigationMenuTriggerProps) {\n const ctx = useNavigationMenuContext();\n const itemCtx = useNavigationMenuItemContext();\n const isOpen = ctx.value === itemCtx.value;\n\n // Register trigger\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n React.useEffect(() => {\n if (triggerRef.current) {\n ctx.triggerRefs.current.set(itemCtx.value, triggerRef.current);\n if (!ctx.triggerOrder.current.includes(itemCtx.value)) {\n ctx.triggerOrder.current.push(itemCtx.value);\n }\n }\n return () => {\n ctx.triggerRefs.current.delete(itemCtx.value);\n ctx.triggerOrder.current = ctx.triggerOrder.current.filter(v => v !== itemCtx.value);\n };\n // Only register/unregister on mount/unmount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [itemCtx.value]);\n\n // Register item info for mobile drawer\n React.useEffect(() => {\n const label = typeof children === 'string' ? children : '';\n const existing = ctx.itemInfoMap.current.get(itemCtx.value);\n ctx.itemInfoMap.current.set(itemCtx.value, {\n ...existing,\n value: itemCtx.value,\n triggerLabel: label || existing?.triggerLabel || '',\n } as NavigationMenuItemInfo);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [itemCtx.value, children]);\n\n const handleClick = () => {\n ctx.setValue(isOpen ? '' : itemCtx.value);\n };\n\n const handlePointerEnter = () => {\n if (ctx.closeTimerRef.current) {\n clearTimeout(ctx.closeTimerRef.current);\n ctx.closeTimerRef.current = null;\n }\n\n // Skip delay if recently open\n if (ctx.isRecentlyOpenRef.current) {\n ctx.setValue(itemCtx.value);\n return;\n }\n\n ctx.openTimerRef.current = setTimeout(() => {\n ctx.setValue(itemCtx.value);\n }, ctx.delayDuration);\n };\n\n const handlePointerLeave = () => {\n if (ctx.openTimerRef.current) {\n clearTimeout(ctx.openTimerRef.current);\n ctx.openTimerRef.current = null;\n }\n\n ctx.closeTimerRef.current = setTimeout(() => {\n ctx.setValue('');\n }, ctx.delayDuration);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n ctx.setValue(isOpen ? '' : itemCtx.value);\n }\n if (e.key === 'Escape' && isOpen) {\n e.preventDefault();\n ctx.setValue('');\n triggerRef.current?.focus();\n }\n };\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n return (\n <button\n ref={triggerRef}\n type=\"button\"\n id={itemCtx.triggerId}\n className={classes}\n data-navmenu-value={itemCtx.value}\n aria-expanded={isOpen}\n aria-controls={itemCtx.contentId}\n data-state={isOpen ? 'open' : 'closed'}\n onClick={handleClick}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={handlePointerLeave}\n onKeyDown={handleKeyDown}\n >\n {children}\n <CaretDown size={12} className={styles.triggerChevron} aria-hidden />\n </button>\n );\n}\n\n// ============================================\n// Content\n// ============================================\n\nfunction NavigationMenuContent({ children, className }: NavigationMenuContentProps) {\n const ctx = useNavigationMenuContext();\n const itemCtx = useNavigationMenuItemContext();\n const isOpen = ctx.value === itemCtx.value;\n const contentRef = React.useRef<HTMLDivElement>(null);\n\n // Register content children into item info (for mobile drawer)\n React.useEffect(() => {\n const existing = ctx.itemInfoMap.current.get(itemCtx.value);\n ctx.itemInfoMap.current.set(itemCtx.value, {\n ...existing,\n value: itemCtx.value,\n triggerLabel: existing?.triggerLabel || '',\n contentChildren: children,\n } as NavigationMenuItemInfo);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [itemCtx.value, children]);\n\n // Measure content for viewport animation\n React.useEffect(() => {\n if (!isOpen || !contentRef.current) return;\n\n const el = contentRef.current;\n const observer = new ResizeObserver(([entry]) => {\n if (entry) {\n ctx.setViewportSize({\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n });\n }\n });\n observer.observe(el);\n\n // Initial measurement\n ctx.setViewportSize({\n width: el.scrollWidth,\n height: el.scrollHeight,\n });\n\n return () => observer.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n // Determine motion direction\n const prevValue = ctx.previousValue.current;\n const triggerOrder = ctx.triggerOrder.current;\n const prevIdx = triggerOrder.indexOf(prevValue);\n const currentIdx = triggerOrder.indexOf(itemCtx.value);\n let motion: string | undefined;\n if (isOpen && prevValue && prevValue !== itemCtx.value) {\n motion = currentIdx > prevIdx ? 'from-end' : 'from-start';\n }\n\n // Update previousValue when this content becomes active\n React.useEffect(() => {\n if (isOpen) {\n ctx.previousValue.current = itemCtx.value;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, itemCtx.value]);\n\n if (!isOpen) return null;\n\n const classes = [styles.content, className].filter(Boolean).join(' ');\n\n const handlePointerEnter = () => {\n if (ctx.closeTimerRef.current) {\n clearTimeout(ctx.closeTimerRef.current);\n ctx.closeTimerRef.current = null;\n }\n };\n\n const handlePointerLeave = () => {\n ctx.closeTimerRef.current = setTimeout(() => {\n ctx.setValue('');\n }, ctx.delayDuration);\n };\n\n const contentElement = (\n <div\n ref={contentRef}\n id={itemCtx.contentId}\n className={classes}\n role=\"region\"\n aria-labelledby={itemCtx.triggerId}\n data-motion={motion}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={handlePointerLeave}\n >\n {children}\n </div>\n );\n\n // Portal into viewport if it exists\n if (ctx.viewportRef.current) {\n return createPortal(contentElement, ctx.viewportRef.current);\n }\n\n return contentElement;\n}\n\n// ============================================\n// Link\n// ============================================\n\nfunction NavigationMenuLink({\n children,\n title,\n description,\n icon,\n active = false,\n featured = false,\n asChild = false,\n className,\n href,\n onClick,\n ...htmlProps\n}: NavigationMenuLinkProps) {\n const ctx = React.useContext(NavigationMenuContext);\n const itemCtx = React.useContext(NavigationMenuItemContext);\n const isStructured = !!(title || description || icon);\n\n React.useEffect(() => {\n if (!ctx || !itemCtx) return;\n\n const existing = ctx.itemInfoMap.current.get(itemCtx.value);\n const fallbackLabel = typeof children === 'string' ? children : title || '';\n const resolvedHref = typeof href === 'string' ? href : existing?.linkHref;\n\n ctx.itemInfoMap.current.set(itemCtx.value, {\n ...existing,\n value: itemCtx.value,\n triggerLabel: existing?.triggerLabel || fallbackLabel || '',\n contentChildren: existing?.contentChildren ?? null,\n linkHref: resolvedHref,\n });\n }, [ctx, itemCtx, children, title, href]);\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n onClick?.(e);\n // Close mobile drawer on link click\n if (ctx?.isMobile && ctx.mobileOpen) {\n ctx.setMobileOpen(false);\n }\n // Close desktop menu\n if (ctx) {\n ctx.setValue('');\n }\n };\n\n // Structured mode (title + description + icon)\n if (isStructured) {\n const classes = [\n styles.link,\n styles.linkStructured,\n active && styles.linkActive,\n featured && styles.linkFeatured,\n className,\n ].filter(Boolean).join(' ');\n\n const linkProps = {\n ...htmlProps,\n className: classes,\n href,\n 'aria-current': active ? ('page' as const) : undefined,\n onClick: handleClick,\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...linkProps,\n className: [classes, (children.props as { className?: string }).className].filter(Boolean).join(' '),\n children: (\n <>\n {icon && <span className={styles.linkIcon}>{icon}</span>}\n <span className={styles.linkBody}>\n {title && <span className={styles.linkTitle}>{title}</span>}\n {description && <span className={styles.linkDescription}>{description}</span>}\n </span>\n </>\n ),\n } as React.HTMLAttributes<HTMLElement>);\n }\n\n return (\n <a {...linkProps}>\n {icon && <span className={styles.linkIcon}>{icon}</span>}\n <span className={styles.linkBody}>\n {title && <span className={styles.linkTitle}>{title}</span>}\n {description && <span className={styles.linkDescription}>{description}</span>}\n </span>\n </a>\n );\n }\n\n // Simple link mode\n const classes = [\n styles.link,\n active && styles.linkActive,\n className,\n ].filter(Boolean).join(' ');\n\n const linkProps = {\n ...htmlProps,\n className: classes,\n href,\n 'aria-current': active ? ('page' as const) : undefined,\n onClick: handleClick,\n };\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...linkProps,\n className: [classes, (children.props as { className?: string }).className].filter(Boolean).join(' '),\n } as React.HTMLAttributes<HTMLElement>);\n }\n\n return <a {...linkProps}>{children}</a>;\n}\n\n// ============================================\n// Indicator\n// ============================================\n\nfunction NavigationMenuIndicator({ className }: NavigationMenuIndicatorProps) {\n const { value, triggerRefs } = useNavigationMenuContext();\n const [style, setStyle] = React.useState<React.CSSProperties>({ opacity: 0 });\n\n React.useEffect(() => {\n if (!value) {\n setStyle({ opacity: 0 });\n return;\n }\n const trigger = triggerRefs.current.get(value);\n if (trigger) {\n const parent = trigger.closest('ul');\n if (parent) {\n const parentRect = parent.getBoundingClientRect();\n const triggerRect = trigger.getBoundingClientRect();\n setStyle({\n left: triggerRect.left - parentRect.left,\n width: triggerRect.width,\n opacity: 1,\n });\n }\n }\n }, [value, triggerRefs]);\n\n const classes = [styles.indicator, className].filter(Boolean).join(' ');\n\n return <div className={classes} style={style} aria-hidden />;\n}\n\n// ============================================\n// Viewport\n// ============================================\n\nfunction NavigationMenuViewport({ className }: NavigationMenuViewportProps) {\n const ctx = useNavigationMenuContext();\n const { viewportSize, viewportRef, value, triggerRefs } = ctx;\n const isOpen = !!value;\n\n // Compute the active trigger's left offset relative to the nav root\n const [triggerLeft, setTriggerLeft] = React.useState(0);\n\n React.useEffect(() => {\n if (!isOpen || !value) return;\n const trigger = triggerRefs.current.get(value);\n if (!trigger || !viewportRef.current) return;\n\n const navRoot = viewportRef.current.parentElement;\n if (!navRoot) return;\n\n const navRect = navRoot.getBoundingClientRect();\n const triggerRect = trigger.getBoundingClientRect();\n setTriggerLeft(triggerRect.left - navRect.left);\n }, [isOpen, value, triggerRefs, viewportRef]);\n\n const cssVars = {\n '--fui-navmenu-viewport-width': isOpen ? `${viewportSize.width}px` : '0px',\n '--fui-navmenu-viewport-height': isOpen ? `${viewportSize.height}px` : '0px',\n '--fui-navmenu-viewport-left': `${triggerLeft}px`,\n } as React.CSSProperties;\n\n // Mark skip-delay state\n React.useEffect(() => {\n if (isOpen) {\n ctx.isRecentlyOpenRef.current = true;\n if (ctx.skipDelayTimerRef.current) {\n clearTimeout(ctx.skipDelayTimerRef.current);\n }\n } else {\n ctx.skipDelayTimerRef.current = setTimeout(() => {\n ctx.isRecentlyOpenRef.current = false;\n }, ctx.skipDelayDuration);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const classes = [styles.viewport, className].filter(Boolean).join(' ');\n\n return (\n <div\n ref={viewportRef}\n className={classes}\n style={cssVars}\n data-state={isOpen ? 'open' : 'closed'}\n role=\"presentation\"\n />\n );\n}\n\n// ============================================\n// MobileContent (slot for extra mobile sections)\n// ============================================\n\nfunction NavigationMenuMobileContent({ children }: NavigationMenuMobileContentProps) {\n const ctx = useNavigationMenuContext();\n\n React.useEffect(() => {\n ctx.setMobileContentChildren(children);\n return () => ctx.setMobileContentChildren(null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [children]);\n\n // This component renders nothing visually on desktop or in the tree.\n // Its children are extracted into the mobile drawer via context.\n return null;\n}\n\n// ============================================\n// MobileBrand (slot for brand in mobile drawer header)\n// ============================================\n\nfunction NavigationMenuMobileBrand({ children }: NavigationMenuMobileBrandProps) {\n const ctx = useNavigationMenuContext();\n\n React.useEffect(() => {\n ctx.setMobileBrandChildren(children);\n return () => ctx.setMobileBrandChildren(null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [children]);\n\n return null;\n}\n\n// ============================================\n// MobileSection\n// ============================================\n\nfunction NavigationMenuMobileSection({ children, label }: NavigationMenuMobileSectionProps) {\n return (\n <div role=\"group\" aria-label={label}>\n {label && <div className={styles.drawerSectionLabel}>{label}</div>}\n <div className={styles.drawerNav}>{children}</div>\n </div>\n );\n}\n\n// ============================================\n// Mobile Hamburger Button\n// ============================================\n\nfunction MobileHamburger() {\n const { mobileOpen, setMobileOpen } = useNavigationMenuContext();\n\n return (\n <button\n type=\"button\"\n className={styles.hamburger}\n onClick={() => setMobileOpen(!mobileOpen)}\n aria-label=\"Toggle navigation\"\n aria-expanded={mobileOpen}\n >\n {mobileOpen ? <X size={24} aria-hidden /> : <List size={24} aria-hidden />}\n </button>\n );\n}\n\n// ============================================\n// Mobile Drawer\n// ============================================\n\nfunction MobileDrawer() {\n const ctx = useNavigationMenuContext();\n const drawerRef = React.useRef<HTMLDivElement>(null);\n\n useFocusTrap(drawerRef, true);\n\n // Lock body scroll\n React.useEffect(() => {\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = '';\n };\n }, []);\n\n // Handle Escape\n React.useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n ctx.setMobileOpen(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [ctx]);\n\n // Build auto-converted nav items from item info registry\n const autoItems: NavigationMenuItemInfo[] = [];\n for (const value of ctx.itemOrder.current) {\n const info = ctx.itemInfoMap.current.get(value);\n if (info) autoItems.push(info);\n }\n\n const handleLinkClick = () => {\n ctx.setMobileOpen(false);\n };\n\n const drawerContent = (\n <>\n <div\n className={styles.drawerBackdrop}\n onClick={() => ctx.setMobileOpen(false)}\n aria-hidden\n />\n <div\n ref={drawerRef}\n className={styles.drawer}\n role=\"dialog\"\n aria-modal\n aria-label=\"Navigation\"\n >\n <div className={styles.drawerHeader}>\n {ctx.mobileBrandChildren ?? <span />}\n <button\n type=\"button\"\n className={styles.drawerClose}\n onClick={() => ctx.setMobileOpen(false)}\n aria-label=\"Close navigation\"\n >\n <X size={20} aria-hidden />\n </button>\n </div>\n <ScrollArea orientation=\"vertical\" className={styles.drawerBody}>\n {/* When MobileContent is provided, it takes full control of the drawer nav.\n Otherwise, auto-convert registered Trigger+Content items. */}\n {ctx.mobileContentChildren ? (\n ctx.mobileContentChildren\n ) : (\n <div className={styles.drawerNav}>\n {autoItems.map((item) =>\n item.contentChildren ? (\n <MobileCollapsibleSection\n key={item.value}\n label={item.triggerLabel}\n onLinkClick={handleLinkClick}\n >\n {item.contentChildren}\n </MobileCollapsibleSection>\n ) : item.linkHref ? (\n <a\n key={item.value}\n className={styles.drawerLink}\n href={item.linkHref}\n onClick={handleLinkClick}\n >\n {item.triggerLabel}\n </a>\n ) : null\n )}\n </div>\n )}\n </ScrollArea>\n </div>\n </>\n );\n\n if (typeof document === 'undefined') return null;\n return createPortal(drawerContent, document.body);\n}\n\n// ============================================\n// Mobile Collapsible Section (auto-converted)\n// ============================================\n\nfunction MobileCollapsibleSection({\n label,\n children,\n onLinkClick,\n}: {\n label: string;\n children: React.ReactNode;\n onLinkClick: () => void;\n}) {\n return (\n <Collapsible defaultOpen={false}>\n <Collapsible.Trigger className={styles.drawerCollapsibleTrigger}>\n {label}\n </Collapsible.Trigger>\n <Collapsible.Content>\n <div\n className={styles.drawerCollapsibleContent}\n onClick={onLinkClick}\n onKeyDown={(e) => { if (e.key === 'Enter') onLinkClick(); }}\n role=\"group\"\n >\n {children}\n </div>\n </Collapsible.Content>\n </Collapsible>\n );\n}\n\n// ============================================\n// Export Compound Component\n// ============================================\n\nexport const NavigationMenu = Object.assign(NavigationMenuRoot, {\n List: NavigationMenuList,\n Item: NavigationMenuItem,\n Trigger: NavigationMenuTrigger,\n Content: NavigationMenuContent,\n Link: NavigationMenuLink,\n Indicator: NavigationMenuIndicator,\n Viewport: NavigationMenuViewport,\n MobileBrand: NavigationMenuMobileBrand,\n MobileContent: NavigationMenuMobileContent,\n MobileSection: NavigationMenuMobileSection,\n});\n\nexport {\n NavigationMenuRoot,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuTrigger,\n NavigationMenuContent,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n NavigationMenuMobileBrand,\n NavigationMenuMobileContent,\n NavigationMenuMobileSection,\n};\n"],"names":["classes","linkProps"],"mappings":"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"}