@logickernel/frame 0.1.0 → 0.3.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 +1 -1
- package/dist/index.d.mts +143 -11
- package/dist/index.d.ts +143 -11
- package/dist/index.js +851 -73
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +793 -21
- package/dist/index.mjs.map +1 -1
- package/package.json +10 -22
- package/dist/adapters/nextjs.js +0 -31
- package/dist/adapters/nextjs.js.map +0 -1
- package/dist/adapters/nextjs.mjs +0 -25
- package/dist/adapters/nextjs.mjs.map +0 -1
- package/dist/components/AppSidebar.js +0 -467
- package/dist/components/AppSidebar.js.map +0 -1
- package/dist/components/AppSidebar.mjs +0 -446
- package/dist/components/AppSidebar.mjs.map +0 -1
- package/dist/components/NavMain.js +0 -133
- package/dist/components/NavMain.js.map +0 -1
- package/dist/components/NavMain.mjs +0 -112
- package/dist/components/NavMain.mjs.map +0 -1
- package/dist/components/NavUser.js +0 -88
- package/dist/components/NavUser.js.map +0 -1
- package/dist/components/NavUser.mjs +0 -86
- package/dist/components/NavUser.mjs.map +0 -1
- package/dist/components/TeamSwitcher.js +0 -164
- package/dist/components/TeamSwitcher.js.map +0 -1
- package/dist/components/TeamSwitcher.mjs +0 -162
- package/dist/components/TeamSwitcher.mjs.map +0 -1
- package/dist/hooks/useNavigation.d.mts +0 -24
- package/dist/hooks/useNavigation.d.ts +0 -24
- package/dist/hooks/useNavigation.js +0 -59
- package/dist/hooks/useNavigation.js.map +0 -1
- package/dist/hooks/useNavigation.mjs +0 -57
- package/dist/hooks/useNavigation.mjs.map +0 -1
- package/dist/types/index.d.mts +0 -85
- package/dist/types/index.d.ts +0 -85
- package/dist/types/index.js +0 -4
- package/dist/types/index.js.map +0 -1
- package/dist/types/index.mjs +0 -3
- package/dist/types/index.mjs.map +0 -1
- package/dist/types/ui-components.d.js +0 -4
- package/dist/types/ui-components.d.js.map +0 -1
- package/dist/types/ui-components.d.mjs +0 -3
- package/dist/types/ui-components.d.mjs.map +0 -1
- package/dist/utils/iconMapper.d.mts +0 -16
- package/dist/utils/iconMapper.d.ts +0 -16
- package/dist/utils/iconMapper.js +0 -52
- package/dist/utils/iconMapper.js.map +0 -1
- package/dist/utils/iconMapper.mjs +0 -30
- package/dist/utils/iconMapper.mjs.map +0 -1
package/dist/index.mjs
CHANGED
|
@@ -1,16 +1,627 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import { ChevronRight, ChevronsUpDown, BadgeCheck, LogOut, GalleryVerticalEnd, Check } from 'lucide-react';
|
|
3
|
-
import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '@/components/ui/collapsible';
|
|
4
|
-
import { SidebarGroup, SidebarGroupLabel, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarMenuSub, SidebarMenuSubItem, SidebarMenuSubButton, useSidebar, Sidebar, SidebarHeader, SidebarContent, SidebarFooter, SidebarRail } from '@/components/ui/sidebar';
|
|
5
|
-
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
6
|
-
import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar';
|
|
7
|
-
import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuGroup, DropdownMenuItem } from '@/components/ui/dropdown-menu';
|
|
1
|
+
import * as React2 from 'react';
|
|
8
2
|
import { useState, useEffect } from 'react';
|
|
9
3
|
import Link from 'next/link';
|
|
10
4
|
import { usePathname, useRouter } from 'next/navigation';
|
|
11
5
|
import { signOut } from 'next-auth/react';
|
|
6
|
+
import * as LucideIcons from 'lucide-react';
|
|
7
|
+
import { PanelLeft, ChevronRight, Check, Circle, ChevronsUpDown, BadgeCheck, LogOut, GalleryVerticalEnd } from 'lucide-react';
|
|
8
|
+
import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
|
|
9
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
10
|
+
import { cva } from 'class-variance-authority';
|
|
11
|
+
import { clsx } from 'clsx';
|
|
12
|
+
import { twMerge } from 'tailwind-merge';
|
|
13
|
+
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
14
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
15
|
+
import * as AvatarPrimitive from '@radix-ui/react-avatar';
|
|
16
|
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
|
12
17
|
|
|
13
|
-
// src/components/
|
|
18
|
+
// src/components/AppSidebar.tsx
|
|
19
|
+
var Collapsible = CollapsiblePrimitive.Root;
|
|
20
|
+
var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
|
|
21
|
+
var CollapsibleContent2 = CollapsiblePrimitive.CollapsibleContent;
|
|
22
|
+
function cn(...inputs) {
|
|
23
|
+
return twMerge(clsx(inputs));
|
|
24
|
+
}
|
|
25
|
+
var TooltipProvider = TooltipPrimitive.Provider;
|
|
26
|
+
var Tooltip = TooltipPrimitive.Root;
|
|
27
|
+
var TooltipTrigger = TooltipPrimitive.Trigger;
|
|
28
|
+
var TooltipContent = React2.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
29
|
+
TooltipPrimitive.Content,
|
|
30
|
+
{
|
|
31
|
+
ref,
|
|
32
|
+
sideOffset,
|
|
33
|
+
className: cn(
|
|
34
|
+
"z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
35
|
+
className
|
|
36
|
+
),
|
|
37
|
+
...props
|
|
38
|
+
}
|
|
39
|
+
) }));
|
|
40
|
+
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
41
|
+
var SIDEBAR_COOKIE_NAME = "sidebar_state";
|
|
42
|
+
var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
|
|
43
|
+
var SIDEBAR_WIDTH = "16rem";
|
|
44
|
+
var SIDEBAR_WIDTH_MOBILE = "18rem";
|
|
45
|
+
var SIDEBAR_WIDTH_ICON = "3rem";
|
|
46
|
+
var SIDEBAR_KEYBOARD_SHORTCUT = "b";
|
|
47
|
+
var SidebarContext = React2.createContext(null);
|
|
48
|
+
function useSidebar() {
|
|
49
|
+
const context = React2.useContext(SidebarContext);
|
|
50
|
+
if (!context) {
|
|
51
|
+
throw new Error("useSidebar must be used within a SidebarProvider.");
|
|
52
|
+
}
|
|
53
|
+
return context;
|
|
54
|
+
}
|
|
55
|
+
function useIsMobile() {
|
|
56
|
+
const [isMobile, setIsMobile] = React2.useState(false);
|
|
57
|
+
React2.useEffect(() => {
|
|
58
|
+
const mql = window.matchMedia("(max-width: 768px)");
|
|
59
|
+
const onChange = () => setIsMobile(mql.matches);
|
|
60
|
+
mql.addEventListener("change", onChange);
|
|
61
|
+
setIsMobile(mql.matches);
|
|
62
|
+
return () => mql.removeEventListener("change", onChange);
|
|
63
|
+
}, []);
|
|
64
|
+
return isMobile;
|
|
65
|
+
}
|
|
66
|
+
var SidebarProvider = React2.forwardRef(
|
|
67
|
+
({
|
|
68
|
+
defaultOpen = true,
|
|
69
|
+
open: openProp,
|
|
70
|
+
onOpenChange: setOpenProp,
|
|
71
|
+
className,
|
|
72
|
+
style,
|
|
73
|
+
children,
|
|
74
|
+
...props
|
|
75
|
+
}, ref) => {
|
|
76
|
+
const isMobile = useIsMobile();
|
|
77
|
+
const [openMobile, setOpenMobile] = React2.useState(false);
|
|
78
|
+
const [_open, _setOpen] = React2.useState(defaultOpen);
|
|
79
|
+
const open = openProp ?? _open;
|
|
80
|
+
const setOpen = React2.useCallback(
|
|
81
|
+
(value) => {
|
|
82
|
+
const openState = typeof value === "function" ? value(open) : value;
|
|
83
|
+
if (setOpenProp) {
|
|
84
|
+
setOpenProp(openState);
|
|
85
|
+
} else {
|
|
86
|
+
_setOpen(openState);
|
|
87
|
+
}
|
|
88
|
+
document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
|
|
89
|
+
},
|
|
90
|
+
[setOpenProp, open]
|
|
91
|
+
);
|
|
92
|
+
const toggleSidebar = React2.useCallback(() => {
|
|
93
|
+
return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
|
|
94
|
+
}, [isMobile, setOpen, setOpenMobile]);
|
|
95
|
+
React2.useEffect(() => {
|
|
96
|
+
const handleKeyDown = (event) => {
|
|
97
|
+
if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
|
|
98
|
+
event.preventDefault();
|
|
99
|
+
toggleSidebar();
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
103
|
+
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
104
|
+
}, [toggleSidebar]);
|
|
105
|
+
const state = open ? "expanded" : "collapsed";
|
|
106
|
+
const contextValue = React2.useMemo(
|
|
107
|
+
() => ({
|
|
108
|
+
state,
|
|
109
|
+
open,
|
|
110
|
+
setOpen,
|
|
111
|
+
isMobile,
|
|
112
|
+
openMobile,
|
|
113
|
+
setOpenMobile,
|
|
114
|
+
toggleSidebar
|
|
115
|
+
}),
|
|
116
|
+
[state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
|
|
117
|
+
);
|
|
118
|
+
return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx(
|
|
119
|
+
"div",
|
|
120
|
+
{
|
|
121
|
+
style: {
|
|
122
|
+
"--sidebar-width": SIDEBAR_WIDTH,
|
|
123
|
+
"--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
|
|
124
|
+
...style
|
|
125
|
+
},
|
|
126
|
+
className: cn(
|
|
127
|
+
"group/sidebar-wrapper flex min-h-svh w-full has-[[data-variant=inset]]:bg-sidebar",
|
|
128
|
+
className
|
|
129
|
+
),
|
|
130
|
+
ref,
|
|
131
|
+
...props,
|
|
132
|
+
children
|
|
133
|
+
}
|
|
134
|
+
) }) });
|
|
135
|
+
}
|
|
136
|
+
);
|
|
137
|
+
SidebarProvider.displayName = "SidebarProvider";
|
|
138
|
+
var Sidebar = React2.forwardRef(
|
|
139
|
+
({
|
|
140
|
+
side = "left",
|
|
141
|
+
variant = "sidebar",
|
|
142
|
+
collapsible = "offcanvas",
|
|
143
|
+
className,
|
|
144
|
+
children,
|
|
145
|
+
...props
|
|
146
|
+
}, ref) => {
|
|
147
|
+
const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
|
|
148
|
+
if (collapsible === "none") {
|
|
149
|
+
return /* @__PURE__ */ jsx(
|
|
150
|
+
"div",
|
|
151
|
+
{
|
|
152
|
+
className: cn(
|
|
153
|
+
"flex h-full w-[--sidebar-width] flex-col bg-sidebar text-sidebar-foreground",
|
|
154
|
+
className
|
|
155
|
+
),
|
|
156
|
+
ref,
|
|
157
|
+
...props,
|
|
158
|
+
children
|
|
159
|
+
}
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
if (isMobile) {
|
|
163
|
+
return /* @__PURE__ */ jsx(
|
|
164
|
+
"div",
|
|
165
|
+
{
|
|
166
|
+
className: cn(
|
|
167
|
+
"fixed inset-0 z-50 bg-black/80",
|
|
168
|
+
openMobile ? "block" : "hidden"
|
|
169
|
+
),
|
|
170
|
+
onClick: () => setOpenMobile(false),
|
|
171
|
+
children: /* @__PURE__ */ jsx(
|
|
172
|
+
"div",
|
|
173
|
+
{
|
|
174
|
+
"data-sidebar": "sidebar",
|
|
175
|
+
"data-mobile": "true",
|
|
176
|
+
className: cn(
|
|
177
|
+
"fixed inset-y-0 z-50 flex h-svh w-[--sidebar-width] flex-col bg-sidebar p-2 text-sidebar-foreground",
|
|
178
|
+
side === "left" ? "left-0 border-r" : "right-0 border-l",
|
|
179
|
+
className
|
|
180
|
+
),
|
|
181
|
+
style: {
|
|
182
|
+
"--sidebar-width": SIDEBAR_WIDTH_MOBILE
|
|
183
|
+
},
|
|
184
|
+
onClick: (e) => e.stopPropagation(),
|
|
185
|
+
ref,
|
|
186
|
+
...props,
|
|
187
|
+
children
|
|
188
|
+
}
|
|
189
|
+
)
|
|
190
|
+
}
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
return /* @__PURE__ */ jsxs(
|
|
194
|
+
"div",
|
|
195
|
+
{
|
|
196
|
+
ref,
|
|
197
|
+
className: "group peer hidden md:block text-sidebar-foreground",
|
|
198
|
+
"data-state": state,
|
|
199
|
+
"data-collapsible": state === "collapsed" ? collapsible : "",
|
|
200
|
+
"data-variant": variant,
|
|
201
|
+
"data-side": side,
|
|
202
|
+
children: [
|
|
203
|
+
/* @__PURE__ */ jsx(
|
|
204
|
+
"div",
|
|
205
|
+
{
|
|
206
|
+
className: cn(
|
|
207
|
+
"duration-200 relative h-svh w-[--sidebar-width] bg-transparent transition-[width] ease-linear",
|
|
208
|
+
"group-data-[collapsible=offcanvas]:w-0",
|
|
209
|
+
"group-data-[side=right]:rotate-180",
|
|
210
|
+
variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]" : "group-data-[collapsible=icon]:w-[--sidebar-width-icon]"
|
|
211
|
+
)
|
|
212
|
+
}
|
|
213
|
+
),
|
|
214
|
+
/* @__PURE__ */ jsx(
|
|
215
|
+
"div",
|
|
216
|
+
{
|
|
217
|
+
className: cn(
|
|
218
|
+
"duration-200 fixed inset-y-0 z-10 hidden h-svh w-[--sidebar-width] transition-[left,right,width] ease-linear md:flex",
|
|
219
|
+
side === "left" ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]" : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
|
|
220
|
+
// Adjust the padding for floating and inset variants.
|
|
221
|
+
variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]" : "group-data-[collapsible=icon]:w-[--sidebar-width-icon] group-data-[side=left]:border-r group-data-[side=right]:border-l",
|
|
222
|
+
className
|
|
223
|
+
),
|
|
224
|
+
...props,
|
|
225
|
+
children: /* @__PURE__ */ jsx(
|
|
226
|
+
"div",
|
|
227
|
+
{
|
|
228
|
+
"data-sidebar": "sidebar",
|
|
229
|
+
className: "flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow",
|
|
230
|
+
children
|
|
231
|
+
}
|
|
232
|
+
)
|
|
233
|
+
}
|
|
234
|
+
)
|
|
235
|
+
]
|
|
236
|
+
}
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
);
|
|
240
|
+
Sidebar.displayName = "Sidebar";
|
|
241
|
+
var SidebarTrigger = React2.forwardRef(({ className, onClick, ...props }, ref) => {
|
|
242
|
+
const { toggleSidebar } = useSidebar();
|
|
243
|
+
return /* @__PURE__ */ jsxs(
|
|
244
|
+
"button",
|
|
245
|
+
{
|
|
246
|
+
ref,
|
|
247
|
+
"data-sidebar": "trigger",
|
|
248
|
+
className: cn("h-7 w-7", className),
|
|
249
|
+
onClick: (event) => {
|
|
250
|
+
onClick?.(event);
|
|
251
|
+
toggleSidebar();
|
|
252
|
+
},
|
|
253
|
+
...props,
|
|
254
|
+
children: [
|
|
255
|
+
/* @__PURE__ */ jsx(PanelLeft, {}),
|
|
256
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Toggle Sidebar" })
|
|
257
|
+
]
|
|
258
|
+
}
|
|
259
|
+
);
|
|
260
|
+
});
|
|
261
|
+
SidebarTrigger.displayName = "SidebarTrigger";
|
|
262
|
+
var SidebarRail = React2.forwardRef(({ className, ...props }, ref) => {
|
|
263
|
+
const { toggleSidebar } = useSidebar();
|
|
264
|
+
return /* @__PURE__ */ jsx(
|
|
265
|
+
"button",
|
|
266
|
+
{
|
|
267
|
+
ref,
|
|
268
|
+
"data-sidebar": "rail",
|
|
269
|
+
"aria-label": "Toggle Sidebar",
|
|
270
|
+
tabIndex: -1,
|
|
271
|
+
onClick: toggleSidebar,
|
|
272
|
+
title: "Toggle Sidebar",
|
|
273
|
+
className: cn(
|
|
274
|
+
"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex",
|
|
275
|
+
"[[data-side=left]_&]:cursor-w-resize [[data-side=right]_&]:cursor-e-resize",
|
|
276
|
+
"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
|
|
277
|
+
"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar",
|
|
278
|
+
"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
|
|
279
|
+
"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
|
|
280
|
+
className
|
|
281
|
+
),
|
|
282
|
+
...props
|
|
283
|
+
}
|
|
284
|
+
);
|
|
285
|
+
});
|
|
286
|
+
SidebarRail.displayName = "SidebarRail";
|
|
287
|
+
var SidebarInset = React2.forwardRef(({ className, ...props }, ref) => {
|
|
288
|
+
return /* @__PURE__ */ jsx(
|
|
289
|
+
"main",
|
|
290
|
+
{
|
|
291
|
+
ref,
|
|
292
|
+
className: cn(
|
|
293
|
+
"relative flex min-h-svh flex-1 flex-col bg-background",
|
|
294
|
+
"peer-data-[variant=inset]:min-h-[calc(100svh-theme(spacing.4))] md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow",
|
|
295
|
+
className
|
|
296
|
+
),
|
|
297
|
+
...props
|
|
298
|
+
}
|
|
299
|
+
);
|
|
300
|
+
});
|
|
301
|
+
SidebarInset.displayName = "SidebarInset";
|
|
302
|
+
var SidebarInput = React2.forwardRef(({ className, ...props }, ref) => {
|
|
303
|
+
return /* @__PURE__ */ jsx(
|
|
304
|
+
"input",
|
|
305
|
+
{
|
|
306
|
+
ref,
|
|
307
|
+
"data-sidebar": "input",
|
|
308
|
+
className: cn(
|
|
309
|
+
"h-8 w-full bg-background shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring",
|
|
310
|
+
className
|
|
311
|
+
),
|
|
312
|
+
...props
|
|
313
|
+
}
|
|
314
|
+
);
|
|
315
|
+
});
|
|
316
|
+
SidebarInput.displayName = "SidebarInput";
|
|
317
|
+
var SidebarHeader = React2.forwardRef(({ className, ...props }, ref) => {
|
|
318
|
+
return /* @__PURE__ */ jsx(
|
|
319
|
+
"div",
|
|
320
|
+
{
|
|
321
|
+
ref,
|
|
322
|
+
"data-sidebar": "header",
|
|
323
|
+
className: cn("flex flex-col gap-2 p-2", className),
|
|
324
|
+
...props
|
|
325
|
+
}
|
|
326
|
+
);
|
|
327
|
+
});
|
|
328
|
+
SidebarHeader.displayName = "SidebarHeader";
|
|
329
|
+
var SidebarFooter = React2.forwardRef(({ className, ...props }, ref) => {
|
|
330
|
+
return /* @__PURE__ */ jsx(
|
|
331
|
+
"div",
|
|
332
|
+
{
|
|
333
|
+
ref,
|
|
334
|
+
"data-sidebar": "footer",
|
|
335
|
+
className: cn("flex flex-col gap-2 p-2", className),
|
|
336
|
+
...props
|
|
337
|
+
}
|
|
338
|
+
);
|
|
339
|
+
});
|
|
340
|
+
SidebarFooter.displayName = "SidebarFooter";
|
|
341
|
+
var SidebarSeparator = React2.forwardRef(({ className, ...props }, ref) => {
|
|
342
|
+
return /* @__PURE__ */ jsx(
|
|
343
|
+
"hr",
|
|
344
|
+
{
|
|
345
|
+
ref,
|
|
346
|
+
"data-sidebar": "separator",
|
|
347
|
+
className: cn("mx-2 w-auto bg-sidebar-border", className),
|
|
348
|
+
...props
|
|
349
|
+
}
|
|
350
|
+
);
|
|
351
|
+
});
|
|
352
|
+
SidebarSeparator.displayName = "SidebarSeparator";
|
|
353
|
+
var SidebarContent = React2.forwardRef(({ className, ...props }, ref) => {
|
|
354
|
+
return /* @__PURE__ */ jsx(
|
|
355
|
+
"div",
|
|
356
|
+
{
|
|
357
|
+
ref,
|
|
358
|
+
"data-sidebar": "content",
|
|
359
|
+
className: cn(
|
|
360
|
+
"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",
|
|
361
|
+
className
|
|
362
|
+
),
|
|
363
|
+
...props
|
|
364
|
+
}
|
|
365
|
+
);
|
|
366
|
+
});
|
|
367
|
+
SidebarContent.displayName = "SidebarContent";
|
|
368
|
+
var SidebarGroup = React2.forwardRef(({ className, ...props }, ref) => {
|
|
369
|
+
return /* @__PURE__ */ jsx(
|
|
370
|
+
"div",
|
|
371
|
+
{
|
|
372
|
+
ref,
|
|
373
|
+
"data-sidebar": "group",
|
|
374
|
+
className: cn("relative flex w-full min-w-0 flex-col p-2", className),
|
|
375
|
+
...props
|
|
376
|
+
}
|
|
377
|
+
);
|
|
378
|
+
});
|
|
379
|
+
SidebarGroup.displayName = "SidebarGroup";
|
|
380
|
+
var SidebarGroupLabel = React2.forwardRef(({ className, asChild = false, ...props }, ref) => {
|
|
381
|
+
const Comp = asChild ? Slot : "div";
|
|
382
|
+
return /* @__PURE__ */ jsx(
|
|
383
|
+
Comp,
|
|
384
|
+
{
|
|
385
|
+
ref,
|
|
386
|
+
"data-sidebar": "group-label",
|
|
387
|
+
className: cn(
|
|
388
|
+
"duration-200 flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opa] ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
|
|
389
|
+
"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",
|
|
390
|
+
className
|
|
391
|
+
),
|
|
392
|
+
...props
|
|
393
|
+
}
|
|
394
|
+
);
|
|
395
|
+
});
|
|
396
|
+
SidebarGroupLabel.displayName = "SidebarGroupLabel";
|
|
397
|
+
var SidebarGroupAction = React2.forwardRef(({ className, asChild = false, ...props }, ref) => {
|
|
398
|
+
const Comp = asChild ? Slot : "button";
|
|
399
|
+
return /* @__PURE__ */ jsx(
|
|
400
|
+
Comp,
|
|
401
|
+
{
|
|
402
|
+
ref,
|
|
403
|
+
"data-sidebar": "group-action",
|
|
404
|
+
className: cn(
|
|
405
|
+
"absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
|
|
406
|
+
// Increases the hit area of the button on mobile.
|
|
407
|
+
"after:absolute after:-inset-2 after:md:hidden",
|
|
408
|
+
"group-data-[collapsible=icon]:hidden",
|
|
409
|
+
className
|
|
410
|
+
),
|
|
411
|
+
...props
|
|
412
|
+
}
|
|
413
|
+
);
|
|
414
|
+
});
|
|
415
|
+
SidebarGroupAction.displayName = "SidebarGroupAction";
|
|
416
|
+
var SidebarGroupContent = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
417
|
+
"div",
|
|
418
|
+
{
|
|
419
|
+
ref,
|
|
420
|
+
"data-sidebar": "group-content",
|
|
421
|
+
className: cn("w-full text-sm", className),
|
|
422
|
+
...props
|
|
423
|
+
}
|
|
424
|
+
));
|
|
425
|
+
SidebarGroupContent.displayName = "SidebarGroupContent";
|
|
426
|
+
var SidebarMenu = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
427
|
+
"ul",
|
|
428
|
+
{
|
|
429
|
+
ref,
|
|
430
|
+
"data-sidebar": "menu",
|
|
431
|
+
className: cn("flex w-full min-w-0 flex-col gap-1", className),
|
|
432
|
+
...props
|
|
433
|
+
}
|
|
434
|
+
));
|
|
435
|
+
SidebarMenu.displayName = "SidebarMenu";
|
|
436
|
+
var SidebarMenuItem = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
437
|
+
"li",
|
|
438
|
+
{
|
|
439
|
+
ref,
|
|
440
|
+
"data-sidebar": "menu-item",
|
|
441
|
+
className: cn("group/menu-item relative", className),
|
|
442
|
+
...props
|
|
443
|
+
}
|
|
444
|
+
));
|
|
445
|
+
SidebarMenuItem.displayName = "SidebarMenuItem";
|
|
446
|
+
var sidebarMenuButtonVariants = cva(
|
|
447
|
+
"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
|
|
448
|
+
{
|
|
449
|
+
variants: {
|
|
450
|
+
variant: {
|
|
451
|
+
default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
|
|
452
|
+
outline: "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"
|
|
453
|
+
},
|
|
454
|
+
size: {
|
|
455
|
+
default: "h-8 text-sm",
|
|
456
|
+
sm: "h-7 text-xs",
|
|
457
|
+
lg: "h-12 text-sm group-data-[collapsible=icon]:!p-0"
|
|
458
|
+
}
|
|
459
|
+
},
|
|
460
|
+
defaultVariants: {
|
|
461
|
+
variant: "default",
|
|
462
|
+
size: "default"
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
);
|
|
466
|
+
var SidebarMenuButton = React2.forwardRef(
|
|
467
|
+
({
|
|
468
|
+
asChild = false,
|
|
469
|
+
isActive = false,
|
|
470
|
+
variant = "default",
|
|
471
|
+
size = "default",
|
|
472
|
+
tooltip,
|
|
473
|
+
className,
|
|
474
|
+
...props
|
|
475
|
+
}, ref) => {
|
|
476
|
+
const Comp = asChild ? Slot : "button";
|
|
477
|
+
const { isMobile, state } = useSidebar();
|
|
478
|
+
const button = /* @__PURE__ */ jsx(
|
|
479
|
+
Comp,
|
|
480
|
+
{
|
|
481
|
+
ref,
|
|
482
|
+
"data-sidebar": "menu-button",
|
|
483
|
+
"data-size": size,
|
|
484
|
+
"data-active": isActive,
|
|
485
|
+
className: cn(sidebarMenuButtonVariants({ variant, size }), className),
|
|
486
|
+
...props
|
|
487
|
+
}
|
|
488
|
+
);
|
|
489
|
+
if (!tooltip) {
|
|
490
|
+
return button;
|
|
491
|
+
}
|
|
492
|
+
if (typeof tooltip === "string") {
|
|
493
|
+
tooltip = {
|
|
494
|
+
children: tooltip
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
return /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
498
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: button }),
|
|
499
|
+
/* @__PURE__ */ jsx(
|
|
500
|
+
TooltipContent,
|
|
501
|
+
{
|
|
502
|
+
side: "right",
|
|
503
|
+
align: "center",
|
|
504
|
+
hidden: state !== "collapsed" || isMobile,
|
|
505
|
+
...tooltip
|
|
506
|
+
}
|
|
507
|
+
)
|
|
508
|
+
] });
|
|
509
|
+
}
|
|
510
|
+
);
|
|
511
|
+
SidebarMenuButton.displayName = "SidebarMenuButton";
|
|
512
|
+
var SidebarMenuAction = React2.forwardRef(({ className, asChild = false, showOnHover = false, ...props }, ref) => {
|
|
513
|
+
const Comp = asChild ? Slot : "button";
|
|
514
|
+
return /* @__PURE__ */ jsx(
|
|
515
|
+
Comp,
|
|
516
|
+
{
|
|
517
|
+
ref,
|
|
518
|
+
"data-sidebar": "menu-action",
|
|
519
|
+
className: cn(
|
|
520
|
+
"absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0",
|
|
521
|
+
// Increases the hit area of the button on mobile.
|
|
522
|
+
"after:absolute after:-inset-2 after:md:hidden",
|
|
523
|
+
"peer-data-[size=sm]/menu-button:top-1",
|
|
524
|
+
"peer-data-[size=default]/menu-button:top-1.5",
|
|
525
|
+
"peer-data-[size=lg]/menu-button:top-2.5",
|
|
526
|
+
"group-data-[collapsible=icon]:hidden",
|
|
527
|
+
showOnHover && "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0",
|
|
528
|
+
className
|
|
529
|
+
),
|
|
530
|
+
...props
|
|
531
|
+
}
|
|
532
|
+
);
|
|
533
|
+
});
|
|
534
|
+
SidebarMenuAction.displayName = "SidebarMenuAction";
|
|
535
|
+
var SidebarMenuBadge = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
536
|
+
"div",
|
|
537
|
+
{
|
|
538
|
+
ref,
|
|
539
|
+
"data-sidebar": "menu-badge",
|
|
540
|
+
className: cn(
|
|
541
|
+
"absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground select-none pointer-events-none",
|
|
542
|
+
"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground",
|
|
543
|
+
"peer-data-[size=sm]/menu-button:top-1",
|
|
544
|
+
"peer-data-[size=default]/menu-button:top-1.5",
|
|
545
|
+
"peer-data-[size=lg]/menu-button:top-2.5",
|
|
546
|
+
"group-data-[collapsible=icon]:hidden",
|
|
547
|
+
className
|
|
548
|
+
),
|
|
549
|
+
...props
|
|
550
|
+
}
|
|
551
|
+
));
|
|
552
|
+
SidebarMenuBadge.displayName = "SidebarMenuBadge";
|
|
553
|
+
var SidebarMenuSkeleton = React2.forwardRef(({ className, showIcon = false, ...props }, ref) => {
|
|
554
|
+
const width = React2.useMemo(() => {
|
|
555
|
+
return `${Math.floor(Math.random() * 40) + 50}%`;
|
|
556
|
+
}, []);
|
|
557
|
+
return /* @__PURE__ */ jsxs(
|
|
558
|
+
"div",
|
|
559
|
+
{
|
|
560
|
+
ref,
|
|
561
|
+
"data-sidebar": "menu-skeleton",
|
|
562
|
+
className: cn("rounded-md h-8 flex gap-2 px-2 items-center", className),
|
|
563
|
+
...props,
|
|
564
|
+
children: [
|
|
565
|
+
showIcon && /* @__PURE__ */ jsx(
|
|
566
|
+
"div",
|
|
567
|
+
{
|
|
568
|
+
className: "size-4 rounded-md bg-sidebar-accent-foreground/10",
|
|
569
|
+
"data-sidebar": "menu-skeleton-icon"
|
|
570
|
+
}
|
|
571
|
+
),
|
|
572
|
+
/* @__PURE__ */ jsx(
|
|
573
|
+
"div",
|
|
574
|
+
{
|
|
575
|
+
className: "h-4 flex-1 max-w-[--skeleton-width] rounded-md bg-sidebar-accent-foreground/10",
|
|
576
|
+
"data-sidebar": "menu-skeleton-text",
|
|
577
|
+
style: {
|
|
578
|
+
"--skeleton-width": width
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
)
|
|
582
|
+
]
|
|
583
|
+
}
|
|
584
|
+
);
|
|
585
|
+
});
|
|
586
|
+
SidebarMenuSkeleton.displayName = "SidebarMenuSkeleton";
|
|
587
|
+
var SidebarMenuSub = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
588
|
+
"ul",
|
|
589
|
+
{
|
|
590
|
+
ref,
|
|
591
|
+
"data-sidebar": "menu-sub",
|
|
592
|
+
className: cn(
|
|
593
|
+
"mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5",
|
|
594
|
+
"group-data-[collapsible=icon]:hidden",
|
|
595
|
+
className
|
|
596
|
+
),
|
|
597
|
+
...props
|
|
598
|
+
}
|
|
599
|
+
));
|
|
600
|
+
SidebarMenuSub.displayName = "SidebarMenuSub";
|
|
601
|
+
var SidebarMenuSubItem = React2.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx("li", { ref, ...props }));
|
|
602
|
+
SidebarMenuSubItem.displayName = "SidebarMenuSubItem";
|
|
603
|
+
var SidebarMenuSubButton = React2.forwardRef(({ asChild = false, size = "md", isActive, className, ...props }, ref) => {
|
|
604
|
+
const Comp = asChild ? Slot : "a";
|
|
605
|
+
return /* @__PURE__ */ jsx(
|
|
606
|
+
Comp,
|
|
607
|
+
{
|
|
608
|
+
ref,
|
|
609
|
+
"data-sidebar": "menu-sub-button",
|
|
610
|
+
"data-size": size,
|
|
611
|
+
"data-active": isActive,
|
|
612
|
+
className: cn(
|
|
613
|
+
"flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-none ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground",
|
|
614
|
+
"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground",
|
|
615
|
+
size === "sm" && "text-xs",
|
|
616
|
+
size === "md" && "text-sm",
|
|
617
|
+
"group-data-[collapsible=icon]:hidden",
|
|
618
|
+
className
|
|
619
|
+
),
|
|
620
|
+
...props
|
|
621
|
+
}
|
|
622
|
+
);
|
|
623
|
+
});
|
|
624
|
+
SidebarMenuSubButton.displayName = "SidebarMenuSubButton";
|
|
14
625
|
var ICON_MAP = {
|
|
15
626
|
Home: LucideIcons.Home,
|
|
16
627
|
Users: LucideIcons.Users,
|
|
@@ -36,7 +647,7 @@ function getIconComponent(icon) {
|
|
|
36
647
|
}
|
|
37
648
|
function NavMain({ items, adapter }) {
|
|
38
649
|
const pathname = adapter.usePathname();
|
|
39
|
-
const
|
|
650
|
+
const Link3 = adapter.Link;
|
|
40
651
|
const groups = [];
|
|
41
652
|
let currentGroup = {
|
|
42
653
|
items: []
|
|
@@ -80,7 +691,7 @@ function NavMain({ items, adapter }) {
|
|
|
80
691
|
defaultOpen: isActive,
|
|
81
692
|
className: "group/collapsible",
|
|
82
693
|
children: /* @__PURE__ */ jsxs(SidebarMenuItem, { children: [
|
|
83
|
-
/* @__PURE__ */ jsx(
|
|
694
|
+
/* @__PURE__ */ jsx(CollapsibleTrigger2, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
84
695
|
SidebarMenuButton,
|
|
85
696
|
{
|
|
86
697
|
tooltip: item.title,
|
|
@@ -92,7 +703,7 @@ function NavMain({ items, adapter }) {
|
|
|
92
703
|
]
|
|
93
704
|
}
|
|
94
705
|
) }),
|
|
95
|
-
/* @__PURE__ */ jsx(
|
|
706
|
+
/* @__PURE__ */ jsx(CollapsibleContent2, { children: /* @__PURE__ */ jsx(SidebarMenuSub, { children: item.items?.map((subItem) => /* @__PURE__ */ jsx(SidebarMenuSubItem, { children: /* @__PURE__ */ jsx(SidebarMenuSubButton, { asChild: true, children: /* @__PURE__ */ jsx(Link3, { href: subItem.url, children: /* @__PURE__ */ jsx("span", { children: subItem.title }) }) }) }, subItem.title)) }) })
|
|
96
707
|
] })
|
|
97
708
|
},
|
|
98
709
|
item.title
|
|
@@ -104,7 +715,7 @@ function NavMain({ items, adapter }) {
|
|
|
104
715
|
asChild: true,
|
|
105
716
|
tooltip: item.title,
|
|
106
717
|
isActive,
|
|
107
|
-
children: /* @__PURE__ */ jsxs(
|
|
718
|
+
children: /* @__PURE__ */ jsxs(Link3, { href: item.url, children: [
|
|
108
719
|
item.icon && /* @__PURE__ */ jsx(item.icon, {}),
|
|
109
720
|
/* @__PURE__ */ jsx("span", { children: item.title })
|
|
110
721
|
] })
|
|
@@ -113,6 +724,153 @@ function NavMain({ items, adapter }) {
|
|
|
113
724
|
}) })
|
|
114
725
|
] }, groupIndex)) });
|
|
115
726
|
}
|
|
727
|
+
var Avatar = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
728
|
+
AvatarPrimitive.Root,
|
|
729
|
+
{
|
|
730
|
+
ref,
|
|
731
|
+
className: cn(
|
|
732
|
+
"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
|
|
733
|
+
className
|
|
734
|
+
),
|
|
735
|
+
...props
|
|
736
|
+
}
|
|
737
|
+
));
|
|
738
|
+
Avatar.displayName = AvatarPrimitive.Root.displayName;
|
|
739
|
+
var AvatarImage = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
740
|
+
AvatarPrimitive.Image,
|
|
741
|
+
{
|
|
742
|
+
ref,
|
|
743
|
+
className: cn("aspect-square h-full w-full", className),
|
|
744
|
+
...props
|
|
745
|
+
}
|
|
746
|
+
));
|
|
747
|
+
AvatarImage.displayName = AvatarPrimitive.Image.displayName;
|
|
748
|
+
var AvatarFallback = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
749
|
+
AvatarPrimitive.Fallback,
|
|
750
|
+
{
|
|
751
|
+
ref,
|
|
752
|
+
className: cn(
|
|
753
|
+
"flex h-full w-full items-center justify-center rounded-full bg-muted",
|
|
754
|
+
className
|
|
755
|
+
),
|
|
756
|
+
...props
|
|
757
|
+
}
|
|
758
|
+
));
|
|
759
|
+
AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
|
|
760
|
+
var DropdownMenu = DropdownMenuPrimitive.Root;
|
|
761
|
+
var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
|
|
762
|
+
var DropdownMenuGroup = DropdownMenuPrimitive.Group;
|
|
763
|
+
var DropdownMenuSubTrigger = React2.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
764
|
+
DropdownMenuPrimitive.SubTrigger,
|
|
765
|
+
{
|
|
766
|
+
ref,
|
|
767
|
+
className: cn(
|
|
768
|
+
"flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
769
|
+
inset && "pl-8",
|
|
770
|
+
className
|
|
771
|
+
),
|
|
772
|
+
...props,
|
|
773
|
+
children: [
|
|
774
|
+
children,
|
|
775
|
+
/* @__PURE__ */ jsx(ChevronRight, { className: "ml-auto" })
|
|
776
|
+
]
|
|
777
|
+
}
|
|
778
|
+
));
|
|
779
|
+
DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
|
|
780
|
+
var DropdownMenuSubContent = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
781
|
+
DropdownMenuPrimitive.SubContent,
|
|
782
|
+
{
|
|
783
|
+
ref,
|
|
784
|
+
className: cn(
|
|
785
|
+
"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
786
|
+
className
|
|
787
|
+
),
|
|
788
|
+
...props
|
|
789
|
+
}
|
|
790
|
+
));
|
|
791
|
+
DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
|
|
792
|
+
var DropdownMenuContent = React2.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
793
|
+
DropdownMenuPrimitive.Content,
|
|
794
|
+
{
|
|
795
|
+
ref,
|
|
796
|
+
sideOffset,
|
|
797
|
+
className: cn(
|
|
798
|
+
"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md",
|
|
799
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
800
|
+
className
|
|
801
|
+
),
|
|
802
|
+
...props
|
|
803
|
+
}
|
|
804
|
+
) }));
|
|
805
|
+
DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
|
|
806
|
+
var DropdownMenuItem = React2.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
807
|
+
DropdownMenuPrimitive.Item,
|
|
808
|
+
{
|
|
809
|
+
ref,
|
|
810
|
+
className: cn(
|
|
811
|
+
"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0",
|
|
812
|
+
inset && "pl-8",
|
|
813
|
+
className
|
|
814
|
+
),
|
|
815
|
+
...props
|
|
816
|
+
}
|
|
817
|
+
));
|
|
818
|
+
DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
|
|
819
|
+
var DropdownMenuCheckboxItem = React2.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
820
|
+
DropdownMenuPrimitive.CheckboxItem,
|
|
821
|
+
{
|
|
822
|
+
ref,
|
|
823
|
+
className: cn(
|
|
824
|
+
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
825
|
+
className
|
|
826
|
+
),
|
|
827
|
+
checked,
|
|
828
|
+
...props,
|
|
829
|
+
children: [
|
|
830
|
+
/* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }) }),
|
|
831
|
+
children
|
|
832
|
+
]
|
|
833
|
+
}
|
|
834
|
+
));
|
|
835
|
+
DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
|
|
836
|
+
var DropdownMenuRadioItem = React2.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
837
|
+
DropdownMenuPrimitive.RadioItem,
|
|
838
|
+
{
|
|
839
|
+
ref,
|
|
840
|
+
className: cn(
|
|
841
|
+
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
842
|
+
className
|
|
843
|
+
),
|
|
844
|
+
...props,
|
|
845
|
+
children: [
|
|
846
|
+
/* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Circle, { className: "h-2 w-2 fill-current" }) }) }),
|
|
847
|
+
children
|
|
848
|
+
]
|
|
849
|
+
}
|
|
850
|
+
));
|
|
851
|
+
DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
|
|
852
|
+
var DropdownMenuLabel = React2.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
853
|
+
DropdownMenuPrimitive.Label,
|
|
854
|
+
{
|
|
855
|
+
ref,
|
|
856
|
+
className: cn(
|
|
857
|
+
"px-2 py-1.5 text-sm font-semibold",
|
|
858
|
+
inset && "pl-8",
|
|
859
|
+
className
|
|
860
|
+
),
|
|
861
|
+
...props
|
|
862
|
+
}
|
|
863
|
+
));
|
|
864
|
+
DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
|
|
865
|
+
var DropdownMenuSeparator = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
866
|
+
DropdownMenuPrimitive.Separator,
|
|
867
|
+
{
|
|
868
|
+
ref,
|
|
869
|
+
className: cn("-mx-1 my-1 h-px bg-muted", className),
|
|
870
|
+
...props
|
|
871
|
+
}
|
|
872
|
+
));
|
|
873
|
+
DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
|
|
116
874
|
function getInitials(name, email) {
|
|
117
875
|
if (name) {
|
|
118
876
|
const parts = name.trim().split(/\s+/);
|
|
@@ -393,18 +1151,32 @@ function useNavigation({
|
|
|
393
1151
|
}, [organizationId, apiBaseUrl, enabled]);
|
|
394
1152
|
return { items, organizations, loading, error };
|
|
395
1153
|
}
|
|
1154
|
+
var NextJSLink = ({ href, children, className }) => /* @__PURE__ */ jsx(Link, { href, className, children });
|
|
396
1155
|
function AppSidebar({
|
|
397
1156
|
user,
|
|
398
|
-
adapter,
|
|
1157
|
+
adapter: externalAdapter,
|
|
399
1158
|
data,
|
|
400
1159
|
organizationId,
|
|
401
1160
|
apiBaseUrl,
|
|
402
1161
|
...props
|
|
403
1162
|
}) {
|
|
404
|
-
const pathname =
|
|
1163
|
+
const pathname = usePathname();
|
|
1164
|
+
const nextRouter = useRouter();
|
|
1165
|
+
const router = React2.useMemo(() => ({
|
|
1166
|
+
push: (path) => nextRouter.push(path),
|
|
1167
|
+
refresh: () => nextRouter.refresh()
|
|
1168
|
+
}), [nextRouter]);
|
|
1169
|
+
const internalAdapter = React2.useMemo(() => ({
|
|
1170
|
+
usePathname: () => pathname,
|
|
1171
|
+
useRouter: () => router,
|
|
1172
|
+
Link: NextJSLink,
|
|
1173
|
+
signOut
|
|
1174
|
+
}), [pathname, router]);
|
|
1175
|
+
const adapter = externalAdapter ?? internalAdapter;
|
|
1176
|
+
const currentPathname = adapter.usePathname();
|
|
405
1177
|
const isPropsMode = data !== void 0;
|
|
406
|
-
const pathSegments =
|
|
407
|
-
const isAppOrgRoute =
|
|
1178
|
+
const pathSegments = currentPathname.split("/");
|
|
1179
|
+
const isAppOrgRoute = currentPathname.startsWith("/app/") && pathSegments.length > 2 && pathSegments[2] !== "user";
|
|
408
1180
|
const pathOrgId = isAppOrgRoute ? pathSegments[2] : null;
|
|
409
1181
|
const {
|
|
410
1182
|
items: apiNavigationItems,
|
|
@@ -445,9 +1217,9 @@ function AppSidebar({
|
|
|
445
1217
|
] });
|
|
446
1218
|
}
|
|
447
1219
|
function createNextJSAdapter() {
|
|
448
|
-
const
|
|
1220
|
+
const NextJSLink2 = ({ href, children, className }) => /* @__PURE__ */ jsx(Link, { href, className, children });
|
|
449
1221
|
return {
|
|
450
|
-
usePathname,
|
|
1222
|
+
usePathname: usePathname,
|
|
451
1223
|
useRouter: () => {
|
|
452
1224
|
const router = useRouter();
|
|
453
1225
|
return {
|
|
@@ -455,11 +1227,11 @@ function createNextJSAdapter() {
|
|
|
455
1227
|
refresh: () => router.refresh()
|
|
456
1228
|
};
|
|
457
1229
|
},
|
|
458
|
-
Link:
|
|
459
|
-
signOut
|
|
1230
|
+
Link: NextJSLink2,
|
|
1231
|
+
signOut: signOut
|
|
460
1232
|
};
|
|
461
1233
|
}
|
|
462
1234
|
|
|
463
|
-
export { AppSidebar, NavMain, NavUser, TeamSwitcher, createNextJSAdapter, getIconComponent, useNavigation };
|
|
1235
|
+
export { AppSidebar, NavMain, NavUser, SidebarProvider, TeamSwitcher, createNextJSAdapter, getIconComponent, useNavigation, useSidebar };
|
|
464
1236
|
//# sourceMappingURL=index.mjs.map
|
|
465
1237
|
//# sourceMappingURL=index.mjs.map
|