@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
@@ -71,11 +71,11 @@ function MenuRoot({
71
71
  }
72
72
  );
73
73
  }
74
- function MenuTrigger({ children, asChild, className }) {
74
+ function MenuTrigger({ children, asChild, className, ...htmlProps }) {
75
75
  if (asChild) {
76
- return /* @__PURE__ */ jsxRuntime.jsx(menu.Menu.Trigger, { className, render: children, children: null });
76
+ return /* @__PURE__ */ jsxRuntime.jsx(menu.Menu.Trigger, { ...htmlProps, className, render: children, children: null });
77
77
  }
78
- return /* @__PURE__ */ jsxRuntime.jsx(menu.Menu.Trigger, { className, children });
78
+ return /* @__PURE__ */ jsxRuntime.jsx(menu.Menu.Trigger, { ...htmlProps, className, children });
79
79
  }
80
80
  function MenuContent({
81
81
  children,
@@ -105,8 +105,17 @@ function MenuItem({
105
105
  className,
106
106
  icon,
107
107
  shortcut,
108
- checked
108
+ checked,
109
+ ...htmlProps
109
110
  }) {
111
+ const handleClick = React__namespace.useCallback(
112
+ (event) => {
113
+ var _a;
114
+ (_a = htmlProps.onClick) == null ? void 0 : _a.call(htmlProps, event);
115
+ onSelect == null ? void 0 : onSelect(event);
116
+ },
117
+ [htmlProps, onSelect]
118
+ );
110
119
  const hasChecked = checked !== void 0;
111
120
  const classes = [
112
121
  Menu_module.default.item,
@@ -116,8 +125,9 @@ function MenuItem({
116
125
  return /* @__PURE__ */ jsxRuntime.jsxs(
117
126
  menu.Menu.Item,
118
127
  {
128
+ ...htmlProps,
119
129
  disabled,
120
- onClick: onSelect,
130
+ onClick: handleClick,
121
131
  className: classes,
122
132
  children: [
123
133
  hasChecked && /* @__PURE__ */ jsxRuntime.jsx("span", { className: Menu_module.default.checkIndicator, children: checked ? /* @__PURE__ */ jsxRuntime.jsx(CheckmarkIcon, {}) : null }),
@@ -134,7 +144,8 @@ function MenuCheckboxItem({
134
144
  defaultChecked,
135
145
  onCheckedChange,
136
146
  disabled,
137
- className
147
+ className,
148
+ ...htmlProps
138
149
  }) {
139
150
  const isControlled = checkedProp !== void 0;
140
151
  const [internalChecked, setInternalChecked] = React__namespace.useState(defaultChecked ?? false);
@@ -150,6 +161,7 @@ function MenuCheckboxItem({
150
161
  return /* @__PURE__ */ jsxRuntime.jsxs(
151
162
  menu.Menu.CheckboxItem,
152
163
  {
164
+ ...htmlProps,
153
165
  checked: checkedProp,
154
166
  defaultChecked,
155
167
  onCheckedChange: handleCheckedChange,
@@ -182,25 +194,26 @@ function MenuRadioItem({
182
194
  children,
183
195
  value,
184
196
  disabled,
185
- className
197
+ className,
198
+ ...htmlProps
186
199
  }) {
187
200
  const classes = [Menu_module.default.item, Menu_module.default.radioItem, className].filter(Boolean).join(" ");
188
- return /* @__PURE__ */ jsxRuntime.jsxs(menu.Menu.RadioItem, { value, disabled, className: classes, children: [
201
+ return /* @__PURE__ */ jsxRuntime.jsxs(menu.Menu.RadioItem, { ...htmlProps, value, disabled, className: classes, children: [
189
202
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: Menu_module.default.radioIndicator, children: /* @__PURE__ */ jsxRuntime.jsx(DotIcon, {}) }),
190
203
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: Menu_module.default.itemLabel, children })
191
204
  ] });
192
205
  }
193
- function MenuGroup({ children, className }) {
206
+ function MenuGroup({ children, className, ...htmlProps }) {
194
207
  const classes = [Menu_module.default.group, className].filter(Boolean).join(" ");
195
- return /* @__PURE__ */ jsxRuntime.jsx(menu.Menu.Group, { className: classes, children });
208
+ return /* @__PURE__ */ jsxRuntime.jsx(menu.Menu.Group, { ...htmlProps, className: classes, children });
196
209
  }
197
- function MenuGroupLabel({ children, className }) {
210
+ function MenuGroupLabel({ children, className, ...htmlProps }) {
198
211
  const classes = [Menu_module.default.groupLabel, className].filter(Boolean).join(" ");
199
- return /* @__PURE__ */ jsxRuntime.jsx(menu.Menu.GroupLabel, { className: classes, children });
212
+ return /* @__PURE__ */ jsxRuntime.jsx(menu.Menu.GroupLabel, { ...htmlProps, className: classes, children });
200
213
  }
201
- function MenuSeparator({ className }) {
214
+ function MenuSeparator({ className, ...htmlProps }) {
202
215
  const classes = [Menu_module.default.separator, className].filter(Boolean).join(" ");
203
- return /* @__PURE__ */ jsxRuntime.jsx(menu.Menu.Separator, { className: classes });
216
+ return /* @__PURE__ */ jsxRuntime.jsx(menu.Menu.Separator, { ...htmlProps, className: classes });
204
217
  }
205
218
  function MenuSubmenu({
206
219
  children,
@@ -222,10 +235,11 @@ function MenuSubmenuTrigger({
222
235
  children,
223
236
  disabled,
224
237
  className,
225
- icon
238
+ icon,
239
+ ...htmlProps
226
240
  }) {
227
241
  const classes = [Menu_module.default.item, Menu_module.default.submenuTrigger, className].filter(Boolean).join(" ");
228
- return /* @__PURE__ */ jsxRuntime.jsxs(menu.Menu.SubmenuTrigger, { disabled, className: classes, children: [
242
+ return /* @__PURE__ */ jsxRuntime.jsxs(menu.Menu.SubmenuTrigger, { ...htmlProps, disabled, className: classes, children: [
229
243
  icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: Menu_module.default.itemIcon, children: icon }),
230
244
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: Menu_module.default.itemLabel, children })
231
245
  ] });
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/components/Menu/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Menu as BaseMenu } from '@base-ui/react/menu';\nimport styles from './Menu.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface MenuProps {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n modal?: boolean;\n}\n\nexport interface MenuTriggerProps {\n children: React.ReactNode;\n asChild?: boolean;\n className?: string;\n}\n\nexport interface MenuContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n side?: 'top' | 'bottom' | 'left' | 'right';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n}\n\nexport interface MenuItemProps {\n children: React.ReactNode;\n disabled?: boolean;\n danger?: boolean;\n onSelect?: () => void;\n className?: string;\n icon?: React.ReactNode;\n shortcut?: string;\n /** When passed, renders a check indicator. `true` shows a checkmark, `false` reserves space. */\n checked?: boolean;\n}\n\nexport interface MenuCheckboxItemProps {\n children: React.ReactNode;\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n className?: string;\n}\n\nexport interface MenuRadioGroupProps {\n children: React.ReactNode;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport interface MenuRadioItemProps {\n children: React.ReactNode;\n value: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport interface MenuGroupProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface MenuGroupLabelProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface MenuSeparatorProps {\n className?: string;\n}\n\nexport interface MenuSubmenuProps {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport interface MenuSubmenuTriggerProps {\n children: React.ReactNode;\n disabled?: boolean;\n className?: string;\n icon?: React.ReactNode;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction CheckmarkIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M5 13l4 4L19 7\" />\n </svg>\n );\n}\n\nfunction DotIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n </svg>\n );\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction MenuRoot({\n children,\n open,\n defaultOpen,\n onOpenChange,\n modal = true,\n}: MenuProps) {\n return (\n <BaseMenu.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n modal={modal}\n >\n {children}\n </BaseMenu.Root>\n );\n}\n\nfunction MenuTrigger({ children, asChild, className }: MenuTriggerProps) {\n if (asChild) {\n return (\n <BaseMenu.Trigger className={className} render={children as React.ReactElement}>\n {null}\n </BaseMenu.Trigger>\n );\n }\n\n return (\n <BaseMenu.Trigger className={className}>\n {children}\n </BaseMenu.Trigger>\n );\n}\n\nfunction MenuContent({\n children,\n className,\n side = 'bottom',\n align = 'start',\n sideOffset = 4,\n ...htmlProps\n}: MenuContentProps) {\n const popupClasses = [styles.popup, className].filter(Boolean).join(' ');\n\n return (\n <BaseMenu.Portal>\n <BaseMenu.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n className={styles.positioner}\n >\n <BaseMenu.Popup {...htmlProps} className={popupClasses}>\n {children}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n );\n}\n\nfunction MenuItem({\n children,\n disabled,\n danger,\n onSelect,\n className,\n icon,\n shortcut,\n checked,\n}: MenuItemProps) {\n const hasChecked = checked !== undefined;\n const classes = [\n styles.item,\n danger && styles.itemDanger,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <BaseMenu.Item\n disabled={disabled}\n onClick={onSelect}\n className={classes}\n >\n {hasChecked && (\n <span className={styles.checkIndicator}>\n {checked ? <CheckmarkIcon /> : null}\n </span>\n )}\n {icon && <span className={styles.itemIcon}>{icon}</span>}\n <span className={styles.itemLabel}>{children}</span>\n {shortcut && <span className={styles.itemShortcut}>{shortcut}</span>}\n </BaseMenu.Item>\n );\n}\n\nfunction MenuCheckboxItem({\n children,\n checked: checkedProp,\n defaultChecked,\n onCheckedChange,\n disabled,\n className,\n}: MenuCheckboxItemProps) {\n const isControlled = checkedProp !== undefined;\n const [internalChecked, setInternalChecked] = React.useState(defaultChecked ?? false);\n const visualChecked = isControlled ? checkedProp : internalChecked;\n\n const handleCheckedChange = React.useCallback(\n (value: boolean) => {\n if (!isControlled) setInternalChecked(value);\n onCheckedChange?.(value);\n },\n [isControlled, onCheckedChange],\n );\n\n const classes = [styles.item, styles.checkboxItem, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <BaseMenu.CheckboxItem\n checked={checkedProp}\n defaultChecked={defaultChecked}\n onCheckedChange={handleCheckedChange}\n disabled={disabled}\n className={classes}\n >\n <span className={styles.checkIndicator}>\n {visualChecked ? <CheckmarkIcon /> : null}\n </span>\n <span className={styles.itemLabel}>{children}</span>\n </BaseMenu.CheckboxItem>\n );\n}\n\nfunction MenuRadioGroup({\n children,\n value,\n defaultValue,\n onValueChange,\n}: MenuRadioGroupProps) {\n return (\n <BaseMenu.RadioGroup\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n >\n {children}\n </BaseMenu.RadioGroup>\n );\n}\n\nfunction MenuRadioItem({\n children,\n value,\n disabled,\n className,\n}: MenuRadioItemProps) {\n const classes = [styles.item, styles.radioItem, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <BaseMenu.RadioItem value={value} disabled={disabled} className={classes}>\n <span className={styles.radioIndicator}>\n <DotIcon />\n </span>\n <span className={styles.itemLabel}>{children}</span>\n </BaseMenu.RadioItem>\n );\n}\n\nfunction MenuGroup({ children, className }: MenuGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseMenu.Group className={classes}>{children}</BaseMenu.Group>;\n}\n\nfunction MenuGroupLabel({ children, className }: MenuGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseMenu.GroupLabel className={classes}>{children}</BaseMenu.GroupLabel>;\n}\n\nfunction MenuSeparator({ className }: MenuSeparatorProps) {\n const classes = [styles.separator, className].filter(Boolean).join(' ');\n return <BaseMenu.Separator className={classes} />;\n}\n\nfunction MenuSubmenu({\n children,\n open,\n defaultOpen,\n onOpenChange,\n}: MenuSubmenuProps) {\n return (\n <BaseMenu.SubmenuRoot\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange as any}\n >\n {children}\n </BaseMenu.SubmenuRoot>\n );\n}\n\nfunction MenuSubmenuTrigger({\n children,\n disabled,\n className,\n icon,\n}: MenuSubmenuTriggerProps) {\n const classes = [styles.item, styles.submenuTrigger, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <BaseMenu.SubmenuTrigger disabled={disabled} className={classes}>\n {icon && <span className={styles.itemIcon}>{icon}</span>}\n <span className={styles.itemLabel}>{children}</span>\n </BaseMenu.SubmenuTrigger>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Menu = Object.assign(MenuRoot, {\n Trigger: MenuTrigger,\n Content: MenuContent,\n Item: MenuItem,\n CheckboxItem: MenuCheckboxItem,\n RadioGroup: MenuRadioGroup,\n RadioItem: MenuRadioItem,\n Group: MenuGroup,\n GroupLabel: MenuGroupLabel,\n Separator: MenuSeparator,\n Submenu: MenuSubmenu,\n SubmenuTrigger: MenuSubmenuTrigger,\n});\n\n// Re-export individual components\nexport {\n MenuRoot,\n MenuTrigger,\n MenuContent,\n MenuItem,\n MenuCheckboxItem,\n MenuRadioGroup,\n MenuRadioItem,\n MenuGroup,\n MenuGroupLabel,\n MenuSeparator,\n MenuSubmenu,\n MenuSubmenuTrigger,\n};\n"],"names":["jsx","BaseMenu","styles","jsxs","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAkGA,SAAS,gBAAgB;AACvB,SACEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAa;AAAA,MACb,eAAc;AAAA,MACd,gBAAe;AAAA,MACf,eAAY;AAAA,MAEZ,UAAAA,2BAAAA,IAAC,QAAA,EAAK,GAAE,iBAAA,CAAiB;AAAA,IAAA;AAAA,EAAA;AAG/B;AAEA,SAAS,UAAU;AACjB,SACEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MAEZ,yCAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,IAAA,CAAI;AAAA,IAAA;AAAA,EAAA;AAGpC;AAMA,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AACV,GAAc;AACZ,SACEA,2BAAAA;AAAAA,IAACC,KAAAA,KAAS;AAAA,IAAT;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAAS,YAAY,EAAE,UAAU,SAAS,aAA+B;AACvE,MAAI,SAAS;AACX,0CACGA,UAAS,SAAT,EAAiB,WAAsB,QAAQ,UAC7C,UAAA,MACH;AAAA,EAEJ;AAEA,SACED,2BAAAA,IAACC,KAAAA,KAAS,SAAT,EAAiB,WACf,SAAA,CACH;AAEJ;AAEA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,GAAG;AACL,GAAqB;AACnB,QAAM,eAAe,CAACC,YAAAA,QAAO,OAAO,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEvE,SACEF,2BAAAA,IAACC,KAAAA,KAAS,QAAT,EACC,UAAAD,2BAAAA;AAAAA,IAACC,KAAAA,KAAS;AAAA,IAAT;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAWC,YAAAA,QAAO;AAAA,MAElB,UAAAF,2BAAAA,IAACC,KAAAA,KAAS,OAAT,EAAgB,GAAG,WAAW,WAAW,cACvC,SAAA,CACH;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAEA,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkB;AAChB,QAAM,aAAa,YAAY;AAC/B,QAAM,UAAU;AAAA,IACdC,YAAAA,QAAO;AAAA,IACP,UAAUA,YAAAA,QAAO;AAAA,IACjB;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,SACEC,2BAAAA;AAAAA,IAACF,KAAAA,KAAS;AAAA,IAAT;AAAA,MACC;AAAA,MACA,SAAS;AAAA,MACT,WAAW;AAAA,MAEV,UAAA;AAAA,QAAA,cACCD,2BAAAA,IAAC,UAAK,WAAWE,YAAAA,QAAO,gBACrB,UAAA,UAAUF,2BAAAA,IAAC,eAAA,CAAA,CAAc,IAAK,KAAA,CACjC;AAAA,QAED,QAAQA,2BAAAA,IAAC,QAAA,EAAK,WAAWE,YAAAA,QAAO,UAAW,UAAA,MAAK;AAAA,QACjDF,2BAAAA,IAAC,QAAA,EAAK,WAAWE,YAAAA,QAAO,WAAY,UAAS;AAAA,QAC5C,YAAYF,2BAAAA,IAAC,QAAA,EAAK,WAAWE,YAAAA,QAAO,cAAe,UAAA,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGnE;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,eAAe,gBAAgB;AACrC,QAAM,CAAC,iBAAiB,kBAAkB,IAAIE,iBAAM,SAAS,kBAAkB,KAAK;AACpF,QAAM,gBAAgB,eAAe,cAAc;AAEnD,QAAM,sBAAsBA,iBAAM;AAAA,IAChC,CAAC,UAAmB;AAClB,UAAI,CAAC,aAAc,oBAAmB,KAAK;AAC3C,yDAAkB;AAAA,IACpB;AAAA,IACA,CAAC,cAAc,eAAe;AAAA,EAAA;AAGhC,QAAM,UAAU,CAACF,oBAAO,MAAMA,YAAAA,QAAO,cAAc,SAAS,EACzD,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACEC,2BAAAA;AAAAA,IAACF,KAAAA,KAAS;AAAA,IAAT;AAAA,MACC,SAAS;AAAA,MACT;AAAA,MACA,iBAAiB;AAAA,MACjB;AAAA,MACA,WAAW;AAAA,MAEX,UAAA;AAAA,QAAAD,2BAAAA,IAAC,QAAA,EAAK,WAAWE,YAAAA,QAAO,gBACrB,0BAAgBF,2BAAAA,IAAC,eAAA,EAAc,IAAK,KAAA,CACvC;AAAA,QACAA,2BAAAA,IAAC,QAAA,EAAK,WAAWE,YAAAA,QAAO,WAAY,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGnD;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwB;AACtB,SACEF,2BAAAA;AAAAA,IAACC,KAAAA,KAAS;AAAA,IAAT;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAuB;AACrB,QAAM,UAAU,CAACC,oBAAO,MAAMA,YAAAA,QAAO,WAAW,SAAS,EACtD,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,yCACGD,KAAAA,KAAS,WAAT,EAAmB,OAAc,UAAoB,WAAW,SAC/D,UAAA;AAAA,IAAAD,2BAAAA,IAAC,UAAK,WAAWE,oBAAO,gBACtB,UAAAF,+BAAC,WAAQ,GACX;AAAA,IACAA,2BAAAA,IAAC,QAAA,EAAK,WAAWE,YAAAA,QAAO,WAAY,SAAA,CAAS;AAAA,EAAA,GAC/C;AAEJ;AAEA,SAAS,UAAU,EAAE,UAAU,aAA6B;AAC1D,QAAM,UAAU,CAACA,YAAAA,QAAO,OAAO,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAClE,wCAAQD,KAAAA,KAAS,OAAT,EAAe,WAAW,SAAU,UAAS;AACvD;AAEA,SAAS,eAAe,EAAE,UAAU,aAAkC;AACpE,QAAM,UAAU,CAACC,YAAAA,QAAO,YAAY,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACvE,wCAAQD,KAAAA,KAAS,YAAT,EAAoB,WAAW,SAAU,UAAS;AAC5D;AAEA,SAAS,cAAc,EAAE,aAAiC;AACxD,QAAM,UAAU,CAACC,YAAAA,QAAO,WAAW,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACtE,SAAOF,2BAAAA,IAACC,KAAAA,KAAS,WAAT,EAAmB,WAAW,QAAA,CAAS;AACjD;AAEA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,SACED,2BAAAA;AAAAA,IAACC,KAAAA,KAAS;AAAA,IAAT;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAC1B,QAAM,UAAU,CAACC,oBAAO,MAAMA,YAAAA,QAAO,gBAAgB,SAAS,EAC3D,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,yCACGD,KAAAA,KAAS,gBAAT,EAAwB,UAAoB,WAAW,SACrD,UAAA;AAAA,IAAA,QAAQD,2BAAAA,IAAC,QAAA,EAAK,WAAWE,YAAAA,QAAO,UAAW,UAAA,MAAK;AAAA,IACjDF,2BAAAA,IAAC,QAAA,EAAK,WAAWE,YAAAA,QAAO,WAAY,SAAA,CAAS;AAAA,EAAA,GAC/C;AAEJ;AAMO,MAAM,OAAO,OAAO,OAAO,UAAU;AAAA,EAC1C,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AAAA,EACN,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,SAAS;AAAA,EACT,gBAAgB;AAClB,CAAC;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/Menu/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Menu as BaseMenu } from '@base-ui/react/menu';\nimport styles from './Menu.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface MenuProps {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n modal?: boolean;\n}\n\nexport interface MenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n asChild?: boolean;\n}\n\nexport interface MenuContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n side?: 'top' | 'bottom' | 'left' | 'right';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n}\n\nexport interface MenuItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children' | 'onSelect'> {\n children: React.ReactNode;\n disabled?: boolean;\n danger?: boolean;\n onSelect?: (...args: any[]) => void;\n icon?: React.ReactNode;\n shortcut?: string;\n /** When passed, renders a check indicator. `true` shows a checkmark, `false` reserves space. */\n checked?: boolean;\n}\n\nexport interface MenuCheckboxItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children' | 'onChange'> {\n children: React.ReactNode;\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n}\n\nexport interface MenuRadioGroupProps {\n children: React.ReactNode;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport interface MenuRadioItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n children: React.ReactNode;\n value: string;\n disabled?: boolean;\n}\n\nexport interface MenuGroupProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface MenuGroupLabelProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface MenuSeparatorProps extends React.HTMLAttributes<HTMLElement> {}\n\nexport interface MenuSubmenuProps {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport interface MenuSubmenuTriggerProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction CheckmarkIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M5 13l4 4L19 7\" />\n </svg>\n );\n}\n\nfunction DotIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n </svg>\n );\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction MenuRoot({\n children,\n open,\n defaultOpen,\n onOpenChange,\n modal = true,\n}: MenuProps) {\n return (\n <BaseMenu.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n modal={modal}\n >\n {children}\n </BaseMenu.Root>\n );\n}\n\nfunction MenuTrigger({ children, asChild, className, ...htmlProps }: MenuTriggerProps) {\n if (asChild) {\n return (\n <BaseMenu.Trigger {...htmlProps} className={className} render={children as React.ReactElement}>\n {null}\n </BaseMenu.Trigger>\n );\n }\n\n return (\n <BaseMenu.Trigger {...htmlProps} className={className}>\n {children}\n </BaseMenu.Trigger>\n );\n}\n\nfunction MenuContent({\n children,\n className,\n side = 'bottom',\n align = 'start',\n sideOffset = 4,\n ...htmlProps\n}: MenuContentProps) {\n const popupClasses = [styles.popup, className].filter(Boolean).join(' ');\n\n return (\n <BaseMenu.Portal>\n <BaseMenu.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n className={styles.positioner}\n >\n <BaseMenu.Popup {...htmlProps} className={popupClasses}>\n {children}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n );\n}\n\nfunction MenuItem({\n children,\n disabled,\n danger,\n onSelect,\n className,\n icon,\n shortcut,\n checked,\n ...htmlProps\n}: MenuItemProps) {\n const handleClick = React.useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n (htmlProps.onClick as React.MouseEventHandler<HTMLElement> | undefined)?.(event);\n onSelect?.(event);\n },\n [htmlProps, onSelect],\n );\n\n const hasChecked = checked !== undefined;\n const classes = [\n styles.item,\n danger && styles.itemDanger,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <BaseMenu.Item\n {...htmlProps}\n disabled={disabled}\n onClick={handleClick as any}\n className={classes}\n >\n {hasChecked && (\n <span className={styles.checkIndicator}>\n {checked ? <CheckmarkIcon /> : null}\n </span>\n )}\n {icon && <span className={styles.itemIcon}>{icon}</span>}\n <span className={styles.itemLabel}>{children}</span>\n {shortcut && <span className={styles.itemShortcut}>{shortcut}</span>}\n </BaseMenu.Item>\n );\n}\n\nfunction MenuCheckboxItem({\n children,\n checked: checkedProp,\n defaultChecked,\n onCheckedChange,\n disabled,\n className,\n ...htmlProps\n}: MenuCheckboxItemProps) {\n const isControlled = checkedProp !== undefined;\n const [internalChecked, setInternalChecked] = React.useState(defaultChecked ?? false);\n const visualChecked = isControlled ? checkedProp : internalChecked;\n\n const handleCheckedChange = React.useCallback(\n (value: boolean) => {\n if (!isControlled) setInternalChecked(value);\n onCheckedChange?.(value);\n },\n [isControlled, onCheckedChange],\n );\n\n const classes = [styles.item, styles.checkboxItem, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <BaseMenu.CheckboxItem\n {...htmlProps}\n checked={checkedProp}\n defaultChecked={defaultChecked}\n onCheckedChange={handleCheckedChange}\n disabled={disabled}\n className={classes}\n >\n <span className={styles.checkIndicator}>\n {visualChecked ? <CheckmarkIcon /> : null}\n </span>\n <span className={styles.itemLabel}>{children}</span>\n </BaseMenu.CheckboxItem>\n );\n}\n\nfunction MenuRadioGroup({\n children,\n value,\n defaultValue,\n onValueChange,\n}: MenuRadioGroupProps) {\n return (\n <BaseMenu.RadioGroup\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n >\n {children}\n </BaseMenu.RadioGroup>\n );\n}\n\nfunction MenuRadioItem({\n children,\n value,\n disabled,\n className,\n ...htmlProps\n}: MenuRadioItemProps) {\n const classes = [styles.item, styles.radioItem, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <BaseMenu.RadioItem {...htmlProps} value={value} disabled={disabled} className={classes}>\n <span className={styles.radioIndicator}>\n <DotIcon />\n </span>\n <span className={styles.itemLabel}>{children}</span>\n </BaseMenu.RadioItem>\n );\n}\n\nfunction MenuGroup({ children, className, ...htmlProps }: MenuGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseMenu.Group {...htmlProps} className={classes}>{children}</BaseMenu.Group>;\n}\n\nfunction MenuGroupLabel({ children, className, ...htmlProps }: MenuGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseMenu.GroupLabel {...htmlProps} className={classes}>{children}</BaseMenu.GroupLabel>;\n}\n\nfunction MenuSeparator({ className, ...htmlProps }: MenuSeparatorProps) {\n const classes = [styles.separator, className].filter(Boolean).join(' ');\n return <BaseMenu.Separator {...htmlProps} className={classes} />;\n}\n\nfunction MenuSubmenu({\n children,\n open,\n defaultOpen,\n onOpenChange,\n}: MenuSubmenuProps) {\n return (\n <BaseMenu.SubmenuRoot\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange as any}\n >\n {children}\n </BaseMenu.SubmenuRoot>\n );\n}\n\nfunction MenuSubmenuTrigger({\n children,\n disabled,\n className,\n icon,\n ...htmlProps\n}: MenuSubmenuTriggerProps) {\n const classes = [styles.item, styles.submenuTrigger, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <BaseMenu.SubmenuTrigger {...htmlProps} disabled={disabled} className={classes}>\n {icon && <span className={styles.itemIcon}>{icon}</span>}\n <span className={styles.itemLabel}>{children}</span>\n </BaseMenu.SubmenuTrigger>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Menu = Object.assign(MenuRoot, {\n Trigger: MenuTrigger,\n Content: MenuContent,\n Item: MenuItem,\n CheckboxItem: MenuCheckboxItem,\n RadioGroup: MenuRadioGroup,\n RadioItem: MenuRadioItem,\n Group: MenuGroup,\n GroupLabel: MenuGroupLabel,\n Separator: MenuSeparator,\n Submenu: MenuSubmenu,\n SubmenuTrigger: MenuSubmenuTrigger,\n});\n\n// Re-export individual components\nexport {\n MenuRoot,\n MenuTrigger,\n MenuContent,\n MenuItem,\n MenuCheckboxItem,\n MenuRadioGroup,\n MenuRadioItem,\n MenuGroup,\n MenuGroupLabel,\n MenuSeparator,\n MenuSubmenu,\n MenuSubmenuTrigger,\n};\n"],"names":["jsx","BaseMenu","styles","React","jsxs"],"mappings":"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"}
@@ -6,10 +6,9 @@ export interface MenuProps {
6
6
  onOpenChange?: (open: boolean) => void;
7
7
  modal?: boolean;
8
8
  }
9
- export interface MenuTriggerProps {
9
+ export interface MenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
10
10
  children: React.ReactNode;
11
11
  asChild?: boolean;
12
- className?: string;
13
12
  }
14
13
  export interface MenuContentProps extends React.HTMLAttributes<HTMLDivElement> {
15
14
  children: React.ReactNode;
@@ -17,24 +16,22 @@ export interface MenuContentProps extends React.HTMLAttributes<HTMLDivElement> {
17
16
  align?: 'start' | 'center' | 'end';
18
17
  sideOffset?: number;
19
18
  }
20
- export interface MenuItemProps {
19
+ export interface MenuItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children' | 'onSelect'> {
21
20
  children: React.ReactNode;
22
21
  disabled?: boolean;
23
22
  danger?: boolean;
24
- onSelect?: () => void;
25
- className?: string;
23
+ onSelect?: (...args: any[]) => void;
26
24
  icon?: React.ReactNode;
27
25
  shortcut?: string;
28
26
  /** When passed, renders a check indicator. `true` shows a checkmark, `false` reserves space. */
29
27
  checked?: boolean;
30
28
  }
31
- export interface MenuCheckboxItemProps {
29
+ export interface MenuCheckboxItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children' | 'onChange'> {
32
30
  children: React.ReactNode;
33
31
  checked?: boolean;
34
32
  defaultChecked?: boolean;
35
33
  onCheckedChange?: (checked: boolean) => void;
36
34
  disabled?: boolean;
37
- className?: string;
38
35
  }
39
36
  export interface MenuRadioGroupProps {
40
37
  children: React.ReactNode;
@@ -42,22 +39,18 @@ export interface MenuRadioGroupProps {
42
39
  defaultValue?: string;
43
40
  onValueChange?: (value: string) => void;
44
41
  }
45
- export interface MenuRadioItemProps {
42
+ export interface MenuRadioItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
46
43
  children: React.ReactNode;
47
44
  value: string;
48
45
  disabled?: boolean;
49
- className?: string;
50
46
  }
51
- export interface MenuGroupProps {
47
+ export interface MenuGroupProps extends React.HTMLAttributes<HTMLElement> {
52
48
  children: React.ReactNode;
53
- className?: string;
54
49
  }
55
- export interface MenuGroupLabelProps {
50
+ export interface MenuGroupLabelProps extends React.HTMLAttributes<HTMLElement> {
56
51
  children: React.ReactNode;
57
- className?: string;
58
52
  }
59
- export interface MenuSeparatorProps {
60
- className?: string;
53
+ export interface MenuSeparatorProps extends React.HTMLAttributes<HTMLElement> {
61
54
  }
62
55
  export interface MenuSubmenuProps {
63
56
  children: React.ReactNode;
@@ -65,24 +58,23 @@ export interface MenuSubmenuProps {
65
58
  defaultOpen?: boolean;
66
59
  onOpenChange?: (open: boolean) => void;
67
60
  }
68
- export interface MenuSubmenuTriggerProps {
61
+ export interface MenuSubmenuTriggerProps extends React.HTMLAttributes<HTMLElement> {
69
62
  children: React.ReactNode;
70
63
  disabled?: boolean;
71
- className?: string;
72
64
  icon?: React.ReactNode;
73
65
  }
74
66
  declare function MenuRoot({ children, open, defaultOpen, onOpenChange, modal, }: MenuProps): import("react/jsx-runtime").JSX.Element;
75
- declare function MenuTrigger({ children, asChild, className }: MenuTriggerProps): import("react/jsx-runtime").JSX.Element;
67
+ declare function MenuTrigger({ children, asChild, className, ...htmlProps }: MenuTriggerProps): import("react/jsx-runtime").JSX.Element;
76
68
  declare function MenuContent({ children, className, side, align, sideOffset, ...htmlProps }: MenuContentProps): import("react/jsx-runtime").JSX.Element;
77
- declare function MenuItem({ children, disabled, danger, onSelect, className, icon, shortcut, checked, }: MenuItemProps): import("react/jsx-runtime").JSX.Element;
78
- declare function MenuCheckboxItem({ children, checked: checkedProp, defaultChecked, onCheckedChange, disabled, className, }: MenuCheckboxItemProps): import("react/jsx-runtime").JSX.Element;
69
+ declare function MenuItem({ children, disabled, danger, onSelect, className, icon, shortcut, checked, ...htmlProps }: MenuItemProps): import("react/jsx-runtime").JSX.Element;
70
+ declare function MenuCheckboxItem({ children, checked: checkedProp, defaultChecked, onCheckedChange, disabled, className, ...htmlProps }: MenuCheckboxItemProps): import("react/jsx-runtime").JSX.Element;
79
71
  declare function MenuRadioGroup({ children, value, defaultValue, onValueChange, }: MenuRadioGroupProps): import("react/jsx-runtime").JSX.Element;
80
- declare function MenuRadioItem({ children, value, disabled, className, }: MenuRadioItemProps): import("react/jsx-runtime").JSX.Element;
81
- declare function MenuGroup({ children, className }: MenuGroupProps): import("react/jsx-runtime").JSX.Element;
82
- declare function MenuGroupLabel({ children, className }: MenuGroupLabelProps): import("react/jsx-runtime").JSX.Element;
83
- declare function MenuSeparator({ className }: MenuSeparatorProps): import("react/jsx-runtime").JSX.Element;
72
+ declare function MenuRadioItem({ children, value, disabled, className, ...htmlProps }: MenuRadioItemProps): import("react/jsx-runtime").JSX.Element;
73
+ declare function MenuGroup({ children, className, ...htmlProps }: MenuGroupProps): import("react/jsx-runtime").JSX.Element;
74
+ declare function MenuGroupLabel({ children, className, ...htmlProps }: MenuGroupLabelProps): import("react/jsx-runtime").JSX.Element;
75
+ declare function MenuSeparator({ className, ...htmlProps }: MenuSeparatorProps): import("react/jsx-runtime").JSX.Element;
84
76
  declare function MenuSubmenu({ children, open, defaultOpen, onOpenChange, }: MenuSubmenuProps): import("react/jsx-runtime").JSX.Element;
85
- declare function MenuSubmenuTrigger({ children, disabled, className, icon, }: MenuSubmenuTriggerProps): import("react/jsx-runtime").JSX.Element;
77
+ declare function MenuSubmenuTrigger({ children, disabled, className, icon, ...htmlProps }: MenuSubmenuTriggerProps): import("react/jsx-runtime").JSX.Element;
86
78
  export declare const Menu: typeof MenuRoot & {
87
79
  Trigger: typeof MenuTrigger;
88
80
  Content: typeof MenuContent;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/index.tsx"],"names":[],"mappings":"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"}
@@ -52,11 +52,11 @@ function MenuRoot({
52
52
  }
53
53
  );
54
54
  }
55
- function MenuTrigger({ children, asChild, className }) {
55
+ function MenuTrigger({ children, asChild, className, ...htmlProps }) {
56
56
  if (asChild) {
57
- return /* @__PURE__ */ jsx(Menu$1.Trigger, { className, render: children, children: null });
57
+ return /* @__PURE__ */ jsx(Menu$1.Trigger, { ...htmlProps, className, render: children, children: null });
58
58
  }
59
- return /* @__PURE__ */ jsx(Menu$1.Trigger, { className, children });
59
+ return /* @__PURE__ */ jsx(Menu$1.Trigger, { ...htmlProps, className, children });
60
60
  }
61
61
  function MenuContent({
62
62
  children,
@@ -86,8 +86,17 @@ function MenuItem({
86
86
  className,
87
87
  icon,
88
88
  shortcut,
89
- checked
89
+ checked,
90
+ ...htmlProps
90
91
  }) {
92
+ const handleClick = React.useCallback(
93
+ (event) => {
94
+ var _a;
95
+ (_a = htmlProps.onClick) == null ? void 0 : _a.call(htmlProps, event);
96
+ onSelect == null ? void 0 : onSelect(event);
97
+ },
98
+ [htmlProps, onSelect]
99
+ );
91
100
  const hasChecked = checked !== void 0;
92
101
  const classes = [
93
102
  styles.item,
@@ -97,8 +106,9 @@ function MenuItem({
97
106
  return /* @__PURE__ */ jsxs(
98
107
  Menu$1.Item,
99
108
  {
109
+ ...htmlProps,
100
110
  disabled,
101
- onClick: onSelect,
111
+ onClick: handleClick,
102
112
  className: classes,
103
113
  children: [
104
114
  hasChecked && /* @__PURE__ */ jsx("span", { className: styles.checkIndicator, children: checked ? /* @__PURE__ */ jsx(CheckmarkIcon, {}) : null }),
@@ -115,7 +125,8 @@ function MenuCheckboxItem({
115
125
  defaultChecked,
116
126
  onCheckedChange,
117
127
  disabled,
118
- className
128
+ className,
129
+ ...htmlProps
119
130
  }) {
120
131
  const isControlled = checkedProp !== void 0;
121
132
  const [internalChecked, setInternalChecked] = React.useState(defaultChecked ?? false);
@@ -131,6 +142,7 @@ function MenuCheckboxItem({
131
142
  return /* @__PURE__ */ jsxs(
132
143
  Menu$1.CheckboxItem,
133
144
  {
145
+ ...htmlProps,
134
146
  checked: checkedProp,
135
147
  defaultChecked,
136
148
  onCheckedChange: handleCheckedChange,
@@ -163,25 +175,26 @@ function MenuRadioItem({
163
175
  children,
164
176
  value,
165
177
  disabled,
166
- className
178
+ className,
179
+ ...htmlProps
167
180
  }) {
168
181
  const classes = [styles.item, styles.radioItem, className].filter(Boolean).join(" ");
169
- return /* @__PURE__ */ jsxs(Menu$1.RadioItem, { value, disabled, className: classes, children: [
182
+ return /* @__PURE__ */ jsxs(Menu$1.RadioItem, { ...htmlProps, value, disabled, className: classes, children: [
170
183
  /* @__PURE__ */ jsx("span", { className: styles.radioIndicator, children: /* @__PURE__ */ jsx(DotIcon, {}) }),
171
184
  /* @__PURE__ */ jsx("span", { className: styles.itemLabel, children })
172
185
  ] });
173
186
  }
174
- function MenuGroup({ children, className }) {
187
+ function MenuGroup({ children, className, ...htmlProps }) {
175
188
  const classes = [styles.group, className].filter(Boolean).join(" ");
176
- return /* @__PURE__ */ jsx(Menu$1.Group, { className: classes, children });
189
+ return /* @__PURE__ */ jsx(Menu$1.Group, { ...htmlProps, className: classes, children });
177
190
  }
178
- function MenuGroupLabel({ children, className }) {
191
+ function MenuGroupLabel({ children, className, ...htmlProps }) {
179
192
  const classes = [styles.groupLabel, className].filter(Boolean).join(" ");
180
- return /* @__PURE__ */ jsx(Menu$1.GroupLabel, { className: classes, children });
193
+ return /* @__PURE__ */ jsx(Menu$1.GroupLabel, { ...htmlProps, className: classes, children });
181
194
  }
182
- function MenuSeparator({ className }) {
195
+ function MenuSeparator({ className, ...htmlProps }) {
183
196
  const classes = [styles.separator, className].filter(Boolean).join(" ");
184
- return /* @__PURE__ */ jsx(Menu$1.Separator, { className: classes });
197
+ return /* @__PURE__ */ jsx(Menu$1.Separator, { ...htmlProps, className: classes });
185
198
  }
186
199
  function MenuSubmenu({
187
200
  children,
@@ -203,10 +216,11 @@ function MenuSubmenuTrigger({
203
216
  children,
204
217
  disabled,
205
218
  className,
206
- icon
219
+ icon,
220
+ ...htmlProps
207
221
  }) {
208
222
  const classes = [styles.item, styles.submenuTrigger, className].filter(Boolean).join(" ");
209
- return /* @__PURE__ */ jsxs(Menu$1.SubmenuTrigger, { disabled, className: classes, children: [
223
+ return /* @__PURE__ */ jsxs(Menu$1.SubmenuTrigger, { ...htmlProps, disabled, className: classes, children: [
210
224
  icon && /* @__PURE__ */ jsx("span", { className: styles.itemIcon, children: icon }),
211
225
  /* @__PURE__ */ jsx("span", { className: styles.itemLabel, children })
212
226
  ] });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/Menu/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Menu as BaseMenu } from '@base-ui/react/menu';\nimport styles from './Menu.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface MenuProps {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n modal?: boolean;\n}\n\nexport interface MenuTriggerProps {\n children: React.ReactNode;\n asChild?: boolean;\n className?: string;\n}\n\nexport interface MenuContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n side?: 'top' | 'bottom' | 'left' | 'right';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n}\n\nexport interface MenuItemProps {\n children: React.ReactNode;\n disabled?: boolean;\n danger?: boolean;\n onSelect?: () => void;\n className?: string;\n icon?: React.ReactNode;\n shortcut?: string;\n /** When passed, renders a check indicator. `true` shows a checkmark, `false` reserves space. */\n checked?: boolean;\n}\n\nexport interface MenuCheckboxItemProps {\n children: React.ReactNode;\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n className?: string;\n}\n\nexport interface MenuRadioGroupProps {\n children: React.ReactNode;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport interface MenuRadioItemProps {\n children: React.ReactNode;\n value: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport interface MenuGroupProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface MenuGroupLabelProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface MenuSeparatorProps {\n className?: string;\n}\n\nexport interface MenuSubmenuProps {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport interface MenuSubmenuTriggerProps {\n children: React.ReactNode;\n disabled?: boolean;\n className?: string;\n icon?: React.ReactNode;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction CheckmarkIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M5 13l4 4L19 7\" />\n </svg>\n );\n}\n\nfunction DotIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n </svg>\n );\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction MenuRoot({\n children,\n open,\n defaultOpen,\n onOpenChange,\n modal = true,\n}: MenuProps) {\n return (\n <BaseMenu.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n modal={modal}\n >\n {children}\n </BaseMenu.Root>\n );\n}\n\nfunction MenuTrigger({ children, asChild, className }: MenuTriggerProps) {\n if (asChild) {\n return (\n <BaseMenu.Trigger className={className} render={children as React.ReactElement}>\n {null}\n </BaseMenu.Trigger>\n );\n }\n\n return (\n <BaseMenu.Trigger className={className}>\n {children}\n </BaseMenu.Trigger>\n );\n}\n\nfunction MenuContent({\n children,\n className,\n side = 'bottom',\n align = 'start',\n sideOffset = 4,\n ...htmlProps\n}: MenuContentProps) {\n const popupClasses = [styles.popup, className].filter(Boolean).join(' ');\n\n return (\n <BaseMenu.Portal>\n <BaseMenu.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n className={styles.positioner}\n >\n <BaseMenu.Popup {...htmlProps} className={popupClasses}>\n {children}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n );\n}\n\nfunction MenuItem({\n children,\n disabled,\n danger,\n onSelect,\n className,\n icon,\n shortcut,\n checked,\n}: MenuItemProps) {\n const hasChecked = checked !== undefined;\n const classes = [\n styles.item,\n danger && styles.itemDanger,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <BaseMenu.Item\n disabled={disabled}\n onClick={onSelect}\n className={classes}\n >\n {hasChecked && (\n <span className={styles.checkIndicator}>\n {checked ? <CheckmarkIcon /> : null}\n </span>\n )}\n {icon && <span className={styles.itemIcon}>{icon}</span>}\n <span className={styles.itemLabel}>{children}</span>\n {shortcut && <span className={styles.itemShortcut}>{shortcut}</span>}\n </BaseMenu.Item>\n );\n}\n\nfunction MenuCheckboxItem({\n children,\n checked: checkedProp,\n defaultChecked,\n onCheckedChange,\n disabled,\n className,\n}: MenuCheckboxItemProps) {\n const isControlled = checkedProp !== undefined;\n const [internalChecked, setInternalChecked] = React.useState(defaultChecked ?? false);\n const visualChecked = isControlled ? checkedProp : internalChecked;\n\n const handleCheckedChange = React.useCallback(\n (value: boolean) => {\n if (!isControlled) setInternalChecked(value);\n onCheckedChange?.(value);\n },\n [isControlled, onCheckedChange],\n );\n\n const classes = [styles.item, styles.checkboxItem, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <BaseMenu.CheckboxItem\n checked={checkedProp}\n defaultChecked={defaultChecked}\n onCheckedChange={handleCheckedChange}\n disabled={disabled}\n className={classes}\n >\n <span className={styles.checkIndicator}>\n {visualChecked ? <CheckmarkIcon /> : null}\n </span>\n <span className={styles.itemLabel}>{children}</span>\n </BaseMenu.CheckboxItem>\n );\n}\n\nfunction MenuRadioGroup({\n children,\n value,\n defaultValue,\n onValueChange,\n}: MenuRadioGroupProps) {\n return (\n <BaseMenu.RadioGroup\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n >\n {children}\n </BaseMenu.RadioGroup>\n );\n}\n\nfunction MenuRadioItem({\n children,\n value,\n disabled,\n className,\n}: MenuRadioItemProps) {\n const classes = [styles.item, styles.radioItem, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <BaseMenu.RadioItem value={value} disabled={disabled} className={classes}>\n <span className={styles.radioIndicator}>\n <DotIcon />\n </span>\n <span className={styles.itemLabel}>{children}</span>\n </BaseMenu.RadioItem>\n );\n}\n\nfunction MenuGroup({ children, className }: MenuGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseMenu.Group className={classes}>{children}</BaseMenu.Group>;\n}\n\nfunction MenuGroupLabel({ children, className }: MenuGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseMenu.GroupLabel className={classes}>{children}</BaseMenu.GroupLabel>;\n}\n\nfunction MenuSeparator({ className }: MenuSeparatorProps) {\n const classes = [styles.separator, className].filter(Boolean).join(' ');\n return <BaseMenu.Separator className={classes} />;\n}\n\nfunction MenuSubmenu({\n children,\n open,\n defaultOpen,\n onOpenChange,\n}: MenuSubmenuProps) {\n return (\n <BaseMenu.SubmenuRoot\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange as any}\n >\n {children}\n </BaseMenu.SubmenuRoot>\n );\n}\n\nfunction MenuSubmenuTrigger({\n children,\n disabled,\n className,\n icon,\n}: MenuSubmenuTriggerProps) {\n const classes = [styles.item, styles.submenuTrigger, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <BaseMenu.SubmenuTrigger disabled={disabled} className={classes}>\n {icon && <span className={styles.itemIcon}>{icon}</span>}\n <span className={styles.itemLabel}>{children}</span>\n </BaseMenu.SubmenuTrigger>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Menu = Object.assign(MenuRoot, {\n Trigger: MenuTrigger,\n Content: MenuContent,\n Item: MenuItem,\n CheckboxItem: MenuCheckboxItem,\n RadioGroup: MenuRadioGroup,\n RadioItem: MenuRadioItem,\n Group: MenuGroup,\n GroupLabel: MenuGroupLabel,\n Separator: MenuSeparator,\n Submenu: MenuSubmenu,\n SubmenuTrigger: MenuSubmenuTrigger,\n});\n\n// Re-export individual components\nexport {\n MenuRoot,\n MenuTrigger,\n MenuContent,\n MenuItem,\n MenuCheckboxItem,\n MenuRadioGroup,\n MenuRadioItem,\n MenuGroup,\n MenuGroupLabel,\n MenuSeparator,\n MenuSubmenu,\n MenuSubmenuTrigger,\n};\n"],"names":["BaseMenu"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Menu/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Menu as BaseMenu } from '@base-ui/react/menu';\nimport styles from './Menu.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface MenuProps {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n modal?: boolean;\n}\n\nexport interface MenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n asChild?: boolean;\n}\n\nexport interface MenuContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n side?: 'top' | 'bottom' | 'left' | 'right';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n}\n\nexport interface MenuItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children' | 'onSelect'> {\n children: React.ReactNode;\n disabled?: boolean;\n danger?: boolean;\n onSelect?: (...args: any[]) => void;\n icon?: React.ReactNode;\n shortcut?: string;\n /** When passed, renders a check indicator. `true` shows a checkmark, `false` reserves space. */\n checked?: boolean;\n}\n\nexport interface MenuCheckboxItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children' | 'onChange'> {\n children: React.ReactNode;\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n}\n\nexport interface MenuRadioGroupProps {\n children: React.ReactNode;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport interface MenuRadioItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n children: React.ReactNode;\n value: string;\n disabled?: boolean;\n}\n\nexport interface MenuGroupProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface MenuGroupLabelProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface MenuSeparatorProps extends React.HTMLAttributes<HTMLElement> {}\n\nexport interface MenuSubmenuProps {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport interface MenuSubmenuTriggerProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction CheckmarkIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M5 13l4 4L19 7\" />\n </svg>\n );\n}\n\nfunction DotIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n </svg>\n );\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction MenuRoot({\n children,\n open,\n defaultOpen,\n onOpenChange,\n modal = true,\n}: MenuProps) {\n return (\n <BaseMenu.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n modal={modal}\n >\n {children}\n </BaseMenu.Root>\n );\n}\n\nfunction MenuTrigger({ children, asChild, className, ...htmlProps }: MenuTriggerProps) {\n if (asChild) {\n return (\n <BaseMenu.Trigger {...htmlProps} className={className} render={children as React.ReactElement}>\n {null}\n </BaseMenu.Trigger>\n );\n }\n\n return (\n <BaseMenu.Trigger {...htmlProps} className={className}>\n {children}\n </BaseMenu.Trigger>\n );\n}\n\nfunction MenuContent({\n children,\n className,\n side = 'bottom',\n align = 'start',\n sideOffset = 4,\n ...htmlProps\n}: MenuContentProps) {\n const popupClasses = [styles.popup, className].filter(Boolean).join(' ');\n\n return (\n <BaseMenu.Portal>\n <BaseMenu.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n className={styles.positioner}\n >\n <BaseMenu.Popup {...htmlProps} className={popupClasses}>\n {children}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n );\n}\n\nfunction MenuItem({\n children,\n disabled,\n danger,\n onSelect,\n className,\n icon,\n shortcut,\n checked,\n ...htmlProps\n}: MenuItemProps) {\n const handleClick = React.useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n (htmlProps.onClick as React.MouseEventHandler<HTMLElement> | undefined)?.(event);\n onSelect?.(event);\n },\n [htmlProps, onSelect],\n );\n\n const hasChecked = checked !== undefined;\n const classes = [\n styles.item,\n danger && styles.itemDanger,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <BaseMenu.Item\n {...htmlProps}\n disabled={disabled}\n onClick={handleClick as any}\n className={classes}\n >\n {hasChecked && (\n <span className={styles.checkIndicator}>\n {checked ? <CheckmarkIcon /> : null}\n </span>\n )}\n {icon && <span className={styles.itemIcon}>{icon}</span>}\n <span className={styles.itemLabel}>{children}</span>\n {shortcut && <span className={styles.itemShortcut}>{shortcut}</span>}\n </BaseMenu.Item>\n );\n}\n\nfunction MenuCheckboxItem({\n children,\n checked: checkedProp,\n defaultChecked,\n onCheckedChange,\n disabled,\n className,\n ...htmlProps\n}: MenuCheckboxItemProps) {\n const isControlled = checkedProp !== undefined;\n const [internalChecked, setInternalChecked] = React.useState(defaultChecked ?? false);\n const visualChecked = isControlled ? checkedProp : internalChecked;\n\n const handleCheckedChange = React.useCallback(\n (value: boolean) => {\n if (!isControlled) setInternalChecked(value);\n onCheckedChange?.(value);\n },\n [isControlled, onCheckedChange],\n );\n\n const classes = [styles.item, styles.checkboxItem, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <BaseMenu.CheckboxItem\n {...htmlProps}\n checked={checkedProp}\n defaultChecked={defaultChecked}\n onCheckedChange={handleCheckedChange}\n disabled={disabled}\n className={classes}\n >\n <span className={styles.checkIndicator}>\n {visualChecked ? <CheckmarkIcon /> : null}\n </span>\n <span className={styles.itemLabel}>{children}</span>\n </BaseMenu.CheckboxItem>\n );\n}\n\nfunction MenuRadioGroup({\n children,\n value,\n defaultValue,\n onValueChange,\n}: MenuRadioGroupProps) {\n return (\n <BaseMenu.RadioGroup\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n >\n {children}\n </BaseMenu.RadioGroup>\n );\n}\n\nfunction MenuRadioItem({\n children,\n value,\n disabled,\n className,\n ...htmlProps\n}: MenuRadioItemProps) {\n const classes = [styles.item, styles.radioItem, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <BaseMenu.RadioItem {...htmlProps} value={value} disabled={disabled} className={classes}>\n <span className={styles.radioIndicator}>\n <DotIcon />\n </span>\n <span className={styles.itemLabel}>{children}</span>\n </BaseMenu.RadioItem>\n );\n}\n\nfunction MenuGroup({ children, className, ...htmlProps }: MenuGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseMenu.Group {...htmlProps} className={classes}>{children}</BaseMenu.Group>;\n}\n\nfunction MenuGroupLabel({ children, className, ...htmlProps }: MenuGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseMenu.GroupLabel {...htmlProps} className={classes}>{children}</BaseMenu.GroupLabel>;\n}\n\nfunction MenuSeparator({ className, ...htmlProps }: MenuSeparatorProps) {\n const classes = [styles.separator, className].filter(Boolean).join(' ');\n return <BaseMenu.Separator {...htmlProps} className={classes} />;\n}\n\nfunction MenuSubmenu({\n children,\n open,\n defaultOpen,\n onOpenChange,\n}: MenuSubmenuProps) {\n return (\n <BaseMenu.SubmenuRoot\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange as any}\n >\n {children}\n </BaseMenu.SubmenuRoot>\n );\n}\n\nfunction MenuSubmenuTrigger({\n children,\n disabled,\n className,\n icon,\n ...htmlProps\n}: MenuSubmenuTriggerProps) {\n const classes = [styles.item, styles.submenuTrigger, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <BaseMenu.SubmenuTrigger {...htmlProps} disabled={disabled} className={classes}>\n {icon && <span className={styles.itemIcon}>{icon}</span>}\n <span className={styles.itemLabel}>{children}</span>\n </BaseMenu.SubmenuTrigger>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Menu = Object.assign(MenuRoot, {\n Trigger: MenuTrigger,\n Content: MenuContent,\n Item: MenuItem,\n CheckboxItem: MenuCheckboxItem,\n RadioGroup: MenuRadioGroup,\n RadioItem: MenuRadioItem,\n Group: MenuGroup,\n GroupLabel: MenuGroupLabel,\n Separator: MenuSeparator,\n Submenu: MenuSubmenu,\n SubmenuTrigger: MenuSubmenuTrigger,\n});\n\n// Re-export individual components\nexport {\n MenuRoot,\n MenuTrigger,\n MenuContent,\n MenuItem,\n MenuCheckboxItem,\n MenuRadioGroup,\n MenuRadioItem,\n MenuGroup,\n MenuGroupLabel,\n MenuSeparator,\n MenuSubmenu,\n MenuSubmenuTrigger,\n};\n"],"names":["BaseMenu"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationMenuContext.cjs","sources":["../../../src/components/NavigationMenu/NavigationMenuContext.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\n// ============================================\n// Item Info (for mobile drawer auto-conversion)\n// ============================================\n\nexport interface NavigationMenuItemInfo {\n value: string;\n triggerLabel: string;\n contentChildren: React.ReactNode;\n linkHref?: string;\n}\n\n// ============================================\n// Root Context\n// ============================================\n\nexport interface NavigationMenuContextValue {\n value: string;\n setValue: (value: string) => void;\n orientation: 'horizontal' | 'vertical';\n delayDuration: number;\n skipDelayDuration: number;\n\n // Timer refs\n openTimerRef: React.MutableRefObject<ReturnType<typeof setTimeout> | null>;\n closeTimerRef: React.MutableRefObject<ReturnType<typeof setTimeout> | null>;\n isRecentlyOpenRef: React.MutableRefObject<boolean>;\n skipDelayTimerRef: React.MutableRefObject<ReturnType<typeof setTimeout> | null>;\n\n // Trigger registry for keyboard nav + indicator\n triggerRefs: React.MutableRefObject<Map<string, HTMLButtonElement>>;\n triggerOrder: React.MutableRefObject<string[]>;\n\n // Item info registry (for mobile drawer)\n itemInfoMap: React.MutableRefObject<Map<string, NavigationMenuItemInfo>>;\n\n // Viewport size for animated transitions\n viewportSize: { width: number; height: number };\n setViewportSize: (size: { width: number; height: number }) => void;\n\n // Viewport ref for portal\n viewportRef: React.RefObject<HTMLDivElement | null>;\n\n // Track previous value for motion direction\n previousValue: React.MutableRefObject<string>;\n\n // Mobile state\n isMobile: boolean;\n mobileOpen: boolean;\n setMobileOpen: (open: boolean) => void;\n mobileContentChildren: React.ReactNode;\n setMobileContentChildren: (children: React.ReactNode) => void;\n mobileBrandChildren: React.ReactNode;\n setMobileBrandChildren: (children: React.ReactNode) => void;\n\n // Root nav id\n rootId: string;\n}\n\nexport const NavigationMenuContext = React.createContext<NavigationMenuContextValue | null>(null);\n\nexport function useNavigationMenuContext(): NavigationMenuContextValue {\n const ctx = React.useContext(NavigationMenuContext);\n if (!ctx) {\n throw new Error('NavigationMenu compound components must be used within NavigationMenu');\n }\n return ctx;\n}\n\n// ============================================\n// Item Context\n// ============================================\n\nexport interface NavigationMenuItemContextValue {\n value: string;\n triggerId: string;\n contentId: string;\n}\n\nexport const NavigationMenuItemContext = React.createContext<NavigationMenuItemContextValue | null>(null);\n\nexport function useNavigationMenuItemContext(): NavigationMenuItemContextValue {\n const ctx = React.useContext(NavigationMenuItemContext);\n if (!ctx) {\n throw new Error('NavigationMenu.Trigger/Content must be used within NavigationMenu.Item');\n }\n return ctx;\n}\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;;;;;;;AA8DO,MAAM,wBAAwBA,iBAAM,cAAiD,IAAI;AAEzF,SAAS,2BAAuD;AACrE,QAAM,MAAMA,iBAAM,WAAW,qBAAqB;AAClD,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,uEAAuE;AAAA,EACzF;AACA,SAAO;AACT;AAYO,MAAM,4BAA4BA,iBAAM,cAAqD,IAAI;AAEjG,SAAS,+BAA+D;AAC7E,QAAM,MAAMA,iBAAM,WAAW,yBAAyB;AACtD,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAC1F;AACA,SAAO;AACT;;;;;"}
1
+ {"version":3,"file":"NavigationMenuContext.cjs","sources":["../../../src/components/NavigationMenu/NavigationMenuContext.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\n// ============================================\n// Item Info (for mobile drawer auto-conversion)\n// ============================================\n\nexport interface NavigationMenuItemInfo {\n value: string;\n triggerLabel: string;\n contentChildren: React.ReactNode;\n linkHref?: string;\n}\n\n// ============================================\n// Root Context\n// ============================================\n\nexport interface NavigationMenuContextValue {\n value: string;\n setValue: (value: string) => void;\n orientation: 'horizontal' | 'vertical';\n delayDuration: number;\n skipDelayDuration: number;\n\n // Timer refs\n openTimerRef: React.MutableRefObject<ReturnType<typeof setTimeout> | null>;\n closeTimerRef: React.MutableRefObject<ReturnType<typeof setTimeout> | null>;\n isRecentlyOpenRef: React.MutableRefObject<boolean>;\n skipDelayTimerRef: React.MutableRefObject<ReturnType<typeof setTimeout> | null>;\n\n // Trigger registry for keyboard nav + indicator\n triggerRefs: React.MutableRefObject<Map<string, HTMLButtonElement>>;\n triggerOrder: React.MutableRefObject<string[]>;\n\n // Full item order (includes items without triggers)\n itemOrder: React.MutableRefObject<string[]>;\n\n // Item info registry (for mobile drawer)\n itemInfoMap: React.MutableRefObject<Map<string, NavigationMenuItemInfo>>;\n\n // Viewport size for animated transitions\n viewportSize: { width: number; height: number };\n setViewportSize: (size: { width: number; height: number }) => void;\n\n // Viewport ref for portal\n viewportRef: React.RefObject<HTMLDivElement | null>;\n\n // Track previous value for motion direction\n previousValue: React.MutableRefObject<string>;\n\n // Mobile state\n isMobile: boolean;\n mobileOpen: boolean;\n setMobileOpen: (open: boolean) => void;\n mobileContentChildren: React.ReactNode;\n setMobileContentChildren: (children: React.ReactNode) => void;\n mobileBrandChildren: React.ReactNode;\n setMobileBrandChildren: (children: React.ReactNode) => void;\n\n // Root nav id\n rootId: string;\n}\n\nexport const NavigationMenuContext = React.createContext<NavigationMenuContextValue | null>(null);\n\nexport function useNavigationMenuContext(): NavigationMenuContextValue {\n const ctx = React.useContext(NavigationMenuContext);\n if (!ctx) {\n throw new Error('NavigationMenu compound components must be used within NavigationMenu');\n }\n return ctx;\n}\n\n// ============================================\n// Item Context\n// ============================================\n\nexport interface NavigationMenuItemContextValue {\n value: string;\n triggerId: string;\n contentId: string;\n}\n\nexport const NavigationMenuItemContext = React.createContext<NavigationMenuItemContextValue | null>(null);\n\nexport function useNavigationMenuItemContext(): NavigationMenuItemContextValue {\n const ctx = React.useContext(NavigationMenuItemContext);\n if (!ctx) {\n throw new Error('NavigationMenu.Trigger/Content must be used within NavigationMenu.Item');\n }\n return ctx;\n}\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;;;;;;;AAiEO,MAAM,wBAAwBA,iBAAM,cAAiD,IAAI;AAEzF,SAAS,2BAAuD;AACrE,QAAM,MAAMA,iBAAM,WAAW,qBAAqB;AAClD,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,uEAAuE;AAAA,EACzF;AACA,SAAO;AACT;AAYO,MAAM,4BAA4BA,iBAAM,cAAqD,IAAI;AAEjG,SAAS,+BAA+D;AAC7E,QAAM,MAAMA,iBAAM,WAAW,yBAAyB;AACtD,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAC1F;AACA,SAAO;AACT;;;;;"}
@@ -17,6 +17,7 @@ export interface NavigationMenuContextValue {
17
17
  skipDelayTimerRef: React.MutableRefObject<ReturnType<typeof setTimeout> | null>;
18
18
  triggerRefs: React.MutableRefObject<Map<string, HTMLButtonElement>>;
19
19
  triggerOrder: React.MutableRefObject<string[]>;
20
+ itemOrder: React.MutableRefObject<string[]>;
20
21
  itemInfoMap: React.MutableRefObject<Map<string, NavigationMenuItemInfo>>;
21
22
  viewportSize: {
22
23
  width: number;
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationMenuContext.d.ts","sourceRoot":"","sources":["../../../src/components/NavigationMenu/NavigationMenuContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3E,aAAa,EAAE,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5E,iBAAiB,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnD,iBAAiB,EAAE,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;IAGhF,WAAW,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACpE,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IAG/C,WAAW,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAGzE,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,eAAe,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAGnE,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAGpD,aAAa,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAG9C,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,qBAAqB,EAAE,KAAK,CAAC,SAAS,CAAC;IACvC,wBAAwB,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAC9D,mBAAmB,EAAE,KAAK,CAAC,SAAS,CAAC;IACrC,sBAAsB,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAG5D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,qBAAqB,kDAA+D,CAAC;AAElG,wBAAgB,wBAAwB,IAAI,0BAA0B,CAMrE;AAMD,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,yBAAyB,sDAAmE,CAAC;AAE1G,wBAAgB,4BAA4B,IAAI,8BAA8B,CAM7E"}
1
+ {"version":3,"file":"NavigationMenuContext.d.ts","sourceRoot":"","sources":["../../../src/components/NavigationMenu/NavigationMenuContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3E,aAAa,EAAE,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5E,iBAAiB,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnD,iBAAiB,EAAE,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;IAGhF,WAAW,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACpE,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IAG/C,SAAS,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IAG5C,WAAW,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAGzE,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,eAAe,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAGnE,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAGpD,aAAa,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAG9C,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,qBAAqB,EAAE,KAAK,CAAC,SAAS,CAAC;IACvC,wBAAwB,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAC9D,mBAAmB,EAAE,KAAK,CAAC,SAAS,CAAC;IACrC,sBAAsB,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAG5D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,qBAAqB,kDAA+D,CAAC;AAElG,wBAAgB,wBAAwB,IAAI,0BAA0B,CAMrE;AAMD,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,yBAAyB,sDAAmE,CAAC;AAE1G,wBAAgB,4BAA4B,IAAI,8BAA8B,CAM7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationMenuContext.js","sources":["../../../src/components/NavigationMenu/NavigationMenuContext.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\n// ============================================\n// Item Info (for mobile drawer auto-conversion)\n// ============================================\n\nexport interface NavigationMenuItemInfo {\n value: string;\n triggerLabel: string;\n contentChildren: React.ReactNode;\n linkHref?: string;\n}\n\n// ============================================\n// Root Context\n// ============================================\n\nexport interface NavigationMenuContextValue {\n value: string;\n setValue: (value: string) => void;\n orientation: 'horizontal' | 'vertical';\n delayDuration: number;\n skipDelayDuration: number;\n\n // Timer refs\n openTimerRef: React.MutableRefObject<ReturnType<typeof setTimeout> | null>;\n closeTimerRef: React.MutableRefObject<ReturnType<typeof setTimeout> | null>;\n isRecentlyOpenRef: React.MutableRefObject<boolean>;\n skipDelayTimerRef: React.MutableRefObject<ReturnType<typeof setTimeout> | null>;\n\n // Trigger registry for keyboard nav + indicator\n triggerRefs: React.MutableRefObject<Map<string, HTMLButtonElement>>;\n triggerOrder: React.MutableRefObject<string[]>;\n\n // Item info registry (for mobile drawer)\n itemInfoMap: React.MutableRefObject<Map<string, NavigationMenuItemInfo>>;\n\n // Viewport size for animated transitions\n viewportSize: { width: number; height: number };\n setViewportSize: (size: { width: number; height: number }) => void;\n\n // Viewport ref for portal\n viewportRef: React.RefObject<HTMLDivElement | null>;\n\n // Track previous value for motion direction\n previousValue: React.MutableRefObject<string>;\n\n // Mobile state\n isMobile: boolean;\n mobileOpen: boolean;\n setMobileOpen: (open: boolean) => void;\n mobileContentChildren: React.ReactNode;\n setMobileContentChildren: (children: React.ReactNode) => void;\n mobileBrandChildren: React.ReactNode;\n setMobileBrandChildren: (children: React.ReactNode) => void;\n\n // Root nav id\n rootId: string;\n}\n\nexport const NavigationMenuContext = React.createContext<NavigationMenuContextValue | null>(null);\n\nexport function useNavigationMenuContext(): NavigationMenuContextValue {\n const ctx = React.useContext(NavigationMenuContext);\n if (!ctx) {\n throw new Error('NavigationMenu compound components must be used within NavigationMenu');\n }\n return ctx;\n}\n\n// ============================================\n// Item Context\n// ============================================\n\nexport interface NavigationMenuItemContextValue {\n value: string;\n triggerId: string;\n contentId: string;\n}\n\nexport const NavigationMenuItemContext = React.createContext<NavigationMenuItemContextValue | null>(null);\n\nexport function useNavigationMenuItemContext(): NavigationMenuItemContextValue {\n const ctx = React.useContext(NavigationMenuItemContext);\n if (!ctx) {\n throw new Error('NavigationMenu.Trigger/Content must be used within NavigationMenu.Item');\n }\n return ctx;\n}\n"],"names":[],"mappings":";AA8DO,MAAM,wBAAwB,MAAM,cAAiD,IAAI;AAEzF,SAAS,2BAAuD;AACrE,QAAM,MAAM,MAAM,WAAW,qBAAqB;AAClD,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,uEAAuE;AAAA,EACzF;AACA,SAAO;AACT;AAYO,MAAM,4BAA4B,MAAM,cAAqD,IAAI;AAEjG,SAAS,+BAA+D;AAC7E,QAAM,MAAM,MAAM,WAAW,yBAAyB;AACtD,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAC1F;AACA,SAAO;AACT;"}
1
+ {"version":3,"file":"NavigationMenuContext.js","sources":["../../../src/components/NavigationMenu/NavigationMenuContext.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\n// ============================================\n// Item Info (for mobile drawer auto-conversion)\n// ============================================\n\nexport interface NavigationMenuItemInfo {\n value: string;\n triggerLabel: string;\n contentChildren: React.ReactNode;\n linkHref?: string;\n}\n\n// ============================================\n// Root Context\n// ============================================\n\nexport interface NavigationMenuContextValue {\n value: string;\n setValue: (value: string) => void;\n orientation: 'horizontal' | 'vertical';\n delayDuration: number;\n skipDelayDuration: number;\n\n // Timer refs\n openTimerRef: React.MutableRefObject<ReturnType<typeof setTimeout> | null>;\n closeTimerRef: React.MutableRefObject<ReturnType<typeof setTimeout> | null>;\n isRecentlyOpenRef: React.MutableRefObject<boolean>;\n skipDelayTimerRef: React.MutableRefObject<ReturnType<typeof setTimeout> | null>;\n\n // Trigger registry for keyboard nav + indicator\n triggerRefs: React.MutableRefObject<Map<string, HTMLButtonElement>>;\n triggerOrder: React.MutableRefObject<string[]>;\n\n // Full item order (includes items without triggers)\n itemOrder: React.MutableRefObject<string[]>;\n\n // Item info registry (for mobile drawer)\n itemInfoMap: React.MutableRefObject<Map<string, NavigationMenuItemInfo>>;\n\n // Viewport size for animated transitions\n viewportSize: { width: number; height: number };\n setViewportSize: (size: { width: number; height: number }) => void;\n\n // Viewport ref for portal\n viewportRef: React.RefObject<HTMLDivElement | null>;\n\n // Track previous value for motion direction\n previousValue: React.MutableRefObject<string>;\n\n // Mobile state\n isMobile: boolean;\n mobileOpen: boolean;\n setMobileOpen: (open: boolean) => void;\n mobileContentChildren: React.ReactNode;\n setMobileContentChildren: (children: React.ReactNode) => void;\n mobileBrandChildren: React.ReactNode;\n setMobileBrandChildren: (children: React.ReactNode) => void;\n\n // Root nav id\n rootId: string;\n}\n\nexport const NavigationMenuContext = React.createContext<NavigationMenuContextValue | null>(null);\n\nexport function useNavigationMenuContext(): NavigationMenuContextValue {\n const ctx = React.useContext(NavigationMenuContext);\n if (!ctx) {\n throw new Error('NavigationMenu compound components must be used within NavigationMenu');\n }\n return ctx;\n}\n\n// ============================================\n// Item Context\n// ============================================\n\nexport interface NavigationMenuItemContextValue {\n value: string;\n triggerId: string;\n contentId: string;\n}\n\nexport const NavigationMenuItemContext = React.createContext<NavigationMenuItemContextValue | null>(null);\n\nexport function useNavigationMenuItemContext(): NavigationMenuItemContextValue {\n const ctx = React.useContext(NavigationMenuItemContext);\n if (!ctx) {\n throw new Error('NavigationMenu.Trigger/Content must be used within NavigationMenu.Item');\n }\n return ctx;\n}\n"],"names":[],"mappings":";AAiEO,MAAM,wBAAwB,MAAM,cAAiD,IAAI;AAEzF,SAAS,2BAAuD;AACrE,QAAM,MAAM,MAAM,WAAW,qBAAqB;AAClD,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,uEAAuE;AAAA,EACzF;AACA,SAAO;AACT;AAYO,MAAM,4BAA4B,MAAM,cAAqD,IAAI;AAEjG,SAAS,+BAA+D;AAC7E,QAAM,MAAM,MAAM,WAAW,yBAAyB;AACtD,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAC1F;AACA,SAAO;AACT;"}