@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.
- package/README.md +15 -0
- package/dist/assets/ui.css +25 -18
- package/dist/blocks/AccountSettings.block.d.ts +1 -1
- package/dist/blocks/ActivityFeed.block.d.ts +1 -1
- package/dist/blocks/ActivityFeedSkeleton.block.d.ts +1 -1
- package/dist/blocks/BlogEditor.block.d.ts +1 -1
- package/dist/blocks/ChatInterface.block.d.ts +1 -1
- package/dist/blocks/ChatMessages.block.d.ts +1 -1
- package/dist/blocks/CheckoutForm.block.d.ts +1 -1
- package/dist/blocks/CommandPalette.block.d.ts +1 -1
- package/dist/blocks/ContactForm.block.d.ts +1 -1
- package/dist/blocks/DashboardLayout.block.d.ts +1 -1
- package/dist/blocks/DashboardPage.block.d.ts +1 -1
- package/dist/blocks/DashboardSkeleton.block.d.ts +1 -1
- package/dist/blocks/DataTable.block.d.ts +1 -1
- package/dist/blocks/EmptyState.block.d.ts +1 -1
- package/dist/blocks/FAQSection.block.d.ts +1 -1
- package/dist/blocks/FeatureGrid.block.d.ts +1 -1
- package/dist/blocks/HeroSection.block.d.ts +1 -1
- package/dist/blocks/LoginForm.block.d.ts +1 -1
- package/dist/blocks/NavigationHeader.block.d.ts +1 -1
- package/dist/blocks/PaginatedTable.block.d.ts +1 -1
- package/dist/blocks/PricingComparison.block.d.ts +1 -1
- package/dist/blocks/ProductCard.block.d.ts +1 -1
- package/dist/blocks/RegistrationForm.block.d.ts +1 -1
- package/dist/blocks/SettingsDrawer.block.d.ts +1 -1
- package/dist/blocks/SettingsPanel.block.d.ts +1 -1
- package/dist/blocks/ShoppingCart.block.d.ts +1 -1
- package/dist/blocks/StatsCard.block.d.ts +1 -1
- package/dist/blocks/StatsCardSkeleton.block.d.ts +1 -1
- package/dist/blocks/TableSkeleton.block.d.ts +1 -1
- package/dist/blocks/ThinkingStates.block.d.ts +1 -1
- package/dist/codeblock.cjs +7 -1
- package/dist/codeblock.cjs.map +1 -1
- package/dist/codeblock.js +7 -1
- package/dist/codeblock.js.map +1 -1
- package/dist/components/Accordion/index.cjs +11 -4
- package/dist/components/Accordion/index.cjs.map +1 -1
- package/dist/components/Accordion/index.d.ts +3 -3
- package/dist/components/Accordion/index.d.ts.map +1 -1
- package/dist/components/Accordion/index.js +11 -4
- package/dist/components/Accordion/index.js.map +1 -1
- package/dist/components/Alert/index.cjs.map +1 -1
- package/dist/components/Alert/index.d.ts +7 -0
- package/dist/components/Alert/index.d.ts.map +1 -1
- package/dist/components/Alert/index.js.map +1 -1
- package/dist/components/Avatar/index.cjs.map +1 -1
- package/dist/components/Avatar/index.d.ts +4 -0
- package/dist/components/Avatar/index.d.ts.map +1 -1
- package/dist/components/Avatar/index.js.map +1 -1
- package/dist/components/Badge/index.cjs.map +1 -1
- package/dist/components/Badge/index.d.ts +12 -0
- package/dist/components/Badge/index.d.ts.map +1 -1
- package/dist/components/Badge/index.js.map +1 -1
- package/dist/components/Button/index.cjs +9 -1
- package/dist/components/Button/index.cjs.map +1 -1
- package/dist/components/Button/index.d.ts +14 -1
- package/dist/components/Button/index.d.ts.map +1 -1
- package/dist/components/Button/index.js +9 -1
- package/dist/components/Button/index.js.map +1 -1
- package/dist/components/Card/index.cjs +2 -1
- package/dist/components/Card/index.cjs.map +1 -1
- package/dist/components/Card/index.d.ts +12 -2
- package/dist/components/Card/index.d.ts.map +1 -1
- package/dist/components/Card/index.js +2 -1
- package/dist/components/Card/index.js.map +1 -1
- package/dist/components/Checkbox/index.cjs.map +1 -1
- package/dist/components/Checkbox/index.d.ts +6 -1
- package/dist/components/Checkbox/index.d.ts.map +1 -1
- package/dist/components/Checkbox/index.js.map +1 -1
- package/dist/components/Chip/index.cjs +2 -1
- package/dist/components/Chip/index.cjs.map +1 -1
- package/dist/components/Chip/index.d.ts +10 -3
- package/dist/components/Chip/index.d.ts.map +1 -1
- package/dist/components/Chip/index.js +2 -1
- package/dist/components/Chip/index.js.map +1 -1
- package/dist/components/CodeBlock/index.d.ts +1 -1
- package/dist/components/CodeBlock/index.d.ts.map +1 -1
- package/dist/components/Collapsible/index.cjs +45 -10
- package/dist/components/Collapsible/index.cjs.map +1 -1
- package/dist/components/Collapsible/index.d.ts +6 -12
- package/dist/components/Collapsible/index.d.ts.map +1 -1
- package/dist/components/Collapsible/index.js +45 -10
- package/dist/components/Collapsible/index.js.map +1 -1
- package/dist/components/Combobox/index.cjs +18 -9
- package/dist/components/Combobox/index.cjs.map +1 -1
- package/dist/components/Combobox/index.d.ts +8 -12
- package/dist/components/Combobox/index.d.ts.map +1 -1
- package/dist/components/Combobox/index.js +18 -9
- package/dist/components/Combobox/index.js.map +1 -1
- package/dist/components/Command/index.cjs +54 -21
- package/dist/components/Command/index.cjs.map +1 -1
- package/dist/components/Command/index.d.ts +2 -2
- package/dist/components/Command/index.d.ts.map +1 -1
- package/dist/components/Command/index.js +54 -21
- package/dist/components/Command/index.js.map +1 -1
- package/dist/components/DataTable/index.cjs +13 -1
- package/dist/components/DataTable/index.cjs.map +1 -1
- package/dist/components/DataTable/index.d.ts.map +1 -1
- package/dist/components/DataTable/index.js +13 -1
- package/dist/components/DataTable/index.js.map +1 -1
- package/dist/components/DatePicker/index.d.ts +2 -3
- package/dist/components/DatePicker/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.cjs +12 -9
- package/dist/components/Dialog/index.cjs.map +1 -1
- package/dist/components/Dialog/index.d.ts +20 -12
- package/dist/components/Dialog/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.js +12 -9
- package/dist/components/Dialog/index.js.map +1 -1
- package/dist/components/Drawer/index.cjs +12 -9
- package/dist/components/Drawer/index.cjs.map +1 -1
- package/dist/components/Drawer/index.d.ts +22 -12
- package/dist/components/Drawer/index.d.ts.map +1 -1
- package/dist/components/Drawer/index.js +12 -9
- package/dist/components/Drawer/index.js.map +1 -1
- package/dist/components/Grid/index.cjs +4 -1
- package/dist/components/Grid/index.cjs.map +1 -1
- package/dist/components/Grid/index.d.ts +6 -2
- package/dist/components/Grid/index.d.ts.map +1 -1
- package/dist/components/Grid/index.js +4 -1
- package/dist/components/Grid/index.js.map +1 -1
- package/dist/components/Input/index.cjs.map +1 -1
- package/dist/components/Input/index.d.ts +15 -1
- package/dist/components/Input/index.d.ts.map +1 -1
- package/dist/components/Input/index.js.map +1 -1
- package/dist/components/Menu/index.cjs +30 -16
- package/dist/components/Menu/index.cjs.map +1 -1
- package/dist/components/Menu/index.d.ts +17 -25
- package/dist/components/Menu/index.d.ts.map +1 -1
- package/dist/components/Menu/index.js +30 -16
- package/dist/components/Menu/index.js.map +1 -1
- package/dist/components/NavigationMenu/NavigationMenuContext.cjs.map +1 -1
- package/dist/components/NavigationMenu/NavigationMenuContext.d.ts +1 -0
- package/dist/components/NavigationMenu/NavigationMenuContext.d.ts.map +1 -1
- package/dist/components/NavigationMenu/NavigationMenuContext.js.map +1 -1
- package/dist/components/NavigationMenu/index.cjs +43 -11
- package/dist/components/NavigationMenu/index.cjs.map +1 -1
- package/dist/components/NavigationMenu/index.d.ts.map +1 -1
- package/dist/components/NavigationMenu/index.js +43 -11
- package/dist/components/NavigationMenu/index.js.map +1 -1
- package/dist/components/NavigationMenu/useNavigationMenu.cjs +2 -0
- package/dist/components/NavigationMenu/useNavigationMenu.cjs.map +1 -1
- package/dist/components/NavigationMenu/useNavigationMenu.d.ts +1 -0
- package/dist/components/NavigationMenu/useNavigationMenu.d.ts.map +1 -1
- package/dist/components/NavigationMenu/useNavigationMenu.js +2 -0
- package/dist/components/NavigationMenu/useNavigationMenu.js.map +1 -1
- package/dist/components/Popover/index.cjs +11 -10
- package/dist/components/Popover/index.cjs.map +1 -1
- package/dist/components/Popover/index.d.ts +17 -12
- package/dist/components/Popover/index.d.ts.map +1 -1
- package/dist/components/Popover/index.js +11 -10
- package/dist/components/Popover/index.js.map +1 -1
- package/dist/components/RadioGroup/index.cjs.map +1 -1
- package/dist/components/RadioGroup/index.d.ts +4 -0
- package/dist/components/RadioGroup/index.d.ts.map +1 -1
- package/dist/components/RadioGroup/index.js.map +1 -1
- package/dist/components/Select/index.cjs +7 -6
- package/dist/components/Select/index.cjs.map +1 -1
- package/dist/components/Select/index.d.ts +20 -9
- package/dist/components/Select/index.d.ts.map +1 -1
- package/dist/components/Select/index.js +7 -6
- package/dist/components/Select/index.js.map +1 -1
- package/dist/components/Sidebar/index.cjs +71 -24
- package/dist/components/Sidebar/index.cjs.map +1 -1
- package/dist/components/Sidebar/index.d.ts +21 -33
- package/dist/components/Sidebar/index.d.ts.map +1 -1
- package/dist/components/Sidebar/index.js +71 -24
- package/dist/components/Sidebar/index.js.map +1 -1
- package/dist/components/Slider/index.cjs +3 -1
- package/dist/components/Slider/index.cjs.map +1 -1
- package/dist/components/Slider/index.d.ts +10 -0
- package/dist/components/Slider/index.d.ts.map +1 -1
- package/dist/components/Slider/index.js +3 -1
- package/dist/components/Slider/index.js.map +1 -1
- package/dist/components/Stack/index.cjs +6 -0
- package/dist/components/Stack/index.cjs.map +1 -1
- package/dist/components/Stack/index.d.ts +12 -6
- package/dist/components/Stack/index.d.ts.map +1 -1
- package/dist/components/Stack/index.js +6 -0
- package/dist/components/Stack/index.js.map +1 -1
- package/dist/components/Tabs/index.cjs.map +1 -1
- package/dist/components/Tabs/index.d.ts +13 -1
- package/dist/components/Tabs/index.d.ts.map +1 -1
- package/dist/components/Tabs/index.js.map +1 -1
- package/dist/components/Text/Text.module.scss.cjs +44 -32
- package/dist/components/Text/Text.module.scss.cjs.map +1 -1
- package/dist/components/Text/Text.module.scss.js +44 -32
- package/dist/components/Text/Text.module.scss.js.map +1 -1
- package/dist/components/Text/index.cjs.map +1 -1
- package/dist/components/Text/index.d.ts +18 -3
- package/dist/components/Text/index.d.ts.map +1 -1
- package/dist/components/Text/index.js.map +1 -1
- package/dist/components/Theme/index.cjs.map +1 -1
- package/dist/components/Theme/index.d.ts +12 -0
- package/dist/components/Theme/index.d.ts.map +1 -1
- package/dist/components/Theme/index.js.map +1 -1
- package/dist/components/Toggle/index.cjs +2 -1
- package/dist/components/Toggle/index.cjs.map +1 -1
- package/dist/components/Toggle/index.d.ts +9 -0
- package/dist/components/Toggle/index.d.ts.map +1 -1
- package/dist/components/Toggle/index.js +2 -1
- package/dist/components/Toggle/index.js.map +1 -1
- package/dist/components/ToggleGroup/index.cjs +4 -1
- package/dist/components/ToggleGroup/index.cjs.map +1 -1
- package/dist/components/ToggleGroup/index.d.ts +13 -4
- package/dist/components/ToggleGroup/index.d.ts.map +1 -1
- package/dist/components/ToggleGroup/index.js +4 -1
- package/dist/components/ToggleGroup/index.js.map +1 -1
- package/dist/components/Tooltip/index.cjs +20 -10
- package/dist/components/Tooltip/index.cjs.map +1 -1
- package/dist/components/Tooltip/index.d.ts +5 -1
- package/dist/components/Tooltip/index.d.ts.map +1 -1
- package/dist/components/Tooltip/index.js +20 -10
- package/dist/components/Tooltip/index.js.map +1 -1
- package/dist/datepicker.cjs +24 -10
- package/dist/datepicker.cjs.map +1 -1
- package/dist/datepicker.js +24 -10
- package/dist/datepicker.js.map +1 -1
- package/dist/index.cjs +4 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/css-warning.cjs +18 -0
- package/dist/utils/css-warning.cjs.map +1 -0
- package/dist/utils/css-warning.d.ts +2 -0
- package/dist/utils/css-warning.d.ts.map +1 -0
- package/dist/utils/css-warning.js +18 -0
- package/dist/utils/css-warning.js.map +1 -0
- package/fragments.json +1 -1
- package/package.json +2 -2
- package/src/components/Accordion/Accordion.test.tsx +33 -0
- package/src/components/Accordion/index.tsx +10 -3
- package/src/components/Alert/index.tsx +7 -0
- package/src/components/Avatar/index.tsx +4 -0
- package/src/components/Badge/Badge.fragment.tsx +10 -2
- package/src/components/Badge/index.tsx +12 -0
- package/src/components/Button/Button.fragment.tsx +12 -2
- package/src/components/Button/Button.test.tsx +16 -0
- package/src/components/Button/index.tsx +27 -2
- package/src/components/Card/Card.fragment.tsx +14 -2
- package/src/components/Card/Card.test.tsx +5 -0
- package/src/components/Card/index.tsx +15 -2
- package/src/components/Checkbox/index.tsx +6 -1
- package/src/components/Chip/Chip.fragment.tsx +12 -2
- package/src/components/Chip/Chip.test.tsx +5 -0
- package/src/components/Chip/index.tsx +14 -4
- package/src/components/CodeBlock/index.tsx +13 -2
- package/src/components/Collapsible/Collapsible.test.tsx +41 -0
- package/src/components/Collapsible/index.tsx +53 -16
- package/src/components/Combobox/Combobox.test.tsx +55 -0
- package/src/components/Combobox/index.tsx +23 -17
- package/src/components/Command/Command.test.tsx +93 -0
- package/src/components/Command/index.tsx +61 -18
- package/src/components/DataTable/DataTable.test.tsx +11 -2
- package/src/components/DataTable/index.tsx +22 -2
- package/src/components/DatePicker/DatePicker.test.tsx +79 -0
- package/src/components/DatePicker/index.tsx +29 -14
- package/src/components/Dialog/Dialog.test.tsx +23 -0
- package/src/components/Dialog/index.tsx +27 -16
- package/src/components/Drawer/Drawer.test.tsx +27 -0
- package/src/components/Drawer/index.tsx +29 -16
- package/src/components/Grid/Grid.fragment.tsx +14 -2
- package/src/components/Grid/Grid.test.tsx +6 -0
- package/src/components/Grid/index.tsx +12 -3
- package/src/components/Input/index.tsx +15 -1
- package/src/components/Menu/index.tsx +35 -30
- package/src/components/NavigationMenu/NavigationMenu.fragment.tsx +1 -1
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +40 -4
- package/src/components/NavigationMenu/NavigationMenuContext.ts +3 -0
- package/src/components/NavigationMenu/index.tsx +49 -13
- package/src/components/NavigationMenu/useNavigationMenu.ts +4 -0
- package/src/components/Popover/Popover.test.tsx +23 -0
- package/src/components/Popover/index.tsx +24 -18
- package/src/components/RadioGroup/index.tsx +4 -0
- package/src/components/Select/Select.test.tsx +41 -0
- package/src/components/Select/index.tsx +24 -12
- package/src/components/Sidebar/Sidebar.test.tsx +83 -4
- package/src/components/Sidebar/index.tsx +87 -45
- package/src/components/Slider/Slider.fragment.tsx +5 -1
- package/src/components/Slider/Slider.test.tsx +6 -0
- package/src/components/Slider/index.tsx +13 -1
- package/src/components/Stack/Stack.fragment.tsx +22 -2
- package/src/components/Stack/Stack.test.tsx +6 -0
- package/src/components/Stack/index.tsx +20 -6
- package/src/components/Tabs/index.tsx +13 -1
- package/src/components/Text/Text.fragment.tsx +10 -8
- package/src/components/Text/Text.module.scss +8 -2
- package/src/components/Text/Text.test.tsx +15 -0
- package/src/components/Text/index.tsx +18 -3
- package/src/components/Theme/index.tsx +12 -0
- package/src/components/Toggle/Toggle.fragment.tsx +5 -1
- package/src/components/Toggle/Toggle.test.tsx +19 -0
- package/src/components/Toggle/index.tsx +11 -1
- package/src/components/ToggleGroup/ToggleGroup.fragment.tsx +5 -2
- package/src/components/ToggleGroup/ToggleGroup.test.tsx +20 -0
- package/src/components/ToggleGroup/index.tsx +15 -4
- package/src/components/Tooltip/Tooltip.test.tsx +17 -0
- package/src/components/Tooltip/index.tsx +58 -34
- package/src/index.ts +6 -0
- package/src/tokens/_seeds.scss +5 -3
- package/src/tokens/_variables.scss +2 -0
- 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:
|
|
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":"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"}
|
|
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":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,
|
|
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:
|
|
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":";;;;;;;;;;;;;;;;;;;;
|
|
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":";
|
|
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;"}
|