@appcorp/shadcn 1.2.0 → 2.0.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/components/app-sidebar.js +16 -23
- package/components/audio.js +11 -19
- package/components/dashboard.js +27 -65
- package/components/drawer-generic.js +20 -28
- package/components/enhanced-checkbox.js +10 -57
- package/components/enhanced-combobox.js +99 -143
- package/components/enhanced-drawer-footer.js +22 -31
- package/components/enhanced-drawer-header.js +6 -14
- package/components/enhanced-dropzone-impl.d.ts +32 -0
- package/components/enhanced-dropzone-impl.js +218 -0
- package/components/enhanced-dropzone.d.ts +2 -63
- package/components/enhanced-dropzone.js +6 -294
- package/components/enhanced-input.js +10 -57
- package/components/enhanced-label.js +6 -52
- package/components/enhanced-radio.js +12 -20
- package/components/enhanced-select.js +13 -61
- package/components/enhanced-slider.js +11 -58
- package/components/enhanced-switch.js +11 -58
- package/components/enhanced-table-footer-action.js +11 -19
- package/components/enhanced-table-footer-page.js +16 -24
- package/components/enhanced-table-footer-pagination.js +11 -21
- package/components/enhanced-table-header-action.js +22 -30
- package/components/enhanced-table-header-search.js +9 -17
- package/components/enhanced-table.js +125 -153
- package/components/enhanced-textarea.js +10 -57
- package/components/field.d.ts +1 -1
- package/components/field.js +31 -88
- package/components/image-resize-dialog.js +61 -159
- package/components/nav-main.js +32 -78
- package/components/nav-projects.js +37 -48
- package/components/nav-user.js +41 -51
- package/components/show-toast.js +5 -9
- package/components/sidebar.d.ts +1 -1
- package/components/sidebar.js +115 -184
- package/components/team-switcher.js +36 -47
- package/components/theme-provider.js +36 -84
- package/components/timeline.js +12 -20
- package/components/tooltip.js +10 -59
- package/components/ui/accordion.js +17 -67
- package/components/ui/alert-dialog.js +32 -89
- package/components/ui/alert.d.ts +1 -1
- package/components/ui/alert.js +14 -63
- package/components/ui/area-chart-v1-impl.d.ts +19 -0
- package/components/ui/area-chart-v1-impl.js +75 -0
- package/components/ui/area-chart-v1.d.ts +2 -19
- package/components/ui/area-chart-v1.js +4 -113
- package/components/ui/aspect-ratio.js +3 -39
- package/components/ui/avatar.js +13 -62
- package/components/ui/badge.d.ts +2 -2
- package/components/ui/badge.js +7 -55
- package/components/ui/breadcrumb.js +27 -80
- package/components/ui/button.d.ts +2 -2
- package/components/ui/button.js +10 -58
- package/components/ui/calendar-impl.d.ts +8 -0
- package/components/ui/calendar-impl.js +55 -0
- package/components/ui/calendar.d.ts +2 -8
- package/components/ui/calendar.js +5 -108
- package/components/ui/card.js +21 -73
- package/components/ui/carousel-impl.d.ts +18 -0
- package/components/ui/carousel-impl.js +117 -0
- package/components/ui/carousel.d.ts +6 -18
- package/components/ui/carousel.js +8 -170
- package/components/ui/chart-impl.d.ts +62 -0
- package/components/ui/chart-impl.js +162 -0
- package/components/ui/chart.d.ts +7 -62
- package/components/ui/chart.js +9 -219
- package/components/ui/checkbox.js +10 -57
- package/components/ui/collapsible.js +5 -43
- package/components/ui/combobox.js +22 -58
- package/components/ui/command-impl.d.ts +80 -0
- package/components/ui/command-impl.js +63 -0
- package/components/ui/command.d.ts +9 -80
- package/components/ui/command.js +12 -117
- package/components/ui/context-menu.js +41 -102
- package/components/ui/dialog.js +28 -84
- package/components/ui/drawer-impl.d.ts +22 -0
- package/components/ui/drawer-impl.js +56 -0
- package/components/ui/drawer.d.ts +10 -22
- package/components/ui/drawer.js +13 -111
- package/components/ui/dropdown-menu.js +41 -102
- package/components/ui/form.d.ts +4 -2
- package/components/ui/form.js +41 -95
- package/components/ui/hover-card.js +9 -58
- package/components/ui/input-otp-impl.d.ts +34 -0
- package/components/ui/input-otp-impl.js +43 -0
- package/components/ui/input-otp.d.ts +4 -34
- package/components/ui/input-otp.js +7 -92
- package/components/ui/input.js +6 -53
- package/components/ui/label.d.ts +1 -1
- package/components/ui/label.js +9 -56
- package/components/ui/language-selector.js +17 -55
- package/components/ui/menubar.js +46 -108
- package/components/ui/navigation-menu.d.ts +1 -1
- package/components/ui/navigation-menu.js +29 -84
- package/components/ui/pagination.js +30 -83
- package/components/ui/popover.js +10 -60
- package/components/ui/progress.js +8 -55
- package/components/ui/radio-group.js +12 -60
- package/components/ui/resizable-impl.d.ts +24 -0
- package/components/ui/resizable-impl.js +27 -0
- package/components/ui/resizable.d.ts +3 -24
- package/components/ui/resizable.js +6 -78
- package/components/ui/scroll-area.js +10 -58
- package/components/ui/select.js +34 -90
- package/components/ui/separator.js +7 -54
- package/components/ui/sheet.d.ts +1 -1
- package/components/ui/sheet.js +30 -86
- package/components/ui/skeleton.js +5 -21
- package/components/ui/slider.js +10 -57
- package/components/ui/sonner.js +7 -24
- package/components/ui/switch.js +8 -55
- package/components/ui/table.js +27 -81
- package/components/ui/tabs.js +14 -64
- package/components/ui/textarea.js +6 -53
- package/components/ui/theme-switcher.js +41 -91
- package/components/ui/toggle.d.ts +2 -2
- package/components/ui/toggle.js +9 -57
- package/data/admin-dashboard.js +16 -19
- package/hooks/use-enhanced-combobox.js +47 -124
- package/hooks/use-mobile.js +8 -44
- package/hooks/use-outside-click.js +6 -10
- package/lib/themes.js +1 -4
- package/lib/toast-utils.js +78 -120
- package/lib/utils.js +4 -11
- package/package.json +9 -90
- package/utils/transform-breadcrumbs.js +4 -8
- package/utils/transform-navitems.js +7 -22
- package/components/aceternity-ui/apple-cards-carousel.d.ts +0 -35
- package/components/aceternity-ui/apple-cards-carousel.js +0 -263
- package/components/shadcn-example/ai-chat/chat-interface.d.ts +0 -11
- package/components/shadcn-example/ai-chat/chat-interface.js +0 -70
- package/components/shadcn-example/ai-chat/index.d.ts +0 -38
- package/components/shadcn-example/ai-chat/index.js +0 -66
- package/components/shadcn-example/ai-chat/sidebar.d.ts +0 -15
- package/components/shadcn-example/ai-chat/sidebar.js +0 -68
- package/components/shadcn-example/ai-chat/welcome-section.d.ts +0 -12
- package/components/shadcn-example/ai-chat/welcome-section.js +0 -26
- package/components/shadcn-example/authentication/index.d.ts +0 -24
- package/components/shadcn-example/authentication/index.js +0 -59
- package/components/shadcn-example/authentication/user-auth-form.d.ts +0 -11
- package/components/shadcn-example/authentication/user-auth-form.js +0 -54
- package/components/shadcn-example/blog-detail-page/comment-section.d.ts +0 -15
- package/components/shadcn-example/blog-detail-page/comment-section.js +0 -83
- package/components/shadcn-example/blog-detail-page/content.d.ts +0 -7
- package/components/shadcn-example/blog-detail-page/content.js +0 -15
- package/components/shadcn-example/blog-detail-page/header.d.ts +0 -11
- package/components/shadcn-example/blog-detail-page/header.js +0 -36
- package/components/shadcn-example/blog-detail-page/index.d.ts +0 -25
- package/components/shadcn-example/blog-detail-page/index.js +0 -74
- package/components/shadcn-example/blog-page/blog-post-card.d.ts +0 -13
- package/components/shadcn-example/blog-page/blog-post-card.js +0 -30
- package/components/shadcn-example/blog-page/featured-post-sidebar-item.d.ts +0 -10
- package/components/shadcn-example/blog-page/featured-post-sidebar-item.js +0 -19
- package/components/shadcn-example/blog-page/index.d.ts +0 -20
- package/components/shadcn-example/blog-page/index.js +0 -36
- package/components/shadcn-example/coming-soon/countdown.d.ts +0 -2
- package/components/shadcn-example/coming-soon/countdown.js +0 -82
- package/components/shadcn-example/coming-soon/index.d.ts +0 -10
- package/components/shadcn-example/coming-soon/index.js +0 -41
- package/components/shadcn-io/color-picker/index.d.ts +0 -43
- package/components/shadcn-io/color-picker/index.js +0 -304
- package/components/shadcn-io/copy-button/index.d.ts +0 -16
- package/components/shadcn-io/copy-button/index.js +0 -121
- package/components/shadcn-io/dropzone/index.d.ts +0 -19
- package/components/shadcn-io/dropzone/index.js +0 -131
- package/components/shadcn-io/gantt/index.d.ts +0 -145
- package/components/shadcn-io/gantt/index.js +0 -766
- package/components/shadcn-io/table/index.d.ts +0 -60
- package/components/shadcn-io/table/index.js +0 -138
- package/templates/appcorp-v1/footer/bottom-bar.d.ts +0 -6
- package/templates/appcorp-v1/footer/bottom-bar.js +0 -25
- package/templates/appcorp-v1/footer/cta.d.ts +0 -6
- package/templates/appcorp-v1/footer/cta.js +0 -21
- package/templates/appcorp-v1/footer/footer-grid.d.ts +0 -14
- package/templates/appcorp-v1/footer/footer-grid.js +0 -52
- package/templates/appcorp-v1/footer/index.d.ts +0 -3
- package/templates/appcorp-v1/footer/index.js +0 -28
- package/templates/appcorp-v1/footer/newsletter.d.ts +0 -11
- package/templates/appcorp-v1/footer/newsletter.js +0 -28
- package/templates/appcorp-v1/footer/stats.d.ts +0 -6
- package/templates/appcorp-v1/footer/stats.js +0 -15
- package/templates/appcorp-v1/header/announcement-bar.d.ts +0 -3
- package/templates/appcorp-v1/header/announcement-bar.js +0 -15
- package/templates/appcorp-v1/header/dropdown-panel.d.ts +0 -8
- package/templates/appcorp-v1/header/dropdown-panel.js +0 -72
- package/templates/appcorp-v1/header/index.d.ts +0 -12
- package/templates/appcorp-v1/header/index.js +0 -16
- package/templates/appcorp-v1/header/mobile-menu.d.ts +0 -14
- package/templates/appcorp-v1/header/mobile-menu.js +0 -101
- package/templates/appcorp-v1/header/navigation-bar.d.ts +0 -3
- package/templates/appcorp-v1/header/navigation-bar.js +0 -117
- package/templates/appcorp-v1/header/social-button.d.ts +0 -7
- package/templates/appcorp-v1/header/social-button.js +0 -48
- package/templates/appcorp-v1/home.d.ts +0 -3
- package/templates/appcorp-v1/home.js +0 -27
- package/templates/data/appcorp-v1.d.ts +0 -93
- package/templates/data/appcorp-v1.js +0 -348
- package/templates/data/edupilotpro-v1.d.ts +0 -33
- package/templates/data/edupilotpro-v1.js +0 -116
- package/templates/data/school-v1.d.ts +0 -328
- package/templates/data/school-v1.js +0 -1563
- package/templates/edupilotpro-v1/feature-card.d.ts +0 -13
- package/templates/edupilotpro-v1/feature-card.js +0 -28
- package/templates/edupilotpro-v1/mockups/dashboard-mockup.d.ts +0 -3
- package/templates/edupilotpro-v1/mockups/dashboard-mockup.js +0 -55
- package/templates/school-v1/footer.d.ts +0 -3
- package/templates/school-v1/footer.js +0 -75
- package/templates/school-v1/index.d.ts +0 -18
- package/templates/school-v1/index.js +0 -60
- package/templates/school-v1/navigation.d.ts +0 -3
- package/templates/school-v1/navigation.js +0 -123
- package/templates/school-v1/sections/about.d.ts +0 -3
- package/templates/school-v1/sections/about.js +0 -49
- package/templates/school-v1/sections/admissions.d.ts +0 -3
- package/templates/school-v1/sections/admissions.js +0 -77
- package/templates/school-v1/sections/contact.d.ts +0 -3
- package/templates/school-v1/sections/contact.js +0 -67
- package/templates/school-v1/sections/faqs.d.ts +0 -3
- package/templates/school-v1/sections/faqs.js +0 -50
- package/templates/school-v1/sections/hero.d.ts +0 -3
- package/templates/school-v1/sections/hero.js +0 -132
- package/templates/school-v1/sections/management.d.ts +0 -3
- package/templates/school-v1/sections/management.js +0 -34
- package/templates/school-v1/sections/policies.d.ts +0 -3
- package/templates/school-v1/sections/policies.js +0 -127
- package/templates/school-v1/sections/programs.d.ts +0 -3
- package/templates/school-v1/sections/programs.js +0 -107
- package/templates/school-v1/sections/testimonials.d.ts +0 -3
- package/templates/school-v1/sections/testimonials.js +0 -46
- package/templates/school-v1/sections/why-choose-us.d.ts +0 -3
- package/templates/school-v1/sections/why-choose-us.js +0 -57
package/components/sidebar.js
CHANGED
|
@@ -1,49 +1,4 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
"use strict";
|
|
3
|
-
var __assign = (this && this.__assign) || function () {
|
|
4
|
-
__assign = Object.assign || function(t) {
|
|
5
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
6
|
-
s = arguments[i];
|
|
7
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
8
|
-
t[p] = s[p];
|
|
9
|
-
}
|
|
10
|
-
return t;
|
|
11
|
-
};
|
|
12
|
-
return __assign.apply(this, arguments);
|
|
13
|
-
};
|
|
14
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
-
if (k2 === undefined) k2 = k;
|
|
16
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
-
}
|
|
20
|
-
Object.defineProperty(o, k2, desc);
|
|
21
|
-
}) : (function(o, m, k, k2) {
|
|
22
|
-
if (k2 === undefined) k2 = k;
|
|
23
|
-
o[k2] = m[k];
|
|
24
|
-
}));
|
|
25
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
-
}) : function(o, v) {
|
|
28
|
-
o["default"] = v;
|
|
29
|
-
});
|
|
30
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
-
var ownKeys = function(o) {
|
|
32
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
-
var ar = [];
|
|
34
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
-
return ar;
|
|
36
|
-
};
|
|
37
|
-
return ownKeys(o);
|
|
38
|
-
};
|
|
39
|
-
return function (mod) {
|
|
40
|
-
if (mod && mod.__esModule) return mod;
|
|
41
|
-
var result = {};
|
|
42
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
-
__setModuleDefault(result, mod);
|
|
44
|
-
return result;
|
|
45
|
-
};
|
|
46
|
-
})();
|
|
47
2
|
var __rest = (this && this.__rest) || function (s, e) {
|
|
48
3
|
var t = {};
|
|
49
4
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
@@ -55,67 +10,42 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
55
10
|
}
|
|
56
11
|
return t;
|
|
57
12
|
};
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
exports.SidebarMenuSubItem = SidebarMenuSubItem;
|
|
78
|
-
exports.SidebarProvider = SidebarProvider;
|
|
79
|
-
exports.SidebarRail = SidebarRail;
|
|
80
|
-
exports.SidebarSeparator = SidebarSeparator;
|
|
81
|
-
exports.SidebarTrigger = SidebarTrigger;
|
|
82
|
-
exports.useSidebar = useSidebar;
|
|
83
|
-
var React = __importStar(require("react"));
|
|
84
|
-
var react_slot_1 = require("@radix-ui/react-slot");
|
|
85
|
-
var class_variance_authority_1 = require("class-variance-authority");
|
|
86
|
-
var lucide_react_1 = require("lucide-react");
|
|
87
|
-
var use_mobile_1 = require("../hooks/use-mobile");
|
|
88
|
-
var utils_1 = require("../lib/utils");
|
|
89
|
-
var button_1 = require("./ui/button");
|
|
90
|
-
var input_1 = require("./ui/input");
|
|
91
|
-
var separator_1 = require("./ui/separator");
|
|
92
|
-
var sheet_1 = require("./ui/sheet");
|
|
93
|
-
var skeleton_1 = require("./ui/skeleton");
|
|
94
|
-
var tooltip_1 = require("./tooltip");
|
|
95
|
-
var SIDEBAR_COOKIE_NAME = "sidebar_state";
|
|
96
|
-
var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
|
|
97
|
-
var SIDEBAR_WIDTH = "16rem";
|
|
98
|
-
var SIDEBAR_WIDTH_MOBILE = "18rem";
|
|
99
|
-
var SIDEBAR_WIDTH_ICON = "3rem";
|
|
100
|
-
var SIDEBAR_KEYBOARD_SHORTCUT = "b";
|
|
101
|
-
var SidebarContext = React.createContext(null);
|
|
13
|
+
import * as React from "react";
|
|
14
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
15
|
+
import { cva } from "class-variance-authority";
|
|
16
|
+
import { PanelLeftIcon } from "lucide-react";
|
|
17
|
+
import { useIsMobile } from "../hooks/use-mobile";
|
|
18
|
+
import { cn } from "../lib/utils";
|
|
19
|
+
import { Button } from "./ui/button";
|
|
20
|
+
import { Input } from "./ui/input";
|
|
21
|
+
import { Separator } from "./ui/separator";
|
|
22
|
+
import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, } from "./ui/sheet";
|
|
23
|
+
import { Skeleton } from "./ui/skeleton";
|
|
24
|
+
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "./tooltip";
|
|
25
|
+
const SIDEBAR_COOKIE_NAME = "sidebar_state";
|
|
26
|
+
const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
|
|
27
|
+
const SIDEBAR_WIDTH = "16rem";
|
|
28
|
+
const SIDEBAR_WIDTH_MOBILE = "18rem";
|
|
29
|
+
const SIDEBAR_WIDTH_ICON = "3rem";
|
|
30
|
+
const SIDEBAR_KEYBOARD_SHORTCUT = "b";
|
|
31
|
+
const SidebarContext = React.createContext(null);
|
|
102
32
|
function useSidebar() {
|
|
103
|
-
|
|
33
|
+
const context = React.useContext(SidebarContext);
|
|
104
34
|
if (!context) {
|
|
105
35
|
throw new Error("useSidebar must be used within a SidebarProvider.");
|
|
106
36
|
}
|
|
107
37
|
return context;
|
|
108
38
|
}
|
|
109
39
|
function SidebarProvider(_a) {
|
|
110
|
-
var
|
|
111
|
-
|
|
112
|
-
|
|
40
|
+
var { defaultOpen = true, open: openProp, onOpenChange: setOpenProp, className, style, children } = _a, props = __rest(_a, ["defaultOpen", "open", "onOpenChange", "className", "style", "children"]);
|
|
41
|
+
const isMobile = useIsMobile();
|
|
42
|
+
const [openMobile, setOpenMobile] = React.useState(false);
|
|
113
43
|
// This is the internal state of the sidebar.
|
|
114
44
|
// We use openProp and setOpenProp for control from outside the component.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
45
|
+
const [_open, _setOpen] = React.useState(defaultOpen);
|
|
46
|
+
const open = openProp !== null && openProp !== void 0 ? openProp : _open;
|
|
47
|
+
const setOpen = React.useCallback((value) => {
|
|
48
|
+
const openState = typeof value === "function" ? value(open) : value;
|
|
119
49
|
if (setOpenProp) {
|
|
120
50
|
setOpenProp(openState);
|
|
121
51
|
}
|
|
@@ -123,15 +53,15 @@ function SidebarProvider(_a) {
|
|
|
123
53
|
_setOpen(openState);
|
|
124
54
|
}
|
|
125
55
|
// This sets the cookie to keep the sidebar state.
|
|
126
|
-
document.cookie =
|
|
56
|
+
document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
|
|
127
57
|
}, [setOpenProp, open]);
|
|
128
58
|
// Helper to toggle the sidebar.
|
|
129
|
-
|
|
130
|
-
return isMobile ? setOpenMobile(
|
|
59
|
+
const toggleSidebar = React.useCallback(() => {
|
|
60
|
+
return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);
|
|
131
61
|
}, [isMobile, setOpen, setOpenMobile]);
|
|
132
62
|
// Adds a keyboard shortcut to toggle the sidebar.
|
|
133
|
-
React.useEffect(
|
|
134
|
-
|
|
63
|
+
React.useEffect(() => {
|
|
64
|
+
const handleKeyDown = (event) => {
|
|
135
65
|
if (event.key === SIDEBAR_KEYBOARD_SHORTCUT &&
|
|
136
66
|
(event.metaKey || event.ctrlKey)) {
|
|
137
67
|
event.preventDefault();
|
|
@@ -139,45 +69,45 @@ function SidebarProvider(_a) {
|
|
|
139
69
|
}
|
|
140
70
|
};
|
|
141
71
|
window.addEventListener("keydown", handleKeyDown);
|
|
142
|
-
return
|
|
72
|
+
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
143
73
|
}, [toggleSidebar]);
|
|
144
74
|
// We add a state so that we can do data-state="expanded" or "collapsed".
|
|
145
75
|
// This makes it easier to style the sidebar with Tailwind classes.
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
state
|
|
149
|
-
open
|
|
150
|
-
setOpen
|
|
151
|
-
isMobile
|
|
152
|
-
openMobile
|
|
153
|
-
setOpenMobile
|
|
154
|
-
toggleSidebar
|
|
155
|
-
})
|
|
76
|
+
const state = open ? "expanded" : "collapsed";
|
|
77
|
+
const contextValue = React.useMemo(() => ({
|
|
78
|
+
state,
|
|
79
|
+
open,
|
|
80
|
+
setOpen,
|
|
81
|
+
isMobile,
|
|
82
|
+
openMobile,
|
|
83
|
+
setOpenMobile,
|
|
84
|
+
toggleSidebar,
|
|
85
|
+
}), [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]);
|
|
156
86
|
return (React.createElement(SidebarContext.Provider, { value: contextValue },
|
|
157
|
-
React.createElement(
|
|
158
|
-
React.createElement("div",
|
|
87
|
+
React.createElement(TooltipProvider, { delayDuration: 0 },
|
|
88
|
+
React.createElement("div", Object.assign({ "data-slot": "sidebar-wrapper", style: Object.assign({ "--sidebar-width": SIDEBAR_WIDTH, "--sidebar-width-icon": SIDEBAR_WIDTH_ICON }, style), className: cn("group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full", className) }, props), children))));
|
|
159
89
|
}
|
|
160
90
|
function Sidebar(_a) {
|
|
161
|
-
var
|
|
162
|
-
|
|
91
|
+
var { side = "left", variant = "sidebar", collapsible = "offcanvas", className, children } = _a, props = __rest(_a, ["side", "variant", "collapsible", "className", "children"]);
|
|
92
|
+
const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
|
|
163
93
|
if (collapsible === "none") {
|
|
164
|
-
return (React.createElement("div",
|
|
94
|
+
return (React.createElement("div", Object.assign({ "data-slot": "sidebar", className: cn("bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col", className) }, props), children));
|
|
165
95
|
}
|
|
166
96
|
if (isMobile) {
|
|
167
|
-
return (React.createElement(
|
|
168
|
-
React.createElement(
|
|
97
|
+
return (React.createElement(Sheet, Object.assign({ open: openMobile, onOpenChange: setOpenMobile }, props),
|
|
98
|
+
React.createElement(SheetContent, { "data-sidebar": "sidebar", "data-slot": "sidebar", "data-mobile": "true", className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden", style: {
|
|
169
99
|
"--sidebar-width": SIDEBAR_WIDTH_MOBILE,
|
|
170
100
|
}, side: side },
|
|
171
|
-
React.createElement(
|
|
172
|
-
React.createElement(
|
|
173
|
-
React.createElement(
|
|
101
|
+
React.createElement(SheetHeader, { className: "sr-only" },
|
|
102
|
+
React.createElement(SheetTitle, null, "Sidebar"),
|
|
103
|
+
React.createElement(SheetDescription, null, "Displays the mobile sidebar.")),
|
|
174
104
|
React.createElement("div", { className: "flex h-full w-full flex-col" }, children))));
|
|
175
105
|
}
|
|
176
106
|
return (React.createElement("div", { className: "group peer text-sidebar-foreground hidden md:block", "data-state": state, "data-collapsible": state === "collapsed" ? collapsible : "", "data-variant": variant, "data-side": side, "data-slot": "sidebar" },
|
|
177
|
-
React.createElement("div", { "data-slot": "sidebar-gap", className:
|
|
107
|
+
React.createElement("div", { "data-slot": "sidebar-gap", className: cn("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear", "group-data-[collapsible=offcanvas]:w-0", "group-data-[side=right]:rotate-180", variant === "floating" || variant === "inset"
|
|
178
108
|
? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]"
|
|
179
109
|
: "group-data-[collapsible=icon]:w-(--sidebar-width-icon)") }),
|
|
180
|
-
React.createElement("div",
|
|
110
|
+
React.createElement("div", Object.assign({ "data-slot": "sidebar-container", className: cn("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex", side === "left"
|
|
181
111
|
? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]"
|
|
182
112
|
: "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
|
|
183
113
|
// Adjust the padding for floating and inset variants.
|
|
@@ -187,73 +117,73 @@ function Sidebar(_a) {
|
|
|
187
117
|
React.createElement("div", { "data-sidebar": "sidebar", "data-slot": "sidebar-inner", className: "bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm" }, children))));
|
|
188
118
|
}
|
|
189
119
|
function SidebarTrigger(_a) {
|
|
190
|
-
var
|
|
191
|
-
|
|
192
|
-
return (React.createElement(
|
|
120
|
+
var { className, onClick } = _a, props = __rest(_a, ["className", "onClick"]);
|
|
121
|
+
const { toggleSidebar } = useSidebar();
|
|
122
|
+
return (React.createElement(Button, Object.assign({ "data-sidebar": "trigger", "data-slot": "sidebar-trigger", variant: "ghost", size: "icon", className: cn("size-7", className), onClick: (event) => {
|
|
193
123
|
onClick === null || onClick === void 0 ? void 0 : onClick(event);
|
|
194
124
|
toggleSidebar();
|
|
195
125
|
} }, props),
|
|
196
|
-
React.createElement(
|
|
126
|
+
React.createElement(PanelLeftIcon, null),
|
|
197
127
|
React.createElement("span", { className: "sr-only" }, "Toggle Sidebar")));
|
|
198
128
|
}
|
|
199
129
|
function SidebarRail(_a) {
|
|
200
|
-
var className = _a
|
|
201
|
-
|
|
202
|
-
return (React.createElement("button",
|
|
130
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
131
|
+
const { toggleSidebar } = useSidebar();
|
|
132
|
+
return (React.createElement("button", Object.assign({ "data-sidebar": "rail", "data-slot": "sidebar-rail", "aria-label": "Toggle Sidebar", tabIndex: -1, onClick: toggleSidebar, title: "Toggle Sidebar", className: cn("hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex", "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize", "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize", "hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full", "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2", "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2", className) }, props)));
|
|
203
133
|
}
|
|
204
134
|
function SidebarInset(_a) {
|
|
205
|
-
var className = _a
|
|
206
|
-
return (React.createElement("main",
|
|
135
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
136
|
+
return (React.createElement("main", Object.assign({ "data-slot": "sidebar-inset", className: cn("bg-background relative flex w-full flex-1 flex-col", "md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2", className) }, props)));
|
|
207
137
|
}
|
|
208
138
|
function SidebarInput(_a) {
|
|
209
|
-
var className = _a
|
|
210
|
-
return (React.createElement(
|
|
139
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
140
|
+
return (React.createElement(Input, Object.assign({ "data-slot": "sidebar-input", "data-sidebar": "input", className: cn("bg-background h-8 w-full shadow-none", className) }, props)));
|
|
211
141
|
}
|
|
212
142
|
function SidebarHeader(_a) {
|
|
213
|
-
var className = _a
|
|
214
|
-
return (React.createElement("div",
|
|
143
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
144
|
+
return (React.createElement("div", Object.assign({ "data-slot": "sidebar-header", "data-sidebar": "header", className: cn("flex flex-col gap-2 p-2", className) }, props)));
|
|
215
145
|
}
|
|
216
146
|
function SidebarFooter(_a) {
|
|
217
|
-
var className = _a
|
|
218
|
-
return (React.createElement("div",
|
|
147
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
148
|
+
return (React.createElement("div", Object.assign({ "data-slot": "sidebar-footer", "data-sidebar": "footer", className: cn("flex flex-col gap-2 p-2", className) }, props)));
|
|
219
149
|
}
|
|
220
150
|
function SidebarSeparator(_a) {
|
|
221
|
-
var className = _a
|
|
222
|
-
return (React.createElement(
|
|
151
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
152
|
+
return (React.createElement(Separator, Object.assign({ "data-slot": "sidebar-separator", "data-sidebar": "separator", className: cn("bg-sidebar-border mx-2 w-auto", className) }, props)));
|
|
223
153
|
}
|
|
224
154
|
function SidebarContent(_a) {
|
|
225
|
-
var className = _a
|
|
226
|
-
return (React.createElement("div",
|
|
155
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
156
|
+
return (React.createElement("div", Object.assign({ "data-slot": "sidebar-content", "data-sidebar": "content", className: cn("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden", className) }, props)));
|
|
227
157
|
}
|
|
228
158
|
function SidebarGroup(_a) {
|
|
229
|
-
var className = _a
|
|
230
|
-
return (React.createElement("div",
|
|
159
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
160
|
+
return (React.createElement("div", Object.assign({ "data-slot": "sidebar-group", "data-sidebar": "group", className: cn("relative flex w-full min-w-0 flex-col p-2", className) }, props)));
|
|
231
161
|
}
|
|
232
162
|
function SidebarGroupLabel(_a) {
|
|
233
|
-
var
|
|
234
|
-
|
|
235
|
-
return (React.createElement(Comp,
|
|
163
|
+
var { className, asChild = false } = _a, props = __rest(_a, ["className", "asChild"]);
|
|
164
|
+
const Comp = asChild ? Slot : "div";
|
|
165
|
+
return (React.createElement(Comp, Object.assign({ "data-slot": "sidebar-group-label", "data-sidebar": "group-label", className: cn("text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", "group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0", className) }, props)));
|
|
236
166
|
}
|
|
237
167
|
function SidebarGroupAction(_a) {
|
|
238
|
-
var
|
|
239
|
-
|
|
240
|
-
return (React.createElement(Comp,
|
|
168
|
+
var { className, asChild = false } = _a, props = __rest(_a, ["className", "asChild"]);
|
|
169
|
+
const Comp = asChild ? Slot : "button";
|
|
170
|
+
return (React.createElement(Comp, Object.assign({ "data-slot": "sidebar-group-action", "data-sidebar": "group-action", className: cn("text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
|
|
241
171
|
// Increases the hit area of the button on mobile.
|
|
242
172
|
"after:absolute after:-inset-2 md:after:hidden", "group-data-[collapsible=icon]:hidden", className) }, props)));
|
|
243
173
|
}
|
|
244
174
|
function SidebarGroupContent(_a) {
|
|
245
|
-
var className = _a
|
|
246
|
-
return (React.createElement("div",
|
|
175
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
176
|
+
return (React.createElement("div", Object.assign({ "data-slot": "sidebar-group-content", "data-sidebar": "group-content", className: cn("w-full text-sm", className) }, props)));
|
|
247
177
|
}
|
|
248
178
|
function SidebarMenu(_a) {
|
|
249
|
-
var className = _a
|
|
250
|
-
return (React.createElement("ul",
|
|
179
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
180
|
+
return (React.createElement("ul", Object.assign({ "data-slot": "sidebar-menu", "data-sidebar": "menu", className: cn("flex w-full min-w-0 flex-col gap-1", className) }, props)));
|
|
251
181
|
}
|
|
252
182
|
function SidebarMenuItem(_a) {
|
|
253
|
-
var className = _a
|
|
254
|
-
return (React.createElement("li",
|
|
183
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
184
|
+
return (React.createElement("li", Object.assign({ "data-slot": "sidebar-menu-item", "data-sidebar": "menu-item", className: cn("group/menu-item relative", className) }, props)));
|
|
255
185
|
}
|
|
256
|
-
|
|
186
|
+
const sidebarMenuButtonVariants = cva("peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden 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", {
|
|
257
187
|
variants: {
|
|
258
188
|
variant: {
|
|
259
189
|
default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
|
|
@@ -271,10 +201,10 @@ var sidebarMenuButtonVariants = (0, class_variance_authority_1.cva)("peer/menu-b
|
|
|
271
201
|
},
|
|
272
202
|
});
|
|
273
203
|
function SidebarMenuButton(_a) {
|
|
274
|
-
var
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
204
|
+
var { asChild = false, isActive = false, variant = "default", size = "default", tooltip, className } = _a, props = __rest(_a, ["asChild", "isActive", "variant", "size", "tooltip", "className"]);
|
|
205
|
+
const Comp = asChild ? Slot : "button";
|
|
206
|
+
const { isMobile, state } = useSidebar();
|
|
207
|
+
const button = (React.createElement(Comp, Object.assign({ "data-slot": "sidebar-menu-button", "data-sidebar": "menu-button", "data-size": size, "data-active": isActive, className: cn(sidebarMenuButtonVariants({ variant, size }), className) }, props)));
|
|
278
208
|
if (!tooltip) {
|
|
279
209
|
return button;
|
|
280
210
|
}
|
|
@@ -283,44 +213,45 @@ function SidebarMenuButton(_a) {
|
|
|
283
213
|
children: tooltip,
|
|
284
214
|
};
|
|
285
215
|
}
|
|
286
|
-
return (React.createElement(
|
|
287
|
-
React.createElement(
|
|
288
|
-
React.createElement(
|
|
216
|
+
return (React.createElement(Tooltip, null,
|
|
217
|
+
React.createElement(TooltipTrigger, { asChild: true }, button),
|
|
218
|
+
React.createElement(TooltipContent, Object.assign({ side: "right", align: "center", hidden: state !== "collapsed" || isMobile }, tooltip))));
|
|
289
219
|
}
|
|
290
220
|
function SidebarMenuAction(_a) {
|
|
291
|
-
var
|
|
292
|
-
|
|
293
|
-
return (React.createElement(Comp,
|
|
221
|
+
var { className, asChild = false, showOnHover = false } = _a, props = __rest(_a, ["className", "asChild", "showOnHover"]);
|
|
222
|
+
const Comp = asChild ? Slot : "button";
|
|
223
|
+
return (React.createElement(Comp, Object.assign({ "data-slot": "sidebar-menu-action", "data-sidebar": "menu-action", className: cn("text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
|
|
294
224
|
// Increases the hit area of the button on mobile.
|
|
295
225
|
"after:absolute after:-inset-2 md:after:hidden", "peer-data-[size=sm]/menu-button:top-1", "peer-data-[size=default]/menu-button:top-1.5", "peer-data-[size=lg]/menu-button:top-2.5", "group-data-[collapsible=icon]:hidden", showOnHover &&
|
|
296
226
|
"peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0", className) }, props)));
|
|
297
227
|
}
|
|
298
228
|
function SidebarMenuBadge(_a) {
|
|
299
|
-
var className = _a
|
|
300
|
-
return (React.createElement("div",
|
|
229
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
230
|
+
return (React.createElement("div", Object.assign({ "data-slot": "sidebar-menu-badge", "data-sidebar": "menu-badge", className: cn("text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none", "peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground", "peer-data-[size=sm]/menu-button:top-1", "peer-data-[size=default]/menu-button:top-1.5", "peer-data-[size=lg]/menu-button:top-2.5", "group-data-[collapsible=icon]:hidden", className) }, props)));
|
|
301
231
|
}
|
|
302
232
|
function SidebarMenuSkeleton(_a) {
|
|
303
|
-
var
|
|
233
|
+
var { className, showIcon = false } = _a, props = __rest(_a, ["className", "showIcon"]);
|
|
304
234
|
// Random width between 50 to 90%.
|
|
305
|
-
|
|
306
|
-
return
|
|
235
|
+
const width = React.useMemo(() => {
|
|
236
|
+
return `${Math.floor(Math.random() * 40) + 50}%`;
|
|
307
237
|
}, []);
|
|
308
|
-
return (React.createElement("div",
|
|
309
|
-
showIcon && (React.createElement(
|
|
310
|
-
React.createElement(
|
|
238
|
+
return (React.createElement("div", Object.assign({ "data-slot": "sidebar-menu-skeleton", "data-sidebar": "menu-skeleton", className: cn("flex h-8 items-center gap-2 rounded-md px-2", className) }, props),
|
|
239
|
+
showIcon && (React.createElement(Skeleton, { className: "size-4 rounded-md", "data-sidebar": "menu-skeleton-icon" })),
|
|
240
|
+
React.createElement(Skeleton, { className: "h-4 max-w-(--skeleton-width) flex-1", "data-sidebar": "menu-skeleton-text", style: {
|
|
311
241
|
"--skeleton-width": width,
|
|
312
242
|
} })));
|
|
313
243
|
}
|
|
314
244
|
function SidebarMenuSub(_a) {
|
|
315
|
-
var className = _a
|
|
316
|
-
return (React.createElement("ul",
|
|
245
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
246
|
+
return (React.createElement("ul", Object.assign({ "data-slot": "sidebar-menu-sub", "data-sidebar": "menu-sub", className: cn("border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5", "group-data-[collapsible=icon]:hidden", className) }, props)));
|
|
317
247
|
}
|
|
318
248
|
function SidebarMenuSubItem(_a) {
|
|
319
|
-
var className = _a
|
|
320
|
-
return (React.createElement("li",
|
|
249
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
250
|
+
return (React.createElement("li", Object.assign({ "data-slot": "sidebar-menu-sub-item", "data-sidebar": "menu-sub-item", className: cn("group/menu-sub-item relative", className) }, props)));
|
|
321
251
|
}
|
|
322
252
|
function SidebarMenuSubButton(_a) {
|
|
323
|
-
var
|
|
324
|
-
|
|
325
|
-
return (React.createElement(Comp,
|
|
253
|
+
var { asChild = false, size = "md", isActive = false, className } = _a, props = __rest(_a, ["asChild", "size", "isActive", "className"]);
|
|
254
|
+
const Comp = asChild ? Slot : "a";
|
|
255
|
+
return (React.createElement(Comp, Object.assign({ "data-slot": "sidebar-menu-sub-button", "data-sidebar": "menu-sub-button", "data-size": size, "data-active": isActive, className: cn("text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 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", "data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground", size === "sm" && "text-xs", size === "md" && "text-sm", "group-data-[collapsible=icon]:hidden", className) }, props)));
|
|
326
256
|
}
|
|
257
|
+
export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar, };
|
|
@@ -1,53 +1,42 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var dropdown_menu_1 = require("./ui/dropdown-menu");
|
|
11
|
-
var sidebar_1 = require("./sidebar");
|
|
12
|
-
var avatar_1 = require("./ui/avatar");
|
|
13
|
-
var TeamSwitcher = function (_a) {
|
|
14
|
-
var profiles = _a.profiles;
|
|
15
|
-
var isMobile = (0, sidebar_1.useSidebar)().isMobile;
|
|
16
|
-
var _b = react_1.default.useState(profiles[0]), activeMember = _b[0], setActiveMember = _b[1];
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { ChevronsUpDown, Plus } from "lucide-react";
|
|
4
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "./ui/dropdown-menu";
|
|
5
|
+
import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar, } from "./sidebar";
|
|
6
|
+
import { Avatar, AvatarFallback, AvatarImage } from "./ui/avatar";
|
|
7
|
+
export const TeamSwitcher = ({ profiles }) => {
|
|
8
|
+
const { isMobile } = useSidebar();
|
|
9
|
+
const [activeMember, setActiveMember] = React.useState(profiles[0]);
|
|
17
10
|
if (!activeMember) {
|
|
18
11
|
return null;
|
|
19
12
|
}
|
|
20
|
-
return (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
13
|
+
return (React.createElement(SidebarMenu, null,
|
|
14
|
+
React.createElement(SidebarMenuItem, null,
|
|
15
|
+
React.createElement(DropdownMenu, null,
|
|
16
|
+
React.createElement(DropdownMenuTrigger, { asChild: true },
|
|
17
|
+
React.createElement(SidebarMenuButton, { size: "lg", className: "data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground" },
|
|
18
|
+
React.createElement("div", { className: "bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg" },
|
|
19
|
+
React.createElement(Avatar, { className: "size-6" },
|
|
20
|
+
React.createElement(AvatarImage, { src: activeMember.avatar, alt: activeMember.name }),
|
|
21
|
+
React.createElement(AvatarFallback, { className: "text-primary" }, activeMember.name.charAt(0)))),
|
|
22
|
+
React.createElement("div", { className: "grid flex-1 text-left text-sm leading-tight" },
|
|
23
|
+
React.createElement("span", { className: "truncate font-medium" }, activeMember.name),
|
|
24
|
+
React.createElement("span", { className: "truncate text-xs" }, activeMember.age)),
|
|
25
|
+
React.createElement(ChevronsUpDown, { className: "ml-auto" }))),
|
|
26
|
+
React.createElement(DropdownMenuContent, { className: "w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg", align: "start", side: isMobile ? "bottom" : "right", sideOffset: 4 },
|
|
27
|
+
React.createElement(DropdownMenuLabel, { className: "text-muted-foreground text-xs" }, "Profiles"),
|
|
35
28
|
profiles
|
|
36
|
-
.filter(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
react_1.default.createElement("div", { className: "flex size-6 items-center justify-center rounded-md border bg-transparent" },
|
|
50
|
-
react_1.default.createElement(lucide_react_1.Plus, { className: "size-4" })),
|
|
51
|
-
react_1.default.createElement("div", { className: "text-muted-foreground font-medium" }, "Add Profile")))))));
|
|
29
|
+
.filter(({ enabled }) => enabled)
|
|
30
|
+
.sort((a, b) => a.order - b.order)
|
|
31
|
+
.map((profile) => (React.createElement(DropdownMenuItem, { key: profile.name, onClick: () => setActiveMember(profile), className: "gap-2 p-2" },
|
|
32
|
+
React.createElement("div", { className: "flex size-6 items-center justify-center rounded-md border" },
|
|
33
|
+
React.createElement(Avatar, { className: "size-6" },
|
|
34
|
+
React.createElement(AvatarImage, { src: profile.avatar, alt: profile.name }),
|
|
35
|
+
React.createElement(AvatarFallback, { className: "!focus:text-red-400" }, profile.name.charAt(0)))),
|
|
36
|
+
profile.name))),
|
|
37
|
+
React.createElement(DropdownMenuSeparator, null),
|
|
38
|
+
React.createElement(DropdownMenuItem, { className: "gap-2 p-2" },
|
|
39
|
+
React.createElement("div", { className: "flex size-6 items-center justify-center rounded-md border bg-transparent" },
|
|
40
|
+
React.createElement(Plus, { className: "size-4" })),
|
|
41
|
+
React.createElement("div", { className: "text-muted-foreground font-medium" }, "Add Profile")))))));
|
|
52
42
|
};
|
|
53
|
-
exports.TeamSwitcher = TeamSwitcher;
|