react-shadcn-kit 0.0.7 → 0.1.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/dist/assets/global.css +1 -1
- package/dist/default-layout.js +48 -39
- package/dist/default-layout.js.map +1 -1
- package/dist/organisms/app-navbar.d.ts +3 -2
- package/dist/organisms/app-navbar.js +70 -61
- package/dist/organisms/app-navbar.js.map +1 -1
- package/dist/organisms/app-sidebar.d.ts +4 -2
- package/dist/organisms/app-sidebar.js +90 -78
- package/dist/organisms/app-sidebar.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-layout.js","sources":["../src/default-layout.tsx"],"sourcesContent":["import React from \"react\";\nimport { SidebarProvider, SidebarInset } from \"@/atoms/sidebar\";\nimport { AppSidebar } from \"@/organisms/app-sidebar\";\nimport { AppNavbar } from \"@/organisms/app-navbar\";\nimport * as LucideIcons from \"lucide-react\";\n\nexport type Placement = \"left\" | \"right\" | \"top\" | \"bottom\";\nexport type NavbarHeight = \"sm\" | \"md\" | \"lg\" | string;\nexport type RouteType = \"public\" | \"auth\" | \"private\";\nexport type HttpMethod = \"GET\" | \"POST\";\n\nexport type LayoutRules = {\n [key in RouteType]?: { navbar?: boolean; sidebar?: boolean };\n};\n\nexport type UserConfig = {\n name?: string;\n image?: string;\n username?: string;\n email?: string;\n roles?: string[];\n};\n\nexport type SearchConfig = {\n enabled?: boolean;\n placeholder?: string;\n action?: string;\n method?: HttpMethod;\n debounceTimeMs?: number;\n suggestionsApi?: string;\n};\n\nexport type NotificationsList = {\n title: string;\n image?: string;\n description: string;\n date: string;\n read: boolean;\n};\n\nexport type NotificationConfig = {\n enabled?: boolean;\n isNewNotification?: boolean;\n count?: number;\n showBadge?: boolean;\n notifications?: NotificationsList[];\n};\n\nexport type MenuItem = {\n label: string;\n href: string;\n icon?: string;\n disabled?: boolean;\n};\n\nexport type BrandingConfig = {\n logoUrl?: string;\n logoAlt?: string;\n title?: string;\n subtitle?: string;\n};\n\nexport type BaseComponentConfig = {\n showThemeToggle?: boolean;\n showUserMenu?: boolean;\n search?: SearchConfig;\n scrollable?: boolean;\n branding?: BrandingConfig;\n showSidebarTrigger?: boolean;\n customContent?: React.ReactNode;\n notifications?: NotificationConfig;\n};\n\nexport type NavbarConfig = BaseComponentConfig & {\n height?: NavbarHeight;\n items?: MenuItem[];\n};\n\nexport type SidebarGroup = {\n label: string;\n items: MenuItem[];\n collapsible?: boolean;\n};\n\nexport type SidebarConfig = BaseComponentConfig & {\n width?: string;\n placement?: Placement;\n groups?: SidebarGroup[];\n};\n\nexport type ComponentConfig = {\n navbar?: NavbarConfig;\n sidebar?: SidebarConfig;\n};\n\nexport type LayoutConfig = {\n layoutRules?: LayoutRules;\n user?: UserConfig;\n search?: SearchConfig;\n components?: ComponentConfig;\n appName?: string;\n theme?: \"light\" | \"dark\" | \"system\";\n};\n\nconst getIcon = (name: string) => {\n // @ts-ignore – dynamic access to lucide icons\n return (LucideIcons as any)[name] ?? (LucideIcons as any)[\"Circle\"];\n};\n\nexport default function DefaultLayout({\n children,\n layoutConfig,\n}: {\n children: React.ReactNode;\n layoutConfig: LayoutConfig;\n}) {\n const { navbar = {}, sidebar = {} } = layoutConfig.components || {};\n\n const navbarItems = navbar.items?.map((item) => ({\n ...item,\n icon: getIcon(item.icon || \"\"),\n }));\n\n const sidebarGroups = sidebar.groups?.map((group) => ({\n ...group,\n items: group.items.map((item) => ({\n ...item,\n icon: getIcon(item.icon || \"\"),\n })),\n }));\n\n const sidebarProviderStyle: React.CSSProperties = {\n \"--sidebar-width\": sidebar.width || \"250px\",\n } as React.CSSProperties;\n\n const layoutRules = layoutConfig.layoutRules || {\n public: { navbar: true, sidebar: true },\n auth: { navbar: true, sidebar: true },\n private: { navbar: true, sidebar: true },\n };\n\n const showSidebar = layoutRules.public?.sidebar ?? true;\n const showNavbar = layoutRules.public?.navbar ?? true;\n\n const notifications =\n navbar.notifications?.enabled && navbar.notifications.count\n ? Array.from({ length: navbar.notifications.count }).map(() => ({\n title: \"New Notification\",\n description: \"You have a new notification.\",\n date: \"Just now\",\n read: !navbar.notifications?.isNewNotification,\n }))\n : [];\n\n const scrollable = sidebar.scrollable ?? true;\n const maxWidth = undefined;\n\n return (\n <div style={{ \"--header-height\": \"calc(var(--spacing, 14))\" } as React.CSSProperties}>\n <SidebarProvider defaultOpen={true} className=\"flex flex-col\" style={sidebarProviderStyle}>\n {showNavbar && (\n <AppNavbar\n items={navbarItems}\n searchPlaceholder={navbar.search?.placeholder}\n showSearch={navbar.search?.enabled ?? false}\n showThemeToggle={navbar.showThemeToggle}\n showUserMenu={navbar.showUserMenu}\n showNotifications={navbar.notifications?.enabled}\n notifications={notifications}\n user={layoutConfig.user}\n userMenuItems={
|
|
1
|
+
{"version":3,"file":"default-layout.js","sources":["../src/default-layout.tsx"],"sourcesContent":["import React from \"react\";\nimport { SidebarProvider, SidebarInset } from \"@/atoms/sidebar\";\nimport { AppSidebar } from \"@/organisms/app-sidebar\";\nimport { AppNavbar } from \"@/organisms/app-navbar\";\nimport * as LucideIcons from \"lucide-react\";\n\nexport type Placement = \"left\" | \"right\" | \"top\" | \"bottom\";\nexport type NavbarHeight = \"sm\" | \"md\" | \"lg\" | string;\nexport type RouteType = \"public\" | \"auth\" | \"private\";\nexport type HttpMethod = \"GET\" | \"POST\";\n\nexport type LayoutRules = {\n [key in RouteType]?: { navbar?: boolean; sidebar?: boolean };\n};\n\nexport type UserConfig = {\n name?: string;\n image?: string;\n username?: string;\n email?: string;\n roles?: string[];\n};\n\nexport type SearchConfig = {\n enabled?: boolean;\n placeholder?: string;\n action?: string;\n method?: HttpMethod;\n debounceTimeMs?: number;\n suggestionsApi?: string;\n};\n\nexport type NotificationsList = {\n title: string;\n image?: string;\n description: string;\n date: string;\n read: boolean;\n};\n\nexport type NotificationConfig = {\n enabled?: boolean;\n isNewNotification?: boolean;\n count?: number;\n showBadge?: boolean;\n notifications?: NotificationsList[];\n};\n\nexport type MenuItem = {\n label: string;\n href: string;\n icon?: string;\n disabled?: boolean;\n};\n\nexport type BrandingConfig = {\n logoUrl?: string;\n logoAlt?: string;\n title?: string;\n subtitle?: string;\n};\n\nexport type LoginButtonConfig = {\n label?: string;\n href?: string;\n variant?: \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\n onClick?: () => void;\n};\n\nexport type BaseComponentConfig = {\n showThemeToggle?: boolean;\n showUserMenu?: boolean;\n loginButton?: LoginButtonConfig;\n search?: SearchConfig;\n scrollable?: boolean;\n branding?: BrandingConfig;\n showSidebarTrigger?: boolean;\n customContent?: React.ReactNode;\n notifications?: NotificationConfig;\n};\n\nexport type NavbarConfig = BaseComponentConfig & {\n height?: NavbarHeight;\n items?: MenuItem[];\n userMenuItems?: { label: string; href?: string; icon?: string; onClick?: () => void }[];\n};\n\nexport type SidebarGroup = {\n label: string;\n items: MenuItem[];\n collapsible?: boolean;\n};\n\nexport type SidebarConfig = BaseComponentConfig & {\n width?: string;\n placement?: Placement;\n groups?: SidebarGroup[];\n userMenuItems?: { label: string; href?: string; icon?: string; onClick?: () => void }[];\n};\n\nexport type ComponentConfig = {\n navbar?: NavbarConfig;\n sidebar?: SidebarConfig;\n};\n\nexport type LayoutConfig = {\n layoutRules?: LayoutRules;\n user?: UserConfig;\n search?: SearchConfig;\n components?: ComponentConfig;\n appName?: string;\n theme?: \"light\" | \"dark\" | \"system\";\n};\n\nconst getIcon = (name: string) => {\n // @ts-ignore – dynamic access to lucide icons\n return (LucideIcons as any)[name] ?? (LucideIcons as any)[\"Circle\"];\n};\n\nexport default function DefaultLayout({\n children,\n layoutConfig,\n}: {\n children: React.ReactNode;\n layoutConfig: LayoutConfig;\n}) {\n const { navbar = {}, sidebar = {} } = layoutConfig.components || {};\n\n const navbarItems = navbar.items?.map((item) => ({\n ...item,\n icon: getIcon(item.icon || \"\"),\n }));\n\n const navbarUserMenuItems = navbar.userMenuItems?.map((item) => ({\n ...item,\n icon: item.icon ? getIcon(item.icon) : undefined,\n }));\n\n const sidebarGroups = sidebar.groups?.map((group) => ({\n ...group,\n items: group.items.map((item) => ({\n ...item,\n icon: getIcon(item.icon || \"\"),\n })),\n }));\n\n const sidebarUserMenuItems = sidebar.userMenuItems?.map((item) => ({\n ...item,\n icon: item.icon ? getIcon(item.icon) : undefined,\n }));\n\n const sidebarProviderStyle: React.CSSProperties = {\n \"--sidebar-width\": sidebar.width || \"250px\",\n } as React.CSSProperties;\n\n const layoutRules = layoutConfig.layoutRules || {\n public: { navbar: true, sidebar: true },\n auth: { navbar: true, sidebar: true },\n private: { navbar: true, sidebar: true },\n };\n\n const showSidebar = layoutRules.public?.sidebar ?? true;\n const showNavbar = layoutRules.public?.navbar ?? true;\n\n const notifications =\n navbar.notifications?.enabled && navbar.notifications.count\n ? Array.from({ length: navbar.notifications.count }).map(() => ({\n title: \"New Notification\",\n description: \"You have a new notification.\",\n date: \"Just now\",\n read: !navbar.notifications?.isNewNotification,\n }))\n : [];\n\n const scrollable = sidebar.scrollable ?? true;\n const maxWidth = undefined;\n\n return (\n <div style={{ \"--header-height\": \"calc(var(--spacing, 14))\" } as React.CSSProperties}>\n <SidebarProvider defaultOpen={true} className=\"flex flex-col\" style={sidebarProviderStyle}>\n {showNavbar && (\n <AppNavbar\n items={navbarItems}\n searchPlaceholder={navbar.search?.placeholder}\n showSearch={navbar.search?.enabled ?? false}\n showThemeToggle={navbar.showThemeToggle}\n showUserMenu={navbar.showUserMenu}\n showNotifications={navbar.notifications?.enabled}\n notifications={notifications}\n user={layoutConfig.user}\n userMenuItems={navbarUserMenuItems}\n branding={navbar.branding}\n labels={undefined}\n style={{ height: navbar.height }}\n showSidebarTrigger={showSidebar && (navbar.showSidebarTrigger ?? true)}\n loginButton={navbar.loginButton}\n />\n )}\n <div className=\"flex flex-1\">\n {showSidebar && (\n <AppSidebar\n side={sidebar.placement === \"right\" ? \"right\" : \"left\"}\n scrollable={scrollable}\n fixed={true}\n groups={sidebarGroups}\n showThemeToggle={sidebar.showThemeToggle}\n user={layoutConfig.user}\n userMenuItems={sidebarUserMenuItems}\n branding={sidebar.branding}\n labels={undefined}\n hideBranding={false}\n showUserMenu={sidebar.showUserMenu}\n loginButton={sidebar.loginButton}\n />\n )}\n <SidebarInset>\n <div className=\"p-4 mx-auto w-full\" style={maxWidth ? { maxWidth } : undefined}>\n {children}\n </div>\n </SidebarInset>\n </div>\n </SidebarProvider>\n </div>\n );\n}\n"],"names":["jsx","jsxs","SidebarProvider","SidebarInset","AppSidebar","AppNavbar","LucideIcons","getIcon","name","DefaultLayout","children","layoutConfig","navbar","sidebar","navbarItems","item","navbarUserMenuItems","sidebarGroups","group","sidebarUserMenuItems","sidebarProviderStyle","layoutRules","showSidebar","showNavbar","notifications","scrollable"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UserConfig, BrandingConfig, MenuItem, NotificationsList } from '../default-layout';
|
|
1
|
+
import { UserConfig, BrandingConfig, MenuItem, NotificationsList, LoginButtonConfig } from '../default-layout';
|
|
2
2
|
interface NavbarLabels {
|
|
3
3
|
profile?: string;
|
|
4
4
|
notifications?: string;
|
|
@@ -31,6 +31,7 @@ interface AppNavbarProps {
|
|
|
31
31
|
showNotifications?: boolean;
|
|
32
32
|
className?: string;
|
|
33
33
|
style?: React.CSSProperties;
|
|
34
|
+
loginButton?: LoginButtonConfig;
|
|
34
35
|
}
|
|
35
|
-
export declare function AppNavbar({ items, searchPlaceholder, user, userMenuItems, notifications, branding, labels, showSearch, showSidebarTrigger, showUserMenu, showThemeToggle, showNotifications, className, style, }: AppNavbarProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
export declare function AppNavbar({ items, searchPlaceholder, user, userMenuItems, notifications, branding, labels, showSearch, showSidebarTrigger, showUserMenu, showThemeToggle, showNotifications, className, style, loginButton, }: AppNavbarProps): import("react/jsx-runtime").JSX.Element;
|
|
36
37
|
export {};
|
|
@@ -1,94 +1,103 @@
|
|
|
1
|
-
import { jsxs as r, jsx as e, Fragment as
|
|
2
|
-
import { Search as
|
|
3
|
-
import { Input as
|
|
4
|
-
import { Button as
|
|
5
|
-
import { SidebarTrigger as
|
|
6
|
-
import { Separator as
|
|
1
|
+
import { jsxs as r, jsx as e, Fragment as b } from "react/jsx-runtime";
|
|
2
|
+
import { Search as M, Bell as k } from "lucide-react";
|
|
3
|
+
import { Input as D } from "../atoms/input.js";
|
|
4
|
+
import { Button as d } from "../atoms/button.js";
|
|
5
|
+
import { SidebarTrigger as C } from "../atoms/sidebar.js";
|
|
6
|
+
import { Separator as S } from "../atoms/separator.js";
|
|
7
7
|
import { ThemeToggle as y } from "../molecules/theme-toggle.js";
|
|
8
|
-
import { UserMenu as
|
|
9
|
-
import { DropdownMenu as
|
|
10
|
-
function
|
|
11
|
-
items:
|
|
12
|
-
searchPlaceholder:
|
|
13
|
-
user:
|
|
14
|
-
userMenuItems:
|
|
15
|
-
notifications:
|
|
16
|
-
branding:
|
|
17
|
-
labels:
|
|
18
|
-
showSearch:
|
|
19
|
-
showSidebarTrigger:
|
|
20
|
-
showUserMenu:
|
|
8
|
+
import { UserMenu as L } from "../molecules/user-menu.js";
|
|
9
|
+
import { DropdownMenu as T, DropdownMenuTrigger as j, DropdownMenuContent as I, DropdownMenuLabel as U, DropdownMenuSeparator as z, DropdownMenuItem as A } from "../atoms/dropdown-menu.js";
|
|
10
|
+
function P({
|
|
11
|
+
items: h = [],
|
|
12
|
+
searchPlaceholder: p = "Search...",
|
|
13
|
+
user: t,
|
|
14
|
+
userMenuItems: f,
|
|
15
|
+
notifications: s = [],
|
|
16
|
+
branding: o,
|
|
17
|
+
labels: m,
|
|
18
|
+
showSearch: u = !0,
|
|
19
|
+
showSidebarTrigger: N = !0,
|
|
20
|
+
showUserMenu: x = !0,
|
|
21
21
|
showThemeToggle: g = !0,
|
|
22
|
-
showNotifications:
|
|
23
|
-
className:
|
|
24
|
-
style:
|
|
22
|
+
showNotifications: w = !0,
|
|
23
|
+
className: i,
|
|
24
|
+
style: v,
|
|
25
|
+
loginButton: l
|
|
25
26
|
}) {
|
|
26
27
|
return /* @__PURE__ */ r(
|
|
27
28
|
"header",
|
|
28
29
|
{
|
|
29
|
-
className: "flex h-16 shrink-0 items-center gap-2 border-b px-4 bg-background sticky top-0 z-50" + (
|
|
30
|
-
style:
|
|
30
|
+
className: "flex h-16 shrink-0 items-center gap-2 border-b px-4 bg-background sticky top-0 z-50" + (i ? ` ${i}` : ""),
|
|
31
|
+
style: v,
|
|
31
32
|
children: [
|
|
32
|
-
|
|
33
|
-
/* @__PURE__ */ e(
|
|
34
|
-
/* @__PURE__ */ e(
|
|
33
|
+
N && /* @__PURE__ */ r(b, { children: [
|
|
34
|
+
/* @__PURE__ */ e(C, { className: "-ml-1" }),
|
|
35
|
+
/* @__PURE__ */ e(S, { orientation: "vertical", className: "mr-2 h-4" })
|
|
35
36
|
] }),
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
o && /* @__PURE__ */ r("a", { href: "#", className: "flex items-center gap-2 mr-4", children: [
|
|
38
|
+
o.logoUrl && /* @__PURE__ */ e("img", { src: o.logoUrl, alt: o.logoAlt || "Logo", className: "h-6 w-6" }),
|
|
39
|
+
o.title && /* @__PURE__ */ e("span", { className: "font-semibold", children: o.title })
|
|
39
40
|
] }),
|
|
40
|
-
/* @__PURE__ */ e("nav", { className: "flex items-center gap-6 text-sm font-medium", children:
|
|
41
|
-
const
|
|
41
|
+
/* @__PURE__ */ e("nav", { className: "flex items-center gap-6 text-sm font-medium", children: h?.map((a, n) => {
|
|
42
|
+
const c = a.icon;
|
|
42
43
|
return /* @__PURE__ */ r(
|
|
43
44
|
"a",
|
|
44
45
|
{
|
|
45
|
-
href:
|
|
46
|
-
className: `transition-colors hover:text-foreground/80 ${
|
|
46
|
+
href: a.href,
|
|
47
|
+
className: `transition-colors hover:text-foreground/80 ${a.disabled ? "pointer-events-none opacity-50" : "text-foreground/60"}`,
|
|
47
48
|
children: [
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
c && /* @__PURE__ */ e(c, { className: "inline-block mr-1 h-4 w-4" }),
|
|
50
|
+
a.label
|
|
50
51
|
]
|
|
51
52
|
},
|
|
52
|
-
|
|
53
|
+
n
|
|
53
54
|
);
|
|
54
55
|
}) }),
|
|
55
56
|
/* @__PURE__ */ r("div", { className: "ml-auto flex items-center gap-2", children: [
|
|
56
|
-
|
|
57
|
-
/* @__PURE__ */ e(
|
|
58
|
-
/* @__PURE__ */ e(
|
|
57
|
+
u && /* @__PURE__ */ r("div", { className: "relative", children: [
|
|
58
|
+
/* @__PURE__ */ e(M, { className: "absolute left-2 top-2.5 h-4 w-4 text-muted-foreground" }),
|
|
59
|
+
/* @__PURE__ */ e(D, { placeholder: p, className: "pl-8 w-[200px] lg:w-[300px]" })
|
|
59
60
|
] }),
|
|
60
61
|
g && /* @__PURE__ */ e(y, {}),
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
x && (t && t.name && t.email ? /* @__PURE__ */ e(
|
|
63
|
+
L,
|
|
63
64
|
{
|
|
64
|
-
user: { name:
|
|
65
|
-
items:
|
|
65
|
+
user: { name: t.name, email: t.email, avatar: t.image },
|
|
66
|
+
items: f
|
|
66
67
|
}
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
) : l && /* @__PURE__ */ e(
|
|
69
|
+
d,
|
|
70
|
+
{
|
|
71
|
+
variant: l.variant || "default",
|
|
72
|
+
onClick: l.onClick,
|
|
73
|
+
asChild: !!l.href,
|
|
74
|
+
children: l.href ? /* @__PURE__ */ e("a", { href: l.href, children: l.label || "Login" }) : l.label || "Login"
|
|
75
|
+
}
|
|
76
|
+
)),
|
|
77
|
+
w && s && s.length > 0 && /* @__PURE__ */ r(T, { children: [
|
|
78
|
+
/* @__PURE__ */ e(j, { asChild: !0, children: /* @__PURE__ */ r(d, { variant: "ghost", size: "icon", className: "relative", children: [
|
|
79
|
+
/* @__PURE__ */ e(k, { className: "h-5 w-5" }),
|
|
80
|
+
s.some((a) => !a.read) && /* @__PURE__ */ e("span", { className: "absolute right-2 top-2 h-2 w-2 rounded-full bg-red-600" }),
|
|
81
|
+
/* @__PURE__ */ e("span", { className: "sr-only", children: m?.notifications || "Notifications" })
|
|
73
82
|
] }) }),
|
|
74
|
-
/* @__PURE__ */ r(
|
|
75
|
-
/* @__PURE__ */ e(
|
|
76
|
-
/* @__PURE__ */ e(
|
|
77
|
-
|
|
78
|
-
|
|
83
|
+
/* @__PURE__ */ r(I, { align: "end", className: "w-80", children: [
|
|
84
|
+
/* @__PURE__ */ e(U, { children: m?.notifications || "Notifications" }),
|
|
85
|
+
/* @__PURE__ */ e(z, {}),
|
|
86
|
+
s.map((a, n) => /* @__PURE__ */ r(
|
|
87
|
+
A,
|
|
79
88
|
{
|
|
80
89
|
className: "flex flex-col items-start gap-1 p-3 cursor-pointer",
|
|
81
90
|
children: [
|
|
82
91
|
/* @__PURE__ */ r("div", { className: "flex w-full items-center justify-between", children: [
|
|
83
|
-
/* @__PURE__ */ e("span", { className: "font-medium", children:
|
|
84
|
-
/* @__PURE__ */ e("span", { className: "text-xs text-muted-foreground", children:
|
|
92
|
+
/* @__PURE__ */ e("span", { className: "font-medium", children: a.title }),
|
|
93
|
+
/* @__PURE__ */ e("span", { className: "text-xs text-muted-foreground", children: a.date })
|
|
85
94
|
] }),
|
|
86
|
-
/* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground line-clamp-2", children:
|
|
95
|
+
/* @__PURE__ */ e("p", { className: "text-sm text-muted-foreground line-clamp-2", children: a.description })
|
|
87
96
|
]
|
|
88
97
|
},
|
|
89
|
-
|
|
98
|
+
n
|
|
90
99
|
)),
|
|
91
|
-
|
|
100
|
+
s.length === 0 && /* @__PURE__ */ e("div", { className: "p-4 text-center text-sm text-muted-foreground", children: m?.noNotifications || "No new notifications" })
|
|
92
101
|
] })
|
|
93
102
|
] })
|
|
94
103
|
] })
|
|
@@ -97,6 +106,6 @@ function K({
|
|
|
97
106
|
);
|
|
98
107
|
}
|
|
99
108
|
export {
|
|
100
|
-
|
|
109
|
+
P as AppNavbar
|
|
101
110
|
};
|
|
102
111
|
//# sourceMappingURL=app-navbar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-navbar.js","sources":["../../src/organisms/app-navbar.tsx"],"sourcesContent":["\"use client\";\n\nimport { Search, Bell } from \"lucide-react\";\nimport { Input } from \"@/atoms/input\";\nimport { Button } from \"@/atoms/button\";\nimport { SidebarTrigger } from \"@/atoms/sidebar\";\nimport { Separator } from \"@/atoms/separator\";\nimport { ThemeToggle } from \"@/molecules/theme-toggle\";\nimport { UserMenu } from \"@/molecules/user-menu\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/atoms/dropdown-menu\";\nimport type { UserConfig, BrandingConfig, MenuItem, NotificationsList } from \"@/default-layout\";\n\ninterface NavbarLabels {\n profile?: string;\n notifications?: string;\n noNotifications?: string;\n}\n\ninterface UserMenuItem {\n label: string;\n href?: string;\n icon?: React.ComponentType<{ className?: string }>;\n onClick?: () => void;\n}\n\ninterface AppNavbarProps {\n items?: (MenuItem & { icon?: React.ComponentType<{ className?: string }> })[];\n searchPlaceholder?: string;\n user?: UserConfig;\n userMenuItems?: UserMenuItem[];\n notifications?: NotificationsList[];\n branding?: BrandingConfig;\n labels?: NavbarLabels;\n showSearch?: boolean;\n showSidebarTrigger?: boolean;\n showUserMenu?: boolean;\n showThemeToggle?: boolean;\n showNotifications?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function AppNavbar({\n items = [],\n searchPlaceholder = \"Search...\",\n user,\n userMenuItems,\n notifications = [],\n branding,\n labels,\n showSearch = true,\n showSidebarTrigger = true,\n showUserMenu = true,\n showThemeToggle = true,\n showNotifications = true,\n className,\n style,\n}: AppNavbarProps) {\n return (\n <header\n className={\n \"flex h-16 shrink-0 items-center gap-2 border-b px-4 bg-background sticky top-0 z-50\" +\n (className ? ` ${className}` : \"\")\n }\n style={style}\n >\n {showSidebarTrigger && (\n <>\n <SidebarTrigger className=\"-ml-1\" />\n <Separator orientation=\"vertical\" className=\"mr-2 h-4\" />\n </>\n )}\n\n {branding && (\n <a href=\"#\" className=\"flex items-center gap-2 mr-4\">\n {branding.logoUrl && (\n <img src={branding.logoUrl} alt={branding.logoAlt || \"Logo\"} className=\"h-6 w-6\" />\n )}\n {branding.title && <span className=\"font-semibold\">{branding.title}</span>}\n </a>\n )}\n\n <nav className=\"flex items-center gap-6 text-sm font-medium\">\n {items?.map((item, index) => {\n const Icon = item.icon;\n return (\n <a\n key={index}\n href={item.href}\n className={`transition-colors hover:text-foreground/80 ${\n item.disabled ? \"pointer-events-none opacity-50\" : \"text-foreground/60\"\n }`}\n >\n {Icon && <Icon className=\"inline-block mr-1 h-4 w-4\" />}\n {item.label}\n </a>\n );\n })}\n </nav>\n\n <div className=\"ml-auto flex items-center gap-2\">\n {showSearch && (\n <div className=\"relative\">\n <Search className=\"absolute left-2 top-2.5 h-4 w-4 text-muted-foreground\" />\n <Input placeholder={searchPlaceholder} className=\"pl-8 w-[200px] lg:w-[300px]\" />\n </div>\n )}\n\n {showThemeToggle && <ThemeToggle />}\n {showUserMenu && user && user.name && user.email && (\n <UserMenu\n user={{ name: user.name, email: user.email, avatar: user.image }}\n items={userMenuItems}\n />\n )}\n\n {showNotifications && notifications && notifications.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"relative\">\n <Bell className=\"h-5 w-5\" />\n {notifications.some((n) => !n.read) && (\n <span className=\"absolute right-2 top-2 h-2 w-2 rounded-full bg-red-600\" />\n )}\n <span className=\"sr-only\">{labels?.notifications || \"Notifications\"}</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-80\">\n <DropdownMenuLabel>{labels?.notifications || \"Notifications\"}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {notifications.map((notification, index) => (\n <DropdownMenuItem\n key={index}\n className=\"flex flex-col items-start gap-1 p-3 cursor-pointer\"\n >\n <div className=\"flex w-full items-center justify-between\">\n <span className=\"font-medium\">{notification.title}</span>\n <span className=\"text-xs text-muted-foreground\">{notification.date}</span>\n </div>\n <p className=\"text-sm text-muted-foreground line-clamp-2\">\n {notification.description}\n </p>\n </DropdownMenuItem>\n ))}\n {notifications.length === 0 && (\n <div className=\"p-4 text-center text-sm text-muted-foreground\">\n {labels?.noNotifications || \"No new notifications\"}\n </div>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </header>\n );\n}\n"],"names":["jsxs","jsx","Fragment","Search","Bell","Input","Button","SidebarTrigger","Separator","ThemeToggle","UserMenu","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuItem","AppNavbar","items","searchPlaceholder","user","userMenuItems","notifications","branding","labels","showSearch","showSidebarTrigger","showUserMenu","showThemeToggle","showNotifications","className","style","item","index","Icon","n","notification"],"mappings":"AAiDO,SAAA,QAAAA,GAAA,OAAAC,GAAA,YAAAC,SAAA;AAAA,SAAA,UAAAC,GAAA,QAAAC,SAAA;AAAA,SAAA,SAAAC,SAAA;AAAA,SAAA,UAAAC,SAAA;AAAA,SAAA,kBAAAC,SAAA;AAAA,SAAA,aAAAC,SAAA;AAAA,SAAA,eAAAC,SAAA;AAAA,SAAA,YAAAC,SAAA;AAAA,SAAA,gBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,qBAAAC,GAAA,yBAAAC,GAAA,oBAAAC,SAAA;AAAA,SAASC,EAAU;AAAA,EACxB,OAAAC,IAAQ,CAAA;AAAA,EACR,mBAAAC,IAAoB;AAAA,EACpB,MAAAC;AAAA,EACA,eAAAC;AAAA,EACA,eAAAC,IAAgB,CAAA;AAAA,EAChB,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,oBAAAC,IAAqB;AAAA,EACrB,cAAAC,IAAe;AAAA,EACf,iBAAAC,IAAkB;AAAA,EAClB,mBAAAC,IAAoB;AAAA,EACpB,WAAAC;AAAA,EACA,OAAAC;AACF,GAAmB;AACjB,SACE,gBAAA/B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WACE,yFACC8B,IAAY,IAAIA,CAAS,KAAK;AAAA,MAEjC,OAAAC;AAAA,MAEC,UAAA;AAAA,QAAAL,KACC,gBAAA1B,EAAAE,GAAA,EACE,UAAA;AAAA,UAAA,gBAAAD,EAACM,GAAA,EAAe,WAAU,QAAA,CAAQ;AAAA,UAClC,gBAAAN,EAACO,GAAA,EAAU,aAAY,YAAW,WAAU,WAAA,CAAW;AAAA,QAAA,GACzD;AAAA,QAGDe,KACC,gBAAAvB,EAAC,KAAA,EAAE,MAAK,KAAI,WAAU,gCACnB,UAAA;AAAA,UAAAuB,EAAS,WACR,gBAAAtB,EAAC,OAAA,EAAI,KAAKsB,EAAS,SAAS,KAAKA,EAAS,WAAW,QAAQ,WAAU,UAAA,CAAU;AAAA,UAElFA,EAAS,SAAS,gBAAAtB,EAAC,UAAK,WAAU,iBAAiB,YAAS,MAAA,CAAM;AAAA,QAAA,GACrE;AAAA,QAGF,gBAAAA,EAAC,SAAI,WAAU,+CACZ,aAAO,IAAI,CAAC+B,GAAMC,MAAU;AAC3B,gBAAMC,IAAOF,EAAK;AAClB,iBACE,gBAAAhC;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,MAAMgC,EAAK;AAAA,cACX,WAAW,8CACTA,EAAK,WAAW,mCAAmC,oBACrD;AAAA,cAEC,UAAA;AAAA,gBAAAE,KAAQ,gBAAAjC,EAACiC,GAAA,EAAK,WAAU,4BAAA,CAA4B;AAAA,gBACpDF,EAAK;AAAA,cAAA;AAAA,YAAA;AAAA,YAPDC;AAAA,UAAA;AAAA,QAUX,CAAC,EAAA,CACH;AAAA,QAEA,gBAAAjC,EAAC,OAAA,EAAI,WAAU,mCACZ,UAAA;AAAA,UAAAyB,KACC,gBAAAzB,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,YAAA,gBAAAC,EAACE,GAAA,EAAO,WAAU,wDAAA,CAAwD;AAAA,YAC1E,gBAAAF,EAACI,GAAA,EAAM,aAAac,GAAmB,WAAU,8BAAA,CAA8B;AAAA,UAAA,GACjF;AAAA,UAGDS,uBAAoBnB,GAAA,EAAY;AAAA,UAChCkB,KAAgBP,KAAQA,EAAK,QAAQA,EAAK,SACzC,gBAAAnB;AAAA,YAACS;AAAA,YAAA;AAAA,cACC,MAAM,EAAE,MAAMU,EAAK,MAAM,OAAOA,EAAK,OAAO,QAAQA,EAAK,MAAA;AAAA,cACzD,OAAOC;AAAA,YAAA;AAAA,UAAA;AAAA,UAIVQ,KAAqBP,KAAiBA,EAAc,SAAS,uBAC3DX,GAAA,EACC,UAAA;AAAA,YAAA,gBAAAV,EAACW,GAAA,EAAoB,SAAO,IAC1B,UAAA,gBAAAZ,EAACM,GAAA,EAAO,SAAQ,SAAQ,MAAK,QAAO,WAAU,YAC5C,UAAA;AAAA,cAAA,gBAAAL,EAACG,GAAA,EAAK,WAAU,UAAA,CAAU;AAAA,cACzBkB,EAAc,KAAK,CAACa,MAAM,CAACA,EAAE,IAAI,KAChC,gBAAAlC,EAAC,QAAA,EAAK,WAAU,yDAAA,CAAyD;AAAA,gCAE1E,QAAA,EAAK,WAAU,WAAW,UAAAuB,GAAQ,iBAAiB,gBAAA,CAAgB;AAAA,YAAA,EAAA,CACtE,EAAA,CACF;AAAA,YACA,gBAAAxB,EAACa,GAAA,EAAoB,OAAM,OAAM,WAAU,QACzC,UAAA;AAAA,cAAA,gBAAAZ,EAACa,GAAA,EAAmB,UAAAU,GAAQ,iBAAiB,iBAAgB;AAAA,gCAC5DT,GAAA,EAAsB;AAAA,cACtBO,EAAc,IAAI,CAACc,GAAcH,MAChC,gBAAAjC;AAAA,gBAACgB;AAAA,gBAAA;AAAA,kBAEC,WAAU;AAAA,kBAEV,UAAA;AAAA,oBAAA,gBAAAhB,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,sBAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,eAAe,UAAAmC,EAAa,OAAM;AAAA,sBAClD,gBAAAnC,EAAC,QAAA,EAAK,WAAU,iCAAiC,YAAa,KAAA,CAAK;AAAA,oBAAA,GACrE;AAAA,oBACA,gBAAAA,EAAC,KAAA,EAAE,WAAU,8CACV,YAAa,YAAA,CAChB;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBATKgC;AAAA,cAAA,CAWR;AAAA,cACAX,EAAc,WAAW,KACxB,gBAAArB,EAAC,SAAI,WAAU,iDACZ,UAAAuB,GAAQ,mBAAmB,uBAAA,CAC9B;AAAA,YAAA,EAAA,CAEJ;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
1
|
+
{"version":3,"file":"app-navbar.js","sources":["../../src/organisms/app-navbar.tsx"],"sourcesContent":["\"use client\";\n\nimport { Search, Bell } from \"lucide-react\";\nimport { Input } from \"@/atoms/input\";\nimport { Button } from \"@/atoms/button\";\nimport { SidebarTrigger } from \"@/atoms/sidebar\";\nimport { Separator } from \"@/atoms/separator\";\nimport { ThemeToggle } from \"@/molecules/theme-toggle\";\nimport { UserMenu } from \"@/molecules/user-menu\";\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 MenuItem,\n NotificationsList,\n LoginButtonConfig,\n} from \"@/default-layout\";\n\ninterface NavbarLabels {\n profile?: string;\n notifications?: string;\n noNotifications?: string;\n}\n\ninterface UserMenuItem {\n label: string;\n href?: string;\n icon?: React.ComponentType<{ className?: string }>;\n onClick?: () => void;\n}\n\ninterface AppNavbarProps {\n items?: (MenuItem & { icon?: React.ComponentType<{ className?: string }> })[];\n searchPlaceholder?: string;\n user?: UserConfig;\n userMenuItems?: UserMenuItem[];\n notifications?: NotificationsList[];\n branding?: BrandingConfig;\n labels?: NavbarLabels;\n showSearch?: boolean;\n showSidebarTrigger?: boolean;\n showUserMenu?: boolean;\n showThemeToggle?: boolean;\n showNotifications?: boolean;\n className?: string;\n style?: React.CSSProperties;\n loginButton?: LoginButtonConfig;\n}\n\nexport function AppNavbar({\n items = [],\n searchPlaceholder = \"Search...\",\n user,\n userMenuItems,\n notifications = [],\n branding,\n labels,\n showSearch = true,\n showSidebarTrigger = true,\n showUserMenu = true,\n showThemeToggle = true,\n showNotifications = true,\n className,\n style,\n loginButton,\n}: AppNavbarProps) {\n return (\n <header\n className={\n \"flex h-16 shrink-0 items-center gap-2 border-b px-4 bg-background sticky top-0 z-50\" +\n (className ? ` ${className}` : \"\")\n }\n style={style}\n >\n {showSidebarTrigger && (\n <>\n <SidebarTrigger className=\"-ml-1\" />\n <Separator orientation=\"vertical\" className=\"mr-2 h-4\" />\n </>\n )}\n\n {branding && (\n <a href=\"#\" className=\"flex items-center gap-2 mr-4\">\n {branding.logoUrl && (\n <img src={branding.logoUrl} alt={branding.logoAlt || \"Logo\"} className=\"h-6 w-6\" />\n )}\n {branding.title && <span className=\"font-semibold\">{branding.title}</span>}\n </a>\n )}\n\n <nav className=\"flex items-center gap-6 text-sm font-medium\">\n {items?.map((item, index) => {\n const Icon = item.icon;\n return (\n <a\n key={index}\n href={item.href}\n className={`transition-colors hover:text-foreground/80 ${\n item.disabled ? \"pointer-events-none opacity-50\" : \"text-foreground/60\"\n }`}\n >\n {Icon && <Icon className=\"inline-block mr-1 h-4 w-4\" />}\n {item.label}\n </a>\n );\n })}\n </nav>\n\n <div className=\"ml-auto flex items-center gap-2\">\n {showSearch && (\n <div className=\"relative\">\n <Search className=\"absolute left-2 top-2.5 h-4 w-4 text-muted-foreground\" />\n <Input placeholder={searchPlaceholder} className=\"pl-8 w-[200px] lg:w-[300px]\" />\n </div>\n )}\n\n {showThemeToggle && <ThemeToggle />}\n {showUserMenu &&\n (user && user.name && user.email ? (\n <UserMenu\n user={{ name: user.name, email: user.email, avatar: user.image }}\n items={userMenuItems}\n />\n ) : (\n loginButton && (\n <Button\n variant={loginButton.variant || \"default\"}\n onClick={loginButton.onClick}\n asChild={!!loginButton.href}\n >\n {loginButton.href ? (\n <a href={loginButton.href}>{loginButton.label || \"Login\"}</a>\n ) : (\n loginButton.label || \"Login\"\n )}\n </Button>\n )\n ))}\n\n {showNotifications && notifications && notifications.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"relative\">\n <Bell className=\"h-5 w-5\" />\n {notifications.some((n) => !n.read) && (\n <span className=\"absolute right-2 top-2 h-2 w-2 rounded-full bg-red-600\" />\n )}\n <span className=\"sr-only\">{labels?.notifications || \"Notifications\"}</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-80\">\n <DropdownMenuLabel>{labels?.notifications || \"Notifications\"}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {notifications.map((notification, index) => (\n <DropdownMenuItem\n key={index}\n className=\"flex flex-col items-start gap-1 p-3 cursor-pointer\"\n >\n <div className=\"flex w-full items-center justify-between\">\n <span className=\"font-medium\">{notification.title}</span>\n <span className=\"text-xs text-muted-foreground\">{notification.date}</span>\n </div>\n <p className=\"text-sm text-muted-foreground line-clamp-2\">\n {notification.description}\n </p>\n </DropdownMenuItem>\n ))}\n {notifications.length === 0 && (\n <div className=\"p-4 text-center text-sm text-muted-foreground\">\n {labels?.noNotifications || \"No new notifications\"}\n </div>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </header>\n );\n}\n"],"names":["jsxs","jsx","Fragment","Search","Bell","Input","Button","SidebarTrigger","Separator","ThemeToggle","UserMenu","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuItem","AppNavbar","items","searchPlaceholder","user","userMenuItems","notifications","branding","labels","showSearch","showSidebarTrigger","showUserMenu","showThemeToggle","showNotifications","className","style","loginButton","item","index","Icon","n","notification"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Sidebar } from '../atoms/sidebar';
|
|
2
|
-
import { UserConfig, BrandingConfig, SidebarGroup as SidebarGroupType, MenuItem } from '../default-layout';
|
|
2
|
+
import { UserConfig, BrandingConfig, SidebarGroup as SidebarGroupType, MenuItem, LoginButtonConfig } from '../default-layout';
|
|
3
3
|
interface SidebarLabels {
|
|
4
4
|
logout?: string;
|
|
5
5
|
}
|
|
@@ -30,6 +30,8 @@ interface AppSidebarProps extends React.ComponentProps<typeof Sidebar> {
|
|
|
30
30
|
hideBranding?: boolean;
|
|
31
31
|
showThemeToggle?: boolean;
|
|
32
32
|
scrollable?: boolean;
|
|
33
|
+
showUserMenu?: boolean;
|
|
34
|
+
loginButton?: LoginButtonConfig;
|
|
33
35
|
}
|
|
34
|
-
export declare function AppSidebar({ groups, header, footer, user, userMenuItems, branding, labels, fixed, hideBranding, showThemeToggle, className, style, side, variant, collapsible, scrollable, ...props }: AppSidebarProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
export declare function AppSidebar({ groups, header, footer, user, userMenuItems, branding, labels, fixed, hideBranding, showThemeToggle, className, style, side, variant, collapsible, scrollable, showUserMenu, loginButton, ...props }: AppSidebarProps): import("react/jsx-runtime").JSX.Element;
|
|
35
37
|
export {};
|
|
@@ -1,117 +1,120 @@
|
|
|
1
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
|
-
|
|
2
|
+
import { ChevronDown as f, LogOut as J } from "lucide-react";
|
|
3
|
+
import { SidebarThemeToggle as K } from "../molecules/sidebar-theme-toggle.js";
|
|
4
|
+
import { Button as P } from "../atoms/button.js";
|
|
5
|
+
import { Sidebar as Q, SidebarHeader as u, SidebarMenu as c, SidebarMenuItem as o, SidebarMenuButton as s, SidebarContent as R, SidebarGroup as V, SidebarGroupLabel as g, SidebarGroupContent as N, SidebarMenuSub as W, SidebarMenuSubItem as X, SidebarMenuSubButton as Y, SidebarFooter as Z } from "../atoms/sidebar.js";
|
|
6
|
+
import { Collapsible as x, CollapsibleTrigger as C, CollapsibleContent as S } from "../atoms/collapsible.js";
|
|
7
|
+
import { cn as _ } from "../lib/utils.js";
|
|
8
|
+
import { Avatar as w, AvatarImage as v, AvatarFallback as M } from "../atoms/avatar.js";
|
|
9
|
+
import { DropdownMenu as $, DropdownMenuTrigger as B, DropdownMenuContent as ee, DropdownMenuLabel as le, DropdownMenuSeparator as ae, DropdownMenuItem as y } from "../atoms/dropdown-menu.js";
|
|
10
|
+
function pe({
|
|
10
11
|
groups: A = [],
|
|
11
|
-
header:
|
|
12
|
-
footer:
|
|
12
|
+
header: h,
|
|
13
|
+
footer: D,
|
|
13
14
|
user: n,
|
|
14
15
|
userMenuItems: b,
|
|
15
|
-
branding:
|
|
16
|
-
labels:
|
|
17
|
-
fixed:
|
|
18
|
-
hideBranding:
|
|
19
|
-
showThemeToggle:
|
|
20
|
-
className:
|
|
21
|
-
style:
|
|
22
|
-
side:
|
|
23
|
-
variant:
|
|
24
|
-
collapsible:
|
|
25
|
-
scrollable:
|
|
26
|
-
|
|
16
|
+
branding: I,
|
|
17
|
+
labels: L,
|
|
18
|
+
fixed: k,
|
|
19
|
+
hideBranding: z = !1,
|
|
20
|
+
showThemeToggle: j = !0,
|
|
21
|
+
className: T,
|
|
22
|
+
style: U,
|
|
23
|
+
side: G = "left",
|
|
24
|
+
variant: O,
|
|
25
|
+
collapsible: F,
|
|
26
|
+
scrollable: re = !1,
|
|
27
|
+
showUserMenu: q = !0,
|
|
28
|
+
loginButton: i,
|
|
29
|
+
...H
|
|
27
30
|
}) {
|
|
28
|
-
const
|
|
31
|
+
const t = z ? void 0 : I;
|
|
29
32
|
return /* @__PURE__ */ l(
|
|
30
|
-
|
|
33
|
+
Q,
|
|
31
34
|
{
|
|
32
|
-
side:
|
|
33
|
-
variant:
|
|
34
|
-
collapsible:
|
|
35
|
-
className:
|
|
36
|
-
style:
|
|
37
|
-
...
|
|
35
|
+
side: G,
|
|
36
|
+
variant: O,
|
|
37
|
+
collapsible: F,
|
|
38
|
+
className: _(k ? void 0 : "absolute h-full", T),
|
|
39
|
+
style: U,
|
|
40
|
+
...H,
|
|
38
41
|
children: [
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
/* @__PURE__ */ e("div", { className: "bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg", children:
|
|
42
|
+
h && /* @__PURE__ */ e(u, { children: h }),
|
|
43
|
+
t && !h && /* @__PURE__ */ e(u, { children: /* @__PURE__ */ e(c, { children: /* @__PURE__ */ e(o, { children: /* @__PURE__ */ e(s, { size: "lg", asChild: !0, children: /* @__PURE__ */ l("a", { href: "#", children: [
|
|
44
|
+
/* @__PURE__ */ e("div", { className: "bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg", children: t.logoUrl && /* @__PURE__ */ e(
|
|
42
45
|
"img",
|
|
43
46
|
{
|
|
44
|
-
src:
|
|
45
|
-
alt:
|
|
47
|
+
src: t.logoUrl,
|
|
48
|
+
alt: t.logoAlt || "Logo",
|
|
46
49
|
className: "size-4"
|
|
47
50
|
}
|
|
48
51
|
) }),
|
|
49
52
|
/* @__PURE__ */ l("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
t.title && /* @__PURE__ */ e("span", { className: "truncate font-semibold", children: t.title }),
|
|
54
|
+
t.subtitle && /* @__PURE__ */ e("span", { className: "truncate text-xs", children: t.subtitle })
|
|
52
55
|
] })
|
|
53
56
|
] }) }) }) }) }),
|
|
54
|
-
/* @__PURE__ */ e(
|
|
55
|
-
r.label && (r.collapsible ? /* @__PURE__ */ l(
|
|
56
|
-
/* @__PURE__ */ e(
|
|
57
|
+
/* @__PURE__ */ e(R, { children: A?.map((r, m) => /* @__PURE__ */ l(V, { children: [
|
|
58
|
+
r.label && (r.collapsible ? /* @__PURE__ */ l(x, { defaultOpen: !0, className: "group/collapsible", children: [
|
|
59
|
+
/* @__PURE__ */ e(g, { asChild: !0, children: /* @__PURE__ */ l(C, { children: [
|
|
57
60
|
r.label,
|
|
58
|
-
/* @__PURE__ */ e(
|
|
61
|
+
/* @__PURE__ */ e(f, { className: "ml-auto transition-transform group-data-[state=open]/collapsible:rotate-180" })
|
|
59
62
|
] }) }),
|
|
60
|
-
/* @__PURE__ */ e(S, { children: /* @__PURE__ */ e(
|
|
61
|
-
const
|
|
62
|
-
return /* @__PURE__ */ e(
|
|
63
|
-
|
|
63
|
+
/* @__PURE__ */ e(S, { children: /* @__PURE__ */ e(N, { children: /* @__PURE__ */ e(c, { children: r.items?.map((a) => {
|
|
64
|
+
const d = a.icon;
|
|
65
|
+
return /* @__PURE__ */ e(o, { children: /* @__PURE__ */ e(s, { asChild: !0, children: /* @__PURE__ */ l("a", { href: a.href, children: [
|
|
66
|
+
d && /* @__PURE__ */ e(d, {}),
|
|
64
67
|
/* @__PURE__ */ e("span", { children: a.label })
|
|
65
68
|
] }) }) }, a.href);
|
|
66
69
|
}) }) }) })
|
|
67
|
-
] }) : /* @__PURE__ */ e(
|
|
68
|
-
!r.collapsible && /* @__PURE__ */ e(
|
|
69
|
-
const
|
|
70
|
-
return /* @__PURE__ */ e(
|
|
71
|
-
/* @__PURE__ */ e(
|
|
72
|
-
|
|
70
|
+
] }) : /* @__PURE__ */ e(g, { children: r.label })),
|
|
71
|
+
!r.collapsible && /* @__PURE__ */ e(N, { children: /* @__PURE__ */ e(c, { children: r.items?.map((a) => {
|
|
72
|
+
const d = a.icon, E = "items" in a && Array.isArray(a.items) && a.items.length > 0;
|
|
73
|
+
return /* @__PURE__ */ e(o, { children: E ? /* @__PURE__ */ l(x, { className: "group/collapsible", children: [
|
|
74
|
+
/* @__PURE__ */ e(s, { asChild: !0, children: /* @__PURE__ */ l(C, { children: [
|
|
75
|
+
d && /* @__PURE__ */ e(d, {}),
|
|
73
76
|
/* @__PURE__ */ e("span", { children: a.label }),
|
|
74
|
-
/* @__PURE__ */ e(
|
|
77
|
+
/* @__PURE__ */ e(f, { className: "ml-auto transition-transform group-data-[state=open]/collapsible:rotate-180" })
|
|
75
78
|
] }) }),
|
|
76
|
-
/* @__PURE__ */ e(S, { children: /* @__PURE__ */ e(
|
|
77
|
-
] }) : /* @__PURE__ */ e(
|
|
78
|
-
|
|
79
|
+
/* @__PURE__ */ e(S, { children: /* @__PURE__ */ e(W, { children: ("items" in a && Array.isArray(a.items) ? a.items : []).map((p) => /* @__PURE__ */ e(X, { children: /* @__PURE__ */ e(Y, { asChild: !0, children: /* @__PURE__ */ e("a", { href: p.href, children: /* @__PURE__ */ e("span", { children: p.label }) }) }) }, p.href)) }) })
|
|
80
|
+
] }) : /* @__PURE__ */ e(s, { asChild: !0, children: /* @__PURE__ */ l("a", { href: a.href, children: [
|
|
81
|
+
d && /* @__PURE__ */ e(d, {}),
|
|
79
82
|
/* @__PURE__ */ e("span", { children: a.label })
|
|
80
83
|
] }) }) }, a.href);
|
|
81
84
|
}) }) })
|
|
82
|
-
] }, r.label ||
|
|
83
|
-
/* @__PURE__ */ l(
|
|
84
|
-
|
|
85
|
-
n
|
|
86
|
-
/* @__PURE__ */ e(
|
|
87
|
-
|
|
85
|
+
] }, r.label || m)) }),
|
|
86
|
+
/* @__PURE__ */ l(Z, { children: [
|
|
87
|
+
j && /* @__PURE__ */ e(K, {}),
|
|
88
|
+
n ? /* @__PURE__ */ e(c, { children: /* @__PURE__ */ e(o, { children: /* @__PURE__ */ l($, { children: [
|
|
89
|
+
/* @__PURE__ */ e(B, { asChild: !0, children: /* @__PURE__ */ l(
|
|
90
|
+
s,
|
|
88
91
|
{
|
|
89
92
|
size: "lg",
|
|
90
93
|
className: "data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground",
|
|
91
94
|
children: [
|
|
92
|
-
/* @__PURE__ */ l(
|
|
93
|
-
/* @__PURE__ */ e(
|
|
95
|
+
/* @__PURE__ */ l(w, { className: "h-8 w-8 rounded-lg", children: [
|
|
96
|
+
/* @__PURE__ */ e(v, { src: n.image, alt: n.name }),
|
|
94
97
|
/* @__PURE__ */ e(M, { className: "rounded-lg", children: n.name?.[0] || "U" })
|
|
95
98
|
] }),
|
|
96
99
|
/* @__PURE__ */ l("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [
|
|
97
100
|
/* @__PURE__ */ e("span", { className: "truncate font-semibold", children: n.name }),
|
|
98
101
|
/* @__PURE__ */ e("span", { className: "truncate text-xs", children: n.email })
|
|
99
102
|
] }),
|
|
100
|
-
/* @__PURE__ */ e(
|
|
103
|
+
/* @__PURE__ */ e(f, { className: "ml-auto size-4" })
|
|
101
104
|
]
|
|
102
105
|
}
|
|
103
106
|
) }),
|
|
104
107
|
/* @__PURE__ */ l(
|
|
105
|
-
|
|
108
|
+
ee,
|
|
106
109
|
{
|
|
107
110
|
className: "w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg",
|
|
108
111
|
side: "bottom",
|
|
109
112
|
align: "end",
|
|
110
113
|
sideOffset: 4,
|
|
111
114
|
children: [
|
|
112
|
-
/* @__PURE__ */ e(
|
|
113
|
-
/* @__PURE__ */ l(
|
|
114
|
-
/* @__PURE__ */ e(
|
|
115
|
+
/* @__PURE__ */ e(le, { 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: [
|
|
116
|
+
/* @__PURE__ */ l(w, { className: "h-8 w-8 rounded-lg", children: [
|
|
117
|
+
/* @__PURE__ */ e(v, { src: n.image, alt: n.name }),
|
|
115
118
|
/* @__PURE__ */ e(M, { className: "rounded-lg", children: n.name?.[0] || "U" })
|
|
116
119
|
] }),
|
|
117
120
|
/* @__PURE__ */ l("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [
|
|
@@ -119,29 +122,38 @@ function ce({
|
|
|
119
122
|
/* @__PURE__ */ e("span", { className: "truncate text-xs", children: n.email })
|
|
120
123
|
] })
|
|
121
124
|
] }) }),
|
|
122
|
-
/* @__PURE__ */ e(
|
|
123
|
-
b?.map((r,
|
|
125
|
+
/* @__PURE__ */ e(ae, {}),
|
|
126
|
+
b?.map((r, m) => {
|
|
124
127
|
const a = r.icon;
|
|
125
|
-
return /* @__PURE__ */ e(
|
|
128
|
+
return /* @__PURE__ */ e(y, { asChild: !0, children: /* @__PURE__ */ l("a", { href: r.href || "#", onClick: r.onClick, children: [
|
|
126
129
|
a && /* @__PURE__ */ e(a, { className: "mr-2 h-4 w-4" }),
|
|
127
130
|
/* @__PURE__ */ e("span", { children: r.label })
|
|
128
|
-
] }) },
|
|
131
|
+
] }) }, m);
|
|
129
132
|
}),
|
|
130
|
-
!b && /* @__PURE__ */ l(
|
|
131
|
-
/* @__PURE__ */ e(
|
|
132
|
-
/* @__PURE__ */ e("span", { children:
|
|
133
|
+
!b && /* @__PURE__ */ l(y, { children: [
|
|
134
|
+
/* @__PURE__ */ e(J, { className: "mr-2 h-4 w-4" }),
|
|
135
|
+
/* @__PURE__ */ e("span", { children: L?.logout || "Log out" })
|
|
133
136
|
] })
|
|
134
137
|
]
|
|
135
138
|
}
|
|
136
139
|
)
|
|
137
|
-
] }) }) }),
|
|
138
|
-
|
|
140
|
+
] }) }) }) : q && i && /* @__PURE__ */ e("div", { className: "p-2", children: /* @__PURE__ */ e(
|
|
141
|
+
P,
|
|
142
|
+
{
|
|
143
|
+
variant: i.variant || "default",
|
|
144
|
+
onClick: i.onClick,
|
|
145
|
+
asChild: !!i.href,
|
|
146
|
+
className: "w-full justify-start",
|
|
147
|
+
children: i.href ? /* @__PURE__ */ e("a", { href: i.href, children: i.label || "Login" }) : i.label || "Login"
|
|
148
|
+
}
|
|
149
|
+
) }),
|
|
150
|
+
D
|
|
139
151
|
] })
|
|
140
152
|
]
|
|
141
153
|
}
|
|
142
154
|
);
|
|
143
155
|
}
|
|
144
156
|
export {
|
|
145
|
-
|
|
157
|
+
pe as AppSidebar
|
|
146
158
|
};
|
|
147
159
|
//# sourceMappingURL=app-sidebar.js.map
|