react-shadcn-kit 0.0.8 → 0.1.1
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/dist/assets/global.css +1 -1
- package/dist/default-layout.js +109 -73
- package/dist/default-layout.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/molecules/user-menu.js +13 -14
- package/dist/molecules/user-menu.js.map +1 -1
- package/dist/organisms/app-navbar.d.ts +64 -27
- package/dist/organisms/app-navbar.js +135 -95
- package/dist/organisms/app-navbar.js.map +1 -1
- package/dist/organisms/app-sidebar.d.ts +56 -24
- package/dist/organisms/app-sidebar.js +149 -135
- package/dist/organisms/app-sidebar.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,147 +1,161 @@
|
|
|
1
|
-
import { jsxs as l, jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import { ChevronDown as
|
|
3
|
-
import { SidebarThemeToggle as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
1
|
+
import { jsxs as l, jsx as e, Fragment as M } from "react/jsx-runtime";
|
|
2
|
+
import { ChevronDown as f, LogOut as E } from "lucide-react";
|
|
3
|
+
import { SidebarThemeToggle as J } from "../molecules/sidebar-theme-toggle.js";
|
|
4
|
+
import { Button as K } from "../atoms/button.js";
|
|
5
|
+
import { Sidebar as Q, SidebarHeader as L, SidebarContent as R, SidebarGroup as V, SidebarFooter as W, SidebarMenu as c, SidebarMenuItem as s, SidebarMenuButton as o, SidebarGroupLabel as S, SidebarGroupContent as N, SidebarMenuSub as X, SidebarMenuSubItem as Y, SidebarMenuSubButton as Z } from "../atoms/sidebar.js";
|
|
6
|
+
import { Collapsible as D, CollapsibleTrigger as I, CollapsibleContent as k } from "../atoms/collapsible.js";
|
|
7
|
+
import { cn as x } from "../lib/utils.js";
|
|
8
|
+
import { Avatar as _, AvatarImage as $, AvatarFallback as B } from "../atoms/avatar.js";
|
|
9
|
+
import { DropdownMenu as ee, DropdownMenuTrigger as re, DropdownMenuContent as ae, DropdownMenuLabel as le, DropdownMenuSeparator as ne, DropdownMenuItem as C } from "../atoms/dropdown-menu.js";
|
|
10
|
+
function ie({ branding: r }) {
|
|
11
|
+
return /* @__PURE__ */ e(L, { children: /* @__PURE__ */ e(c, { children: /* @__PURE__ */ e(s, { children: /* @__PURE__ */ e(o, { size: "lg", asChild: !0, children: /* @__PURE__ */ l("a", { href: "#", children: [
|
|
12
|
+
/* @__PURE__ */ e("div", { className: "bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg", children: r.logoUrl && /* @__PURE__ */ e("img", { src: r.logoUrl, alt: r.logoAlt || "Logo", className: "size-4" }) }),
|
|
13
|
+
/* @__PURE__ */ l("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [
|
|
14
|
+
r.title && /* @__PURE__ */ e("span", { className: "truncate font-semibold", children: r.title }),
|
|
15
|
+
r.subtitle && /* @__PURE__ */ e("span", { className: "truncate text-xs", children: r.subtitle })
|
|
16
|
+
] })
|
|
17
|
+
] }) }) }) }) });
|
|
18
|
+
}
|
|
19
|
+
function w({ item: r }) {
|
|
20
|
+
const a = r.icon;
|
|
21
|
+
return r.items && r.items.length > 0 ? /* @__PURE__ */ l(D, { className: "group/collapsible", children: [
|
|
22
|
+
/* @__PURE__ */ e(o, { asChild: !0, children: /* @__PURE__ */ l(I, { children: [
|
|
23
|
+
a && /* @__PURE__ */ e(a, {}),
|
|
24
|
+
/* @__PURE__ */ e("span", { children: r.label }),
|
|
25
|
+
/* @__PURE__ */ e(f, { className: "ml-auto transition-transform group-data-[state=open]/collapsible:rotate-180" })
|
|
26
|
+
] }) }),
|
|
27
|
+
/* @__PURE__ */ e(k, { children: /* @__PURE__ */ e(X, { children: r.items.map((n) => /* @__PURE__ */ e(Y, { children: /* @__PURE__ */ e(Z, { asChild: !0, children: /* @__PURE__ */ e("a", { href: n.href, children: /* @__PURE__ */ e("span", { children: n.label }) }) }) }, n.href)) }) })
|
|
28
|
+
] }) : /* @__PURE__ */ e(o, { asChild: !0, children: /* @__PURE__ */ l("a", { href: r.href, children: [
|
|
29
|
+
a && /* @__PURE__ */ e(a, {}),
|
|
30
|
+
/* @__PURE__ */ e("span", { children: r.label })
|
|
31
|
+
] }) });
|
|
32
|
+
}
|
|
33
|
+
function te({ group: r }) {
|
|
34
|
+
return r.collapsible && r.label ? /* @__PURE__ */ l(D, { defaultOpen: !0, className: "group/collapsible", children: [
|
|
35
|
+
/* @__PURE__ */ e(S, { asChild: !0, children: /* @__PURE__ */ l(I, { children: [
|
|
36
|
+
r.label,
|
|
37
|
+
/* @__PURE__ */ e(f, { className: "ml-auto transition-transform group-data-[state=open]/collapsible:rotate-180" })
|
|
38
|
+
] }) }),
|
|
39
|
+
/* @__PURE__ */ e(k, { children: /* @__PURE__ */ e(N, { children: /* @__PURE__ */ e(c, { children: r.items.map((a) => /* @__PURE__ */ e(s, { children: /* @__PURE__ */ e(w, { item: a }) }, a.href)) }) }) })
|
|
40
|
+
] }) : /* @__PURE__ */ l(M, { children: [
|
|
41
|
+
r.label && /* @__PURE__ */ e(S, { children: r.label }),
|
|
42
|
+
/* @__PURE__ */ e(N, { children: /* @__PURE__ */ e(c, { children: r.items.map((a) => /* @__PURE__ */ e(s, { children: /* @__PURE__ */ e(w, { item: a }) }, a.href)) }) })
|
|
43
|
+
] });
|
|
44
|
+
}
|
|
45
|
+
function v({ user: r }) {
|
|
46
|
+
const a = r.name?.[0] || "U";
|
|
47
|
+
return /* @__PURE__ */ l(M, { children: [
|
|
48
|
+
/* @__PURE__ */ l(_, { className: "h-8 w-8 rounded-lg", children: [
|
|
49
|
+
/* @__PURE__ */ e($, { src: r.image, alt: r.name }),
|
|
50
|
+
/* @__PURE__ */ e(B, { className: "rounded-lg", children: a })
|
|
51
|
+
] }),
|
|
52
|
+
/* @__PURE__ */ l("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [
|
|
53
|
+
/* @__PURE__ */ e("span", { className: "truncate font-semibold", children: r.name }),
|
|
54
|
+
/* @__PURE__ */ e("span", { className: "truncate text-xs", children: r.email })
|
|
55
|
+
] })
|
|
56
|
+
] });
|
|
57
|
+
}
|
|
58
|
+
function de({
|
|
59
|
+
user: r,
|
|
60
|
+
userMenuItems: a,
|
|
61
|
+
labels: i
|
|
27
62
|
}) {
|
|
28
|
-
|
|
63
|
+
return /* @__PURE__ */ e(c, { children: /* @__PURE__ */ e(s, { children: /* @__PURE__ */ l(ee, { children: [
|
|
64
|
+
/* @__PURE__ */ e(re, { asChild: !0, children: /* @__PURE__ */ l(
|
|
65
|
+
o,
|
|
66
|
+
{
|
|
67
|
+
size: "lg",
|
|
68
|
+
className: "data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground",
|
|
69
|
+
children: [
|
|
70
|
+
/* @__PURE__ */ e(v, { user: r }),
|
|
71
|
+
/* @__PURE__ */ e(f, { className: "ml-auto size-4" })
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
) }),
|
|
75
|
+
/* @__PURE__ */ l(
|
|
76
|
+
ae,
|
|
77
|
+
{
|
|
78
|
+
className: "w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg",
|
|
79
|
+
side: "bottom",
|
|
80
|
+
align: "end",
|
|
81
|
+
sideOffset: 4,
|
|
82
|
+
children: [
|
|
83
|
+
/* @__PURE__ */ e(le, { className: "p-0 font-normal", children: /* @__PURE__ */ e("div", { className: "flex items-center gap-2 px-1 py-1.5 text-left text-sm", children: /* @__PURE__ */ e(v, { user: r }) }) }),
|
|
84
|
+
/* @__PURE__ */ e(ne, {}),
|
|
85
|
+
a && a.length > 0 ? a.map((n, t) => {
|
|
86
|
+
const d = n.icon;
|
|
87
|
+
return /* @__PURE__ */ e(C, { asChild: !0, children: /* @__PURE__ */ l("a", { href: n.href || "#", onClick: n.onClick, children: [
|
|
88
|
+
d && /* @__PURE__ */ e(d, { className: "mr-2 h-4 w-4" }),
|
|
89
|
+
/* @__PURE__ */ e("span", { children: n.label })
|
|
90
|
+
] }) }, t);
|
|
91
|
+
}) : /* @__PURE__ */ l(C, { children: [
|
|
92
|
+
/* @__PURE__ */ e(E, { className: "mr-2 h-4 w-4" }),
|
|
93
|
+
/* @__PURE__ */ e("span", { children: i?.logout || "Log out" })
|
|
94
|
+
] })
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
)
|
|
98
|
+
] }) }) });
|
|
99
|
+
}
|
|
100
|
+
function ce({ loginButton: r }) {
|
|
101
|
+
return /* @__PURE__ */ e("div", { className: "p-2", children: /* @__PURE__ */ e(
|
|
102
|
+
K,
|
|
103
|
+
{
|
|
104
|
+
variant: r.variant || "default",
|
|
105
|
+
onClick: r.onClick,
|
|
106
|
+
asChild: !!r.href,
|
|
107
|
+
className: "w-full justify-start",
|
|
108
|
+
children: r.href ? /* @__PURE__ */ e("a", { href: r.href, children: r.label || "Login" }) : r.label || "Login"
|
|
109
|
+
}
|
|
110
|
+
) });
|
|
111
|
+
}
|
|
112
|
+
function Se({
|
|
113
|
+
side: r = "left",
|
|
114
|
+
variant: a,
|
|
115
|
+
collapsible: i,
|
|
116
|
+
fixed: n = !1,
|
|
117
|
+
className: t,
|
|
118
|
+
style: d,
|
|
119
|
+
branding: p,
|
|
120
|
+
hideBranding: y = !1,
|
|
121
|
+
groups: z = [],
|
|
122
|
+
user: h,
|
|
123
|
+
userMenuItems: A,
|
|
124
|
+
showUserMenu: u = !1,
|
|
125
|
+
loginButton: b,
|
|
126
|
+
showThemeToggle: U = !1,
|
|
127
|
+
scrollable: j = !1,
|
|
128
|
+
header: m,
|
|
129
|
+
footer: G,
|
|
130
|
+
labels: T,
|
|
131
|
+
...F
|
|
132
|
+
}) {
|
|
133
|
+
const O = !y && p && !m, H = u && h, q = u && !h && b;
|
|
29
134
|
return /* @__PURE__ */ l(
|
|
30
|
-
|
|
135
|
+
Q,
|
|
31
136
|
{
|
|
32
|
-
side:
|
|
33
|
-
variant:
|
|
34
|
-
collapsible:
|
|
35
|
-
className:
|
|
36
|
-
style:
|
|
37
|
-
|
|
137
|
+
side: r,
|
|
138
|
+
variant: a,
|
|
139
|
+
collapsible: i,
|
|
140
|
+
className: x(t),
|
|
141
|
+
style: d,
|
|
142
|
+
scrollable: j,
|
|
143
|
+
...F,
|
|
38
144
|
children: [
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
) }),
|
|
49
|
-
/* @__PURE__ */ l("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [
|
|
50
|
-
i.title && /* @__PURE__ */ e("span", { className: "truncate font-semibold", children: i.title }),
|
|
51
|
-
i.subtitle && /* @__PURE__ */ e("span", { className: "truncate text-xs", children: i.subtitle })
|
|
52
|
-
] })
|
|
53
|
-
] }) }) }) }) }),
|
|
54
|
-
/* @__PURE__ */ e(J, { children: A?.map((r, h) => /* @__PURE__ */ l(K, { children: [
|
|
55
|
-
r.label && (r.collapsible ? /* @__PURE__ */ l(N, { defaultOpen: !0, className: "group/collapsible", children: [
|
|
56
|
-
/* @__PURE__ */ e(f, { asChild: !0, children: /* @__PURE__ */ l(x, { children: [
|
|
57
|
-
r.label,
|
|
58
|
-
/* @__PURE__ */ e(p, { className: "ml-auto transition-transform group-data-[state=open]/collapsible:rotate-180" })
|
|
59
|
-
] }) }),
|
|
60
|
-
/* @__PURE__ */ e(S, { children: /* @__PURE__ */ e(g, { children: /* @__PURE__ */ e(s, { children: r.items?.map((a) => {
|
|
61
|
-
const t = a.icon;
|
|
62
|
-
return /* @__PURE__ */ e(c, { children: /* @__PURE__ */ e(d, { asChild: !0, children: /* @__PURE__ */ l("a", { href: a.href, children: [
|
|
63
|
-
t && /* @__PURE__ */ e(t, {}),
|
|
64
|
-
/* @__PURE__ */ e("span", { children: a.label })
|
|
65
|
-
] }) }) }, a.href);
|
|
66
|
-
}) }) }) })
|
|
67
|
-
] }) : /* @__PURE__ */ e(f, { children: r.label })),
|
|
68
|
-
!r.collapsible && /* @__PURE__ */ e(g, { children: /* @__PURE__ */ e(s, { children: r.items?.map((a) => {
|
|
69
|
-
const t = a.icon, F = "items" in a && Array.isArray(a.items) && a.items.length > 0;
|
|
70
|
-
return /* @__PURE__ */ e(c, { children: F ? /* @__PURE__ */ l(N, { className: "group/collapsible", children: [
|
|
71
|
-
/* @__PURE__ */ e(d, { asChild: !0, children: /* @__PURE__ */ l(x, { children: [
|
|
72
|
-
t && /* @__PURE__ */ e(t, {}),
|
|
73
|
-
/* @__PURE__ */ e("span", { children: a.label }),
|
|
74
|
-
/* @__PURE__ */ e(p, { className: "ml-auto transition-transform group-data-[state=open]/collapsible:rotate-180" })
|
|
75
|
-
] }) }),
|
|
76
|
-
/* @__PURE__ */ e(S, { children: /* @__PURE__ */ e(P, { children: ("items" in a && Array.isArray(a.items) ? a.items : []).map((m) => /* @__PURE__ */ e(Q, { children: /* @__PURE__ */ e(R, { asChild: !0, children: /* @__PURE__ */ e("a", { href: m.href, children: /* @__PURE__ */ e("span", { children: m.label }) }) }) }, m.href)) }) })
|
|
77
|
-
] }) : /* @__PURE__ */ e(d, { asChild: !0, children: /* @__PURE__ */ l("a", { href: a.href, children: [
|
|
78
|
-
t && /* @__PURE__ */ e(t, {}),
|
|
79
|
-
/* @__PURE__ */ e("span", { children: a.label })
|
|
80
|
-
] }) }) }, a.href);
|
|
81
|
-
}) }) })
|
|
82
|
-
] }, r.label || h)) }),
|
|
83
|
-
/* @__PURE__ */ l(V, { children: [
|
|
84
|
-
T && /* @__PURE__ */ e(H, {}),
|
|
85
|
-
n && /* @__PURE__ */ e(s, { children: /* @__PURE__ */ e(c, { children: /* @__PURE__ */ l(X, { children: [
|
|
86
|
-
/* @__PURE__ */ e(Y, { asChild: !0, children: /* @__PURE__ */ l(
|
|
87
|
-
d,
|
|
88
|
-
{
|
|
89
|
-
size: "lg",
|
|
90
|
-
className: "data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground",
|
|
91
|
-
children: [
|
|
92
|
-
/* @__PURE__ */ l(C, { className: "h-8 w-8 rounded-lg", children: [
|
|
93
|
-
/* @__PURE__ */ e(w, { src: n.image, alt: n.name }),
|
|
94
|
-
/* @__PURE__ */ e(M, { className: "rounded-lg", children: n.name?.[0] || "U" })
|
|
95
|
-
] }),
|
|
96
|
-
/* @__PURE__ */ l("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [
|
|
97
|
-
/* @__PURE__ */ e("span", { className: "truncate font-semibold", children: n.name }),
|
|
98
|
-
/* @__PURE__ */ e("span", { className: "truncate text-xs", children: n.email })
|
|
99
|
-
] }),
|
|
100
|
-
/* @__PURE__ */ e(p, { className: "ml-auto size-4" })
|
|
101
|
-
]
|
|
102
|
-
}
|
|
103
|
-
) }),
|
|
104
|
-
/* @__PURE__ */ l(
|
|
105
|
-
Z,
|
|
106
|
-
{
|
|
107
|
-
className: "w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg",
|
|
108
|
-
side: "bottom",
|
|
109
|
-
align: "end",
|
|
110
|
-
sideOffset: 4,
|
|
111
|
-
children: [
|
|
112
|
-
/* @__PURE__ */ e(_, { className: "p-0 font-normal", children: /* @__PURE__ */ l("div", { className: "flex items-center gap-2 px-1 py-1.5 text-left text-sm", children: [
|
|
113
|
-
/* @__PURE__ */ l(C, { className: "h-8 w-8 rounded-lg", children: [
|
|
114
|
-
/* @__PURE__ */ e(w, { src: n.image, alt: n.name }),
|
|
115
|
-
/* @__PURE__ */ e(M, { className: "rounded-lg", children: n.name?.[0] || "U" })
|
|
116
|
-
] }),
|
|
117
|
-
/* @__PURE__ */ l("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [
|
|
118
|
-
/* @__PURE__ */ e("span", { className: "truncate font-semibold", children: n.name }),
|
|
119
|
-
/* @__PURE__ */ e("span", { className: "truncate text-xs", children: n.email })
|
|
120
|
-
] })
|
|
121
|
-
] }) }),
|
|
122
|
-
/* @__PURE__ */ e($, {}),
|
|
123
|
-
b?.map((r, h) => {
|
|
124
|
-
const a = r.icon;
|
|
125
|
-
return /* @__PURE__ */ e(v, { asChild: !0, children: /* @__PURE__ */ l("a", { href: r.href || "#", onClick: r.onClick, children: [
|
|
126
|
-
a && /* @__PURE__ */ e(a, { className: "mr-2 h-4 w-4" }),
|
|
127
|
-
/* @__PURE__ */ e("span", { children: r.label })
|
|
128
|
-
] }) }, h);
|
|
129
|
-
}),
|
|
130
|
-
!b && /* @__PURE__ */ l(v, { children: [
|
|
131
|
-
/* @__PURE__ */ e(q, { className: "mr-2 h-4 w-4" }),
|
|
132
|
-
/* @__PURE__ */ e("span", { children: I?.logout || "Log out" })
|
|
133
|
-
] })
|
|
134
|
-
]
|
|
135
|
-
}
|
|
136
|
-
)
|
|
137
|
-
] }) }) }),
|
|
138
|
-
y
|
|
145
|
+
m && /* @__PURE__ */ e(L, { children: m }),
|
|
146
|
+
O && /* @__PURE__ */ e(ie, { branding: p }),
|
|
147
|
+
/* @__PURE__ */ e(R, { className: x(t), children: z.map((g, P) => /* @__PURE__ */ e(V, { children: /* @__PURE__ */ e(te, { group: g }) }, g.label || P)) }),
|
|
148
|
+
/* @__PURE__ */ l(W, { children: [
|
|
149
|
+
U && /* @__PURE__ */ e(J, {}),
|
|
150
|
+
H && /* @__PURE__ */ e(de, { user: h, userMenuItems: A, labels: T }),
|
|
151
|
+
q && /* @__PURE__ */ e(ce, { loginButton: b }),
|
|
152
|
+
G
|
|
139
153
|
] })
|
|
140
154
|
]
|
|
141
155
|
}
|
|
142
156
|
);
|
|
143
157
|
}
|
|
144
158
|
export {
|
|
145
|
-
|
|
159
|
+
Se as AppSidebar
|
|
146
160
|
};
|
|
147
161
|
//# sourceMappingURL=app-sidebar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-sidebar.js","sources":["../../src/organisms/app-sidebar.tsx"],"sourcesContent":["\"use client\";\n\nimport { ChevronDown, LogOut } from \"lucide-react\";\nimport { SidebarThemeToggle } from \"../molecules/sidebar-theme-toggle\";\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from \"@/atoms/sidebar\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"@/atoms/collapsible\";\nimport { cn } from \"@/lib/utils\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/atoms/avatar\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/atoms/dropdown-menu\";\nimport type {\n UserConfig,\n BrandingConfig,\n SidebarGroup as SidebarGroupType,\n MenuItem,\n} from \"@/default-layout\";\n\ninterface SidebarLabels {\n logout?: string;\n}\n\ninterface UserMenuItem {\n label: string;\n href?: string;\n icon?: React.ComponentType<{ className?: string }>;\n onClick?: () => void;\n}\n\ninterface AppSidebarProps extends React.ComponentProps<typeof Sidebar> {\n groups?: (SidebarGroupType & {\n items: (MenuItem & {\n icon?: React.ComponentType<{ className?: string }>;\n items?: MenuItem[];\n })[];\n })[];\n header?: React.ReactNode;\n footer?: React.ReactNode;\n user?: UserConfig;\n userMenuItems?: UserMenuItem[];\n branding?: BrandingConfig;\n labels?: SidebarLabels;\n fixed?: boolean;\n hideBranding?: boolean;\n showThemeToggle?: boolean;\n scrollable?: boolean;\n}\n\nexport function AppSidebar({\n groups = [],\n header,\n footer,\n user,\n userMenuItems,\n branding,\n labels,\n fixed,\n hideBranding = false,\n showThemeToggle = true,\n className,\n style,\n side = \"left\",\n variant,\n collapsible,\n scrollable = false,\n ...props\n}: AppSidebarProps) {\n const finalBranding = hideBranding ? undefined : branding;\n\n return (\n <Sidebar\n side={side}\n variant={variant}\n collapsible={collapsible}\n className={cn(!fixed ? \"absolute h-full\" : undefined, className)}\n style={style}\n {...props}\n >\n {header && <SidebarHeader>{header}</SidebarHeader>}\n\n {finalBranding && !header && (\n <SidebarHeader>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton size=\"lg\" asChild>\n <a href=\"#\">\n <div className=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg\">\n {finalBranding.logoUrl && (\n <img\n src={finalBranding.logoUrl}\n alt={finalBranding.logoAlt || \"Logo\"}\n className=\"size-4\"\n />\n )}\n </div>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n {finalBranding.title && (\n <span className=\"truncate font-semibold\">{finalBranding.title}</span>\n )}\n {finalBranding.subtitle && (\n <span className=\"truncate text-xs\">{finalBranding.subtitle}</span>\n )}\n </div>\n </a>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarHeader>\n )}\n\n <SidebarContent>\n {groups?.map((group, index) => (\n <SidebarGroup key={group.label || index}>\n {group.label &&\n (group.collapsible ? (\n <Collapsible defaultOpen className=\"group/collapsible\">\n <SidebarGroupLabel asChild>\n <CollapsibleTrigger>\n {group.label}\n <ChevronDown className=\"ml-auto transition-transform group-data-[state=open]/collapsible:rotate-180\" />\n </CollapsibleTrigger>\n </SidebarGroupLabel>\n <CollapsibleContent>\n <SidebarGroupContent>\n <SidebarMenu>\n {group.items?.map((item) => {\n const ItemIcon = item.icon;\n return (\n <SidebarMenuItem key={item.href}>\n <SidebarMenuButton asChild>\n <a href={item.href}>\n {ItemIcon && <ItemIcon />}\n <span>{item.label}</span>\n </a>\n </SidebarMenuButton>\n </SidebarMenuItem>\n );\n })}\n </SidebarMenu>\n </SidebarGroupContent>\n </CollapsibleContent>\n </Collapsible>\n ) : (\n <SidebarGroupLabel>{group.label}</SidebarGroupLabel>\n ))}\n {!group.collapsible && (\n <SidebarGroupContent>\n <SidebarMenu>\n {group.items?.map((item) => {\n const ItemIcon = item.icon;\n const hasSubItems =\n \"items\" in item && Array.isArray(item.items) && item.items.length > 0;\n return (\n <SidebarMenuItem key={item.href}>\n {hasSubItems ? (\n <Collapsible className=\"group/collapsible\">\n <SidebarMenuButton asChild>\n <CollapsibleTrigger>\n {ItemIcon && <ItemIcon />}\n <span>{item.label}</span>\n <ChevronDown className=\"ml-auto transition-transform group-data-[state=open]/collapsible:rotate-180\" />\n </CollapsibleTrigger>\n </SidebarMenuButton>\n <CollapsibleContent>\n <SidebarMenuSub>\n {(\"items\" in item && Array.isArray(item.items)\n ? item.items\n : []\n ).map((subItem: MenuItem) => (\n <SidebarMenuSubItem key={subItem.href}>\n <SidebarMenuSubButton asChild>\n <a href={subItem.href}>\n <span>{subItem.label}</span>\n </a>\n </SidebarMenuSubButton>\n </SidebarMenuSubItem>\n ))}\n </SidebarMenuSub>\n </CollapsibleContent>\n </Collapsible>\n ) : (\n <SidebarMenuButton asChild>\n <a href={item.href}>\n {ItemIcon && <ItemIcon />}\n <span>{item.label}</span>\n </a>\n </SidebarMenuButton>\n )}\n </SidebarMenuItem>\n );\n })}\n </SidebarMenu>\n </SidebarGroupContent>\n )}\n </SidebarGroup>\n ))}\n </SidebarContent>\n\n <SidebarFooter>\n {showThemeToggle && <SidebarThemeToggle />}\n {user && (\n <SidebarMenu>\n <SidebarMenuItem>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton\n size=\"lg\"\n className=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n >\n <Avatar className=\"h-8 w-8 rounded-lg\">\n <AvatarImage src={user.image} alt={user.name} />\n <AvatarFallback className=\"rounded-lg\">\n {user.name?.[0] || \"U\"}\n </AvatarFallback>\n </Avatar>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-semibold\">{user.name}</span>\n <span className=\"truncate text-xs\">{user.email}</span>\n </div>\n <ChevronDown className=\"ml-auto size-4\" />\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className=\"w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg\"\n side=\"bottom\"\n align=\"end\"\n sideOffset={4}\n >\n <DropdownMenuLabel className=\"p-0 font-normal\">\n <div className=\"flex items-center gap-2 px-1 py-1.5 text-left text-sm\">\n <Avatar className=\"h-8 w-8 rounded-lg\">\n <AvatarImage src={user.image} alt={user.name} />\n <AvatarFallback className=\"rounded-lg\">\n {user.name?.[0] || \"U\"}\n </AvatarFallback>\n </Avatar>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-semibold\">{user.name}</span>\n <span className=\"truncate text-xs\">{user.email}</span>\n </div>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {userMenuItems?.map((item, index) => {\n const MenuIcon = item.icon;\n return (\n <DropdownMenuItem key={index} asChild>\n <a href={item.href || \"#\"} onClick={item.onClick}>\n {MenuIcon && <MenuIcon className=\"mr-2 h-4 w-4\" />}\n <span>{item.label}</span>\n </a>\n </DropdownMenuItem>\n );\n })}\n {!userMenuItems && (\n <DropdownMenuItem>\n <LogOut className=\"mr-2 h-4 w-4\" />\n <span>{labels?.logout || \"Log out\"}</span>\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </SidebarMenuItem>\n </SidebarMenu>\n )}\n {footer}\n </SidebarFooter>\n </Sidebar>\n );\n}\n"],"names":["jsxs","jsx","ChevronDown","LogOut","SidebarThemeToggle","Sidebar","SidebarHeader","SidebarMenu","SidebarMenuItem","SidebarMenuButton","SidebarContent","SidebarGroup","SidebarGroupLabel","SidebarGroupContent","SidebarMenuSub","SidebarMenuSubItem","SidebarMenuSubButton","SidebarFooter","Collapsible","CollapsibleTrigger","CollapsibleContent","cn","Avatar","AvatarImage","AvatarFallback","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuItem","AppSidebar","groups","header","footer","user","userMenuItems","branding","labels","fixed","hideBranding","showThemeToggle","className","style","side","variant","collapsible","scrollable","props","finalBranding","group","index","item","ItemIcon","hasSubItems","subItem","MenuIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-sidebar.js","sources":["../../src/organisms/app-sidebar.tsx"],"sourcesContent":["\"use client\";\n\nimport { ChevronDown, LogOut } from \"lucide-react\";\nimport { SidebarThemeToggle } from \"../molecules/sidebar-theme-toggle\";\nimport { Button } from \"@/atoms/button\";\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from \"@/atoms/sidebar\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"@/atoms/collapsible\";\nimport { cn } from \"@/lib/utils\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/atoms/avatar\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/atoms/dropdown-menu\";\n\ntype SidebarPlacement = \"left\" | \"right\";\n\ntype MenuItem = {\n label: string;\n href: string;\n icon?: React.ComponentType<{ className?: string }>;\n disabled?: boolean;\n items?: MenuItem[]; // Sub-items for nested navigation\n};\n\ntype MenuGroup = {\n label?: string;\n items: MenuItem[];\n collapsible?: boolean;\n};\n\ntype User = {\n name?: string;\n email?: string;\n image?: string;\n username?: string;\n roles?: string[];\n};\n\ntype UserMenuItem = {\n label: string;\n href?: string;\n icon?: React.ComponentType<{ className?: string }>;\n onClick?: () => void;\n};\n\ntype Branding = {\n logoUrl?: string;\n logoAlt?: string;\n title?: string;\n subtitle?: string;\n};\n\ntype LoginButton = {\n label?: string;\n href?: string;\n variant?: \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\n onClick?: () => void;\n};\n\ntype Labels = {\n logout?: string;\n};\n\nexport type AppSidebarProps = {\n // Layout\n side?: SidebarPlacement;\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n fixed?: boolean;\n className?: string;\n style?: React.CSSProperties;\n\n // Branding\n branding?: Branding;\n hideBranding?: boolean;\n\n // Navigation\n groups?: MenuGroup[];\n\n // User\n user?: User;\n userMenuItems?: UserMenuItem[];\n showUserMenu?: boolean;\n loginButton?: LoginButton;\n\n // Features\n showThemeToggle?: boolean;\n scrollable?: boolean;\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n labels?: Labels;\n};\n\nfunction SidebarBrandingHeader({ branding }: { branding: Branding }) {\n return (\n <SidebarHeader>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton size=\"lg\" asChild>\n <a href=\"#\">\n <div className=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg\">\n {branding.logoUrl && (\n <img src={branding.logoUrl} alt={branding.logoAlt || \"Logo\"} className=\"size-4\" />\n )}\n </div>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n {branding.title && <span className=\"truncate font-semibold\">{branding.title}</span>}\n {branding.subtitle && <span className=\"truncate text-xs\">{branding.subtitle}</span>}\n </div>\n </a>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarHeader>\n );\n}\n\nfunction SidebarNavigationItem({ item }: { item: MenuItem }) {\n const ItemIcon = item.icon;\n const hasSubItems = item.items && item.items.length > 0;\n\n if (hasSubItems) {\n return (\n <Collapsible className=\"group/collapsible\">\n <SidebarMenuButton asChild>\n <CollapsibleTrigger>\n {ItemIcon && <ItemIcon />}\n <span>{item.label}</span>\n <ChevronDown className=\"ml-auto transition-transform group-data-[state=open]/collapsible:rotate-180\" />\n </CollapsibleTrigger>\n </SidebarMenuButton>\n <CollapsibleContent>\n <SidebarMenuSub>\n {item.items!.map((subItem) => (\n <SidebarMenuSubItem key={subItem.href}>\n <SidebarMenuSubButton asChild>\n <a href={subItem.href}>\n <span>{subItem.label}</span>\n </a>\n </SidebarMenuSubButton>\n </SidebarMenuSubItem>\n ))}\n </SidebarMenuSub>\n </CollapsibleContent>\n </Collapsible>\n );\n }\n\n return (\n <SidebarMenuButton asChild>\n <a href={item.href}>\n {ItemIcon && <ItemIcon />}\n <span>{item.label}</span>\n </a>\n </SidebarMenuButton>\n );\n}\n\nfunction SidebarNavigationGroup({ group }: { group: MenuGroup }) {\n if (group.collapsible && group.label) {\n return (\n <Collapsible defaultOpen className=\"group/collapsible\">\n <SidebarGroupLabel asChild>\n <CollapsibleTrigger>\n {group.label}\n <ChevronDown className=\"ml-auto transition-transform group-data-[state=open]/collapsible:rotate-180\" />\n </CollapsibleTrigger>\n </SidebarGroupLabel>\n <CollapsibleContent>\n <SidebarGroupContent>\n <SidebarMenu>\n {group.items.map((item) => (\n <SidebarMenuItem key={item.href}>\n <SidebarNavigationItem item={item} />\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroupContent>\n </CollapsibleContent>\n </Collapsible>\n );\n }\n\n return (\n <>\n {group.label && <SidebarGroupLabel>{group.label}</SidebarGroupLabel>}\n <SidebarGroupContent>\n <SidebarMenu>\n {group.items.map((item) => (\n <SidebarMenuItem key={item.href}>\n <SidebarNavigationItem item={item} />\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroupContent>\n </>\n );\n}\n\nfunction SidebarUserProfile({ user }: { user: User }) {\n const initials = user.name?.[0] || \"U\";\n\n return (\n <>\n <Avatar className=\"h-8 w-8 rounded-lg\">\n <AvatarImage src={user.image} alt={user.name} />\n <AvatarFallback className=\"rounded-lg\">{initials}</AvatarFallback>\n </Avatar>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-semibold\">{user.name}</span>\n <span className=\"truncate text-xs\">{user.email}</span>\n </div>\n </>\n );\n}\n\nfunction SidebarUserMenu({\n user,\n userMenuItems,\n labels,\n}: {\n user: User;\n userMenuItems?: UserMenuItem[];\n labels?: Labels;\n}) {\n return (\n <SidebarMenu>\n <SidebarMenuItem>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton\n size=\"lg\"\n className=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n >\n <SidebarUserProfile user={user} />\n <ChevronDown className=\"ml-auto size-4\" />\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className=\"w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg\"\n side=\"bottom\"\n align=\"end\"\n sideOffset={4}\n >\n <DropdownMenuLabel className=\"p-0 font-normal\">\n <div className=\"flex items-center gap-2 px-1 py-1.5 text-left text-sm\">\n <SidebarUserProfile user={user} />\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {userMenuItems && userMenuItems.length > 0 ? (\n userMenuItems.map((item, index) => {\n const MenuIcon = item.icon;\n return (\n <DropdownMenuItem key={index} asChild>\n <a href={item.href || \"#\"} onClick={item.onClick}>\n {MenuIcon && <MenuIcon className=\"mr-2 h-4 w-4\" />}\n <span>{item.label}</span>\n </a>\n </DropdownMenuItem>\n );\n })\n ) : (\n <DropdownMenuItem>\n <LogOut className=\"mr-2 h-4 w-4\" />\n <span>{labels?.logout || \"Log out\"}</span>\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </SidebarMenuItem>\n </SidebarMenu>\n );\n}\n\nfunction SidebarLoginButton({ loginButton }: { loginButton: LoginButton }) {\n return (\n <div className=\"p-2\">\n <Button\n variant={loginButton.variant || \"default\"}\n onClick={loginButton.onClick}\n asChild={!!loginButton.href}\n className=\"w-full justify-start\"\n >\n {loginButton.href ? (\n <a href={loginButton.href}>{loginButton.label || \"Login\"}</a>\n ) : (\n loginButton.label || \"Login\"\n )}\n </Button>\n </div>\n );\n}\n\nexport function AppSidebar({\n side = \"left\",\n variant,\n collapsible,\n fixed = false,\n className,\n style,\n branding,\n hideBranding = false,\n groups = [],\n user,\n userMenuItems,\n showUserMenu = false,\n loginButton,\n showThemeToggle = false,\n scrollable = false,\n header,\n footer,\n labels,\n ...props\n}: AppSidebarProps) {\n const showBranding = !hideBranding && branding && !header;\n const showUser = showUserMenu && user;\n const showLogin = showUserMenu && !user && loginButton;\n\n return (\n <Sidebar\n side={side}\n variant={variant}\n collapsible={collapsible}\n className={cn(className)}\n style={style}\n scrollable={scrollable}\n {...props}\n >\n {/* Header */}\n {header && <SidebarHeader>{header}</SidebarHeader>}\n {showBranding && <SidebarBrandingHeader branding={branding!} />}\n\n {/* Navigation */}\n <SidebarContent className={cn(className)}>\n {groups.map((group, index) => (\n <SidebarGroup key={group.label || index}>\n <SidebarNavigationGroup group={group} />\n </SidebarGroup>\n ))}\n </SidebarContent>\n\n {/* Footer */}\n <SidebarFooter>\n {showThemeToggle && <SidebarThemeToggle />}\n {showUser && <SidebarUserMenu user={user!} userMenuItems={userMenuItems} labels={labels} />}\n {showLogin && <SidebarLoginButton loginButton={loginButton!} />}\n {footer}\n </SidebarFooter>\n </Sidebar>\n );\n}\n"],"names":["jsxs","jsx","Fragment","ChevronDown","LogOut","SidebarThemeToggle","Button","Sidebar","SidebarHeader","SidebarContent","SidebarGroup","SidebarFooter","SidebarMenu","SidebarMenuItem","SidebarMenuButton","SidebarGroupLabel","SidebarGroupContent","SidebarMenuSub","SidebarMenuSubItem","SidebarMenuSubButton","Collapsible","CollapsibleTrigger","CollapsibleContent","cn","Avatar","AvatarImage","AvatarFallback","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuItem","SidebarBrandingHeader","branding","SidebarNavigationItem","item","ItemIcon","subItem","SidebarNavigationGroup","group","SidebarUserProfile","user","initials","SidebarUserMenu","userMenuItems","labels","index","MenuIcon","SidebarLoginButton","loginButton","AppSidebar","side","variant","collapsible","fixed","className","style","hideBranding","groups","showUserMenu","showThemeToggle","scrollable","header","footer","props","showBranding","showUser","showLogin"],"mappings":"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"}
|