@waveso/ui 0.0.9 → 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/accordion.d.ts +24 -8
- package/dist/accordion.d.ts.map +1 -0
- package/dist/accordion.js +50 -73
- package/dist/accordion.js.map +1 -1
- package/dist/action-bar.d.ts +83 -0
- package/dist/action-bar.d.ts.map +1 -0
- package/dist/action-bar.js +264 -0
- package/dist/action-bar.js.map +1 -0
- package/dist/alert-dialog.d.ts +56 -21
- package/dist/alert-dialog.d.ts.map +1 -0
- package/dist/alert-dialog.js +75 -127
- package/dist/alert-dialog.js.map +1 -1
- package/dist/alert.d.ts +26 -11
- package/dist/alert.d.ts.map +1 -0
- package/dist/alert.js +37 -68
- package/dist/alert.js.map +1 -1
- package/dist/animate.d.ts +117 -75
- package/dist/animate.d.ts.map +1 -0
- package/dist/animate.js +259 -223
- package/dist/animate.js.map +1 -1
- package/dist/aspect-ratio.d.ts +11 -6
- package/dist/aspect-ratio.d.ts.map +1 -0
- package/dist/aspect-ratio.js +12 -14
- package/dist/aspect-ratio.js.map +1 -1
- package/dist/autocomplete.d.ts +91 -25
- package/dist/autocomplete.d.ts.map +1 -0
- package/dist/autocomplete.js +119 -181
- package/dist/autocomplete.js.map +1 -1
- package/dist/avatar.d.ts +32 -11
- package/dist/avatar.d.ts.map +1 -0
- package/dist/avatar.js +42 -89
- package/dist/avatar.js.map +1 -1
- package/dist/badge.d.ts +15 -8
- package/dist/badge.d.ts.map +1 -0
- package/dist/badge.js +34 -48
- package/dist/badge.js.map +1 -1
- package/dist/breadcrumb.d.ts +35 -11
- package/dist/breadcrumb.d.ts.map +1 -0
- package/dist/breadcrumb.js +60 -110
- package/dist/breadcrumb.js.map +1 -1
- package/dist/button-group.d.ts +26 -13
- package/dist/button-group.d.ts.map +1 -0
- package/dist/button-group.js +38 -76
- package/dist/button-group.js.map +1 -1
- package/dist/button.d.ts +17 -10
- package/dist/button.d.ts.map +1 -0
- package/dist/button.js +50 -3
- package/dist/button.js.map +1 -1
- package/dist/card.d.ts +35 -11
- package/dist/card.d.ts.map +1 -0
- package/dist/card.js +43 -82
- package/dist/card.js.map +1 -1
- package/dist/checkbox.d.ts +6 -4
- package/dist/checkbox.d.ts.map +1 -0
- package/dist/checkbox.js +21 -29
- package/dist/checkbox.js.map +1 -1
- package/dist/collapsible.d.ts +15 -7
- package/dist/collapsible.d.ts.map +1 -0
- package/dist/collapsible.js +19 -8
- package/dist/collapsible.js.map +1 -1
- package/dist/combobox.d.ts +83 -23
- package/dist/combobox.d.ts.map +1 -0
- package/dist/combobox.js +149 -247
- package/dist/combobox.js.map +1 -1
- package/dist/context-menu.d.ts +80 -26
- package/dist/context-menu.d.ts.map +1 -0
- package/dist/context-menu.js +108 -164
- package/dist/context-menu.js.map +1 -1
- package/dist/count.d.ts +45 -31
- package/dist/count.d.ts.map +1 -0
- package/dist/count.js +170 -165
- package/dist/count.js.map +1 -1
- package/dist/dialog.d.ts +61 -28
- package/dist/dialog.d.ts.map +1 -0
- package/dist/dialog.js +77 -120
- package/dist/dialog.js.map +1 -1
- package/dist/direction.d.ts +2 -1
- package/dist/direction.js +3 -3
- package/dist/drawer.d.ts +45 -15
- package/dist/drawer.d.ts.map +1 -0
- package/dist/drawer.js +93 -5
- package/dist/drawer.js.map +1 -1
- package/dist/encrypted-text.d.ts +25 -12
- package/dist/encrypted-text.d.ts.map +1 -0
- package/dist/encrypted-text.js +102 -134
- package/dist/encrypted-text.js.map +1 -1
- package/dist/field.d.ts +37 -21
- package/dist/field.d.ts.map +1 -0
- package/dist/field.js +52 -3
- package/dist/field.js.map +1 -1
- package/dist/film-grain-shader.d.ts +6 -0
- package/dist/film-grain-shader.d.ts.map +1 -0
- package/dist/film-grain-shader.js +88 -0
- package/dist/film-grain-shader.js.map +1 -0
- package/dist/film-grain-webgl.d.ts +20 -0
- package/dist/film-grain-webgl.d.ts.map +1 -0
- package/dist/film-grain-webgl.js +306 -0
- package/dist/film-grain-webgl.js.map +1 -0
- package/dist/film-grain.d.ts +21 -11
- package/dist/film-grain.d.ts.map +1 -0
- package/dist/film-grain.js +28 -420
- package/dist/film-grain.js.map +1 -1
- package/dist/form.d.ts +64 -49
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +112 -91
- package/dist/form.js.map +1 -1
- package/dist/gradient-reveal-text.d.ts +35 -18
- package/dist/gradient-reveal-text.d.ts.map +1 -0
- package/dist/gradient-reveal-text.js +238 -202
- package/dist/gradient-reveal-text.js.map +1 -1
- package/dist/hooks/use-mobile.d.ts +3 -1
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/hooks/use-mobile.js +28 -2
- package/dist/hooks/use-mobile.js.map +1 -1
- package/dist/infinite-scroll.d.ts +29 -15
- package/dist/infinite-scroll.d.ts.map +1 -0
- package/dist/infinite-scroll.js +69 -99
- package/dist/infinite-scroll.js.map +1 -1
- package/dist/input-group.d.ts +41 -18
- package/dist/input-group.d.ts.map +1 -0
- package/dist/input-group.js +80 -6
- package/dist/input-group.js.map +1 -1
- package/dist/input-otp.d.ts +26 -10
- package/dist/input-otp.d.ts.map +1 -0
- package/dist/input-otp.js +40 -70
- package/dist/input-otp.js.map +1 -1
- package/dist/input.d.ts +10 -4
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +16 -3
- package/dist/input.js.map +1 -1
- package/dist/item.d.ts +58 -23
- package/dist/item.d.ts.map +1 -0
- package/dist/item.js +102 -160
- package/dist/item.js.map +1 -1
- package/dist/kbd.d.ts +12 -4
- package/dist/kbd.d.ts.map +1 -0
- package/dist/kbd.js +15 -24
- package/dist/kbd.js.map +1 -1
- package/dist/label.d.ts +9 -4
- package/dist/label.d.ts.map +1 -0
- package/dist/label.js +12 -16
- package/dist/label.js.map +1 -1
- package/dist/lib/focus.d.ts +42 -0
- package/dist/lib/focus.d.ts.map +1 -0
- package/dist/lib/focus.js +21 -0
- package/dist/lib/focus.js.map +1 -0
- package/dist/lib/internal-icons.d.ts +32 -0
- package/dist/lib/internal-icons.d.ts.map +1 -0
- package/dist/lib/internal-icons.js +222 -0
- package/dist/lib/internal-icons.js.map +1 -0
- package/dist/lib/utils.d.ts +4 -2
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +12 -2
- package/dist/lib/utils.js.map +1 -1
- package/dist/masonry.d.ts +25 -11
- package/dist/masonry.d.ts.map +1 -0
- package/dist/masonry.js +188 -229
- package/dist/masonry.js.map +1 -1
- package/dist/menu.d.ts +84 -26
- package/dist/menu.d.ts.map +1 -0
- package/dist/menu.js +141 -4
- package/dist/menu.js.map +1 -1
- package/dist/menubar.d.ts +60 -22
- package/dist/menubar.d.ts.map +1 -0
- package/dist/menubar.js +80 -52
- package/dist/menubar.js.map +1 -1
- package/dist/pagination.d.ts +38 -17
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +68 -107
- package/dist/pagination.js.map +1 -1
- package/dist/popover.d.ts +56 -14
- package/dist/popover.d.ts.map +1 -0
- package/dist/popover.js +62 -87
- package/dist/popover.js.map +1 -1
- package/dist/preview-card.d.ts +28 -9
- package/dist/preview-card.d.ts.map +1 -0
- package/dist/preview-card.js +40 -60
- package/dist/preview-card.js.map +1 -1
- package/dist/progress.d.ts +28 -9
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +35 -60
- package/dist/progress.js.map +1 -1
- package/dist/radio-group.d.ts +14 -8
- package/dist/radio-group.d.ts.map +1 -0
- package/dist/radio-group.js +18 -22
- package/dist/radio-group.js.map +1 -1
- package/dist/radio.d.ts +14 -6
- package/dist/radio.d.ts.map +1 -0
- package/dist/radio.js +24 -3
- package/dist/radio.js.map +1 -1
- package/dist/scroll-area.d.ts +16 -6
- package/dist/scroll-area.d.ts.map +1 -0
- package/dist/scroll-area.js +34 -55
- package/dist/scroll-area.js.map +1 -1
- package/dist/select.d.ts +66 -18
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +105 -185
- package/dist/select.js.map +1 -1
- package/dist/separator.d.ts +11 -5
- package/dist/separator.d.ts.map +1 -0
- package/dist/separator.js +17 -3
- package/dist/separator.js.map +1 -1
- package/dist/sidebar.d.ts +172 -79
- package/dist/sidebar.d.ts.map +1 -0
- package/dist/sidebar.js +363 -585
- package/dist/sidebar.js.map +1 -1
- package/dist/skeleton.d.ts +8 -3
- package/dist/skeleton.d.ts.map +1 -0
- package/dist/skeleton.js +13 -3
- package/dist/skeleton.js.map +1 -1
- package/dist/slider.d.ts +16 -6
- package/dist/slider.d.ts.map +1 -0
- package/dist/slider.js +40 -67
- package/dist/slider.js.map +1 -1
- package/dist/spinner.d.ts +8 -3
- package/dist/spinner.d.ts.map +1 -0
- package/dist/spinner.js +15 -4
- package/dist/spinner.js.map +1 -1
- package/dist/switch.d.ts +12 -6
- package/dist/switch.d.ts.map +1 -0
- package/dist/switch.js +18 -25
- package/dist/switch.js.map +1 -1
- package/dist/table.d.ts +37 -11
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +51 -88
- package/dist/table.js.map +1 -1
- package/dist/tabs.d.ts +28 -12
- package/dist/tabs.d.ts.map +1 -0
- package/dist/tabs.js +40 -74
- package/dist/tabs.js.map +1 -1
- package/dist/textarea.d.ts +13 -6
- package/dist/textarea.d.ts.map +1 -0
- package/dist/textarea.js +19 -3
- package/dist/textarea.js.map +1 -1
- package/dist/toast.d.ts +63 -39
- package/dist/toast.d.ts.map +1 -0
- package/dist/toast.js +177 -215
- package/dist/toast.js.map +1 -1
- package/dist/toggle-group.d.ts +26 -12
- package/dist/toggle-group.d.ts.map +1 -0
- package/dist/toggle-group.js +49 -73
- package/dist/toggle-group.js.map +1 -1
- package/dist/toggle.d.ts +17 -10
- package/dist/toggle.d.ts.map +1 -0
- package/dist/toggle.js +38 -3
- package/dist/toggle.js.map +1 -1
- package/dist/tooltip.d.ts +35 -14
- package/dist/tooltip.d.ts.map +1 -0
- package/dist/tooltip.js +52 -3
- package/dist/tooltip.js.map +1 -1
- package/dist/typewriter.d.ts +44 -31
- package/dist/typewriter.d.ts.map +1 -0
- package/dist/typewriter.js +185 -185
- package/dist/typewriter.js.map +1 -1
- package/package.json +6 -6
- package/dist/chunk-45VQAWIM.js +0 -228
- package/dist/chunk-45VQAWIM.js.map +0 -1
- package/dist/chunk-6Y7LPQMO.js +0 -11
- package/dist/chunk-6Y7LPQMO.js.map +0 -1
- package/dist/chunk-76UQO56T.js +0 -19
- package/dist/chunk-76UQO56T.js.map +0 -1
- package/dist/chunk-7F4MPMLJ.js +0 -17
- package/dist/chunk-7F4MPMLJ.js.map +0 -1
- package/dist/chunk-BKTJYX4M.js +0 -143
- package/dist/chunk-BKTJYX4M.js.map +0 -1
- package/dist/chunk-D5XPEJ6T.js +0 -36
- package/dist/chunk-D5XPEJ6T.js.map +0 -1
- package/dist/chunk-DIGOLJIR.js +0 -105
- package/dist/chunk-DIGOLJIR.js.map +0 -1
- package/dist/chunk-IQ7YQ5XA.js +0 -141
- package/dist/chunk-IQ7YQ5XA.js.map +0 -1
- package/dist/chunk-NCHHHWTB.js +0 -85
- package/dist/chunk-NCHHHWTB.js.map +0 -1
- package/dist/chunk-OUFYQLVN.js +0 -56
- package/dist/chunk-OUFYQLVN.js.map +0 -1
- package/dist/chunk-QFSEK4M6.js +0 -22
- package/dist/chunk-QFSEK4M6.js.map +0 -1
- package/dist/chunk-QRW37LRP.js +0 -25
- package/dist/chunk-QRW37LRP.js.map +0 -1
- package/dist/chunk-RPQHL6C5.js +0 -26
- package/dist/chunk-RPQHL6C5.js.map +0 -1
- package/dist/chunk-V4ZX4YCP.js +0 -66
- package/dist/chunk-V4ZX4YCP.js.map +0 -1
- package/dist/chunk-YTSQQTSF.js +0 -44
- package/dist/chunk-YTSQQTSF.js.map +0 -1
- package/dist/chunk-ZZZH3JGW.js +0 -23
- package/dist/chunk-ZZZH3JGW.js.map +0 -1
- package/dist/direction.js.map +0 -1
package/dist/sidebar.js
CHANGED
|
@@ -1,624 +1,402 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { Separator } from
|
|
6
|
-
import { Input } from
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "./lib/utils.js";
|
|
3
|
+
import { SidebarPanelIcon } from "./lib/internal-icons.js";
|
|
4
|
+
import { Button } from "./button.js";
|
|
5
|
+
import { Separator } from "./separator.js";
|
|
6
|
+
import { Input } from "./input.js";
|
|
7
|
+
import { Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle } from "./drawer.js";
|
|
8
|
+
import { Skeleton } from "./skeleton.js";
|
|
9
|
+
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./tooltip.js";
|
|
10
|
+
import { useIsMobile } from "./hooks/use-mobile.js";
|
|
11
|
+
import * as React from "react";
|
|
12
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
+
import { cva } from "class-variance-authority";
|
|
14
|
+
import { mergeProps } from "@base-ui/react/merge-props";
|
|
15
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
16
|
+
import { Collapsible } from "@base-ui/react/collapsible";
|
|
17
|
+
//#region src/sidebar.tsx
|
|
18
|
+
const SIDEBAR_WIDTH = "16rem";
|
|
19
|
+
const SIDEBAR_WIDTH_MOBILE = "18rem";
|
|
20
|
+
const SIDEBAR_WIDTH_ICON = "3rem";
|
|
21
|
+
const SIDEBAR_DEFAULT_KEYBOARD_SHORTCUT = "b";
|
|
22
|
+
/**
|
|
23
|
+
* Persist sidebar state to a cookie.
|
|
24
|
+
*
|
|
25
|
+
* @param name - Cookie name. Defaults to `"sidebar-state"`.
|
|
26
|
+
* @param maxAge - Cookie max-age in seconds. Defaults to 7 days (604 800).
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```tsx
|
|
30
|
+
* <SidebarProvider persist={cookiePersist()}>
|
|
31
|
+
* <SidebarProvider persist={cookiePersist("my-sidebar", 86400)}>
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
function cookiePersist(name = "sidebar-state", maxAge = 3600 * 24 * 7) {
|
|
35
|
+
return (open) => {
|
|
36
|
+
document.cookie = `${name}=${open}; path=/; max-age=${maxAge}`;
|
|
37
|
+
};
|
|
25
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Persist sidebar state to localStorage.
|
|
41
|
+
*
|
|
42
|
+
* @param key - Storage key. Defaults to `"sidebar-state"`.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```tsx
|
|
46
|
+
* <SidebarProvider persist={localStoragePersist()}>
|
|
47
|
+
* <SidebarProvider persist={localStoragePersist("my-sidebar")}>
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
26
50
|
function localStoragePersist(key = "sidebar-state") {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
};
|
|
51
|
+
return (open) => {
|
|
52
|
+
try {
|
|
53
|
+
localStorage.setItem(key, String(open));
|
|
54
|
+
} catch {}
|
|
55
|
+
};
|
|
33
56
|
}
|
|
34
|
-
|
|
57
|
+
const SidebarContext = React.createContext(null);
|
|
35
58
|
function useSidebar() {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
return context;
|
|
59
|
+
const context = React.useContext(SidebarContext);
|
|
60
|
+
if (!context) throw new Error("useSidebar must be used within a SidebarProvider.");
|
|
61
|
+
return context;
|
|
41
62
|
}
|
|
42
|
-
function SidebarProvider({
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
"--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
|
|
106
|
-
...style
|
|
107
|
-
},
|
|
108
|
-
className: cn(
|
|
109
|
-
"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full",
|
|
110
|
-
className
|
|
111
|
-
),
|
|
112
|
-
...props,
|
|
113
|
-
children
|
|
114
|
-
}
|
|
115
|
-
) });
|
|
63
|
+
function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: setOpenProp, persist, keyboardShortcut = SIDEBAR_DEFAULT_KEYBOARD_SHORTCUT, mobileBreakpoint, className, style, children, ...props }) {
|
|
64
|
+
const isMobile = useIsMobile(mobileBreakpoint);
|
|
65
|
+
const [openMobile, setOpenMobile] = React.useState(false);
|
|
66
|
+
const [_open, _setOpen] = React.useState(defaultOpen);
|
|
67
|
+
const open = openProp ?? _open;
|
|
68
|
+
const persistRef = React.useRef(persist);
|
|
69
|
+
persistRef.current = persist;
|
|
70
|
+
const setOpen = React.useCallback((value) => {
|
|
71
|
+
const openState = typeof value === "function" ? value(open) : value;
|
|
72
|
+
if (setOpenProp) setOpenProp(openState);
|
|
73
|
+
else _setOpen(openState);
|
|
74
|
+
persistRef.current?.(openState);
|
|
75
|
+
}, [setOpenProp, open]);
|
|
76
|
+
const toggleSidebar = React.useCallback(() => {
|
|
77
|
+
return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);
|
|
78
|
+
}, [
|
|
79
|
+
isMobile,
|
|
80
|
+
setOpen,
|
|
81
|
+
setOpenMobile
|
|
82
|
+
]);
|
|
83
|
+
React.useEffect(() => {
|
|
84
|
+
if (keyboardShortcut === false) return;
|
|
85
|
+
const handleKeyDown = (event) => {
|
|
86
|
+
if (event.key === keyboardShortcut && (event.metaKey || event.ctrlKey)) {
|
|
87
|
+
event.preventDefault();
|
|
88
|
+
toggleSidebar();
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
92
|
+
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
93
|
+
}, [toggleSidebar, keyboardShortcut]);
|
|
94
|
+
const state = isMobile || open ? "expanded" : "collapsed";
|
|
95
|
+
const contextValue = React.useMemo(() => ({
|
|
96
|
+
state,
|
|
97
|
+
open,
|
|
98
|
+
setOpen,
|
|
99
|
+
isMobile,
|
|
100
|
+
openMobile,
|
|
101
|
+
setOpenMobile,
|
|
102
|
+
toggleSidebar
|
|
103
|
+
}), [
|
|
104
|
+
state,
|
|
105
|
+
open,
|
|
106
|
+
setOpen,
|
|
107
|
+
isMobile,
|
|
108
|
+
openMobile,
|
|
109
|
+
setOpenMobile,
|
|
110
|
+
toggleSidebar
|
|
111
|
+
]);
|
|
112
|
+
return /* @__PURE__ */ jsx(SidebarContext.Provider, {
|
|
113
|
+
value: contextValue,
|
|
114
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
115
|
+
"data-slot": "sidebar-wrapper",
|
|
116
|
+
style: {
|
|
117
|
+
"--sidebar-width": SIDEBAR_WIDTH,
|
|
118
|
+
"--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
|
|
119
|
+
...style
|
|
120
|
+
},
|
|
121
|
+
className: cn("group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full", className),
|
|
122
|
+
...props,
|
|
123
|
+
children
|
|
124
|
+
})
|
|
125
|
+
});
|
|
116
126
|
}
|
|
117
|
-
function Sidebar({
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
})
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
{
|
|
171
|
-
open,
|
|
172
|
-
onOpenChange: setOpen,
|
|
173
|
-
className: "group peer text-sidebar-foreground hidden md:block",
|
|
174
|
-
"data-state": state,
|
|
175
|
-
"data-collapsible": state === "collapsed" ? collapsible : "",
|
|
176
|
-
"data-variant": variant,
|
|
177
|
-
"data-side": side,
|
|
178
|
-
"data-slot": "sidebar",
|
|
179
|
-
children: [
|
|
180
|
-
/* @__PURE__ */ jsx(
|
|
181
|
-
"div",
|
|
182
|
-
{
|
|
183
|
-
"data-slot": "sidebar-gap",
|
|
184
|
-
className: cn(
|
|
185
|
-
"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear",
|
|
186
|
-
"group-data-[collapsible=offcanvas]:w-0",
|
|
187
|
-
"group-data-[side=right]:rotate-180",
|
|
188
|
-
variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)"
|
|
189
|
-
)
|
|
190
|
-
}
|
|
191
|
-
),
|
|
192
|
-
/* @__PURE__ */ jsx(
|
|
193
|
-
"div",
|
|
194
|
-
{
|
|
195
|
-
"data-slot": "sidebar-container",
|
|
196
|
-
className: cn(
|
|
197
|
-
"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",
|
|
198
|
-
side === "left" ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]" : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
|
|
199
|
-
variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) after:absolute after:inset-y-0 after:w-px after:bg-sidebar-border" + (side === "left" ? " after:right-0" : " after:left-0"),
|
|
200
|
-
className
|
|
201
|
-
),
|
|
202
|
-
...props,
|
|
203
|
-
children: /* @__PURE__ */ jsx(TooltipProvider, { delay: 0, closeDelay: 300, children: /* @__PURE__ */ jsx(
|
|
204
|
-
"div",
|
|
205
|
-
{
|
|
206
|
-
"data-slot": "sidebar-inner",
|
|
207
|
-
className: "bg-sidebar group-data-[variant=floating]:ring-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 flex size-full flex-col",
|
|
208
|
-
children
|
|
209
|
-
}
|
|
210
|
-
) })
|
|
211
|
-
}
|
|
212
|
-
)
|
|
213
|
-
]
|
|
214
|
-
}
|
|
215
|
-
);
|
|
127
|
+
function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas", className, children, ...props }) {
|
|
128
|
+
const { isMobile, state, open, setOpen, openMobile, setOpenMobile } = useSidebar();
|
|
129
|
+
if (collapsible === "none") return /* @__PURE__ */ jsx("div", {
|
|
130
|
+
"data-slot": "sidebar",
|
|
131
|
+
className: cn("bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col", className),
|
|
132
|
+
...props,
|
|
133
|
+
children
|
|
134
|
+
});
|
|
135
|
+
if (isMobile) return /* @__PURE__ */ jsx(Drawer, {
|
|
136
|
+
open: openMobile,
|
|
137
|
+
onOpenChange: setOpenMobile,
|
|
138
|
+
swipeDirection: side,
|
|
139
|
+
children: /* @__PURE__ */ jsxs(DrawerContent, {
|
|
140
|
+
"data-slot": "sidebar",
|
|
141
|
+
"data-mobile": "true",
|
|
142
|
+
className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) max-w-none rounded-none border-0 p-0 sm:max-w-none",
|
|
143
|
+
style: { "--sidebar-width": SIDEBAR_WIDTH_MOBILE },
|
|
144
|
+
children: [/* @__PURE__ */ jsxs(DrawerHeader, {
|
|
145
|
+
className: "sr-only",
|
|
146
|
+
children: [/* @__PURE__ */ jsx(DrawerTitle, { children: "Sidebar" }), /* @__PURE__ */ jsx(DrawerDescription, { children: "Displays the mobile sidebar." })]
|
|
147
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
148
|
+
className: "flex h-full w-full flex-col",
|
|
149
|
+
children
|
|
150
|
+
})]
|
|
151
|
+
})
|
|
152
|
+
});
|
|
153
|
+
return /* @__PURE__ */ jsxs(Collapsible.Root, {
|
|
154
|
+
open,
|
|
155
|
+
onOpenChange: setOpen,
|
|
156
|
+
className: "group peer text-sidebar-foreground hidden md:block",
|
|
157
|
+
"data-state": state,
|
|
158
|
+
"data-collapsible": state === "collapsed" ? collapsible : "",
|
|
159
|
+
"data-variant": variant,
|
|
160
|
+
"data-side": side,
|
|
161
|
+
"data-slot": "sidebar",
|
|
162
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
163
|
+
"data-slot": "sidebar-gap",
|
|
164
|
+
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" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)")
|
|
165
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
166
|
+
"data-slot": "sidebar-container",
|
|
167
|
+
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" ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]" : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]", variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) after:absolute after:inset-y-0 after:w-px after:bg-sidebar-border" + (side === "left" ? " after:right-0" : " after:left-0"), className),
|
|
168
|
+
...props,
|
|
169
|
+
children: /* @__PURE__ */ jsx(TooltipProvider, {
|
|
170
|
+
delay: 0,
|
|
171
|
+
closeDelay: 300,
|
|
172
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
173
|
+
"data-slot": "sidebar-inner",
|
|
174
|
+
className: "bg-sidebar group-data-[variant=floating]:ring-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 flex size-full flex-col",
|
|
175
|
+
children
|
|
176
|
+
})
|
|
177
|
+
})
|
|
178
|
+
})]
|
|
179
|
+
});
|
|
216
180
|
}
|
|
217
|
-
function SidebarTrigger({
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
...props,
|
|
235
|
-
children: [
|
|
236
|
-
/* @__PURE__ */ jsx(SidebarPanelIcon, {}),
|
|
237
|
-
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Toggle Sidebar" })
|
|
238
|
-
]
|
|
239
|
-
}
|
|
240
|
-
);
|
|
181
|
+
function SidebarTrigger({ className, onClick, ...props }) {
|
|
182
|
+
const { toggleSidebar } = useSidebar();
|
|
183
|
+
return /* @__PURE__ */ jsxs(Button, {
|
|
184
|
+
"data-slot": "sidebar-trigger",
|
|
185
|
+
variant: "ghost",
|
|
186
|
+
size: "icon-sm",
|
|
187
|
+
className: cn(className),
|
|
188
|
+
onClick: (event) => {
|
|
189
|
+
onClick?.(event);
|
|
190
|
+
toggleSidebar();
|
|
191
|
+
},
|
|
192
|
+
...props,
|
|
193
|
+
children: [/* @__PURE__ */ jsx(SidebarPanelIcon, {}), /* @__PURE__ */ jsx("span", {
|
|
194
|
+
className: "sr-only",
|
|
195
|
+
children: "Toggle Sidebar"
|
|
196
|
+
})]
|
|
197
|
+
});
|
|
241
198
|
}
|
|
242
199
|
function SidebarRail({ className, ...props }) {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
"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",
|
|
254
|
-
"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize",
|
|
255
|
-
"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
|
|
256
|
-
"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full",
|
|
257
|
-
"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
|
|
258
|
-
"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
|
|
259
|
-
className
|
|
260
|
-
),
|
|
261
|
-
...props
|
|
262
|
-
}
|
|
263
|
-
);
|
|
200
|
+
const { toggleSidebar } = useSidebar();
|
|
201
|
+
return /* @__PURE__ */ jsx("button", {
|
|
202
|
+
"data-slot": "sidebar-rail",
|
|
203
|
+
"aria-label": "Toggle Sidebar",
|
|
204
|
+
tabIndex: -1,
|
|
205
|
+
onClick: toggleSidebar,
|
|
206
|
+
title: "Toggle Sidebar",
|
|
207
|
+
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),
|
|
208
|
+
...props
|
|
209
|
+
});
|
|
264
210
|
}
|
|
265
211
|
function SidebarInset({ className, ...props }) {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
"bg-background 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 relative flex min-w-0 w-full flex-1 flex-col",
|
|
272
|
-
className
|
|
273
|
-
),
|
|
274
|
-
...props
|
|
275
|
-
}
|
|
276
|
-
);
|
|
212
|
+
return /* @__PURE__ */ jsx("main", {
|
|
213
|
+
"data-slot": "sidebar-inset",
|
|
214
|
+
className: cn("bg-background 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 relative flex min-w-0 w-full flex-1 flex-col", className),
|
|
215
|
+
...props
|
|
216
|
+
});
|
|
277
217
|
}
|
|
278
|
-
function SidebarInput({
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
{
|
|
285
|
-
"data-slot": "sidebar-input",
|
|
286
|
-
className: cn("bg-background h-8 w-full shadow-none", className),
|
|
287
|
-
...props
|
|
288
|
-
}
|
|
289
|
-
);
|
|
218
|
+
function SidebarInput({ className, ...props }) {
|
|
219
|
+
return /* @__PURE__ */ jsx(Input, {
|
|
220
|
+
"data-slot": "sidebar-input",
|
|
221
|
+
className: cn("bg-background h-8 w-full shadow-none", className),
|
|
222
|
+
...props
|
|
223
|
+
});
|
|
290
224
|
}
|
|
291
225
|
function SidebarHeader({ className, ...props }) {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
...props
|
|
298
|
-
}
|
|
299
|
-
);
|
|
226
|
+
return /* @__PURE__ */ jsx("div", {
|
|
227
|
+
"data-slot": "sidebar-header",
|
|
228
|
+
className: cn("gap-2 p-2 flex flex-col", className),
|
|
229
|
+
...props
|
|
230
|
+
});
|
|
300
231
|
}
|
|
301
232
|
function SidebarFooter({ className, ...props }) {
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
...props
|
|
308
|
-
}
|
|
309
|
-
);
|
|
233
|
+
return /* @__PURE__ */ jsx("div", {
|
|
234
|
+
"data-slot": "sidebar-footer",
|
|
235
|
+
className: cn("gap-2 p-2 flex flex-col", className),
|
|
236
|
+
...props
|
|
237
|
+
});
|
|
310
238
|
}
|
|
311
|
-
function SidebarSeparator({
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
{
|
|
318
|
-
"data-slot": "sidebar-separator",
|
|
319
|
-
className: cn("bg-sidebar-border mx-2 data-[orientation=horizontal]:w-auto", className),
|
|
320
|
-
...props
|
|
321
|
-
}
|
|
322
|
-
);
|
|
239
|
+
function SidebarSeparator({ className, ...props }) {
|
|
240
|
+
return /* @__PURE__ */ jsx(Separator, {
|
|
241
|
+
"data-slot": "sidebar-separator",
|
|
242
|
+
className: cn("bg-sidebar-border mx-2 data-[orientation=horizontal]:w-auto", className),
|
|
243
|
+
...props
|
|
244
|
+
});
|
|
323
245
|
}
|
|
324
246
|
function SidebarContent({ className, style, ...props }) {
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
WebkitMaskImage: "linear-gradient(to bottom, black calc(100% - 44px), transparent 100%)",
|
|
336
|
-
...style
|
|
337
|
-
},
|
|
338
|
-
...props
|
|
339
|
-
}
|
|
340
|
-
);
|
|
247
|
+
return /* @__PURE__ */ jsx("div", {
|
|
248
|
+
"data-slot": "sidebar-content",
|
|
249
|
+
className: cn("gap-1 flex min-h-0 flex-1 flex-col overflow-auto scrollbar-none group-data-[collapsible=icon]:overflow-x-hidden", className),
|
|
250
|
+
style: {
|
|
251
|
+
maskImage: "linear-gradient(to bottom, black calc(100% - 44px), transparent 100%)",
|
|
252
|
+
WebkitMaskImage: "linear-gradient(to bottom, black calc(100% - 44px), transparent 100%)",
|
|
253
|
+
...style
|
|
254
|
+
},
|
|
255
|
+
...props
|
|
256
|
+
});
|
|
341
257
|
}
|
|
342
258
|
function SidebarGroup({ className, ...props }) {
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
"px-2 first:pt-2 last:pb-2 relative flex w-full min-w-0 flex-col",
|
|
349
|
-
className
|
|
350
|
-
),
|
|
351
|
-
...props
|
|
352
|
-
}
|
|
353
|
-
);
|
|
259
|
+
return /* @__PURE__ */ jsx("div", {
|
|
260
|
+
"data-slot": "sidebar-group",
|
|
261
|
+
className: cn("px-2 first:pt-2 last:pb-2 relative flex w-full min-w-0 flex-col", className),
|
|
262
|
+
...props
|
|
263
|
+
});
|
|
354
264
|
}
|
|
355
|
-
function SidebarGroupLabel({
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
props: mergeProps(
|
|
363
|
-
{
|
|
364
|
-
className: cn(
|
|
365
|
-
"text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-md px-2 text-xs font-medium group-data-[collapsible=icon]:hidden focus-visible:ring-2 [&>svg]:size-4 flex shrink-0 items-center outline-hidden [&>svg]:shrink-0",
|
|
366
|
-
className
|
|
367
|
-
)
|
|
368
|
-
},
|
|
369
|
-
props
|
|
370
|
-
),
|
|
371
|
-
render,
|
|
372
|
-
state: {
|
|
373
|
-
slot: "sidebar-group-label"
|
|
374
|
-
}
|
|
375
|
-
});
|
|
265
|
+
function SidebarGroupLabel({ className, render, ...props }) {
|
|
266
|
+
return useRender({
|
|
267
|
+
defaultTagName: "div",
|
|
268
|
+
props: mergeProps({ className: cn("text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-md px-2 text-xs font-medium group-data-[collapsible=icon]:hidden focus-visible:ring-2 [&>svg]:size-4 flex shrink-0 items-center outline-hidden [&>svg]:shrink-0", className) }, props),
|
|
269
|
+
render,
|
|
270
|
+
state: { slot: "sidebar-group-label" }
|
|
271
|
+
});
|
|
376
272
|
}
|
|
377
|
-
function SidebarGroupAction({
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
props: mergeProps(
|
|
385
|
-
{
|
|
386
|
-
className: cn(
|
|
387
|
-
"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-1.5 right-3 w-5 rounded-xs p-0 focus-visible:ring-2 [&>svg]:size-4 flex aspect-square items-center justify-center outline-hidden transition-transform [&>svg]:shrink-0 after:absolute after:-inset-2 md:after:hidden group-data-[collapsible=icon]:hidden",
|
|
388
|
-
className
|
|
389
|
-
)
|
|
390
|
-
},
|
|
391
|
-
props
|
|
392
|
-
),
|
|
393
|
-
render,
|
|
394
|
-
state: {
|
|
395
|
-
slot: "sidebar-group-action"
|
|
396
|
-
}
|
|
397
|
-
});
|
|
273
|
+
function SidebarGroupAction({ className, render, ...props }) {
|
|
274
|
+
return useRender({
|
|
275
|
+
defaultTagName: "button",
|
|
276
|
+
props: mergeProps({ className: cn("text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-1.5 right-3 w-5 rounded-xs p-0 focus-visible:ring-2 [&>svg]:size-4 flex aspect-square items-center justify-center outline-hidden transition-transform [&>svg]:shrink-0 after:absolute after:-inset-2 md:after:hidden group-data-[collapsible=icon]:hidden", className) }, props),
|
|
277
|
+
render,
|
|
278
|
+
state: { slot: "sidebar-group-action" }
|
|
279
|
+
});
|
|
398
280
|
}
|
|
399
|
-
function SidebarGroupContent({
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
{
|
|
406
|
-
"data-slot": "sidebar-group-content",
|
|
407
|
-
className: cn("text-sm w-full", className),
|
|
408
|
-
...props
|
|
409
|
-
}
|
|
410
|
-
);
|
|
281
|
+
function SidebarGroupContent({ className, ...props }) {
|
|
282
|
+
return /* @__PURE__ */ jsx("div", {
|
|
283
|
+
"data-slot": "sidebar-group-content",
|
|
284
|
+
className: cn("text-sm w-full", className),
|
|
285
|
+
...props
|
|
286
|
+
});
|
|
411
287
|
}
|
|
412
288
|
function SidebarMenu({ className, ...props }) {
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
...props
|
|
419
|
-
}
|
|
420
|
-
);
|
|
289
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
290
|
+
"data-slot": "sidebar-menu",
|
|
291
|
+
className: cn("gap-1 flex w-full min-w-0 flex-col", className),
|
|
292
|
+
...props
|
|
293
|
+
});
|
|
421
294
|
}
|
|
422
295
|
function SidebarMenuItem({ className, ...props }) {
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
...props
|
|
429
|
-
}
|
|
430
|
-
);
|
|
296
|
+
return /* @__PURE__ */ jsx("li", {
|
|
297
|
+
"data-slot": "sidebar-menu-item",
|
|
298
|
+
className: cn("group/menu-item relative has-data-[slot=sidebar-menu-sub]:mb-[-0.25rem]", className),
|
|
299
|
+
...props
|
|
300
|
+
});
|
|
431
301
|
}
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
);
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
props
|
|
474
|
-
),
|
|
475
|
-
render: !tooltip ? render : TooltipTrigger,
|
|
476
|
-
state: {
|
|
477
|
-
slot: "sidebar-menu-button",
|
|
478
|
-
size,
|
|
479
|
-
active: isActive
|
|
480
|
-
}
|
|
481
|
-
});
|
|
482
|
-
if (!tooltip) {
|
|
483
|
-
return comp;
|
|
484
|
-
}
|
|
485
|
-
if (typeof tooltip === "string") {
|
|
486
|
-
tooltip = {
|
|
487
|
-
children: tooltip
|
|
488
|
-
};
|
|
489
|
-
}
|
|
490
|
-
return /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
491
|
-
comp,
|
|
492
|
-
/* @__PURE__ */ jsx(
|
|
493
|
-
TooltipContent,
|
|
494
|
-
{
|
|
495
|
-
side: "right",
|
|
496
|
-
align: "center",
|
|
497
|
-
hidden: state !== "collapsed" || isMobile,
|
|
498
|
-
...tooltip
|
|
499
|
-
}
|
|
500
|
-
)
|
|
501
|
-
] });
|
|
302
|
+
const sidebarMenuButtonVariants = cva("ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-lg p-2 text-left text-sm transition-[width,height,padding] group-has-data-[slot=sidebar-menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:w-full group-data-[collapsible=icon]:aspect-square group-data-[collapsible=icon]:h-11 focus-visible:ring-2 data-active:font-medium peer/menu-button flex w-full items-center overflow-hidden outline-hidden group/menu-button disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&_svg]:shrink-0", {
|
|
303
|
+
variants: {
|
|
304
|
+
variant: {
|
|
305
|
+
default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
|
|
306
|
+
outline: "bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground ring-1 ring-sidebar-border hover:ring-sidebar-accent"
|
|
307
|
+
},
|
|
308
|
+
size: {
|
|
309
|
+
default: "h-11 text-sm",
|
|
310
|
+
sm: "h-8 text-xs",
|
|
311
|
+
lg: "h-12 text-sm"
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
defaultVariants: {
|
|
315
|
+
variant: "default",
|
|
316
|
+
size: "default"
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
function SidebarMenuButton({ render, isActive = false, variant = "default", size = "default", tooltip, className, ...props }) {
|
|
320
|
+
const { isMobile, state } = useSidebar();
|
|
321
|
+
if (process.env.NODE_ENV === "development" && tooltip && render) console.warn("[SidebarMenuButton] Both `render` and `tooltip` were provided. When `tooltip` is set, the button is wrapped in a TooltipTrigger and the `render` prop is ignored.");
|
|
322
|
+
const comp = useRender({
|
|
323
|
+
defaultTagName: "button",
|
|
324
|
+
props: mergeProps({ className: cn(sidebarMenuButtonVariants({
|
|
325
|
+
variant,
|
|
326
|
+
size
|
|
327
|
+
}), className) }, props),
|
|
328
|
+
render: !tooltip ? render : TooltipTrigger,
|
|
329
|
+
state: {
|
|
330
|
+
slot: "sidebar-menu-button",
|
|
331
|
+
size,
|
|
332
|
+
active: isActive
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
if (!tooltip) return comp;
|
|
336
|
+
if (typeof tooltip === "string") tooltip = { children: tooltip };
|
|
337
|
+
return /* @__PURE__ */ jsxs(Tooltip, { children: [comp, /* @__PURE__ */ jsx(TooltipContent, {
|
|
338
|
+
side: "right",
|
|
339
|
+
align: "center",
|
|
340
|
+
hidden: state !== "collapsed" || isMobile,
|
|
341
|
+
...tooltip
|
|
342
|
+
})] });
|
|
502
343
|
}
|
|
503
|
-
function SidebarMenuAction({
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
defaultTagName: "button",
|
|
511
|
-
props: mergeProps(
|
|
512
|
-
{
|
|
513
|
-
className: cn(
|
|
514
|
-
"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/2 -translate-y-1/2 right-1 aspect-square w-5 rounded-xs p-0 focus-visible:ring-2 [&>svg]:size-4 flex items-center justify-center outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 md:after:hidden [&>svg]:shrink-0",
|
|
515
|
-
showOnHover && "peer-data-active/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-open:opacity-100 md:opacity-0",
|
|
516
|
-
className
|
|
517
|
-
)
|
|
518
|
-
},
|
|
519
|
-
props
|
|
520
|
-
),
|
|
521
|
-
render,
|
|
522
|
-
state: {
|
|
523
|
-
slot: "sidebar-menu-action"
|
|
524
|
-
}
|
|
525
|
-
});
|
|
344
|
+
function SidebarMenuAction({ className, render, showOnHover = false, ...props }) {
|
|
345
|
+
return useRender({
|
|
346
|
+
defaultTagName: "button",
|
|
347
|
+
props: mergeProps({ 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/2 -translate-y-1/2 right-1 aspect-square w-5 rounded-xs p-0 focus-visible:ring-2 [&>svg]:size-4 flex items-center justify-center outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 md:after:hidden [&>svg]:shrink-0", showOnHover && "peer-data-active/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-open:opacity-100 md:opacity-0", className) }, props),
|
|
348
|
+
render,
|
|
349
|
+
state: { slot: "sidebar-menu-action" }
|
|
350
|
+
});
|
|
526
351
|
}
|
|
527
|
-
function SidebarMenuBadge({
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
{
|
|
534
|
-
"data-slot": "sidebar-menu-badge",
|
|
535
|
-
className: cn(
|
|
536
|
-
"text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 top-1/2 -translate-y-1/2 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none group-data-[collapsible=icon]:hidden",
|
|
537
|
-
className
|
|
538
|
-
),
|
|
539
|
-
...props
|
|
540
|
-
}
|
|
541
|
-
);
|
|
352
|
+
function SidebarMenuBadge({ className, ...props }) {
|
|
353
|
+
return /* @__PURE__ */ jsx("div", {
|
|
354
|
+
"data-slot": "sidebar-menu-badge",
|
|
355
|
+
className: cn("text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 top-1/2 -translate-y-1/2 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none group-data-[collapsible=icon]:hidden", className),
|
|
356
|
+
...props
|
|
357
|
+
});
|
|
542
358
|
}
|
|
543
|
-
function SidebarMenuSkeleton({
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
...props,
|
|
557
|
-
children: [
|
|
558
|
-
showIcon && /* @__PURE__ */ jsx(Skeleton, { className: "size-4 rounded-md" }),
|
|
559
|
-
/* @__PURE__ */ jsx(
|
|
560
|
-
Skeleton,
|
|
561
|
-
{
|
|
562
|
-
className: "h-4 max-w-(--skeleton-width) flex-1",
|
|
563
|
-
style: {
|
|
564
|
-
"--skeleton-width": width
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
)
|
|
568
|
-
]
|
|
569
|
-
}
|
|
570
|
-
);
|
|
359
|
+
function SidebarMenuSkeleton({ className, showIcon = false, ...props }) {
|
|
360
|
+
const [width] = React.useState(() => {
|
|
361
|
+
return `${Math.floor(Math.random() * 40) + 50}%`;
|
|
362
|
+
});
|
|
363
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
364
|
+
"data-slot": "sidebar-menu-skeleton",
|
|
365
|
+
className: cn("h-8 gap-2 rounded-md px-2 flex items-center", className),
|
|
366
|
+
...props,
|
|
367
|
+
children: [showIcon && /* @__PURE__ */ jsx(Skeleton, { className: "size-4 rounded-md" }), /* @__PURE__ */ jsx(Skeleton, {
|
|
368
|
+
className: "h-4 max-w-(--skeleton-width) flex-1",
|
|
369
|
+
style: { "--skeleton-width": width }
|
|
370
|
+
})]
|
|
371
|
+
});
|
|
571
372
|
}
|
|
572
373
|
function SidebarMenuSub({ className, ...props }) {
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
...props
|
|
579
|
-
}
|
|
580
|
-
);
|
|
374
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
375
|
+
"data-slot": "sidebar-menu-sub",
|
|
376
|
+
className: cn("border-sidebar-border ml-3.5 mr-0 translate-x-px gap-0.5 border-l pl-2.5 pr-0 py-0.5 group-data-[collapsible=icon]:hidden flex min-w-0 flex-col", className),
|
|
377
|
+
...props
|
|
378
|
+
});
|
|
581
379
|
}
|
|
582
|
-
function SidebarMenuSubItem({
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
{
|
|
589
|
-
"data-slot": "sidebar-menu-sub-item",
|
|
590
|
-
className: cn("group/menu-sub-item relative", className),
|
|
591
|
-
...props
|
|
592
|
-
}
|
|
593
|
-
);
|
|
380
|
+
function SidebarMenuSubItem({ className, ...props }) {
|
|
381
|
+
return /* @__PURE__ */ jsx("li", {
|
|
382
|
+
"data-slot": "sidebar-menu-sub-item",
|
|
383
|
+
className: cn("group/menu-sub-item relative", className),
|
|
384
|
+
...props
|
|
385
|
+
});
|
|
594
386
|
}
|
|
595
|
-
function SidebarMenuSubButton({
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
className: cn(
|
|
607
|
-
"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 data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-md px-2 focus-visible:ring-2 data-[size=md]:text-sm data-[size=sm]:text-xs [&>svg]:size-4 flex min-w-0 -translate-x-px items-center overflow-hidden outline-hidden group-data-[collapsible=icon]:hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:shrink-0",
|
|
608
|
-
className
|
|
609
|
-
)
|
|
610
|
-
},
|
|
611
|
-
props
|
|
612
|
-
),
|
|
613
|
-
render,
|
|
614
|
-
state: {
|
|
615
|
-
slot: "sidebar-menu-sub-button",
|
|
616
|
-
size,
|
|
617
|
-
active: isActive
|
|
618
|
-
}
|
|
619
|
-
});
|
|
387
|
+
function SidebarMenuSubButton({ render, size = "md", isActive = false, className, ...props }) {
|
|
388
|
+
return useRender({
|
|
389
|
+
defaultTagName: "a",
|
|
390
|
+
props: mergeProps({ 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 data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-md px-2 focus-visible:ring-2 data-[size=md]:text-sm data-[size=sm]:text-xs [&>svg]:size-4 flex min-w-0 -translate-x-px items-center overflow-hidden outline-hidden group-data-[collapsible=icon]:hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:shrink-0", className) }, props),
|
|
391
|
+
render,
|
|
392
|
+
state: {
|
|
393
|
+
slot: "sidebar-menu-sub-button",
|
|
394
|
+
size,
|
|
395
|
+
active: isActive
|
|
396
|
+
}
|
|
397
|
+
});
|
|
620
398
|
}
|
|
621
|
-
|
|
399
|
+
//#endregion
|
|
622
400
|
export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, cookiePersist, localStoragePersist, useSidebar };
|
|
623
|
-
|
|
401
|
+
|
|
624
402
|
//# sourceMappingURL=sidebar.js.map
|