@7onic-ui/react 0.3.9 → 0.3.10
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 +2 -2
- package/dist/chart.mjs +3 -9
- package/dist/chart.mjs.map +1 -1
- package/dist/chunk-234NAXGV.mjs +252 -0
- package/dist/chunk-234NAXGV.mjs.map +1 -0
- package/dist/chunk-53MIUPSY.mjs +13 -0
- package/dist/chunk-53MIUPSY.mjs.map +1 -0
- package/dist/chunk-BN5BEA3V.mjs +195 -0
- package/dist/chunk-BN5BEA3V.mjs.map +1 -0
- package/dist/chunk-COW3B62M.mjs +214 -0
- package/dist/chunk-COW3B62M.mjs.map +1 -0
- package/dist/chunk-CTH6SN5Y.mjs +114 -0
- package/dist/chunk-CTH6SN5Y.mjs.map +1 -0
- package/dist/chunk-D3NTQNDW.mjs +440 -0
- package/dist/chunk-D3NTQNDW.mjs.map +1 -0
- package/dist/chunk-DDRYEJBJ.mjs +164 -0
- package/dist/chunk-DDRYEJBJ.mjs.map +1 -0
- package/dist/chunk-DJAEXCRU.mjs +190 -0
- package/dist/chunk-DJAEXCRU.mjs.map +1 -0
- package/dist/chunk-DRVHHEAY.mjs +145 -0
- package/dist/chunk-DRVHHEAY.mjs.map +1 -0
- package/dist/chunk-DTLNWOTR.mjs +482 -0
- package/dist/chunk-DTLNWOTR.mjs.map +1 -0
- package/dist/chunk-DYYQOHQR.mjs +214 -0
- package/dist/chunk-DYYQOHQR.mjs.map +1 -0
- package/dist/chunk-FHUAH6AJ.mjs +93 -0
- package/dist/chunk-FHUAH6AJ.mjs.map +1 -0
- package/dist/chunk-GD4YE5AE.mjs +209 -0
- package/dist/chunk-GD4YE5AE.mjs.map +1 -0
- package/dist/chunk-GRCJ35DX.mjs +144 -0
- package/dist/chunk-GRCJ35DX.mjs.map +1 -0
- package/dist/chunk-HHX4GABH.mjs +129 -0
- package/dist/chunk-HHX4GABH.mjs.map +1 -0
- package/dist/chunk-IPCIC2BI.mjs +148 -0
- package/dist/chunk-IPCIC2BI.mjs.map +1 -0
- package/dist/chunk-IY3R2VGB.mjs +272 -0
- package/dist/chunk-IY3R2VGB.mjs.map +1 -0
- package/dist/chunk-JCJEVXER.mjs +170 -0
- package/dist/chunk-JCJEVXER.mjs.map +1 -0
- package/dist/chunk-KBPYAMGS.mjs +157 -0
- package/dist/chunk-KBPYAMGS.mjs.map +1 -0
- package/dist/chunk-LJJ6K4IU.mjs +318 -0
- package/dist/chunk-LJJ6K4IU.mjs.map +1 -0
- package/dist/chunk-MRUVGHGP.mjs +375 -0
- package/dist/chunk-MRUVGHGP.mjs.map +1 -0
- package/dist/chunk-N4K2BDGM.mjs +153 -0
- package/dist/chunk-N4K2BDGM.mjs.map +1 -0
- package/dist/chunk-NWFMJWGX.mjs +165 -0
- package/dist/chunk-NWFMJWGX.mjs.map +1 -0
- package/dist/chunk-PTAPPOKU.mjs +117 -0
- package/dist/chunk-PTAPPOKU.mjs.map +1 -0
- package/dist/chunk-PVTBM7V7.mjs +316 -0
- package/dist/chunk-PVTBM7V7.mjs.map +1 -0
- package/dist/chunk-Q5WVLK2L.mjs +77 -0
- package/dist/chunk-Q5WVLK2L.mjs.map +1 -0
- package/dist/chunk-RKSB2N5L.mjs +206 -0
- package/dist/chunk-RKSB2N5L.mjs.map +1 -0
- package/dist/chunk-S4DGVKBK.mjs +151 -0
- package/dist/chunk-S4DGVKBK.mjs.map +1 -0
- package/dist/chunk-S4T4PU7F.mjs +114 -0
- package/dist/chunk-S4T4PU7F.mjs.map +1 -0
- package/dist/chunk-SZPZOGPC.mjs +394 -0
- package/dist/chunk-SZPZOGPC.mjs.map +1 -0
- package/dist/chunk-T546XBQG.mjs +443 -0
- package/dist/chunk-T546XBQG.mjs.map +1 -0
- package/dist/chunk-UWTT5AE6.mjs +145 -0
- package/dist/chunk-UWTT5AE6.mjs.map +1 -0
- package/dist/chunk-V5UFWYFI.mjs +255 -0
- package/dist/chunk-V5UFWYFI.mjs.map +1 -0
- package/dist/chunk-VUPGBB5X.mjs +150 -0
- package/dist/chunk-VUPGBB5X.mjs.map +1 -0
- package/dist/chunk-W6YNEU53.mjs +175 -0
- package/dist/chunk-W6YNEU53.mjs.map +1 -0
- package/dist/chunk-WWSN5YME.mjs +222 -0
- package/dist/chunk-WWSN5YME.mjs.map +1 -0
- package/dist/chunk-XK52LYR4.mjs +182 -0
- package/dist/chunk-XK52LYR4.mjs.map +1 -0
- package/dist/chunk-YIAH6KHV.mjs +164 -0
- package/dist/chunk-YIAH6KHV.mjs.map +1 -0
- package/dist/chunk-Z6JWWCNL.mjs +108 -0
- package/dist/chunk-Z6JWWCNL.mjs.map +1 -0
- package/dist/chunk-ZDRUTJ4T.mjs +119 -0
- package/dist/chunk-ZDRUTJ4T.mjs.map +1 -0
- package/dist/components/accordion.mjs +19 -0
- package/dist/components/accordion.mjs.map +1 -0
- package/dist/components/alert.mjs +15 -0
- package/dist/components/alert.mjs.map +1 -0
- package/dist/components/avatar.mjs +23 -0
- package/dist/components/avatar.mjs.map +1 -0
- package/dist/components/badge.mjs +11 -0
- package/dist/components/badge.mjs.map +1 -0
- package/dist/components/breadcrumb.mjs +23 -0
- package/dist/components/breadcrumb.mjs.map +1 -0
- package/dist/components/button-group.mjs +11 -0
- package/dist/components/button-group.mjs.map +1 -0
- package/dist/components/button.mjs +12 -0
- package/dist/components/button.mjs.map +1 -0
- package/dist/components/card.mjs +25 -0
- package/dist/components/card.mjs.map +1 -0
- package/dist/components/chat-input.mjs +15 -0
- package/dist/components/chat-input.mjs.map +1 -0
- package/dist/components/chat-message.mjs +17 -0
- package/dist/components/chat-message.mjs.map +1 -0
- package/dist/components/checkbox.mjs +12 -0
- package/dist/components/checkbox.mjs.map +1 -0
- package/dist/components/divider.mjs +11 -0
- package/dist/components/divider.mjs.map +1 -0
- package/dist/components/drawer.mjs +33 -0
- package/dist/components/drawer.mjs.map +1 -0
- package/dist/components/dropdown.mjs +35 -0
- package/dist/components/dropdown.mjs.map +1 -0
- package/dist/components/field.mjs +17 -0
- package/dist/components/field.mjs.map +1 -0
- package/dist/components/icon-button.mjs +12 -0
- package/dist/components/icon-button.mjs.map +1 -0
- package/dist/components/input.mjs +12 -0
- package/dist/components/input.mjs.map +1 -0
- package/dist/components/metric-card.mjs +23 -0
- package/dist/components/metric-card.mjs.map +1 -0
- package/dist/components/modal.mjs +57 -0
- package/dist/components/modal.mjs.map +1 -0
- package/dist/components/navigation-menu.mjs +27 -0
- package/dist/components/navigation-menu.mjs.map +1 -0
- package/dist/components/pagination.mjs +33 -0
- package/dist/components/pagination.mjs.map +1 -0
- package/dist/components/popover.mjs +23 -0
- package/dist/components/popover.mjs.map +1 -0
- package/dist/components/progress.mjs +11 -0
- package/dist/components/progress.mjs.map +1 -0
- package/dist/components/quick-reply.mjs +15 -0
- package/dist/components/quick-reply.mjs.map +1 -0
- package/dist/components/radio-group.mjs +16 -0
- package/dist/components/radio-group.mjs.map +1 -0
- package/dist/components/segmented.mjs +15 -0
- package/dist/components/segmented.mjs.map +1 -0
- package/dist/components/select.mjs +23 -0
- package/dist/components/select.mjs.map +1 -0
- package/dist/components/skeleton.mjs +11 -0
- package/dist/components/skeleton.mjs.map +1 -0
- package/dist/components/slider.mjs +11 -0
- package/dist/components/slider.mjs.map +1 -0
- package/dist/components/spinner.mjs +11 -0
- package/dist/components/spinner.mjs.map +1 -0
- package/dist/components/switch.mjs +12 -0
- package/dist/components/switch.mjs.map +1 -0
- package/dist/components/table.mjs +23 -0
- package/dist/components/table.mjs.map +1 -0
- package/dist/components/tabs.mjs +19 -0
- package/dist/components/tabs.mjs.map +1 -0
- package/dist/components/textarea.mjs +12 -0
- package/dist/components/textarea.mjs.map +1 -0
- package/dist/components/toast.mjs +13 -0
- package/dist/components/toast.mjs.map +1 -0
- package/dist/components/toggle-group.mjs +15 -0
- package/dist/components/toggle-group.mjs.map +1 -0
- package/dist/components/toggle.mjs +11 -0
- package/dist/components/toggle.mjs.map +1 -0
- package/dist/components/tooltip.mjs +21 -0
- package/dist/components/tooltip.mjs.map +1 -0
- package/dist/components/typing-indicator.mjs +11 -0
- package/dist/components/typing-indicator.mjs.map +1 -0
- package/dist/index.mjs +296 -7536
- package/dist/index.mjs.map +1 -1
- package/llms.txt +23 -23
- package/package.json +4 -3
- package/dist/chart.d.mts +0 -147
- package/dist/index.d.mts +0 -1535
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
cn
|
|
4
|
+
} from "./chunk-53MIUPSY.mjs";
|
|
5
|
+
|
|
6
|
+
// src/components/ui/navigation-menu.tsx
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
|
|
9
|
+
import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
|
|
10
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
11
|
+
function ChevronDownIcon({ className }) {
|
|
12
|
+
return /* @__PURE__ */ React.createElement("svg", { className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, "aria-hidden": "true" }, /* @__PURE__ */ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }));
|
|
13
|
+
}
|
|
14
|
+
function ChevronRightIcon({ className }) {
|
|
15
|
+
return /* @__PURE__ */ React.createElement("svg", { className, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, "aria-hidden": "true" }, /* @__PURE__ */ React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }));
|
|
16
|
+
}
|
|
17
|
+
var contentRadiusMap = {
|
|
18
|
+
sm: "rounded",
|
|
19
|
+
// 4px
|
|
20
|
+
md: "rounded-md",
|
|
21
|
+
// 6px
|
|
22
|
+
lg: "rounded-lg",
|
|
23
|
+
// 8px
|
|
24
|
+
xl: "rounded-xl"
|
|
25
|
+
// 12px
|
|
26
|
+
};
|
|
27
|
+
var itemRadiusMap = {
|
|
28
|
+
sm: "rounded-sm",
|
|
29
|
+
// 2px
|
|
30
|
+
md: "rounded",
|
|
31
|
+
// 4px
|
|
32
|
+
lg: "rounded-md",
|
|
33
|
+
// 6px
|
|
34
|
+
xl: "rounded-lg"
|
|
35
|
+
// 8px
|
|
36
|
+
};
|
|
37
|
+
var NavigationMenuContext = React.createContext({
|
|
38
|
+
orientation: "horizontal",
|
|
39
|
+
size: "default",
|
|
40
|
+
collapsed: false,
|
|
41
|
+
radius: "lg",
|
|
42
|
+
fontWeight: "normal"
|
|
43
|
+
});
|
|
44
|
+
var useNavigationMenuContext = () => React.useContext(NavigationMenuContext);
|
|
45
|
+
var ContentLevelContext = React.createContext(false);
|
|
46
|
+
var navigationMenuSizeMap = {
|
|
47
|
+
sm: {
|
|
48
|
+
trigger: "h-8 text-sm px-3 gap-2",
|
|
49
|
+
link: "h-8 text-sm px-3 gap-2",
|
|
50
|
+
icon: "icon-xs",
|
|
51
|
+
collapsedSquare: "size-8",
|
|
52
|
+
collapsedWidth: 56,
|
|
53
|
+
dropdownLink: "px-3 py-1.5 text-sm gap-2",
|
|
54
|
+
subLink: "h-8 text-sm pl-8 pr-3 gap-2",
|
|
55
|
+
groupLabel: "text-2xs px-3 mb-1",
|
|
56
|
+
groupMargin: "mt-4 first:mt-0"
|
|
57
|
+
},
|
|
58
|
+
md: {
|
|
59
|
+
trigger: "h-9 text-md px-3.5 gap-2",
|
|
60
|
+
link: "h-9 text-md px-3.5 gap-2",
|
|
61
|
+
icon: "icon-sm",
|
|
62
|
+
collapsedSquare: "size-9",
|
|
63
|
+
collapsedWidth: 60,
|
|
64
|
+
dropdownLink: "px-3 py-1.5 text-md gap-2",
|
|
65
|
+
subLink: "h-9 text-md pl-9 pr-3.5 gap-2",
|
|
66
|
+
groupLabel: "text-xs px-3.5 mb-1",
|
|
67
|
+
groupMargin: "mt-4 first:mt-0"
|
|
68
|
+
},
|
|
69
|
+
default: {
|
|
70
|
+
trigger: "h-10 text-md px-4 gap-2",
|
|
71
|
+
link: "h-10 text-md px-4 gap-2",
|
|
72
|
+
icon: "icon-sm",
|
|
73
|
+
collapsedSquare: "size-10",
|
|
74
|
+
collapsedWidth: 64,
|
|
75
|
+
dropdownLink: "px-3 py-2 text-md gap-2",
|
|
76
|
+
subLink: "h-10 text-md pl-10 pr-4 gap-2",
|
|
77
|
+
groupLabel: "text-xs px-4 mb-1.5",
|
|
78
|
+
groupMargin: "mt-5 first:mt-0"
|
|
79
|
+
},
|
|
80
|
+
lg: {
|
|
81
|
+
trigger: "h-12 text-base px-6 gap-2",
|
|
82
|
+
link: "h-12 text-base px-6 gap-2",
|
|
83
|
+
icon: "icon-sm",
|
|
84
|
+
collapsedSquare: "size-12",
|
|
85
|
+
collapsedWidth: 72,
|
|
86
|
+
dropdownLink: "px-3 py-2.5 text-base gap-2",
|
|
87
|
+
subLink: "h-12 text-base pl-12 pr-6 gap-2",
|
|
88
|
+
groupLabel: "text-xs px-4 mb-2",
|
|
89
|
+
groupMargin: "mt-6 first:mt-0"
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
var NavigationMenu = React.forwardRef(
|
|
93
|
+
({
|
|
94
|
+
className,
|
|
95
|
+
orientation = "horizontal",
|
|
96
|
+
size = "default",
|
|
97
|
+
collapsed = false,
|
|
98
|
+
width,
|
|
99
|
+
collapsedWidth,
|
|
100
|
+
radius = "lg",
|
|
101
|
+
fontWeight = "normal",
|
|
102
|
+
delayDuration = 200,
|
|
103
|
+
skipDelayDuration = 300,
|
|
104
|
+
value,
|
|
105
|
+
defaultValue,
|
|
106
|
+
onValueChange,
|
|
107
|
+
children,
|
|
108
|
+
style,
|
|
109
|
+
...props
|
|
110
|
+
}, ref) => {
|
|
111
|
+
const contextValue = React.useMemo(
|
|
112
|
+
() => ({ orientation, size, collapsed: orientation === "vertical" ? collapsed : false, radius, fontWeight }),
|
|
113
|
+
[orientation, size, collapsed, radius, fontWeight]
|
|
114
|
+
);
|
|
115
|
+
if (orientation === "horizontal") {
|
|
116
|
+
return /* @__PURE__ */ React.createElement(NavigationMenuContext.Provider, { value: contextValue }, /* @__PURE__ */ React.createElement(
|
|
117
|
+
NavigationMenuPrimitive.Root,
|
|
118
|
+
{
|
|
119
|
+
ref,
|
|
120
|
+
className: cn("relative", className),
|
|
121
|
+
delayDuration,
|
|
122
|
+
skipDelayDuration,
|
|
123
|
+
value,
|
|
124
|
+
defaultValue: defaultValue ?? "",
|
|
125
|
+
onValueChange
|
|
126
|
+
},
|
|
127
|
+
children
|
|
128
|
+
));
|
|
129
|
+
}
|
|
130
|
+
const resolvedWidth = collapsed ? collapsedWidth ?? navigationMenuSizeMap[size].collapsedWidth : width ?? 256;
|
|
131
|
+
const widthValue = typeof resolvedWidth === "number" ? `${resolvedWidth}px` : resolvedWidth;
|
|
132
|
+
return /* @__PURE__ */ React.createElement(NavigationMenuContext.Provider, { value: contextValue }, /* @__PURE__ */ React.createElement(
|
|
133
|
+
"nav",
|
|
134
|
+
{
|
|
135
|
+
ref,
|
|
136
|
+
"aria-label": "navigation",
|
|
137
|
+
className: cn(
|
|
138
|
+
"flex flex-col",
|
|
139
|
+
"transition-[width] duration-normal ease-out",
|
|
140
|
+
className
|
|
141
|
+
),
|
|
142
|
+
style: { width: widthValue, ...style },
|
|
143
|
+
...props
|
|
144
|
+
},
|
|
145
|
+
children
|
|
146
|
+
));
|
|
147
|
+
}
|
|
148
|
+
);
|
|
149
|
+
NavigationMenu.displayName = "NavigationMenu";
|
|
150
|
+
var NavigationMenuList = React.forwardRef(
|
|
151
|
+
({ className, children, ...props }, ref) => {
|
|
152
|
+
const { orientation } = useNavigationMenuContext();
|
|
153
|
+
if (orientation === "horizontal") {
|
|
154
|
+
return /* @__PURE__ */ React.createElement(
|
|
155
|
+
NavigationMenuPrimitive.List,
|
|
156
|
+
{
|
|
157
|
+
ref,
|
|
158
|
+
className: cn("flex items-center gap-1", className),
|
|
159
|
+
...props
|
|
160
|
+
},
|
|
161
|
+
children
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
return /* @__PURE__ */ React.createElement(
|
|
165
|
+
"ul",
|
|
166
|
+
{
|
|
167
|
+
ref,
|
|
168
|
+
className: cn("flex flex-col gap-0.5", className),
|
|
169
|
+
...props
|
|
170
|
+
},
|
|
171
|
+
children
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
);
|
|
175
|
+
NavigationMenuList.displayName = "NavigationMenuList";
|
|
176
|
+
var NavigationMenuItem = React.forwardRef(
|
|
177
|
+
({ className, value, defaultOpen = false, children, ...props }, ref) => {
|
|
178
|
+
const { orientation, collapsed } = useNavigationMenuContext();
|
|
179
|
+
const [open, setOpen] = React.useState(defaultOpen);
|
|
180
|
+
React.useEffect(() => {
|
|
181
|
+
if (collapsed) setOpen(false);
|
|
182
|
+
}, [collapsed]);
|
|
183
|
+
if (orientation === "horizontal") {
|
|
184
|
+
return /* @__PURE__ */ React.createElement(
|
|
185
|
+
NavigationMenuPrimitive.Item,
|
|
186
|
+
{
|
|
187
|
+
ref,
|
|
188
|
+
className: cn("relative", className),
|
|
189
|
+
value,
|
|
190
|
+
...props
|
|
191
|
+
},
|
|
192
|
+
children
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
return /* @__PURE__ */ React.createElement(
|
|
196
|
+
CollapsiblePrimitive.Root,
|
|
197
|
+
{
|
|
198
|
+
open: collapsed ? false : open,
|
|
199
|
+
onOpenChange: collapsed ? void 0 : setOpen,
|
|
200
|
+
asChild: true
|
|
201
|
+
},
|
|
202
|
+
/* @__PURE__ */ React.createElement("li", { ref, className: cn("", className), ...props }, children)
|
|
203
|
+
);
|
|
204
|
+
}
|
|
205
|
+
);
|
|
206
|
+
NavigationMenuItem.displayName = "NavigationMenuItem";
|
|
207
|
+
var NavigationMenuTrigger = React.forwardRef(
|
|
208
|
+
({ className, children, icon, chevronIcon, ...props }, ref) => {
|
|
209
|
+
const { orientation, size, collapsed, radius, fontWeight: fw } = useNavigationMenuContext();
|
|
210
|
+
const s = navigationMenuSizeMap[size];
|
|
211
|
+
const fwClass = fw === "semibold" ? "font-semibold" : "font-normal";
|
|
212
|
+
if (orientation === "horizontal") {
|
|
213
|
+
return /* @__PURE__ */ React.createElement(
|
|
214
|
+
NavigationMenuPrimitive.Trigger,
|
|
215
|
+
{
|
|
216
|
+
ref,
|
|
217
|
+
className: cn(
|
|
218
|
+
"group inline-flex items-center justify-center",
|
|
219
|
+
s.trigger,
|
|
220
|
+
"gap-0",
|
|
221
|
+
fwClass,
|
|
222
|
+
"text-text-muted",
|
|
223
|
+
"transition-colors duration-fast",
|
|
224
|
+
"hover:text-foreground",
|
|
225
|
+
"data-[state=open]:text-foreground",
|
|
226
|
+
"focus-visible:focus-ring",
|
|
227
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
228
|
+
className
|
|
229
|
+
),
|
|
230
|
+
...props
|
|
231
|
+
},
|
|
232
|
+
icon && /* @__PURE__ */ React.createElement("span", { className: cn("shrink-0 mr-2", s.icon) }, icon),
|
|
233
|
+
children,
|
|
234
|
+
/* @__PURE__ */ React.createElement("span", { className: cn("shrink-0 ml-1 text-text-subtle transition-transform duration-fast group-data-[state=open]:rotate-180", s.icon) }, chevronIcon ?? /* @__PURE__ */ React.createElement(ChevronDownIcon, { className: "size-full" }))
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
return /* @__PURE__ */ React.createElement(
|
|
238
|
+
CollapsiblePrimitive.Trigger,
|
|
239
|
+
{
|
|
240
|
+
ref,
|
|
241
|
+
className: cn(
|
|
242
|
+
"group flex items-center cursor-pointer",
|
|
243
|
+
contentRadiusMap[radius],
|
|
244
|
+
collapsed ? [s.collapsedSquare, "justify-center mx-auto"] : ["w-full", s.trigger],
|
|
245
|
+
fwClass,
|
|
246
|
+
"text-text-muted transition-colors duration-fast",
|
|
247
|
+
"hover:text-foreground hover:bg-background-muted",
|
|
248
|
+
!collapsed && "data-[state=open]:text-foreground",
|
|
249
|
+
"focus-visible:focus-ring",
|
|
250
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
251
|
+
className
|
|
252
|
+
),
|
|
253
|
+
...collapsed && typeof children === "string" ? { title: children } : {},
|
|
254
|
+
...props
|
|
255
|
+
},
|
|
256
|
+
icon && /* @__PURE__ */ React.createElement("span", { className: cn("shrink-0", s.icon) }, icon),
|
|
257
|
+
!collapsed && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", { className: "flex-1 text-left truncate" }, children), /* @__PURE__ */ React.createElement(
|
|
258
|
+
"span",
|
|
259
|
+
{
|
|
260
|
+
className: cn(
|
|
261
|
+
"shrink-0 text-text-subtle transition-transform duration-normal",
|
|
262
|
+
s.icon,
|
|
263
|
+
"group-data-[state=open]:rotate-90"
|
|
264
|
+
)
|
|
265
|
+
},
|
|
266
|
+
chevronIcon ?? /* @__PURE__ */ React.createElement(ChevronRightIcon, { className: "size-full" })
|
|
267
|
+
))
|
|
268
|
+
);
|
|
269
|
+
}
|
|
270
|
+
);
|
|
271
|
+
NavigationMenuTrigger.displayName = "NavigationMenuTrigger";
|
|
272
|
+
var NavigationMenuContent = React.forwardRef(
|
|
273
|
+
({ className, children, ...props }, ref) => {
|
|
274
|
+
const { orientation, collapsed, radius } = useNavigationMenuContext();
|
|
275
|
+
if (orientation === "horizontal") {
|
|
276
|
+
return /* @__PURE__ */ React.createElement(ContentLevelContext.Provider, { value: true }, /* @__PURE__ */ React.createElement(
|
|
277
|
+
NavigationMenuPrimitive.Content,
|
|
278
|
+
{
|
|
279
|
+
ref,
|
|
280
|
+
className: cn(
|
|
281
|
+
"absolute left-0 top-full z-dropdown pt-1",
|
|
282
|
+
"data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out",
|
|
283
|
+
className
|
|
284
|
+
),
|
|
285
|
+
...props
|
|
286
|
+
},
|
|
287
|
+
/* @__PURE__ */ React.createElement("div", { className: cn("min-w-[180px] border border-border bg-background shadow-lg p-1.5 grid gap-0.5", contentRadiusMap[radius]) }, children)
|
|
288
|
+
));
|
|
289
|
+
}
|
|
290
|
+
if (collapsed) return null;
|
|
291
|
+
return /* @__PURE__ */ React.createElement(ContentLevelContext.Provider, { value: true }, /* @__PURE__ */ React.createElement(
|
|
292
|
+
CollapsiblePrimitive.Content,
|
|
293
|
+
{
|
|
294
|
+
ref,
|
|
295
|
+
className: cn(
|
|
296
|
+
"overflow-hidden",
|
|
297
|
+
"data-[state=open]:animate-collapsible-down data-[state=closed]:animate-collapsible-up"
|
|
298
|
+
),
|
|
299
|
+
...props
|
|
300
|
+
},
|
|
301
|
+
/* @__PURE__ */ React.createElement("div", { className: cn(
|
|
302
|
+
"flex flex-col gap-0.5 py-1",
|
|
303
|
+
className
|
|
304
|
+
) }, children)
|
|
305
|
+
));
|
|
306
|
+
}
|
|
307
|
+
);
|
|
308
|
+
NavigationMenuContent.displayName = "NavigationMenuContent";
|
|
309
|
+
var NavigationMenuLink = React.forwardRef(
|
|
310
|
+
({ className, active, asChild, icon, children, ...props }, ref) => {
|
|
311
|
+
const { orientation, size, collapsed, radius, fontWeight: fw } = useNavigationMenuContext();
|
|
312
|
+
const s = navigationMenuSizeMap[size];
|
|
313
|
+
const fwClass = fw === "semibold" ? "font-semibold" : "font-normal";
|
|
314
|
+
const inContent = React.useContext(ContentLevelContext);
|
|
315
|
+
if (orientation === "horizontal") {
|
|
316
|
+
const { onSelect, ...radixSafeProps } = props;
|
|
317
|
+
if (inContent) {
|
|
318
|
+
return /* @__PURE__ */ React.createElement(
|
|
319
|
+
NavigationMenuPrimitive.Link,
|
|
320
|
+
{
|
|
321
|
+
ref,
|
|
322
|
+
className: cn(
|
|
323
|
+
"flex items-center w-full",
|
|
324
|
+
s.dropdownLink,
|
|
325
|
+
itemRadiusMap[radius],
|
|
326
|
+
"text-text-muted transition-colors duration-fast",
|
|
327
|
+
"hover:text-foreground hover:bg-background-muted",
|
|
328
|
+
active && "text-foreground bg-background-muted font-semibold",
|
|
329
|
+
"focus-visible:focus-ring",
|
|
330
|
+
className
|
|
331
|
+
),
|
|
332
|
+
active,
|
|
333
|
+
asChild,
|
|
334
|
+
onSelect,
|
|
335
|
+
...radixSafeProps
|
|
336
|
+
},
|
|
337
|
+
asChild ? children : /* @__PURE__ */ React.createElement(React.Fragment, null, icon && /* @__PURE__ */ React.createElement("span", { className: cn("shrink-0", s.icon) }, icon), children)
|
|
338
|
+
);
|
|
339
|
+
}
|
|
340
|
+
return /* @__PURE__ */ React.createElement(
|
|
341
|
+
NavigationMenuPrimitive.Link,
|
|
342
|
+
{
|
|
343
|
+
ref,
|
|
344
|
+
className: cn(
|
|
345
|
+
"inline-flex items-center justify-center",
|
|
346
|
+
s.link,
|
|
347
|
+
fwClass,
|
|
348
|
+
"text-text-muted",
|
|
349
|
+
"transition-colors duration-fast",
|
|
350
|
+
"hover:text-foreground",
|
|
351
|
+
active && "text-foreground font-semibold",
|
|
352
|
+
"focus-visible:focus-ring",
|
|
353
|
+
className
|
|
354
|
+
),
|
|
355
|
+
active,
|
|
356
|
+
asChild,
|
|
357
|
+
onSelect,
|
|
358
|
+
...radixSafeProps
|
|
359
|
+
},
|
|
360
|
+
asChild ? children : /* @__PURE__ */ React.createElement(React.Fragment, null, icon && /* @__PURE__ */ React.createElement("span", { className: cn("shrink-0", s.icon) }, icon), children)
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
const Comp = asChild ? Slot : "a";
|
|
364
|
+
if (inContent) {
|
|
365
|
+
return /* @__PURE__ */ React.createElement(
|
|
366
|
+
Comp,
|
|
367
|
+
{
|
|
368
|
+
ref,
|
|
369
|
+
className: cn(
|
|
370
|
+
"flex items-center w-full cursor-pointer",
|
|
371
|
+
contentRadiusMap[radius],
|
|
372
|
+
s.subLink,
|
|
373
|
+
"text-text-muted transition-colors duration-fast",
|
|
374
|
+
"hover:text-foreground hover:bg-background-muted",
|
|
375
|
+
active && "text-foreground bg-background-muted font-semibold",
|
|
376
|
+
"focus-visible:focus-ring",
|
|
377
|
+
className
|
|
378
|
+
),
|
|
379
|
+
...active ? { "aria-current": "page" } : {},
|
|
380
|
+
...props
|
|
381
|
+
},
|
|
382
|
+
icon && /* @__PURE__ */ React.createElement("span", { className: cn("shrink-0", s.icon) }, icon),
|
|
383
|
+
!collapsed && children
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
return /* @__PURE__ */ React.createElement(
|
|
387
|
+
Comp,
|
|
388
|
+
{
|
|
389
|
+
ref,
|
|
390
|
+
className: cn(
|
|
391
|
+
"relative flex items-center cursor-pointer",
|
|
392
|
+
contentRadiusMap[radius],
|
|
393
|
+
collapsed ? [s.collapsedSquare, "justify-center mx-auto"] : ["w-full", s.link],
|
|
394
|
+
"text-text-muted transition-colors duration-fast",
|
|
395
|
+
"hover:text-foreground hover:bg-background-muted",
|
|
396
|
+
active && "text-foreground bg-background-muted font-semibold",
|
|
397
|
+
"focus-visible:focus-ring",
|
|
398
|
+
className
|
|
399
|
+
),
|
|
400
|
+
...active ? { "aria-current": "page" } : {},
|
|
401
|
+
...collapsed && typeof children === "string" ? { title: children } : {},
|
|
402
|
+
...props
|
|
403
|
+
},
|
|
404
|
+
icon && /* @__PURE__ */ React.createElement("span", { className: cn("shrink-0", s.icon) }, icon),
|
|
405
|
+
!collapsed && /* @__PURE__ */ React.createElement("span", { className: "truncate" }, children)
|
|
406
|
+
);
|
|
407
|
+
}
|
|
408
|
+
);
|
|
409
|
+
NavigationMenuLink.displayName = "NavigationMenuLink";
|
|
410
|
+
var NavigationMenuGroup = React.forwardRef(
|
|
411
|
+
({ className, label, children, ...props }, ref) => {
|
|
412
|
+
const { size, collapsed } = useNavigationMenuContext();
|
|
413
|
+
const s = navigationMenuSizeMap[size];
|
|
414
|
+
return /* @__PURE__ */ React.createElement("div", { ref, role: "group", className: cn(label && !collapsed && s.groupMargin, className), ...props }, label && !collapsed && /* @__PURE__ */ React.createElement("div", { className: cn(
|
|
415
|
+
"font-semibold text-text-subtle uppercase tracking-wider select-none",
|
|
416
|
+
s.groupLabel
|
|
417
|
+
) }, label), /* @__PURE__ */ React.createElement("ul", { className: "flex flex-col gap-0.5" }, children));
|
|
418
|
+
}
|
|
419
|
+
);
|
|
420
|
+
NavigationMenuGroup.displayName = "NavigationMenuGroup";
|
|
421
|
+
var NavigationMenuIndicator = React.forwardRef(
|
|
422
|
+
({ className, color = "default", ...props }, ref) => {
|
|
423
|
+
const { orientation } = useNavigationMenuContext();
|
|
424
|
+
if (orientation === "vertical") return null;
|
|
425
|
+
return /* @__PURE__ */ React.createElement(
|
|
426
|
+
NavigationMenuPrimitive.Indicator,
|
|
427
|
+
{
|
|
428
|
+
ref,
|
|
429
|
+
className: cn(
|
|
430
|
+
"z-10 flex h-[3px] items-end justify-center overflow-hidden",
|
|
431
|
+
"transition-[width,transform] duration-normal ease-out",
|
|
432
|
+
"data-[state=visible]:animate-fade-in data-[state=hidden]:animate-fade-out",
|
|
433
|
+
className
|
|
434
|
+
),
|
|
435
|
+
...props
|
|
436
|
+
},
|
|
437
|
+
/* @__PURE__ */ React.createElement("div", { className: cn(
|
|
438
|
+
"relative h-full w-full rounded-full",
|
|
439
|
+
color === "default" ? "bg-foreground" : "bg-primary"
|
|
440
|
+
) })
|
|
441
|
+
);
|
|
442
|
+
}
|
|
443
|
+
);
|
|
444
|
+
NavigationMenuIndicator.displayName = "NavigationMenuIndicator";
|
|
445
|
+
var NavigationMenuViewport = React.forwardRef(
|
|
446
|
+
({ className, ...props }, ref) => {
|
|
447
|
+
const { orientation } = useNavigationMenuContext();
|
|
448
|
+
if (orientation === "vertical") return null;
|
|
449
|
+
return /* @__PURE__ */ React.createElement("div", { className: "absolute left-0 top-full z-dropdown w-auto pt-1" }, /* @__PURE__ */ React.createElement(
|
|
450
|
+
NavigationMenuPrimitive.Viewport,
|
|
451
|
+
{
|
|
452
|
+
ref,
|
|
453
|
+
className: cn(
|
|
454
|
+
"relative overflow-hidden",
|
|
455
|
+
"border border-border bg-background rounded-xl shadow-lg",
|
|
456
|
+
"h-[var(--radix-navigation-menu-viewport-height)]",
|
|
457
|
+
"w-[var(--radix-navigation-menu-viewport-width)]",
|
|
458
|
+
"transition-[width,height] duration-fast ease-out",
|
|
459
|
+
"data-[state=open]:animate-nav-viewport-enter",
|
|
460
|
+
"data-[state=closed]:animate-nav-viewport-exit",
|
|
461
|
+
className
|
|
462
|
+
),
|
|
463
|
+
...props
|
|
464
|
+
}
|
|
465
|
+
));
|
|
466
|
+
}
|
|
467
|
+
);
|
|
468
|
+
NavigationMenuViewport.displayName = "NavigationMenuViewport";
|
|
469
|
+
|
|
470
|
+
export {
|
|
471
|
+
navigationMenuSizeMap,
|
|
472
|
+
NavigationMenu,
|
|
473
|
+
NavigationMenuList,
|
|
474
|
+
NavigationMenuItem,
|
|
475
|
+
NavigationMenuTrigger,
|
|
476
|
+
NavigationMenuContent,
|
|
477
|
+
NavigationMenuLink,
|
|
478
|
+
NavigationMenuGroup,
|
|
479
|
+
NavigationMenuIndicator,
|
|
480
|
+
NavigationMenuViewport
|
|
481
|
+
};
|
|
482
|
+
//# sourceMappingURL=chunk-DTLNWOTR.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/navigation-menu.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu'\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cn } from '@/lib/utils'\n\n// ─── Built-in Icons ───────────────────────────────────────\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2} aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n )\n}\n\nfunction ChevronRightIcon({ className }: { className?: string }) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2} aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n}\n\n// ─── Radius Configuration ─────────────────────────────────\n\ntype NavigationMenuRadius = 'sm' | 'md' | 'lg' | 'xl'\n\nconst contentRadiusMap: Record<NavigationMenuRadius, string> = {\n sm: 'rounded', // 4px\n md: 'rounded-md', // 6px\n lg: 'rounded-lg', // 8px\n xl: 'rounded-xl', // 12px\n}\n\nconst itemRadiusMap: Record<NavigationMenuRadius, string> = {\n sm: 'rounded-sm', // 2px\n md: 'rounded', // 4px\n lg: 'rounded-md', // 6px\n xl: 'rounded-lg', // 8px\n}\n\n// ─── Contexts ─────────────────────────────────────────────\n\ntype NavigationMenuContextValue = {\n orientation: 'horizontal' | 'vertical'\n size: 'sm' | 'md' | 'default' | 'lg'\n collapsed: boolean\n radius: NavigationMenuRadius\n fontWeight: 'normal' | 'semibold'\n}\n\nconst NavigationMenuContext = React.createContext<NavigationMenuContextValue>({\n orientation: 'horizontal',\n size: 'default',\n collapsed: false,\n radius: 'lg',\n fontWeight: 'normal',\n})\nconst useNavigationMenuContext = () => React.useContext(NavigationMenuContext)\n\n// Whether we're inside NavigationMenuContent (affects link styling)\nconst ContentLevelContext = React.createContext(false)\n\n// ─── Size Configuration ───────────────────────────────────\n\nconst navigationMenuSizeMap = {\n sm: {\n trigger: 'h-8 text-sm px-3 gap-2',\n link: 'h-8 text-sm px-3 gap-2',\n icon: 'icon-xs',\n collapsedSquare: 'size-8', collapsedWidth: 56,\n dropdownLink: 'px-3 py-1.5 text-sm gap-2',\n subLink: 'h-8 text-sm pl-8 pr-3 gap-2',\n groupLabel: 'text-2xs px-3 mb-1', groupMargin: 'mt-4 first:mt-0',\n },\n md: {\n trigger: 'h-9 text-md px-3.5 gap-2',\n link: 'h-9 text-md px-3.5 gap-2',\n icon: 'icon-sm',\n collapsedSquare: 'size-9', collapsedWidth: 60,\n dropdownLink: 'px-3 py-1.5 text-md gap-2',\n subLink: 'h-9 text-md pl-9 pr-3.5 gap-2',\n groupLabel: 'text-xs px-3.5 mb-1', groupMargin: 'mt-4 first:mt-0',\n },\n default: {\n trigger: 'h-10 text-md px-4 gap-2',\n link: 'h-10 text-md px-4 gap-2',\n icon: 'icon-sm',\n collapsedSquare: 'size-10', collapsedWidth: 64,\n dropdownLink: 'px-3 py-2 text-md gap-2',\n subLink: 'h-10 text-md pl-10 pr-4 gap-2',\n groupLabel: 'text-xs px-4 mb-1.5', groupMargin: 'mt-5 first:mt-0',\n },\n lg: {\n trigger: 'h-12 text-base px-6 gap-2',\n link: 'h-12 text-base px-6 gap-2',\n icon: 'icon-sm',\n collapsedSquare: 'size-12', collapsedWidth: 72,\n dropdownLink: 'px-3 py-2.5 text-base gap-2',\n subLink: 'h-12 text-base pl-12 pr-6 gap-2',\n groupLabel: 'text-xs px-4 mb-2', groupMargin: 'mt-6 first:mt-0',\n },\n} as const\n\n// ─── NavigationMenu (Root) ────────────────────────────────\n\nexport interface NavigationMenuProps extends React.HTMLAttributes<HTMLElement> {\n /** Layout orientation */\n orientation?: 'horizontal' | 'vertical'\n /** Size of the menu items */\n size?: 'sm' | 'md' | 'default' | 'lg'\n /** Vertical only: show icons only (collapsed sidebar) */\n collapsed?: boolean\n /** Vertical only: sidebar width (default: 256px / 16rem) */\n width?: number | string\n /** Vertical only: collapsed sidebar width (default: 64px / 4rem) */\n collapsedWidth?: number | string\n /** Border radius for dropdown content and items */\n radius?: NavigationMenuRadius\n /** Font weight for menu items (default: normal, active items always use semibold) */\n fontWeight?: 'normal' | 'semibold'\n /** Horizontal only: delay before hover opens in ms */\n delayDuration?: number\n /** Horizontal only: skip delay when moving between triggers */\n skipDelayDuration?: number\n /** Controlled active menu item value */\n value?: string\n /** Default active menu item value (uncontrolled) */\n defaultValue?: string\n /** Callback when active item changes */\n onValueChange?: (value: string) => void\n}\n\nconst NavigationMenu = React.forwardRef<HTMLElement, NavigationMenuProps>(\n ({\n className,\n orientation = 'horizontal',\n size = 'default',\n collapsed = false,\n width,\n collapsedWidth,\n radius = 'lg',\n fontWeight = 'normal',\n delayDuration = 200,\n skipDelayDuration = 300,\n value,\n defaultValue,\n onValueChange,\n children,\n style,\n ...props\n }, ref) => {\n const contextValue = React.useMemo(\n () => ({ orientation, size, collapsed: orientation === 'vertical' ? collapsed : false, radius, fontWeight }),\n [orientation, size, collapsed, radius, fontWeight]\n )\n\n if (orientation === 'horizontal') {\n return (\n <NavigationMenuContext.Provider value={contextValue}>\n <NavigationMenuPrimitive.Root\n ref={ref as React.Ref<HTMLDivElement>}\n className={cn('relative', className)}\n delayDuration={delayDuration}\n skipDelayDuration={skipDelayDuration}\n value={value}\n defaultValue={defaultValue ?? ''}\n onValueChange={onValueChange}\n >\n {children}\n </NavigationMenuPrimitive.Root>\n </NavigationMenuContext.Provider>\n )\n }\n\n // Vertical mode\n const resolvedWidth = collapsed\n ? (collapsedWidth ?? navigationMenuSizeMap[size].collapsedWidth)\n : (width ?? 256)\n const widthValue = typeof resolvedWidth === 'number' ? `${resolvedWidth}px` : resolvedWidth\n\n return (\n <NavigationMenuContext.Provider value={contextValue}>\n <nav\n ref={ref}\n aria-label=\"navigation\"\n className={cn(\n 'flex flex-col',\n 'transition-[width] duration-normal ease-out',\n className\n )}\n style={{ width: widthValue, ...style }}\n {...props}\n >\n {children}\n </nav>\n </NavigationMenuContext.Provider>\n )\n }\n)\nNavigationMenu.displayName = 'NavigationMenu'\n\n// ─── NavigationMenuList ───────────────────────────────────\n\nexport interface NavigationMenuListProps extends React.HTMLAttributes<HTMLUListElement> {}\n\nconst NavigationMenuList = React.forwardRef<HTMLUListElement, NavigationMenuListProps>(\n ({ className, children, ...props }, ref) => {\n const { orientation } = useNavigationMenuContext()\n\n if (orientation === 'horizontal') {\n return (\n <NavigationMenuPrimitive.List\n ref={ref}\n className={cn('flex items-center gap-1', className)}\n {...props}\n >\n {children}\n </NavigationMenuPrimitive.List>\n )\n }\n\n return (\n <ul\n ref={ref}\n className={cn('flex flex-col gap-0.5', className)}\n {...props}\n >\n {children}\n </ul>\n )\n }\n)\nNavigationMenuList.displayName = 'NavigationMenuList'\n\n// ─── NavigationMenuItem ───────────────────────────────────\n\nexport interface NavigationMenuItemProps extends React.HTMLAttributes<HTMLLIElement> {\n /** Value identifier for Radix (horizontal mode) */\n value?: string\n /** Vertical only: default open state for sub-menu */\n defaultOpen?: boolean\n}\n\nconst NavigationMenuItem = React.forwardRef<HTMLLIElement, NavigationMenuItemProps>(\n ({ className, value, defaultOpen = false, children, ...props }, ref) => {\n const { orientation, collapsed } = useNavigationMenuContext()\n const [open, setOpen] = React.useState(defaultOpen)\n\n // Auto-close sub-menus when collapsed\n React.useEffect(() => {\n if (collapsed) setOpen(false)\n }, [collapsed])\n\n if (orientation === 'horizontal') {\n return (\n <NavigationMenuPrimitive.Item\n ref={ref}\n className={cn('relative', className)}\n value={value}\n {...props}\n >\n {children}\n </NavigationMenuPrimitive.Item>\n )\n }\n\n // Vertical: wrap in Collapsible.Root for sub-menu support\n return (\n <CollapsiblePrimitive.Root\n open={collapsed ? false : open}\n onOpenChange={collapsed ? undefined : setOpen}\n asChild\n >\n <li ref={ref} className={cn('', className)} {...props}>\n {children}\n </li>\n </CollapsiblePrimitive.Root>\n )\n }\n)\nNavigationMenuItem.displayName = 'NavigationMenuItem'\n\n// ─── NavigationMenuTrigger ────────────────────────────────\n\nexport interface NavigationMenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Icon displayed before the label */\n icon?: React.ReactNode\n /** Custom chevron icon (default: built-in ChevronDown for horizontal, ChevronRight for vertical) */\n chevronIcon?: React.ReactNode\n}\n\nconst NavigationMenuTrigger = React.forwardRef<HTMLButtonElement, NavigationMenuTriggerProps>(\n ({ className, children, icon, chevronIcon, ...props }, ref) => {\n const { orientation, size, collapsed, radius, fontWeight: fw } = useNavigationMenuContext()\n const s = navigationMenuSizeMap[size]\n const fwClass = fw === 'semibold' ? 'font-semibold' : 'font-normal'\n\n if (orientation === 'horizontal') {\n return (\n <NavigationMenuPrimitive.Trigger\n ref={ref}\n className={cn(\n 'group inline-flex items-center justify-center',\n s.trigger,\n 'gap-0',\n fwClass, 'text-text-muted',\n 'transition-colors duration-fast',\n 'hover:text-foreground',\n 'data-[state=open]:text-foreground',\n 'focus-visible:focus-ring',\n 'disabled:pointer-events-none disabled:opacity-50',\n className\n )}\n {...props}\n >\n {icon && <span className={cn('shrink-0 mr-2', s.icon)}>{icon}</span>}\n {children}\n <span className={cn('shrink-0 ml-1 text-text-subtle transition-transform duration-fast group-data-[state=open]:rotate-180', s.icon)}>\n {chevronIcon ?? <ChevronDownIcon className=\"size-full\" />}\n </span>\n </NavigationMenuPrimitive.Trigger>\n )\n }\n\n // Vertical: Collapsible trigger\n return (\n <CollapsiblePrimitive.Trigger\n ref={ref}\n className={cn(\n 'group flex items-center cursor-pointer',\n contentRadiusMap[radius],\n collapsed\n ? [s.collapsedSquare, 'justify-center mx-auto']\n : ['w-full', s.trigger],\n fwClass, 'text-text-muted transition-colors duration-fast',\n 'hover:text-foreground hover:bg-background-muted',\n !collapsed && 'data-[state=open]:text-foreground',\n 'focus-visible:focus-ring',\n 'disabled:pointer-events-none disabled:opacity-50',\n className\n )}\n {...(collapsed && typeof children === 'string' ? { title: children } : {})}\n {...props}\n >\n {icon && <span className={cn('shrink-0', s.icon)}>{icon}</span>}\n {!collapsed && (\n <>\n <span className=\"flex-1 text-left truncate\">{children}</span>\n <span\n className={cn(\n 'shrink-0 text-text-subtle transition-transform duration-normal',\n s.icon,\n 'group-data-[state=open]:rotate-90'\n )}\n >\n {chevronIcon ?? <ChevronRightIcon className=\"size-full\" />}\n </span>\n </>\n )}\n </CollapsiblePrimitive.Trigger>\n )\n }\n)\nNavigationMenuTrigger.displayName = 'NavigationMenuTrigger'\n\n// ─── NavigationMenuContent ────────────────────────────────\n\nexport interface NavigationMenuContentProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst NavigationMenuContent = React.forwardRef<HTMLDivElement, NavigationMenuContentProps>(\n ({ className, children, ...props }, ref) => {\n const { orientation, collapsed, radius } = useNavigationMenuContext()\n\n if (orientation === 'horizontal') {\n return (\n <ContentLevelContext.Provider value={true}>\n <NavigationMenuPrimitive.Content\n ref={ref}\n className={cn(\n 'absolute left-0 top-full z-dropdown pt-1',\n 'data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out',\n className\n )}\n {...props}\n >\n <div className={cn('min-w-[180px] border border-border bg-background shadow-lg p-1.5 grid gap-0.5', contentRadiusMap[radius])}>\n {children}\n </div>\n </NavigationMenuPrimitive.Content>\n </ContentLevelContext.Provider>\n )\n }\n\n // Vertical: Collapsible content (hidden when collapsed)\n if (collapsed) return null\n\n return (\n <ContentLevelContext.Provider value={true}>\n <CollapsiblePrimitive.Content\n ref={ref}\n className={cn(\n 'overflow-hidden',\n 'data-[state=open]:animate-collapsible-down data-[state=closed]:animate-collapsible-up',\n )}\n {...props}\n >\n <div className={cn(\n 'flex flex-col gap-0.5 py-1',\n className\n )}>\n {children}\n </div>\n </CollapsiblePrimitive.Content>\n </ContentLevelContext.Provider>\n )\n }\n)\nNavigationMenuContent.displayName = 'NavigationMenuContent'\n\n// ─── NavigationMenuLink ───────────────────────────────────\n\nexport interface NavigationMenuLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /** Whether the link represents the current page */\n active?: boolean\n /** Compose with custom link component (Radix Slot) */\n asChild?: boolean\n /** Icon displayed before the label */\n icon?: React.ReactNode\n}\n\nconst NavigationMenuLink = React.forwardRef<HTMLAnchorElement, NavigationMenuLinkProps>(\n ({ className, active, asChild, icon, children, ...props }, ref) => {\n const { orientation, size, collapsed, radius, fontWeight: fw } = useNavigationMenuContext()\n const s = navigationMenuSizeMap[size]\n const fwClass = fw === 'semibold' ? 'font-semibold' : 'font-normal'\n const inContent = React.useContext(ContentLevelContext)\n\n if (orientation === 'horizontal') {\n // Exclude onSelect to avoid React vs Radix type conflict\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { onSelect, ...radixSafeProps } = props as any\n\n // Content-level links (inside dropdown): block style with hover bg\n if (inContent) {\n return (\n <NavigationMenuPrimitive.Link\n ref={ref}\n className={cn(\n 'flex items-center w-full',\n s.dropdownLink,\n itemRadiusMap[radius],\n 'text-text-muted transition-colors duration-fast',\n 'hover:text-foreground hover:bg-background-muted',\n active && 'text-foreground bg-background-muted font-semibold',\n 'focus-visible:focus-ring',\n className\n )}\n active={active}\n asChild={asChild}\n onSelect={onSelect}\n {...radixSafeProps}\n >\n {asChild ? children : (\n <>\n {icon && <span className={cn('shrink-0', s.icon)}>{icon}</span>}\n {children}\n </>\n )}\n </NavigationMenuPrimitive.Link>\n )\n }\n\n // Top-level horizontal links: text only, no hover bg\n return (\n <NavigationMenuPrimitive.Link\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center',\n s.link,\n fwClass, 'text-text-muted',\n 'transition-colors duration-fast',\n 'hover:text-foreground',\n active && 'text-foreground font-semibold',\n 'focus-visible:focus-ring',\n className\n )}\n active={active}\n asChild={asChild}\n onSelect={onSelect}\n {...radixSafeProps}\n >\n {asChild ? children : (\n <>\n {icon && <span className={cn('shrink-0', s.icon)}>{icon}</span>}\n {children}\n </>\n )}\n </NavigationMenuPrimitive.Link>\n )\n }\n\n // ── Vertical mode ──\n\n const Comp = asChild ? Slot : 'a'\n\n // Content-level links (sub-menu items): compact, indented\n if (inContent) {\n return (\n <Comp\n ref={ref}\n className={cn(\n 'flex items-center w-full cursor-pointer',\n contentRadiusMap[radius],\n s.subLink,\n 'text-text-muted transition-colors duration-fast',\n 'hover:text-foreground hover:bg-background-muted',\n active && 'text-foreground bg-background-muted font-semibold',\n 'focus-visible:focus-ring',\n className\n )}\n {...(active ? { 'aria-current': 'page' as const } : {})}\n {...props}\n >\n {icon && <span className={cn('shrink-0', s.icon)}>{icon}</span>}\n {!collapsed && children}\n </Comp>\n )\n }\n\n // Top-level vertical links\n return (\n <Comp\n ref={ref}\n className={cn(\n 'relative flex items-center cursor-pointer',\n contentRadiusMap[radius],\n collapsed\n ? [s.collapsedSquare, 'justify-center mx-auto']\n : ['w-full', s.link],\n 'text-text-muted transition-colors duration-fast',\n 'hover:text-foreground hover:bg-background-muted',\n active && 'text-foreground bg-background-muted font-semibold',\n 'focus-visible:focus-ring',\n className\n )}\n {...(active ? { 'aria-current': 'page' as const } : {})}\n {...(collapsed && typeof children === 'string' ? { title: children } : {})}\n {...props}\n >\n {icon && <span className={cn('shrink-0', s.icon)}>{icon}</span>}\n {!collapsed && <span className=\"truncate\">{children}</span>}\n </Comp>\n )\n }\n)\nNavigationMenuLink.displayName = 'NavigationMenuLink'\n\n// ─── NavigationMenuGroup (vertical only) ──────────────────\n\nexport interface NavigationMenuGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Group header label */\n label?: string\n}\n\nconst NavigationMenuGroup = React.forwardRef<HTMLDivElement, NavigationMenuGroupProps>(\n ({ className, label, children, ...props }, ref) => {\n const { size, collapsed } = useNavigationMenuContext()\n const s = navigationMenuSizeMap[size]\n\n return (\n <div ref={ref} role=\"group\" className={cn(label && !collapsed && s.groupMargin, className)} {...props}>\n {label && !collapsed && (\n <div className={cn(\n 'font-semibold text-text-subtle uppercase tracking-wider select-none',\n s.groupLabel,\n )}>\n {label}\n </div>\n )}\n <ul className=\"flex flex-col gap-0.5\">\n {children}\n </ul>\n </div>\n )\n }\n)\nNavigationMenuGroup.displayName = 'NavigationMenuGroup'\n\n// ─── NavigationMenuIndicator ──────────────────────────────\n\nexport interface NavigationMenuIndicatorProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Active indicator dot color (default: dark/foreground, primary: brand color) */\n color?: 'default' | 'primary'\n}\n\nconst NavigationMenuIndicator = React.forwardRef<HTMLDivElement, NavigationMenuIndicatorProps>(\n ({ className, color = 'default', ...props }, ref) => {\n const { orientation } = useNavigationMenuContext()\n\n // Vertical: active indicator is built into NavigationMenuLink styling\n if (orientation === 'vertical') return null\n\n return (\n <NavigationMenuPrimitive.Indicator\n ref={ref}\n className={cn(\n 'z-10 flex h-[3px] items-end justify-center overflow-hidden',\n 'transition-[width,transform] duration-normal ease-out',\n 'data-[state=visible]:animate-fade-in data-[state=hidden]:animate-fade-out',\n className\n )}\n {...props}\n >\n <div className={cn(\n 'relative h-full w-full rounded-full',\n color === 'default' ? 'bg-foreground' : 'bg-primary'\n )} />\n </NavigationMenuPrimitive.Indicator>\n )\n }\n)\nNavigationMenuIndicator.displayName = 'NavigationMenuIndicator'\n\n// ─── NavigationMenuViewport ───────────────────────────────\n\nexport interface NavigationMenuViewportProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst NavigationMenuViewport = React.forwardRef<HTMLDivElement, NavigationMenuViewportProps>(\n ({ className, ...props }, ref) => {\n const { orientation } = useNavigationMenuContext()\n\n // Vertical mode does not use a viewport\n if (orientation === 'vertical') return null\n\n return (\n <div className=\"absolute left-0 top-full z-dropdown w-auto pt-1\">\n <NavigationMenuPrimitive.Viewport\n ref={ref}\n className={cn(\n 'relative overflow-hidden',\n 'border border-border bg-background rounded-xl shadow-lg',\n 'h-[var(--radix-navigation-menu-viewport-height)]',\n 'w-[var(--radix-navigation-menu-viewport-width)]',\n 'transition-[width,height] duration-fast ease-out',\n 'data-[state=open]:animate-nav-viewport-enter',\n 'data-[state=closed]:animate-nav-viewport-exit',\n className\n )}\n {...props}\n />\n </div>\n )\n }\n)\nNavigationMenuViewport.displayName = 'NavigationMenuViewport'\n\n// ─── Exports ──────────────────────────────────────────────\nexport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuTrigger,\n NavigationMenuContent,\n NavigationMenuLink,\n NavigationMenuGroup,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n navigationMenuSizeMap,\n type NavigationMenuRadius,\n}\n"],"mappings":"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","names":[]}
|