ixia-ui-react 1.8.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/README.md +24 -1
- package/dist/accordion/index.d.ts +41 -0
- package/dist/accordion/index.js +142 -0
- package/dist/accordion/index.js.map +1 -0
- package/dist/alert/index.d.ts +22 -0
- package/dist/alert/index.js +1 -0
- package/dist/alert-Dcu9R8CY.js +73 -0
- package/dist/alert-Dcu9R8CY.js.map +1 -0
- package/dist/alert-dialog/index.d.ts +39 -0
- package/dist/alert-dialog/index.js +134 -0
- package/dist/alert-dialog/index.js.map +1 -0
- package/dist/autocomplete/index.d.ts +2 -0
- package/dist/autocomplete/index.js +1 -0
- package/dist/autocomplete-BfpWVO1l.js +169 -0
- package/dist/autocomplete-BfpWVO1l.js.map +1 -0
- package/dist/avatar/index.d.ts +2 -0
- package/dist/avatar/index.js +1 -0
- package/dist/avatar-Bp4gZh21.js +93 -0
- package/dist/avatar-Bp4gZh21.js.map +1 -0
- package/dist/badge/index.d.ts +2 -0
- package/dist/badge/index.js +1 -0
- package/dist/badge-Cl-9WTW-.js +160 -0
- package/dist/badge-Cl-9WTW-.js.map +1 -0
- package/dist/bento-box/index.d.ts +30 -0
- package/dist/bento-box/index.js +103 -0
- package/dist/bento-box/index.js.map +1 -0
- package/dist/breadcrumb/index.d.ts +18 -0
- package/dist/breadcrumb/index.js +58 -0
- package/dist/breadcrumb/index.js.map +1 -0
- package/dist/button/index.d.ts +3 -0
- package/dist/button/index.js +1 -0
- package/dist/button-BpUC-R1J.js +307 -0
- package/dist/button-BpUC-R1J.js.map +1 -0
- package/dist/button-group/index.d.ts +2 -0
- package/dist/button-group/index.js +1 -0
- package/dist/button-group-7azbqlcO.js +269 -0
- package/dist/button-group-7azbqlcO.js.map +1 -0
- package/dist/button.types-BFKrBCGd.d.ts +10 -0
- package/dist/calendar/index.d.ts +63 -0
- package/dist/calendar/index.js +292 -0
- package/dist/calendar/index.js.map +1 -0
- package/dist/chart/index.d.ts +87 -0
- package/dist/chart/index.js +262 -0
- package/dist/chart/index.js.map +1 -0
- package/dist/checkbox/index.d.ts +2 -0
- package/dist/checkbox/index.js +1 -0
- package/dist/checkbox-BuUZ1Lly.js +54 -0
- package/dist/checkbox-BuUZ1Lly.js.map +1 -0
- package/dist/checkbox-group/index.d.ts +6 -0
- package/dist/checkbox-group/index.js +17 -0
- package/dist/checkbox-group/index.js.map +1 -0
- package/dist/cn-BDi0DfT5.js +29 -0
- package/dist/cn-BDi0DfT5.js.map +1 -0
- package/dist/code-block/index.d.ts +50 -0
- package/dist/code-block/index.js +208 -0
- package/dist/code-block/index.js.map +1 -0
- package/dist/collapsible/index.d.ts +2 -0
- package/dist/collapsible/index.js +1 -0
- package/dist/collapsible-BVqrh0Q0.js +44 -0
- package/dist/collapsible-BVqrh0Q0.js.map +1 -0
- package/dist/color-channel-slider/index.d.ts +2 -0
- package/dist/color-channel-slider/index.js +1 -0
- package/dist/color-channel-slider-h8mUPJ35.js +70 -0
- package/dist/color-channel-slider-h8mUPJ35.js.map +1 -0
- package/dist/color-picker/index.d.ts +137 -0
- package/dist/color-picker/index.js +621 -0
- package/dist/color-picker/index.js.map +1 -0
- package/dist/combobox/index.d.ts +64 -0
- package/dist/combobox/index.js +289 -0
- package/dist/combobox/index.js.map +1 -0
- package/dist/context-menu/index.d.ts +49 -0
- package/dist/context-menu/index.js +166 -0
- package/dist/context-menu/index.js.map +1 -0
- package/dist/dialog/index.d.ts +36 -0
- package/dist/dialog/index.js +119 -0
- package/dist/dialog/index.js.map +1 -0
- package/dist/drawer/index.d.ts +31 -0
- package/dist/drawer/index.js +95 -0
- package/dist/drawer/index.js.map +1 -0
- package/dist/dropzone/index.d.ts +70 -0
- package/dist/dropzone/index.js +479 -0
- package/dist/dropzone/index.js.map +1 -0
- package/dist/field/index.d.ts +2 -0
- package/dist/field/index.js +1 -0
- package/dist/field-DTL7eA5y.js +254 -0
- package/dist/field-DTL7eA5y.js.map +1 -0
- package/dist/form/index.d.ts +220 -0
- package/dist/form/index.js +3 -0
- package/dist/form-BxMg796f.js +192 -0
- package/dist/form-BxMg796f.js.map +1 -0
- package/dist/has-single-element-child-DLGI0Dh2.js +12 -0
- package/dist/has-single-element-child-DLGI0Dh2.js.map +1 -0
- package/dist/hooks/index.d.ts +26 -0
- package/dist/hooks/index.js +1 -0
- package/dist/hooks-DUm-q_ig.js +68 -0
- package/dist/hooks-DUm-q_ig.js.map +1 -0
- package/dist/icon/index.d.ts +2 -0
- package/dist/icon/index.js +1 -0
- package/dist/icon-D3JWfCa2.js +85 -0
- package/dist/icon-D3JWfCa2.js.map +1 -0
- package/dist/icon-container/index.d.ts +10 -0
- package/dist/icon-container/index.js +64 -0
- package/dist/icon-container/index.js.map +1 -0
- package/dist/index-0ZQzIKoE.d.ts +11 -0
- package/dist/index-B3MK1QYh.d.ts +11 -0
- package/dist/index-BJVMIPq4.d.ts +54 -0
- package/dist/index-BsV-u_jc.d.ts +4 -0
- package/dist/index-BygR7cUT.d.ts +22 -0
- package/dist/index-BzTOLSgZ.d.ts +9 -0
- package/dist/index-C15xiG9O.d.ts +14 -0
- package/dist/index-C2zco6-C.d.ts +15 -0
- package/dist/index-CIDOd4Z8.d.ts +56 -0
- package/dist/index-CQti9gFb.d.ts +49 -0
- package/dist/index-CiE-Rqit.d.ts +70 -0
- package/dist/index-D1kkOg9k.d.ts +14 -0
- package/dist/index-DLfdAked.d.ts +34 -0
- package/dist/index-DMaW_XF1.d.ts +24 -0
- package/dist/index-Db_QGr6S.d.ts +5 -0
- package/dist/index-DdFxZ3Xr.d.ts +22 -0
- package/dist/index-DfNHJF0t.d.ts +33 -0
- package/dist/index-DyQYoAUf.d.ts +29 -0
- package/dist/index-N2CBSUDu.d.ts +14 -0
- package/dist/index-PuhTRMce.d.ts +11 -0
- package/dist/index-Wb_tILYa.d.ts +24 -0
- package/dist/index-bVyqfhJS.d.ts +4 -0
- package/dist/index-x4f8gnaI.d.ts +15 -0
- package/dist/input/index.d.ts +3 -0
- package/dist/input/index.js +1 -0
- package/dist/input-Laj6dwtK.js +179 -0
- package/dist/input-Laj6dwtK.js.map +1 -0
- package/dist/input-group/index.d.ts +2 -0
- package/dist/input-group/index.js +1 -0
- package/dist/input-group-CgdazGrY.js +111 -0
- package/dist/input-group-CgdazGrY.js.map +1 -0
- package/dist/input-otp/index.d.ts +13 -0
- package/dist/input-otp/index.js +44 -0
- package/dist/input-otp/index.js.map +1 -0
- package/dist/input.types-816rEVWU.d.ts +20 -0
- package/dist/input.types-D0gyoaQv.js +48 -0
- package/dist/input.types-D0gyoaQv.js.map +1 -0
- package/dist/kbd/index.d.ts +9 -0
- package/dist/kbd/index.js +25 -0
- package/dist/kbd/index.js.map +1 -0
- package/dist/label/index.d.ts +8 -0
- package/dist/label/index.js +1 -0
- package/dist/label-BgpayDvN.js +27 -0
- package/dist/label-BgpayDvN.js.map +1 -0
- package/dist/layer-tree/index.d.ts +728 -0
- package/dist/layer-tree/index.js +685 -0
- package/dist/layer-tree/index.js.map +1 -0
- package/dist/map/google/index.d.ts +143 -0
- package/dist/map/google/index.js +445 -0
- package/dist/map/google/index.js.map +1 -0
- package/dist/map/index.d.ts +94 -0
- package/dist/map/index.js +208 -0
- package/dist/map/index.js.map +1 -0
- package/dist/map.context-Dw1D7E8m.js +11 -0
- package/dist/map.context-Dw1D7E8m.js.map +1 -0
- package/dist/menu/index.d.ts +2 -0
- package/dist/menu/index.js +1 -0
- package/dist/menu-sf13cnGp.js +173 -0
- package/dist/menu-sf13cnGp.js.map +1 -0
- package/dist/menu-tone-DWBEHoX2.js +22 -0
- package/dist/menu-tone-DWBEHoX2.js.map +1 -0
- package/dist/meter/index.d.ts +2 -0
- package/dist/meter/index.js +1 -0
- package/dist/meter-HD5taq57.js +116 -0
- package/dist/meter-HD5taq57.js.map +1 -0
- package/dist/nav-bar/index.d.ts +25 -0
- package/dist/nav-bar/index.js +133 -0
- package/dist/nav-bar/index.js.map +1 -0
- package/dist/navigation-menu/index.d.ts +43 -0
- package/dist/navigation-menu/index.js +176 -0
- package/dist/navigation-menu/index.js.map +1 -0
- package/dist/number-field/index.d.ts +14 -0
- package/dist/number-field/index.js +116 -0
- package/dist/number-field/index.js.map +1 -0
- package/dist/popover/index.d.ts +2 -0
- package/dist/popover/index.js +1 -0
- package/dist/popover-B1s4xXrX.js +114 -0
- package/dist/popover-B1s4xXrX.js.map +1 -0
- package/dist/preview-card/index.d.ts +13 -0
- package/dist/preview-card/index.js +35 -0
- package/dist/preview-card/index.js.map +1 -0
- package/dist/profile/index.d.ts +21 -0
- package/dist/profile/index.js +52 -0
- package/dist/profile/index.js.map +1 -0
- package/dist/progress/index.d.ts +23 -0
- package/dist/progress/index.js +97 -0
- package/dist/progress/index.js.map +1 -0
- package/dist/radar-ping/index.d.ts +11 -0
- package/dist/radar-ping/index.js +49 -0
- package/dist/radar-ping/index.js.map +1 -0
- package/dist/radio-group/index.d.ts +2 -0
- package/dist/radio-group/index.js +1 -0
- package/dist/radio-group-Dj43u35Z.js +47 -0
- package/dist/radio-group-Dj43u35Z.js.map +1 -0
- package/dist/resizeable/index.d.ts +11 -0
- package/dist/resizeable/index.js +31 -0
- package/dist/resizeable/index.js.map +1 -0
- package/dist/scroll-area/index.d.ts +11 -0
- package/dist/scroll-area/index.js +51 -0
- package/dist/scroll-area/index.js.map +1 -0
- package/dist/select/index.d.ts +2 -0
- package/dist/select/index.js +1 -0
- package/dist/select-DncJXYim.js +159 -0
- package/dist/select-DncJXYim.js.map +1 -0
- package/dist/separator/index.d.ts +2 -0
- package/dist/separator/index.js +1 -0
- package/dist/separator-DgIQp1cB.js +97 -0
- package/dist/separator-DgIQp1cB.js.map +1 -0
- package/dist/sidebar/index.d.ts +80 -0
- package/dist/sidebar/index.js +334 -0
- package/dist/sidebar/index.js.map +1 -0
- package/dist/site-header/index.d.ts +22 -0
- package/dist/site-header/index.js +55 -0
- package/dist/site-header/index.js.map +1 -0
- package/dist/skeleton/index.d.ts +4 -0
- package/dist/skeleton/index.js +1 -0
- package/dist/skeleton-DSG3FWby.js +13 -0
- package/dist/skeleton-DSG3FWby.js.map +1 -0
- package/dist/slider/index.d.ts +2 -0
- package/dist/slider/index.js +1 -0
- package/dist/slider-D_XlV4OW.js +114 -0
- package/dist/slider-D_XlV4OW.js.map +1 -0
- package/dist/slider-group/index.d.ts +46 -0
- package/dist/slider-group/index.js +198 -0
- package/dist/slider-group/index.js.map +1 -0
- package/dist/styles.css +4 -1
- package/dist/switch/index.d.ts +2 -0
- package/dist/switch/index.js +1 -0
- package/dist/switch-DXHixGHe.js +23 -0
- package/dist/switch-DXHixGHe.js.map +1 -0
- package/dist/table/index.d.ts +920 -0
- package/dist/table/index.js +1544 -0
- package/dist/table/index.js.map +1 -0
- package/dist/tabs/index.d.ts +2 -0
- package/dist/tabs/index.js +1 -0
- package/dist/tabs-DTC7coap.js +270 -0
- package/dist/tabs-DTC7coap.js.map +1 -0
- package/dist/text-area/index.d.ts +2 -0
- package/dist/text-area/index.js +1 -0
- package/dist/text-area-H6HjKnv_.js +50 -0
- package/dist/text-area-H6HjKnv_.js.map +1 -0
- package/dist/toast/index.d.ts +65 -0
- package/dist/toast/index.js +216 -0
- package/dist/toast/index.js.map +1 -0
- package/dist/toggle/index.d.ts +2 -0
- package/dist/toggle/index.js +1 -0
- package/dist/toggle-ZT9thVmz.js +73 -0
- package/dist/toggle-ZT9thVmz.js.map +1 -0
- package/dist/toggle-group/index.d.ts +10 -0
- package/dist/toggle-group/index.js +63 -0
- package/dist/toggle-group/index.js.map +1 -0
- package/dist/toggle-group-context-CBNZEf1I.js +6 -0
- package/dist/toggle-group-context-CBNZEf1I.js.map +1 -0
- package/dist/tooltip/index.d.ts +18 -0
- package/dist/tooltip/index.js +1 -0
- package/dist/tooltip-B6z3tDbW.js +41 -0
- package/dist/tooltip-B6z3tDbW.js.map +1 -0
- package/dist/trim-text-children-CQRFg2fL.js +33 -0
- package/dist/trim-text-children-CQRFg2fL.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils-BI2x7nW5.js +5 -0
- package/dist/utils-BI2x7nW5.js.map +1 -0
- package/package.json +100 -31
- package/dist/index.d.ts +0 -8000
- package/dist/index.js +0 -17274
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
import { t as cn } from "../cn-BDi0DfT5.js";
|
|
2
|
+
import { n as Icon } from "../icon-D3JWfCa2.js";
|
|
3
|
+
import { t as Button } from "../button-BpUC-R1J.js";
|
|
4
|
+
import { t as Badge } from "../badge-Cl-9WTW-.js";
|
|
5
|
+
import { n as CollapsibleTrigger, r as CollapsiblePanel, t as Collapsible } from "../collapsible-BVqrh0Q0.js";
|
|
6
|
+
import { c as PopoverContent, i as PopoverPanel, n as PopoverTrigger, t as Popover } from "../popover-B1s4xXrX.js";
|
|
7
|
+
import { o as useMediaQuery } from "../hooks-DUm-q_ig.js";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import React, { Children, isValidElement } from "react";
|
|
10
|
+
import { ScrollArea } from "@base-ui/react/scroll-area";
|
|
11
|
+
// src/components/sidebar/sidebar-provider.tsx
|
|
12
|
+
const SIDEBAR_COOKIE_MAX_AGE_SECONDS = 604800;
|
|
13
|
+
const SidebarContext = React.createContext(null);
|
|
14
|
+
const useSidebar = () => {
|
|
15
|
+
const context = React.useContext(SidebarContext);
|
|
16
|
+
if (!context) throw new Error("useSidebar must be used within a SidebarProvider");
|
|
17
|
+
return context;
|
|
18
|
+
};
|
|
19
|
+
function resolveOpenState(value, previous) {
|
|
20
|
+
if (typeof value === "function") return value(previous);
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
function SidebarProvider({ id, defaultOpen = true, side = "left", collapsible = "icon", className, ref, ...props }) {
|
|
24
|
+
const cookieName = `sidebar-state-${id}`, [openState, setOpenState] = React.useState(defaultOpen), [mobileOpen, setMobileOpen] = React.useState(false), isMobile = useMediaQuery("mobile"), setOpen = (value) => {
|
|
25
|
+
if (isMobile) {
|
|
26
|
+
setMobileOpen((prev) => resolveOpenState(value, prev));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
setOpenState((prev) => {
|
|
30
|
+
const nextOpen = resolveOpenState(value, prev);
|
|
31
|
+
document.cookie = [
|
|
32
|
+
`${cookieName}=${encodeURIComponent(String(nextOpen))}`,
|
|
33
|
+
"path=/",
|
|
34
|
+
`max-age=${SIDEBAR_COOKIE_MAX_AGE_SECONDS}`,
|
|
35
|
+
"samesite=lax"
|
|
36
|
+
].join("; ");
|
|
37
|
+
return nextOpen;
|
|
38
|
+
});
|
|
39
|
+
}, trigger = () => setOpen((prev) => !prev);
|
|
40
|
+
React.useEffect(() => {
|
|
41
|
+
if (!isMobile) setMobileOpen(false);
|
|
42
|
+
}, [isMobile]);
|
|
43
|
+
let effectiveCollapsible = collapsible, open = openState;
|
|
44
|
+
if (isMobile) {
|
|
45
|
+
effectiveCollapsible = "offcanvas";
|
|
46
|
+
open = mobileOpen;
|
|
47
|
+
}
|
|
48
|
+
return /* @__PURE__ */ jsx(SidebarContext.Provider, {
|
|
49
|
+
value: {
|
|
50
|
+
collapsible: effectiveCollapsible,
|
|
51
|
+
defaultOpen,
|
|
52
|
+
id,
|
|
53
|
+
isMobile,
|
|
54
|
+
open,
|
|
55
|
+
setOpen,
|
|
56
|
+
side,
|
|
57
|
+
trigger
|
|
58
|
+
},
|
|
59
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
60
|
+
className: cn("relative flex min-h-0 w-full min-w-0 flex-1", side === "left" && "flex flex-row", side === "right" && "flex flex-row-reverse", className),
|
|
61
|
+
ref,
|
|
62
|
+
...props
|
|
63
|
+
})
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// src/components/sidebar/sidebar.tsx
|
|
67
|
+
const DEFAULT_SIDEBAR_WIDTH = 400;
|
|
68
|
+
function getOffcanvasWidth(open, isMobile, fullWidth) {
|
|
69
|
+
if (!open) return { width: "0px" };
|
|
70
|
+
if (isMobile) return { width: "33.333333%" };
|
|
71
|
+
return fullWidth;
|
|
72
|
+
}
|
|
73
|
+
function getIconWidth(open, isMobile, fullWidth) {
|
|
74
|
+
if (open) return fullWidth;
|
|
75
|
+
if (isMobile) return { width: "0px" };
|
|
76
|
+
return { width: "80px" };
|
|
77
|
+
}
|
|
78
|
+
function getWidthStyle({ collapsible, open, isMobile, width }) {
|
|
79
|
+
const fullWidth = { width: `${width}px` };
|
|
80
|
+
if (collapsible === "offcanvas") return getOffcanvasWidth(open, isMobile, fullWidth);
|
|
81
|
+
if (collapsible === "icon") return getIconWidth(open, isMobile, fullWidth);
|
|
82
|
+
return fullWidth;
|
|
83
|
+
}
|
|
84
|
+
function getGapClasses({ collapsible, open }) {
|
|
85
|
+
if (collapsible === "none") return "gap-lg";
|
|
86
|
+
if (open) return "gap-lg";
|
|
87
|
+
return "gap-sm";
|
|
88
|
+
}
|
|
89
|
+
function getPositionClasses({ collapsible, open, isMobile }) {
|
|
90
|
+
if ((collapsible === "offcanvas" || collapsible === "icon") && !open && isMobile) return "absolute z-50 -translate-x-full";
|
|
91
|
+
if ((collapsible === "offcanvas" || collapsible === "icon") && open && isMobile) return "absolute z-50";
|
|
92
|
+
return "";
|
|
93
|
+
}
|
|
94
|
+
function Sidebar$1({ tone = "primary", width = DEFAULT_SIDEBAR_WIDTH, className, ...props }) {
|
|
95
|
+
const { open, setOpen, isMobile, collapsible, side } = useSidebar(), sidebarRef = React.useRef(null), isHidden = collapsible === "offcanvas" && !open, layout = {
|
|
96
|
+
collapsible,
|
|
97
|
+
isMobile,
|
|
98
|
+
open,
|
|
99
|
+
width
|
|
100
|
+
};
|
|
101
|
+
React.useEffect(() => {
|
|
102
|
+
const handleOutsideClick = (event) => {
|
|
103
|
+
if (sidebarRef.current && event.target instanceof Node && !sidebarRef.current.contains(event.target) && isMobile && open && setOpen) setOpen(false);
|
|
104
|
+
};
|
|
105
|
+
document.addEventListener("click", handleOutsideClick);
|
|
106
|
+
return () => {
|
|
107
|
+
document.removeEventListener("click", handleOutsideClick);
|
|
108
|
+
};
|
|
109
|
+
}, [
|
|
110
|
+
open,
|
|
111
|
+
setOpen,
|
|
112
|
+
isMobile
|
|
113
|
+
]);
|
|
114
|
+
return /* @__PURE__ */ jsx("div", {
|
|
115
|
+
className: cn("sticky left-[0px] flex h-full max-h-dvh min-h-0 shrink-0 flex-col overflow-hidden border-border bg-surface transition-[width,transform] duration-300 ease-in-out", className, tone === "primary" && "bg-surface-background", tone === "secondary" && "bg-surface", tone === "ghost" && "bg-transparent", getGapClasses(layout), getPositionClasses(layout), isHidden && "invisible", collapsible === "offcanvas" && !open && "border-none", open && "p-md", collapsible === "icon" && !open && "py-md", isMobile && "border-none", side === "left" && "border-r", side === "right" && "border-l"),
|
|
116
|
+
ref: sidebarRef,
|
|
117
|
+
style: getWidthStyle(layout),
|
|
118
|
+
...props,
|
|
119
|
+
"aria-hidden": isHidden || void 0,
|
|
120
|
+
inert: isHidden
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
// src/components/sidebar/sidebar-content.tsx
|
|
124
|
+
function SidebarContent({ className, children, ref, ...props }) {
|
|
125
|
+
const { open } = useSidebar();
|
|
126
|
+
return /* @__PURE__ */ jsx(ScrollArea.Root, {
|
|
127
|
+
className: cn("min-h-0 flex-1 overflow-hidden rounded-xl transition-all duration-300 ease-in-out", !open && "w-fit self-center", className),
|
|
128
|
+
ref,
|
|
129
|
+
...props,
|
|
130
|
+
children: /* @__PURE__ */ jsx(ScrollArea.Viewport, {
|
|
131
|
+
className: cn("flex h-full scrollbar-none flex-col items-center overflow-y-auto overscroll-contain [&::-webkit-scrollbar]:hidden", "before:pointer-events-none before:absolute before:top-0 before:left-0 before:block before:h-[min(40px,var(--scroll-area-overflow-y-start))] before:w-full before:bg-linear-to-b before:from-shadow/35 before:to-transparent before:transition-[height] before:duration-100 before:ease-out before:content-[\"\"] before:[--scroll-area-overflow-y-start:inherit]", "after:pointer-events-none after:absolute after:bottom-0 after:left-0 after:block after:h-[min(40px,var(--scroll-area-overflow-y-end,40px))] after:w-full after:bg-linear-to-t after:from-shadow/35 after:to-transparent after:transition-[height] after:duration-100 after:ease-out after:content-[\"\"] after:[--scroll-area-overflow-y-end:inherit]", open && "gap-md", !open && "gap-xs px-3xs pt-3xs"),
|
|
132
|
+
children
|
|
133
|
+
})
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// src/components/sidebar/sidebar-footer.tsx
|
|
137
|
+
function SidebarFooter({ className, children, ref, ...props }) {
|
|
138
|
+
const { open, collapsible } = useSidebar(), isExpanded = collapsible === "none" || open;
|
|
139
|
+
return /* @__PURE__ */ jsx("div", {
|
|
140
|
+
className: cn("flex shrink-0 animate-in items-center truncate p-3xs transition-all duration-300 ease-in-out", open && "justify-start fade-in-0", !open && "justify-center self-center fade-out-0", className),
|
|
141
|
+
ref,
|
|
142
|
+
...props,
|
|
143
|
+
children: children(isExpanded)
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
// src/components/sidebar/sidebar-group.tsx
|
|
147
|
+
function SidebarGroup({ className, ref, ...props }) {
|
|
148
|
+
return /* @__PURE__ */ jsx("div", {
|
|
149
|
+
className: cn("flex w-full flex-col items-start gap-2xs not-last-of-type:pb-md", className),
|
|
150
|
+
ref,
|
|
151
|
+
...props
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
// src/components/sidebar/sidebar-group-content.tsx
|
|
155
|
+
function SidebarGroupContent({ className, ref, ...props }) {
|
|
156
|
+
return /* @__PURE__ */ jsx("div", {
|
|
157
|
+
className: cn("flex w-full flex-col gap-3xs", className),
|
|
158
|
+
ref,
|
|
159
|
+
...props
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
// src/components/sidebar/sidebar-group-label.tsx
|
|
163
|
+
function SidebarGroupLabel({ className, ref, ...props }) {
|
|
164
|
+
const { open, collapsible } = useSidebar();
|
|
165
|
+
if (!(collapsible === "none" || open)) return;
|
|
166
|
+
return /* @__PURE__ */ jsx("span", {
|
|
167
|
+
className: cn("inline-flex h-md w-full items-center justify-between truncate pr-3xs pl-md style-text-default--1 text-on-surface-variant transition-all duration-200 ease-out", collapsible !== "none" && open && "animate-in fade-in-0 slide-in-from-left-2", className),
|
|
168
|
+
ref,
|
|
169
|
+
...props
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
// src/components/sidebar/sidebar-header.tsx
|
|
173
|
+
function SidebarHeader({ className, children, ref, ...props }) {
|
|
174
|
+
const { open, collapsible } = useSidebar(), isExpanded = collapsible === "none" || open;
|
|
175
|
+
return /* @__PURE__ */ jsx("div", {
|
|
176
|
+
className: cn("flex shrink-0 items-center justify-start gap-xs truncate style-text-strong-1 transition-all duration-200 ease-out", !open && "self-center", open && "h-2xl pr-3xs pl-xs", open && "justify-between", collapsible !== "none" && "animate-in", isExpanded && "fade-in-0", !isExpanded && "fade-out-0", className),
|
|
177
|
+
ref,
|
|
178
|
+
...props,
|
|
179
|
+
children: children(isExpanded)
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
// src/components/sidebar/sidebar-inset.tsx
|
|
183
|
+
function SidebarInset({ className, children, ref, ...props }) {
|
|
184
|
+
return /* @__PURE__ */ jsx("div", {
|
|
185
|
+
className: cn("min-h-0 min-w-0 flex-1 overflow-auto", className),
|
|
186
|
+
ref,
|
|
187
|
+
...props,
|
|
188
|
+
children
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
// src/components/sidebar/sidebar-menu.tsx
|
|
192
|
+
function SidebarMenu({ className, ref, ...props }) {
|
|
193
|
+
return /* @__PURE__ */ jsx("div", {
|
|
194
|
+
className: cn("flex w-full flex-col items-start gap-3xs p-3xs", className),
|
|
195
|
+
ref,
|
|
196
|
+
...props
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
// src/components/sidebar/sidebar-menu-badge.tsx
|
|
200
|
+
function SidebarMenuBadge({ className, ref, ...props }) {
|
|
201
|
+
const { open } = useSidebar();
|
|
202
|
+
return /* @__PURE__ */ jsx(Badge, {
|
|
203
|
+
className: cn(!open && "hidden", className),
|
|
204
|
+
ref,
|
|
205
|
+
...props
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
// src/components/sidebar/sidebar-menu-button.tsx
|
|
209
|
+
function SidebarMenuButton({ isActive, className, ref, ...props }) {
|
|
210
|
+
const { open, collapsible } = useSidebar();
|
|
211
|
+
return /* @__PURE__ */ jsx("button", {
|
|
212
|
+
type: "button",
|
|
213
|
+
"data-active": String(Boolean(isActive)),
|
|
214
|
+
className: cn("inline-flex cursor-pointer items-center gap-2xs rounded-full border border-transparent style-text-default-0 whitespace-nowrap transition-all duration-200 ease-out select-none active:scale-95 disabled:pointer-events-none disabled:opacity-50 [&>svg]:shrink-0", isActive && "pointer-events-none bg-surface text-on-surface shadow-2xs", !isActive && "text-neutral-default hover:bg-neutral-container hover:text-neutral-on-container", isActive && !open && "bg-neutral-container", !(collapsible === "none" || open) && "mx-auto", !open && "size-xl justify-center *:hidden [&>svg]:block", open && "h-xl w-full pl-sm", collapsible !== "none" && open && "animate-in fade-in-0 slide-in-from-left-2", className),
|
|
215
|
+
ref,
|
|
216
|
+
...props
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
// src/components/sidebar/sidebar-menu-collapsible.tsx
|
|
220
|
+
const hasActiveDescendant = (children) => Children.toArray(children).some((child) => {
|
|
221
|
+
if (!isValidElement(child)) return false;
|
|
222
|
+
return child.props.isActive === true || hasActiveDescendant(child.props.children);
|
|
223
|
+
});
|
|
224
|
+
function SidebarMenuCollapsible({ className, children, ref, ...props }) {
|
|
225
|
+
const { open } = useSidebar();
|
|
226
|
+
if (!open) return /* @__PURE__ */ jsx(Popover, { children });
|
|
227
|
+
return /* @__PURE__ */ jsx(Collapsible, {
|
|
228
|
+
defaultOpen: hasActiveDescendant(children),
|
|
229
|
+
className: cn("", className),
|
|
230
|
+
ref,
|
|
231
|
+
...props,
|
|
232
|
+
children
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
// src/components/sidebar/sidebar-menu-collapsible-panel.tsx
|
|
236
|
+
function SidebarMenuCollapsiblePanel({ className, children, ref, ...props }) {
|
|
237
|
+
const { open } = useSidebar();
|
|
238
|
+
if (!open) return /* @__PURE__ */ jsx(PopoverPanel, {
|
|
239
|
+
side: "right",
|
|
240
|
+
className: "w-fit bg-surface p-[0.5rem_0.5rem]",
|
|
241
|
+
children: /* @__PURE__ */ jsx(PopoverContent, {
|
|
242
|
+
className: "flex gap-3xs",
|
|
243
|
+
children
|
|
244
|
+
})
|
|
245
|
+
});
|
|
246
|
+
return /* @__PURE__ */ jsx(CollapsiblePanel, {
|
|
247
|
+
className: cn("py-3xs", className),
|
|
248
|
+
ref,
|
|
249
|
+
...props,
|
|
250
|
+
children
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
// src/components/sidebar/sidebar-menu-collapsible-trigger.tsx
|
|
254
|
+
function SidebarMenuCollapsibleTrigger({ className, children, ref, style: _style, ...props }) {
|
|
255
|
+
const { open, collapsible } = useSidebar(), showText = collapsible === "none" || open;
|
|
256
|
+
if (!open) return /* @__PURE__ */ jsx(PopoverTrigger, { children: /* @__PURE__ */ jsxs("button", {
|
|
257
|
+
type: "button",
|
|
258
|
+
className: cn("flex size-xl items-center justify-center rounded-full shadow-none! transition-colors *:hidden hover:cursor-pointer hover:bg-neutral-container hover:text-neutral-on-container data-popup-open:bg-neutral-container [&>svg]:block"),
|
|
259
|
+
children: [children, /* @__PURE__ */ jsx(Icon, {
|
|
260
|
+
name: "chevronRight",
|
|
261
|
+
className: "absolute right-2xs size-xs text-on-surface-variant"
|
|
262
|
+
})]
|
|
263
|
+
}) });
|
|
264
|
+
return /* @__PURE__ */ jsx(CollapsibleTrigger, {
|
|
265
|
+
variant: "ghost",
|
|
266
|
+
className: cn("inline-flex! w-full! animate-in! justify-start! overflow-hidden! text-left! whitespace-nowrap! slide-in-from-left-2! [&>svg]:size-sm! [&>svg]:flex-none [&>svg]:shrink-0", !showText && "mx-auto", !open && "size-xl *:hidden [&>svg]:block", open && "h-xl pl-sm", collapsible !== "none" && open && "animate-in slide-in-from-left-2", className),
|
|
267
|
+
ref,
|
|
268
|
+
style: { justifyContent: "flex-start" },
|
|
269
|
+
...props,
|
|
270
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
271
|
+
className: "flex shrink-0 items-center gap-2xs [&>svg]:size-sm",
|
|
272
|
+
children
|
|
273
|
+
})
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
// src/components/sidebar/sidebar-menu-item.tsx
|
|
277
|
+
function SidebarMenuItem({ className, ref, ...props }) {
|
|
278
|
+
return /* @__PURE__ */ jsx("div", {
|
|
279
|
+
className: cn("flex h-xl w-full items-center justify-between gap-2xs", className),
|
|
280
|
+
ref,
|
|
281
|
+
...props
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
// src/components/sidebar/sidebar-toggle.tsx
|
|
285
|
+
function renderToggleChildren(children, open) {
|
|
286
|
+
if (typeof children === "function") return children(open);
|
|
287
|
+
return children;
|
|
288
|
+
}
|
|
289
|
+
function SidebarToggle({ className, children, ref, ...props }) {
|
|
290
|
+
const { trigger, open, collapsible } = useSidebar(), handleClick = (event) => {
|
|
291
|
+
event.stopPropagation();
|
|
292
|
+
if (trigger) trigger();
|
|
293
|
+
};
|
|
294
|
+
if (!trigger || collapsible === "none") return;
|
|
295
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
296
|
+
"aria-label": "Toggle sidebar",
|
|
297
|
+
className: cn("shrink-0 border-none", className),
|
|
298
|
+
ref,
|
|
299
|
+
size: "medium",
|
|
300
|
+
variant: "ghost",
|
|
301
|
+
onClick: handleClick,
|
|
302
|
+
...props,
|
|
303
|
+
children: renderToggleChildren(children, open)
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
// src/components/sidebar/sidebar.utils.ts
|
|
307
|
+
const getStoredSidebarOpen = (id, fallback) => {
|
|
308
|
+
if (typeof document === "undefined") return fallback;
|
|
309
|
+
const match = new RegExp(`(?:^|; )sidebar-state-${id}=(?<value>[^;]*)`).exec(document.cookie);
|
|
310
|
+
if (!match) return fallback;
|
|
311
|
+
return decodeURIComponent(match.groups?.value ?? "") === "true";
|
|
312
|
+
};
|
|
313
|
+
// src/components/sidebar/index.ts
|
|
314
|
+
const Sidebar = Object.assign(Sidebar$1, {
|
|
315
|
+
Content: SidebarContent,
|
|
316
|
+
Footer: SidebarFooter,
|
|
317
|
+
Group: SidebarGroup,
|
|
318
|
+
GroupContent: SidebarGroupContent,
|
|
319
|
+
GroupLabel: SidebarGroupLabel,
|
|
320
|
+
Header: SidebarHeader,
|
|
321
|
+
Inset: SidebarInset,
|
|
322
|
+
Menu: SidebarMenu,
|
|
323
|
+
MenuBadge: SidebarMenuBadge,
|
|
324
|
+
MenuButton: SidebarMenuButton,
|
|
325
|
+
MenuCollapsible: SidebarMenuCollapsible,
|
|
326
|
+
MenuCollapsiblePanel: SidebarMenuCollapsiblePanel,
|
|
327
|
+
MenuCollapsibleTrigger: SidebarMenuCollapsibleTrigger,
|
|
328
|
+
MenuItem: SidebarMenuItem,
|
|
329
|
+
Provider: SidebarProvider,
|
|
330
|
+
Toggle: SidebarToggle
|
|
331
|
+
});
|
|
332
|
+
export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInset, SidebarMenu, SidebarMenuBadge, SidebarMenuButton, SidebarMenuCollapsible, SidebarMenuCollapsiblePanel, SidebarMenuCollapsibleTrigger, SidebarMenuItem, SidebarProvider, SidebarToggle, getStoredSidebarOpen, useSidebar };
|
|
333
|
+
|
|
334
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["Sidebar","BaseScrollArea","SidebarRoot"],"sources":["../../src/components/sidebar/sidebar-provider.tsx","../../src/components/sidebar/sidebar.tsx","../../src/components/sidebar/sidebar-content.tsx","../../src/components/sidebar/sidebar-footer.tsx","../../src/components/sidebar/sidebar-group.tsx","../../src/components/sidebar/sidebar-group-content.tsx","../../src/components/sidebar/sidebar-group-label.tsx","../../src/components/sidebar/sidebar-header.tsx","../../src/components/sidebar/sidebar-inset.tsx","../../src/components/sidebar/sidebar-menu.tsx","../../src/components/sidebar/sidebar-menu-badge.tsx","../../src/components/sidebar/sidebar-menu-button.tsx","../../src/components/sidebar/sidebar-menu-collapsible.tsx","../../src/components/sidebar/sidebar-menu-collapsible-panel.tsx","../../src/components/sidebar/sidebar-menu-collapsible-trigger.tsx","../../src/components/sidebar/sidebar-menu-item.tsx","../../src/components/sidebar/sidebar-toggle.tsx","../../src/components/sidebar/sidebar.utils.ts","../../src/components/sidebar/index.ts"],"sourcesContent":["import React from 'react'\n\nimport { useMediaQuery } from '@/hooks'\nimport { cn } from '@/utils/cn'\n\ntype SidebarContextProps = React.ComponentProps<'div'> & {\n id: string\n defaultOpen?: boolean\n trigger?: () => void\n open?: boolean\n setOpen?: (open: boolean) => void\n isMobile?: boolean\n side?: 'left' | 'right'\n collapsible?: 'offcanvas' | 'icon' | 'none'\n}\n\n// 7 days in seconds\nconst SIDEBAR_COOKIE_MAX_AGE_SECONDS = 604_800,\n // oxlint-disable-next-line unicorn/no-null\n SidebarContext = React.createContext<SidebarContextProps | null>(null),\n useSidebar = () => {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider')\n }\n return context\n }\n\nfunction resolveOpenState(\n value: boolean | ((open: boolean) => boolean),\n previous: boolean,\n): boolean {\n if (typeof value === 'function') {\n return value(previous)\n }\n return value\n}\n\nfunction SidebarProvider({\n id,\n defaultOpen = true,\n side = 'left',\n collapsible = 'icon',\n className,\n ref,\n ...props\n}: SidebarContextProps) {\n const cookieName = `sidebar-state-${id}`,\n [openState, setOpenState] = React.useState<boolean>(defaultOpen),\n [mobileOpen, setMobileOpen] = React.useState(false),\n isMobile = useMediaQuery('mobile'),\n setOpen = (value: boolean | ((open: boolean) => boolean)) => {\n if (isMobile) {\n setMobileOpen((prev) => resolveOpenState(value, prev))\n return\n }\n setOpenState((prev) => {\n const nextOpen = resolveOpenState(value, prev)\n\n document.cookie = [\n `${cookieName}=${encodeURIComponent(String(nextOpen))}`,\n 'path=/',\n `max-age=${SIDEBAR_COOKIE_MAX_AGE_SECONDS}`,\n 'samesite=lax',\n ].join('; ')\n\n return nextOpen\n })\n },\n trigger = () => setOpen((prev) => !prev)\n\n React.useEffect(() => {\n if (!isMobile) {\n setMobileOpen(false)\n }\n }, [isMobile])\n\n let effectiveCollapsible = collapsible,\n open = openState\n if (isMobile) {\n effectiveCollapsible = 'offcanvas'\n open = mobileOpen\n }\n\n return (\n <SidebarContext.Provider\n value={{\n collapsible: effectiveCollapsible,\n defaultOpen,\n id,\n isMobile,\n open,\n setOpen,\n side,\n trigger,\n }}\n >\n <div\n className={cn(\n 'relative flex min-h-0 w-full min-w-0 flex-1',\n side === 'left' && 'flex flex-row',\n side === 'right' && 'flex flex-row-reverse',\n className,\n )}\n ref={ref}\n {...props}\n />\n </SidebarContext.Provider>\n )\n}\n\nexport { SidebarProvider, useSidebar }\n","import React from 'react'\n\nimport { cn } from '@/utils/cn'\n\nimport { useSidebar } from './sidebar-provider'\nimport type { SidebarProps } from './sidebar.types'\n\nconst DEFAULT_SIDEBAR_WIDTH = 400\n\ninterface SidebarLayoutProps {\n collapsible?: 'offcanvas' | 'icon' | 'none'\n open?: boolean\n isMobile?: boolean\n width: string | number\n}\n\nfunction getOffcanvasWidth(\n open: boolean | undefined,\n isMobile: boolean | undefined,\n fullWidth: React.CSSProperties,\n): React.CSSProperties {\n if (!open) {\n return { width: '0px' }\n }\n if (isMobile) {\n return { width: '33.333333%' }\n }\n return fullWidth\n}\n\nfunction getIconWidth(\n open: boolean | undefined,\n isMobile: boolean | undefined,\n fullWidth: React.CSSProperties,\n): React.CSSProperties {\n if (open) {\n return fullWidth\n }\n if (isMobile) {\n return { width: '0px' }\n }\n return { width: '80px' }\n}\n\nfunction getWidthStyle({\n collapsible,\n open,\n isMobile,\n width,\n}: SidebarLayoutProps): React.CSSProperties {\n const fullWidth: React.CSSProperties = { width: `${width}px` }\n if (collapsible === 'offcanvas') {\n return getOffcanvasWidth(open, isMobile, fullWidth)\n }\n if (collapsible === 'icon') {\n return getIconWidth(open, isMobile, fullWidth)\n }\n return fullWidth\n}\n\nfunction getGapClasses({ collapsible, open }: SidebarLayoutProps) {\n if (collapsible === 'none') {\n return 'gap-lg'\n }\n if (open) {\n return 'gap-lg'\n }\n return 'gap-sm'\n}\n\nfunction getPositionClasses({ collapsible, open, isMobile }: SidebarLayoutProps) {\n if ((collapsible === 'offcanvas' || collapsible === 'icon') && !open && isMobile) {\n return 'absolute z-50 -translate-x-full'\n }\n\n if ((collapsible === 'offcanvas' || collapsible === 'icon') && open && isMobile) {\n return 'absolute z-50'\n }\n\n return ''\n}\n\nexport function Sidebar({\n tone = 'primary',\n width = DEFAULT_SIDEBAR_WIDTH,\n className,\n ...props\n}: SidebarProps) {\n const { open, setOpen, isMobile, collapsible, side } = useSidebar(),\n sidebarRef = React.useRef<HTMLDivElement>(null),\n isHidden = collapsible === 'offcanvas' && !open,\n layout: SidebarLayoutProps = { collapsible, isMobile, open, width }\n\n React.useEffect(() => {\n const handleOutsideClick = (event: MouseEvent) => {\n if (\n sidebarRef.current &&\n event.target instanceof Node &&\n !sidebarRef.current.contains(event.target) &&\n isMobile &&\n open &&\n setOpen\n ) {\n setOpen(false)\n }\n }\n\n document.addEventListener('click', handleOutsideClick)\n\n return () => {\n document.removeEventListener('click', handleOutsideClick)\n }\n }, [open, setOpen, isMobile])\n\n return (\n <div\n className={cn(\n 'sticky left-[0px] flex h-full max-h-dvh min-h-0 shrink-0 flex-col overflow-hidden border-border bg-surface transition-[width,transform] duration-300 ease-in-out',\n className,\n tone === 'primary' && 'bg-surface-background',\n tone === 'secondary' && 'bg-surface',\n tone === 'ghost' && 'bg-transparent',\n getGapClasses(layout),\n getPositionClasses(layout),\n isHidden && 'invisible',\n collapsible === 'offcanvas' && !open && 'border-none',\n open && 'p-md',\n collapsible === 'icon' && !open && 'py-md',\n isMobile && 'border-none',\n side === 'left' && 'border-r',\n side === 'right' && 'border-l',\n )}\n ref={sidebarRef}\n style={getWidthStyle(layout)}\n {...props}\n aria-hidden={isHidden || undefined}\n inert={isHidden}\n />\n )\n}\n","import { ScrollArea as BaseScrollArea } from '@base-ui/react/scroll-area'\n\nimport { cn } from '@/utils/cn'\n\nimport { useSidebar } from './sidebar-provider'\nimport type { SidebarContentProps } from './sidebar.types'\n\nexport function SidebarContent({ className, children, ref, ...props }: SidebarContentProps) {\n const { open } = useSidebar()\n\n return (\n <BaseScrollArea.Root\n className={cn(\n 'min-h-0 flex-1 overflow-hidden rounded-xl transition-all duration-300 ease-in-out',\n !open && 'w-fit self-center',\n className,\n )}\n ref={ref}\n {...props}\n >\n <BaseScrollArea.Viewport\n className={cn(\n 'flex h-full scrollbar-none flex-col items-center overflow-y-auto overscroll-contain [&::-webkit-scrollbar]:hidden',\n 'before:pointer-events-none before:absolute before:top-0 before:left-0 before:block before:h-[min(40px,var(--scroll-area-overflow-y-start))] before:w-full before:bg-linear-to-b before:from-shadow/35 before:to-transparent before:transition-[height] before:duration-100 before:ease-out before:content-[\"\"] before:[--scroll-area-overflow-y-start:inherit]',\n 'after:pointer-events-none after:absolute after:bottom-0 after:left-0 after:block after:h-[min(40px,var(--scroll-area-overflow-y-end,40px))] after:w-full after:bg-linear-to-t after:from-shadow/35 after:to-transparent after:transition-[height] after:duration-100 after:ease-out after:content-[\"\"] after:[--scroll-area-overflow-y-end:inherit]',\n open && 'gap-md',\n !open && 'gap-xs px-3xs pt-3xs',\n )}\n >\n {children}\n </BaseScrollArea.Viewport>\n </BaseScrollArea.Root>\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport { useSidebar } from './sidebar-provider'\nimport type { SidebarFooterProps } from './sidebar.types'\n\nexport function SidebarFooter({ className, children, ref, ...props }: SidebarFooterProps) {\n const { open, collapsible } = useSidebar(),\n isExpanded = collapsible === 'none' || open\n return (\n <div\n className={cn(\n 'flex shrink-0 animate-in items-center truncate p-3xs transition-all duration-300 ease-in-out',\n open && 'justify-start fade-in-0',\n !open && 'justify-center self-center fade-out-0',\n className,\n )}\n ref={ref}\n {...props}\n >\n {children(isExpanded)}\n </div>\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport type { SidebarGroupProps } from './sidebar.types'\n\nexport function SidebarGroup({ className, ref, ...props }: SidebarGroupProps) {\n return (\n <div\n className={cn('flex w-full flex-col items-start gap-2xs not-last-of-type:pb-md', className)}\n ref={ref}\n {...props}\n />\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport type { SidebarGroupContentProps } from './sidebar.types'\n\nexport function SidebarGroupContent({ className, ref, ...props }: SidebarGroupContentProps) {\n return <div className={cn('flex w-full flex-col gap-3xs', className)} ref={ref} {...props} />\n}\n","import { cn } from '@/utils/cn'\n\nimport { useSidebar } from './sidebar-provider'\nimport type { SidebarGroupLabelProps } from './sidebar.types'\n\nexport function SidebarGroupLabel({ className, ref, ...props }: SidebarGroupLabelProps) {\n const { open, collapsible } = useSidebar(),\n showLabel = collapsible === 'none' || open\n\n if (!showLabel) {\n return undefined\n }\n\n return (\n <span\n className={cn(\n 'inline-flex h-md w-full items-center justify-between truncate pr-3xs pl-md style-text-default--1 text-on-surface-variant transition-all duration-200 ease-out',\n collapsible !== 'none' && open && 'animate-in fade-in-0 slide-in-from-left-2',\n className,\n )}\n ref={ref}\n {...props}\n />\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport { useSidebar } from './sidebar-provider'\nimport type { SidebarHeaderProps } from './sidebar.types'\n\nexport function SidebarHeader({ className, children, ref, ...props }: SidebarHeaderProps) {\n const { open, collapsible } = useSidebar(),\n isExpanded = collapsible === 'none' || open\n\n return (\n <div\n className={cn(\n 'flex shrink-0 items-center justify-start gap-xs truncate style-text-strong-1 transition-all duration-200 ease-out',\n !open && 'self-center',\n open && 'h-2xl pr-3xs pl-xs',\n open && 'justify-between',\n collapsible !== 'none' && 'animate-in',\n isExpanded && 'fade-in-0',\n !isExpanded && 'fade-out-0',\n className,\n )}\n ref={ref}\n {...props}\n >\n {children(isExpanded)}\n </div>\n )\n}\n","import { cn } from '@/utils'\n\nimport type { SidebarInsetProps } from './sidebar.types'\n\nexport function SidebarInset({ className, children, ref, ...props }: SidebarInsetProps) {\n return (\n <div className={cn('min-h-0 min-w-0 flex-1 overflow-auto', className)} ref={ref} {...props}>\n {children}\n </div>\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport type { SidebarMenuProps } from './sidebar.types'\n\nexport function SidebarMenu({ className, ref, ...props }: SidebarMenuProps) {\n return (\n <div\n className={cn('flex w-full flex-col items-start gap-3xs p-3xs', className)}\n ref={ref}\n {...props}\n />\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport { Badge } from '../badge'\nimport { useSidebar } from './sidebar-provider'\nimport type { SidebarMenuBadgeProps } from './sidebar.types'\n\nexport function SidebarMenuBadge({ className, ref, ...props }: SidebarMenuBadgeProps) {\n const { open } = useSidebar()\n\n return <Badge className={cn(!open && 'hidden', className)} ref={ref} {...props} />\n}\n","import { cn } from '@/utils/cn'\n\nimport { useSidebar } from './sidebar-provider'\nimport type { SidebarMenuButtonProps } from './sidebar.types'\n\nexport function SidebarMenuButton({ isActive, className, ref, ...props }: SidebarMenuButtonProps) {\n const { open, collapsible } = useSidebar(),\n showText = collapsible === 'none' || open\n\n return (\n <button\n type=\"button\"\n data-active={String(Boolean(isActive))}\n className={cn(\n 'inline-flex cursor-pointer items-center gap-2xs rounded-full border border-transparent style-text-default-0 whitespace-nowrap transition-all duration-200 ease-out select-none active:scale-95 disabled:pointer-events-none disabled:opacity-50 [&>svg]:shrink-0',\n isActive && 'pointer-events-none bg-surface text-on-surface shadow-2xs',\n !isActive &&\n 'text-neutral-default hover:bg-neutral-container hover:text-neutral-on-container',\n isActive && !open && 'bg-neutral-container',\n !showText && 'mx-auto',\n !open && 'size-xl justify-center *:hidden [&>svg]:block',\n open && 'h-xl w-full pl-sm',\n collapsible !== 'none' && open && 'animate-in fade-in-0 slide-in-from-left-2',\n className,\n )}\n ref={ref}\n {...props}\n />\n )\n}\n","import { Children, isValidElement } from 'react'\nimport type { ReactNode } from 'react'\n\nimport { cn } from '@/utils/cn'\n\nimport { Collapsible } from '../collapsible'\nimport { Popover } from '../popover'\nimport { useSidebar } from './sidebar-provider'\nimport type { SidebarMenuCollapsibleProps } from './sidebar.types'\n\nconst hasActiveDescendant = (children: ReactNode): boolean =>\n Children.toArray(children).some((child) => {\n if (!isValidElement<{ isActive?: boolean; children?: ReactNode }>(child)) {\n return false\n }\n\n return child.props.isActive === true || hasActiveDescendant(child.props.children)\n })\n\nexport function SidebarMenuCollapsible({\n className,\n children,\n ref,\n ...props\n}: SidebarMenuCollapsibleProps) {\n const { open } = useSidebar()\n\n if (!open) {\n return <Popover>{children}</Popover>\n }\n\n return (\n <Collapsible\n defaultOpen={hasActiveDescendant(children)}\n className={cn('', className)}\n ref={ref}\n {...props}\n >\n {children}\n </Collapsible>\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport { CollapsiblePanel } from '../collapsible'\nimport { PopoverContent, PopoverPanel } from '../popover'\nimport { useSidebar } from './sidebar-provider'\nimport type { SidebarMenuCollapsiblePanelProps } from './sidebar.types'\n\nexport function SidebarMenuCollapsiblePanel({\n className,\n children,\n ref,\n ...props\n}: SidebarMenuCollapsiblePanelProps) {\n const { open } = useSidebar()\n\n if (!open) {\n return (\n <PopoverPanel side=\"right\" className=\"w-fit bg-surface p-[0.5rem_0.5rem]\">\n <PopoverContent className=\"flex gap-3xs\">{children}</PopoverContent>\n </PopoverPanel>\n )\n }\n\n return (\n <CollapsiblePanel className={cn('py-3xs', className)} ref={ref} {...props}>\n {children}\n </CollapsiblePanel>\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport { CollapsibleTrigger } from '../collapsible'\nimport { Icon } from '../icon'\nimport { PopoverTrigger } from '../popover'\nimport { useSidebar } from './sidebar-provider'\nimport type { SidebarMenuCollapsibleTriggerProps } from './sidebar.types'\n\nexport function SidebarMenuCollapsibleTrigger({\n className,\n children,\n ref,\n style: _style,\n ...props\n}: SidebarMenuCollapsibleTriggerProps) {\n const { open, collapsible } = useSidebar(),\n showText = collapsible === 'none' || open\n\n if (!open) {\n return (\n <PopoverTrigger>\n <button\n type=\"button\"\n className={cn(\n 'flex size-xl items-center justify-center rounded-full shadow-none! transition-colors *:hidden hover:cursor-pointer hover:bg-neutral-container hover:text-neutral-on-container data-popup-open:bg-neutral-container [&>svg]:block',\n )}\n >\n {children}\n <Icon\n name=\"chevronRight\"\n className=\"absolute right-2xs size-xs text-on-surface-variant\"\n />\n </button>\n </PopoverTrigger>\n )\n }\n\n return (\n <CollapsibleTrigger\n variant=\"ghost\"\n className={cn(\n 'inline-flex! w-full! animate-in! justify-start! overflow-hidden! text-left! whitespace-nowrap! slide-in-from-left-2! [&>svg]:size-sm! [&>svg]:flex-none [&>svg]:shrink-0',\n !showText && 'mx-auto',\n !open && 'size-xl *:hidden [&>svg]:block',\n open && 'h-xl pl-sm',\n collapsible !== 'none' && open && 'animate-in slide-in-from-left-2',\n className,\n )}\n ref={ref}\n style={{ justifyContent: 'flex-start' }}\n {...props}\n >\n <span className=\"flex shrink-0 items-center gap-2xs [&>svg]:size-sm\">{children}</span>\n </CollapsibleTrigger>\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport type { SidebarMenuItemProps } from './sidebar.types'\n\nexport function SidebarMenuItem({ className, ref, ...props }: SidebarMenuItemProps) {\n return (\n <div\n className={cn('flex h-xl w-full items-center justify-between gap-2xs', className)}\n ref={ref}\n {...props}\n />\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport { Button } from '../button'\nimport { useSidebar } from './sidebar-provider'\nimport type { SidebarToggleProps } from './sidebar.types'\n\nfunction renderToggleChildren(children: SidebarToggleProps['children'], open?: boolean) {\n if (typeof children === 'function') {\n return children(open)\n }\n return children\n}\n\nexport function SidebarToggle({ className, children, ref, ...props }: SidebarToggleProps) {\n const { trigger, open, collapsible } = useSidebar(),\n handleClick = (event: React.MouseEvent) => {\n event.stopPropagation()\n if (trigger) {\n trigger()\n }\n }\n\n if (!trigger || collapsible === 'none') {\n return undefined\n }\n\n return (\n <Button\n aria-label=\"Toggle sidebar\"\n className={cn('shrink-0 border-none', className)}\n ref={ref}\n size=\"medium\"\n variant=\"ghost\"\n onClick={handleClick}\n {...props}\n >\n {renderToggleChildren(children, open)}\n </Button>\n )\n}\n","export const getStoredSidebarOpen = (id: string, fallback: boolean) => {\n if (typeof document === 'undefined') {\n return fallback\n }\n const match = new RegExp(`(?:^|; )sidebar-state-${id}=(?<value>[^;]*)`).exec(document.cookie)\n if (!match) {\n return fallback\n }\n return decodeURIComponent(match.groups?.value ?? '') === 'true'\n}\n","import { Sidebar as SidebarRoot } from './sidebar'\nimport { SidebarContent } from './sidebar-content'\nimport { SidebarFooter } from './sidebar-footer'\nimport { SidebarGroup } from './sidebar-group'\nimport { SidebarGroupContent } from './sidebar-group-content'\nimport { SidebarGroupLabel } from './sidebar-group-label'\nimport { SidebarHeader } from './sidebar-header'\nimport { SidebarInset } from './sidebar-inset'\nimport { SidebarMenu } from './sidebar-menu'\nimport { SidebarMenuBadge } from './sidebar-menu-badge'\nimport { SidebarMenuButton } from './sidebar-menu-button'\nimport { SidebarMenuCollapsible } from './sidebar-menu-collapsible'\nimport { SidebarMenuCollapsiblePanel } from './sidebar-menu-collapsible-panel'\nimport { SidebarMenuCollapsibleTrigger } from './sidebar-menu-collapsible-trigger'\nimport { SidebarMenuItem } from './sidebar-menu-item'\nimport { SidebarProvider } from './sidebar-provider'\nimport { SidebarToggle } from './sidebar-toggle'\n\nconst Sidebar = Object.assign(SidebarRoot, {\n Content: SidebarContent,\n Footer: SidebarFooter,\n Group: SidebarGroup,\n GroupContent: SidebarGroupContent,\n GroupLabel: SidebarGroupLabel,\n Header: SidebarHeader,\n Inset: SidebarInset,\n Menu: SidebarMenu,\n MenuBadge: SidebarMenuBadge,\n MenuButton: SidebarMenuButton,\n MenuCollapsible: SidebarMenuCollapsible,\n MenuCollapsiblePanel: SidebarMenuCollapsiblePanel,\n MenuCollapsibleTrigger: SidebarMenuCollapsibleTrigger,\n MenuItem: SidebarMenuItem,\n Provider: SidebarProvider,\n Toggle: SidebarToggle,\n})\n\nexport type {\n SidebarContentProps,\n SidebarFooterProps,\n SidebarGroupContentProps,\n SidebarGroupLabelProps,\n SidebarGroupProps,\n SidebarHeaderProps,\n SidebarInsetProps,\n SidebarMenuButtonProps,\n SidebarMenuProps,\n SidebarProps,\n SidebarToggleProps,\n SidebarMenuBadgeProps,\n SidebarMenuCollapsiblePanelProps,\n SidebarMenuCollapsibleProps,\n SidebarMenuCollapsibleTriggerProps,\n SidebarMenuItemProps,\n} from './sidebar.types'\nexport { SidebarContent } from './sidebar-content'\nexport { SidebarFooter } from './sidebar-footer'\nexport { SidebarGroup } from './sidebar-group'\nexport { SidebarGroupContent } from './sidebar-group-content'\nexport { SidebarGroupLabel } from './sidebar-group-label'\nexport { SidebarHeader } from './sidebar-header'\nexport { SidebarInset } from './sidebar-inset'\nexport { SidebarMenu } from './sidebar-menu'\nexport { SidebarProvider, useSidebar } from './sidebar-provider'\nexport { SidebarToggle } from './sidebar-toggle'\nexport { SidebarMenuBadge } from './sidebar-menu-badge'\nexport { SidebarMenuButton } from './sidebar-menu-button'\nexport { SidebarMenuCollapsible } from './sidebar-menu-collapsible'\nexport { SidebarMenuCollapsiblePanel } from './sidebar-menu-collapsible-panel'\nexport { SidebarMenuCollapsibleTrigger } from './sidebar-menu-collapsible-trigger'\nexport { SidebarMenuItem } from './sidebar-menu-item'\nexport { getStoredSidebarOpen } from './sidebar.utils'\n\nexport { Sidebar }\n"],"mappings":";;;;;;;;;;;AAiBA,MAAM,iCAAiC;AAErC,MAAA,iBAAiB,MAAM,cAA0C,IAAI;AACrE,MAAA,mBAAmB;CACjB,MAAM,UAAU,MAAM,WAAW,cAAc;CAC/C,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,kDAAkD;CAEpE,OAAO;AACT;AAEF,SAAS,iBACP,OACA,UACS;CACT,IAAI,OAAO,UAAU,YACnB,OAAO,MAAM,QAAQ;CAEvB,OAAO;AACT;AAEA,SAAS,gBAAgB,EACvB,IACA,cAAc,MACd,OAAO,QACP,cAAc,QACd,WACA,KACA,GAAG,SACmB;CACtB,MAAM,aAAa,iBAAiB,MAClC,CAAC,WAAW,gBAAgB,MAAM,SAAkB,WAAW,GAC/D,CAAC,YAAY,iBAAiB,MAAM,SAAS,KAAK,GAClD,WAAW,cAAc,QAAQ,GACjC,WAAW,UAAkD;EAC3D,IAAI,UAAU;GACZ,eAAe,SAAS,iBAAiB,OAAO,IAAI,CAAC;GACrD;EACF;EACA,cAAc,SAAS;GACrB,MAAM,WAAW,iBAAiB,OAAO,IAAI;GAE7C,SAAS,SAAS;IAChB,GAAG,WAAW,GAAG,mBAAmB,OAAO,QAAQ,CAAC;IACpD;IACA,WAAW;IACX;GACF,CAAC,CAAC,KAAK,IAAI;GAEX,OAAO;EACT,CAAC;CACH,GACA,gBAAgB,SAAS,SAAS,CAAC,IAAI;CAEzC,MAAM,gBAAgB;EACpB,IAAI,CAAC,UACH,cAAc,KAAK;CAEvB,GAAG,CAAC,QAAQ,CAAC;CAEb,IAAI,uBAAuB,aACzB,OAAO;CACT,IAAI,UAAU;EACZ,uBAAuB;EACvB,OAAO;CACT;CAEA,OACE,oBAAC,eAAe,UAAhB;EACE,OAAO;GACL,aAAa;GACb;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,UAAA,oBAAC,OAAD;GACE,WAAW,GACT,+CACA,SAAS,UAAU,iBACnB,SAAS,WAAW,yBACpB,SACF;GACK;GACL,GAAI;EACL,CAAA;CACsB,CAAA;AAE7B;;ACtGA,MAAM,wBAAwB;AAS9B,SAAS,kBACP,MACA,UACA,WACqB;CACrB,IAAI,CAAC,MACH,OAAO,EAAE,OAAO,MAAM;CAExB,IAAI,UACF,OAAO,EAAE,OAAO,aAAa;CAE/B,OAAO;AACT;AAEA,SAAS,aACP,MACA,UACA,WACqB;CACrB,IAAI,MACF,OAAO;CAET,IAAI,UACF,OAAO,EAAE,OAAO,MAAM;CAExB,OAAO,EAAE,OAAO,OAAO;AACzB;AAEA,SAAS,cAAc,EACrB,aACA,MACA,UACA,SAC0C;CAC1C,MAAM,YAAiC,EAAE,OAAO,GAAG,MAAM,IAAI;CAC7D,IAAI,gBAAgB,aAClB,OAAO,kBAAkB,MAAM,UAAU,SAAS;CAEpD,IAAI,gBAAgB,QAClB,OAAO,aAAa,MAAM,UAAU,SAAS;CAE/C,OAAO;AACT;AAEA,SAAS,cAAc,EAAE,aAAa,QAA4B;CAChE,IAAI,gBAAgB,QAClB,OAAO;CAET,IAAI,MACF,OAAO;CAET,OAAO;AACT;AAEA,SAAS,mBAAmB,EAAE,aAAa,MAAM,YAAgC;CAC/E,KAAK,gBAAgB,eAAe,gBAAgB,WAAW,CAAC,QAAQ,UACtE,OAAO;CAGT,KAAK,gBAAgB,eAAe,gBAAgB,WAAW,QAAQ,UACrE,OAAO;CAGT,OAAO;AACT;AAEA,SAAgBA,UAAQ,EACtB,OAAO,WACP,QAAQ,uBACR,WACA,GAAG,SACY;CACf,MAAM,EAAE,MAAM,SAAS,UAAU,aAAa,SAAS,WAAW,GAChE,aAAa,MAAM,OAAuB,IAAI,GAC9C,WAAW,gBAAgB,eAAe,CAAC,MAC3C,SAA6B;EAAE;EAAa;EAAU;EAAM;CAAM;CAEpE,MAAM,gBAAgB;EACpB,MAAM,sBAAsB,UAAsB;GAChD,IACE,WAAW,WACX,MAAM,kBAAkB,QACxB,CAAC,WAAW,QAAQ,SAAS,MAAM,MAAM,KACzC,YACA,QACA,SAEA,QAAQ,KAAK;EAEjB;EAEA,SAAS,iBAAiB,SAAS,kBAAkB;EAErD,aAAa;GACX,SAAS,oBAAoB,SAAS,kBAAkB;EAC1D;CACF,GAAG;EAAC;EAAM;EAAS;CAAQ,CAAC;CAE5B,OACE,oBAAC,OAAD;EACE,WAAW,GACT,oKACA,WACA,SAAS,aAAa,yBACtB,SAAS,eAAe,cACxB,SAAS,WAAW,kBACpB,cAAc,MAAM,GACpB,mBAAmB,MAAM,GACzB,YAAY,aACZ,gBAAgB,eAAe,CAAC,QAAQ,eACxC,QAAQ,QACR,gBAAgB,UAAU,CAAC,QAAQ,SACnC,YAAY,eACZ,SAAS,UAAU,YACnB,SAAS,WAAW,UACtB;EACA,KAAK;EACL,OAAO,cAAc,MAAM;EAC3B,GAAI;EACJ,eAAa,YAAY,KAAA;EACzB,OAAO;CACR,CAAA;AAEL;;ACpIA,SAAgB,eAAe,EAAE,WAAW,UAAU,KAAK,GAAG,SAA8B;CAC1F,MAAM,EAAE,SAAS,WAAW;CAE5B,OACE,oBAACC,WAAe,MAAhB;EACE,WAAW,GACT,qFACA,CAAC,QAAQ,qBACT,SACF;EACK;EACL,GAAI;EAEJ,UAAA,oBAACA,WAAe,UAAhB;GACE,WAAW,GACT,qHACA,oWACA,yVACA,QAAQ,UACR,CAAC,QAAQ,sBACX;GAEC;EACsB,CAAA;CACN,CAAA;AAEzB;;AC5BA,SAAgB,cAAc,EAAE,WAAW,UAAU,KAAK,GAAG,SAA6B;CACxF,MAAM,EAAE,MAAM,gBAAgB,WAAW,GACvC,aAAa,gBAAgB,UAAU;CACzC,OACE,oBAAC,OAAD;EACE,WAAW,GACT,gGACA,QAAQ,2BACR,CAAC,QAAQ,yCACT,SACF;EACK;EACL,GAAI;EAEH,UAAA,SAAS,UAAU;CACjB,CAAA;AAET;;AClBA,SAAgB,aAAa,EAAE,WAAW,KAAK,GAAG,SAA4B;CAC5E,OACE,oBAAC,OAAD;EACE,WAAW,GAAG,mEAAmE,SAAS;EACrF;EACL,GAAI;CACL,CAAA;AAEL;;ACRA,SAAgB,oBAAoB,EAAE,WAAW,KAAK,GAAG,SAAmC;CAC1F,OAAO,oBAAC,OAAD;EAAK,WAAW,GAAG,gCAAgC,SAAS;EAAQ;EAAK,GAAI;CAAQ,CAAA;AAC9F;;ACDA,SAAgB,kBAAkB,EAAE,WAAW,KAAK,GAAG,SAAiC;CACtF,MAAM,EAAE,MAAM,gBAAgB,WAAW;CAGzC,IAAI,EAFU,gBAAgB,UAAU,OAGtC;CAGF,OACE,oBAAC,QAAD;EACE,WAAW,GACT,iKACA,gBAAgB,UAAU,QAAQ,6CAClC,SACF;EACK;EACL,GAAI;CACL,CAAA;AAEL;;ACnBA,SAAgB,cAAc,EAAE,WAAW,UAAU,KAAK,GAAG,SAA6B;CACxF,MAAM,EAAE,MAAM,gBAAgB,WAAW,GACvC,aAAa,gBAAgB,UAAU;CAEzC,OACE,oBAAC,OAAD;EACE,WAAW,GACT,qHACA,CAAC,QAAQ,eACT,QAAQ,sBACR,QAAQ,mBACR,gBAAgB,UAAU,cAC1B,cAAc,aACd,CAAC,cAAc,cACf,SACF;EACK;EACL,GAAI;EAEH,UAAA,SAAS,UAAU;CACjB,CAAA;AAET;;ACvBA,SAAgB,aAAa,EAAE,WAAW,UAAU,KAAK,GAAG,SAA4B;CACtF,OACE,oBAAC,OAAD;EAAK,WAAW,GAAG,wCAAwC,SAAS;EAAQ;EAAK,GAAI;EAClF;CACE,CAAA;AAET;;ACNA,SAAgB,YAAY,EAAE,WAAW,KAAK,GAAG,SAA2B;CAC1E,OACE,oBAAC,OAAD;EACE,WAAW,GAAG,kDAAkD,SAAS;EACpE;EACL,GAAI;CACL,CAAA;AAEL;;ACNA,SAAgB,iBAAiB,EAAE,WAAW,KAAK,GAAG,SAAgC;CACpF,MAAM,EAAE,SAAS,WAAW;CAE5B,OAAO,oBAAC,OAAD;EAAO,WAAW,GAAG,CAAC,QAAQ,UAAU,SAAS;EAAQ;EAAK,GAAI;CAAQ,CAAA;AACnF;;ACLA,SAAgB,kBAAkB,EAAE,UAAU,WAAW,KAAK,GAAG,SAAiC;CAChG,MAAM,EAAE,MAAM,gBAAgB,WAAW;CAGzC,OACE,oBAAC,UAAD;EACE,MAAK;EACL,eAAa,OAAO,QAAQ,QAAQ,CAAC;EACrC,WAAW,GACT,oQACA,YAAY,6DACZ,CAAC,YACC,mFACF,YAAY,CAAC,QAAQ,wBACrB,EAZO,gBAAgB,UAAU,SAYpB,WACb,CAAC,QAAQ,iDACT,QAAQ,qBACR,gBAAgB,UAAU,QAAQ,6CAClC,SACF;EACK;EACL,GAAI;CACL,CAAA;AAEL;;ACnBA,MAAM,uBAAuB,aAC3B,SAAS,QAAQ,QAAQ,CAAC,CAAC,MAAM,UAAU;CACzC,IAAI,CAAC,eAA6D,KAAK,GACrE,OAAO;CAGT,OAAO,MAAM,MAAM,aAAa,QAAQ,oBAAoB,MAAM,MAAM,QAAQ;AAClF,CAAC;AAEH,SAAgB,uBAAuB,EACrC,WACA,UACA,KACA,GAAG,SAC2B;CAC9B,MAAM,EAAE,SAAS,WAAW;CAE5B,IAAI,CAAC,MACH,OAAO,oBAAC,SAAD,EAAU,SAAkB,CAAA;CAGrC,OACE,oBAAC,aAAD;EACE,aAAa,oBAAoB,QAAQ;EACzC,WAAW,GAAG,IAAI,SAAS;EACtB;EACL,GAAI;EAEH;CACU,CAAA;AAEjB;;AClCA,SAAgB,4BAA4B,EAC1C,WACA,UACA,KACA,GAAG,SACgC;CACnC,MAAM,EAAE,SAAS,WAAW;CAE5B,IAAI,CAAC,MACH,OACE,oBAAC,cAAD;EAAc,MAAK;EAAQ,WAAU;EACnC,UAAA,oBAAC,gBAAD;GAAgB,WAAU;GAAgB;EAAyB,CAAA;CACvD,CAAA;CAIlB,OACE,oBAAC,kBAAD;EAAkB,WAAW,GAAG,UAAU,SAAS;EAAQ;EAAK,GAAI;EACjE;CACe,CAAA;AAEtB;;ACpBA,SAAgB,8BAA8B,EAC5C,WACA,UACA,KACA,OAAO,QACP,GAAG,SACkC;CACrC,MAAM,EAAE,MAAM,gBAAgB,WAAW,GACvC,WAAW,gBAAgB,UAAU;CAEvC,IAAI,CAAC,MACH,OACE,oBAAC,gBAAD,EAAA,UACE,qBAAC,UAAD;EACE,MAAK;EACL,WAAW,GACT,kOACF;EAJF,UAAA,CAMG,UACD,oBAAC,MAAD;GACE,MAAK;GACL,WAAU;EACX,CAAA,CACK;CACM,CAAA,EAAA,CAAA;CAIpB,OACE,oBAAC,oBAAD;EACE,SAAQ;EACR,WAAW,GACT,4KACA,CAAC,YAAY,WACb,CAAC,QAAQ,kCACT,QAAQ,cACR,gBAAgB,UAAU,QAAQ,mCAClC,SACF;EACK;EACL,OAAO,EAAE,gBAAgB,aAAa;EACtC,GAAI;EAEJ,UAAA,oBAAC,QAAD;GAAM,WAAU;GAAsD;EAAe,CAAA;CACnE,CAAA;AAExB;;ACnDA,SAAgB,gBAAgB,EAAE,WAAW,KAAK,GAAG,SAA+B;CAClF,OACE,oBAAC,OAAD;EACE,WAAW,GAAG,yDAAyD,SAAS;EAC3E;EACL,GAAI;CACL,CAAA;AAEL;;ACNA,SAAS,qBAAqB,UAA0C,MAAgB;CACtF,IAAI,OAAO,aAAa,YACtB,OAAO,SAAS,IAAI;CAEtB,OAAO;AACT;AAEA,SAAgB,cAAc,EAAE,WAAW,UAAU,KAAK,GAAG,SAA6B;CACxF,MAAM,EAAE,SAAS,MAAM,gBAAgB,WAAW,GAChD,eAAe,UAA4B;EACzC,MAAM,gBAAgB;EACtB,IAAI,SACF,QAAQ;CAEZ;CAEF,IAAI,CAAC,WAAW,gBAAgB,QAC9B;CAGF,OACE,oBAAC,QAAD;EACE,cAAW;EACX,WAAW,GAAG,wBAAwB,SAAS;EAC1C;EACL,MAAK;EACL,SAAQ;EACR,SAAS;EACT,GAAI;EAEH,UAAA,qBAAqB,UAAU,IAAI;CAC9B,CAAA;AAEZ;;ACvCA,MAAa,wBAAwB,IAAY,aAAsB;CACrE,IAAI,OAAO,aAAa,aACtB,OAAO;CAET,MAAM,QAAQ,IAAI,OAAO,yBAAyB,GAAG,iBAAiB,CAAC,CAAC,KAAK,SAAS,MAAM;CAC5F,IAAI,CAAC,OACH,OAAO;CAET,OAAO,mBAAmB,MAAM,QAAQ,SAAS,EAAE,MAAM;AAC3D;;ACSA,MAAM,UAAU,OAAO,OAAOC,WAAa;CACzC,SAAS;CACT,QAAQ;CACR,OAAO;CACP,cAAc;CACd,YAAY;CACZ,QAAQ;CACR,OAAO;CACP,MAAM;CACN,WAAW;CACX,YAAY;CACZ,iBAAiB;CACjB,sBAAsB;CACtB,wBAAwB;CACxB,UAAU;CACV,UAAU;CACV,QAAQ;AACV,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { t as Separator } from "../index-D1kkOg9k.js";
|
|
2
|
+
import { VariantProps } from "class-variance-authority";
|
|
3
|
+
declare const siteHeaderGroupVariants: (props?: ({
|
|
4
|
+
position?: "center" | "end" | "start" | null | undefined;
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
|
+
type SiteHeaderProps = React.ComponentProps<'div'> & {
|
|
7
|
+
sticky?: boolean;
|
|
8
|
+
};
|
|
9
|
+
type SiteHeaderGroupProps = React.ComponentProps<'div'> & VariantProps<typeof siteHeaderGroupVariants>;
|
|
10
|
+
type SiteHeaderTitleProps = React.ComponentProps<'span'>;
|
|
11
|
+
type SiteHeaderSeparatorProps = React.ComponentProps<typeof Separator>;
|
|
12
|
+
declare function SiteHeader$1({ sticky, className, ref, ...props }: SiteHeaderProps): import("react").JSX.Element;
|
|
13
|
+
export declare function SiteHeaderGroup({ position, className, ref, ...props }: SiteHeaderGroupProps): import("react").JSX.Element;
|
|
14
|
+
export declare function SiteHeaderSeparator({ className, ref, ...props }: SiteHeaderSeparatorProps): import("react").JSX.Element;
|
|
15
|
+
export declare function SiteHeaderTitle({ className, ref, ...props }: SiteHeaderTitleProps): import("react").JSX.Element;
|
|
16
|
+
declare const SiteHeader: typeof SiteHeader$1 & {
|
|
17
|
+
Group: typeof SiteHeaderGroup;
|
|
18
|
+
Separator: typeof SiteHeaderSeparator;
|
|
19
|
+
Title: typeof SiteHeaderTitle;
|
|
20
|
+
};
|
|
21
|
+
export { SiteHeader, type SiteHeaderGroupProps, type SiteHeaderProps, type SiteHeaderSeparatorProps, type SiteHeaderTitleProps };
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { t as cn } from "../cn-BDi0DfT5.js";
|
|
2
|
+
import { t as Separator } from "../separator-DgIQp1cB.js";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
// src/components/site-header/site-header.tsx
|
|
6
|
+
function SiteHeader$1({ sticky = false, className, ref, ...props }) {
|
|
7
|
+
return /* @__PURE__ */ jsx("div", {
|
|
8
|
+
className: cn("z-50 grid auto-cols-fr grid-flow-col items-center gap-xs border-b border-border bg-surface-background px-lg py-xs", sticky && "sticky top-0", className),
|
|
9
|
+
ref,
|
|
10
|
+
...props
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
// src/components/site-header/site-header.types.ts
|
|
14
|
+
const siteHeaderGroupVariants = cva("flex items-center gap-3xs", {
|
|
15
|
+
defaultVariants: { position: "start" },
|
|
16
|
+
variants: { position: {
|
|
17
|
+
center: "justify-center",
|
|
18
|
+
end: "justify-end",
|
|
19
|
+
start: "justify-start"
|
|
20
|
+
} }
|
|
21
|
+
});
|
|
22
|
+
// src/components/site-header/site-header-group.tsx
|
|
23
|
+
function SiteHeaderGroup({ position, className, ref, ...props }) {
|
|
24
|
+
return /* @__PURE__ */ jsx("div", {
|
|
25
|
+
className: cn(siteHeaderGroupVariants({ position }), className),
|
|
26
|
+
ref,
|
|
27
|
+
...props
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
// src/components/site-header/site-header-separator.tsx
|
|
31
|
+
function SiteHeaderSeparator({ className, ref, ...props }) {
|
|
32
|
+
return /* @__PURE__ */ jsx(Separator, {
|
|
33
|
+
orientation: "vertical",
|
|
34
|
+
className: cn("h-md", className),
|
|
35
|
+
ref,
|
|
36
|
+
...props
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// src/components/site-header/site-header-title.tsx
|
|
40
|
+
function SiteHeaderTitle({ className, ref, ...props }) {
|
|
41
|
+
return /* @__PURE__ */ jsx("span", {
|
|
42
|
+
className: cn("style-text-strong-2", className),
|
|
43
|
+
ref,
|
|
44
|
+
...props
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// src/components/site-header/index.ts
|
|
48
|
+
const SiteHeader = Object.assign(SiteHeader$1, {
|
|
49
|
+
Group: SiteHeaderGroup,
|
|
50
|
+
Separator: SiteHeaderSeparator,
|
|
51
|
+
Title: SiteHeaderTitle
|
|
52
|
+
});
|
|
53
|
+
export { SiteHeader, SiteHeaderGroup, SiteHeaderSeparator, SiteHeaderTitle };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["SiteHeader","SiteHeaderRoot"],"sources":["../../src/components/site-header/site-header.tsx","../../src/components/site-header/site-header.types.ts","../../src/components/site-header/site-header-group.tsx","../../src/components/site-header/site-header-separator.tsx","../../src/components/site-header/site-header-title.tsx","../../src/components/site-header/index.ts"],"sourcesContent":["import { cn } from '@/utils/cn'\n\nimport type { SiteHeaderProps } from './site-header.types'\n\nexport function SiteHeader({ sticky = false, className, ref, ...props }: SiteHeaderProps) {\n return (\n <div\n className={cn(\n 'z-50 grid auto-cols-fr grid-flow-col items-center gap-xs border-b border-border bg-surface-background px-lg py-xs',\n sticky && 'sticky top-0',\n className,\n )}\n ref={ref}\n {...props}\n />\n )\n}\n","import { cva } from 'class-variance-authority'\nimport type { VariantProps } from 'class-variance-authority'\n\nimport type { Separator } from '../separator'\n\nconst siteHeaderGroupVariants = cva('flex items-center gap-3xs', {\n defaultVariants: {\n position: 'start',\n },\n variants: {\n position: {\n center: 'justify-center',\n end: 'justify-end',\n start: 'justify-start',\n },\n },\n})\n\ntype SiteHeaderProps = React.ComponentProps<'div'> & {\n sticky?: boolean\n}\ntype SiteHeaderGroupProps = React.ComponentProps<'div'> &\n VariantProps<typeof siteHeaderGroupVariants>\ntype SiteHeaderTitleProps = React.ComponentProps<'span'>\ntype SiteHeaderSeparatorProps = React.ComponentProps<typeof Separator>\n\nexport type {\n SiteHeaderProps,\n SiteHeaderGroupProps,\n SiteHeaderTitleProps,\n SiteHeaderSeparatorProps,\n}\nexport { siteHeaderGroupVariants }\n","import { cn } from '@/utils'\n\nimport { siteHeaderGroupVariants } from './site-header.types'\nimport type { SiteHeaderGroupProps } from './site-header.types'\n\nexport function SiteHeaderGroup({ position, className, ref, ...props }: SiteHeaderGroupProps) {\n return (\n <div className={cn(siteHeaderGroupVariants({ position }), className)} ref={ref} {...props} />\n )\n}\n","import { cn } from '@/utils'\n\nimport { Separator } from '../separator'\nimport type { SiteHeaderSeparatorProps } from './site-header.types'\n\nexport function SiteHeaderSeparator({ className, ref, ...props }: SiteHeaderSeparatorProps) {\n return <Separator orientation=\"vertical\" className={cn('h-md', className)} ref={ref} {...props} />\n}\n","import { cn } from '@/utils'\n\nimport type { SiteHeaderTitleProps } from './site-header.types'\n\nexport function SiteHeaderTitle({ className, ref, ...props }: SiteHeaderTitleProps) {\n return <span className={cn('style-text-strong-2', className)} ref={ref} {...props} />\n}\n","import { SiteHeader as SiteHeaderRoot } from './site-header'\nimport { SiteHeaderGroup } from './site-header-group'\nimport { SiteHeaderSeparator } from './site-header-separator'\nimport { SiteHeaderTitle } from './site-header-title'\n\nconst SiteHeader = Object.assign(SiteHeaderRoot, {\n Group: SiteHeaderGroup,\n Separator: SiteHeaderSeparator,\n Title: SiteHeaderTitle,\n})\n\nexport type {\n SiteHeaderProps,\n SiteHeaderGroupProps,\n SiteHeaderTitleProps,\n SiteHeaderSeparatorProps,\n} from './site-header.types'\n\nexport { SiteHeaderGroup } from './site-header-group'\nexport { SiteHeaderTitle } from './site-header-title'\nexport { SiteHeaderSeparator } from './site-header-separator'\n\nexport { SiteHeader }\n"],"mappings":";;;;;AAIA,SAAgBA,aAAW,EAAE,SAAS,OAAO,WAAW,KAAK,GAAG,SAA0B;CACxF,OACE,oBAAC,OAAD;EACE,WAAW,GACT,qHACA,UAAU,gBACV,SACF;EACK;EACL,GAAI;CACL,CAAA;AAEL;;ACXA,MAAM,0BAA0B,IAAI,6BAA6B;CAC/D,iBAAiB,EACf,UAAU,QACZ;CACA,UAAU,EACR,UAAU;EACR,QAAQ;EACR,KAAK;EACL,OAAO;CACT,EACF;AACF,CAAC;;ACXD,SAAgB,gBAAgB,EAAE,UAAU,WAAW,KAAK,GAAG,SAA+B;CAC5F,OACE,oBAAC,OAAD;EAAK,WAAW,GAAG,wBAAwB,EAAE,SAAS,CAAC,GAAG,SAAS;EAAQ;EAAK,GAAI;CAAQ,CAAA;AAEhG;;ACJA,SAAgB,oBAAoB,EAAE,WAAW,KAAK,GAAG,SAAmC;CAC1F,OAAO,oBAAC,WAAD;EAAW,aAAY;EAAW,WAAW,GAAG,QAAQ,SAAS;EAAQ;EAAK,GAAI;CAAQ,CAAA;AACnG;;ACHA,SAAgB,gBAAgB,EAAE,WAAW,KAAK,GAAG,SAA+B;CAClF,OAAO,oBAAC,QAAD;EAAM,WAAW,GAAG,uBAAuB,SAAS;EAAQ;EAAK,GAAI;CAAQ,CAAA;AACtF;;ACDA,MAAM,aAAa,OAAO,OAAOC,cAAgB;CAC/C,OAAO;CACP,WAAW;CACX,OAAO;AACT,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { t as Skeleton } from "../skeleton-DSG3FWby.js";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { t as cn } from "./cn-BDi0DfT5.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
// src/components/skeleton/skeleton.tsx
|
|
4
|
+
function Skeleton({ className, ref, ...props }) {
|
|
5
|
+
return /* @__PURE__ */ jsx("div", {
|
|
6
|
+
className: cn("animate-pulse rounded-lg bg-surface-2 shadow-sm", className),
|
|
7
|
+
ref,
|
|
8
|
+
...props
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export { Skeleton as t };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=skeleton-DSG3FWby.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton-DSG3FWby.js","names":[],"sources":["../src/components/skeleton/skeleton.tsx"],"sourcesContent":["import { cn } from '@/utils/cn'\n\nimport type { SkeletonProps } from './skeleton.types'\n\nexport function Skeleton({ className, ref, ...props }: SkeletonProps) {\n return (\n <div\n className={cn('animate-pulse rounded-lg bg-surface-2 shadow-sm', className)}\n ref={ref}\n {...props}\n />\n )\n}\n"],"mappings":";;;AAIA,SAAgB,SAAS,EAAE,WAAW,KAAK,GAAG,SAAwB;CACpE,OACE,oBAAC,OAAD;EACE,WAAW,GAAG,mDAAmD,SAAS;EACrE;EACL,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { t as Slider, n as SliderThumb } from "../slider-D_XlV4OW.js";
|