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.
Files changed (270) hide show
  1. package/README.md +24 -1
  2. package/dist/accordion/index.d.ts +41 -0
  3. package/dist/accordion/index.js +142 -0
  4. package/dist/accordion/index.js.map +1 -0
  5. package/dist/alert/index.d.ts +22 -0
  6. package/dist/alert/index.js +1 -0
  7. package/dist/alert-Dcu9R8CY.js +73 -0
  8. package/dist/alert-Dcu9R8CY.js.map +1 -0
  9. package/dist/alert-dialog/index.d.ts +39 -0
  10. package/dist/alert-dialog/index.js +134 -0
  11. package/dist/alert-dialog/index.js.map +1 -0
  12. package/dist/autocomplete/index.d.ts +2 -0
  13. package/dist/autocomplete/index.js +1 -0
  14. package/dist/autocomplete-BfpWVO1l.js +169 -0
  15. package/dist/autocomplete-BfpWVO1l.js.map +1 -0
  16. package/dist/avatar/index.d.ts +2 -0
  17. package/dist/avatar/index.js +1 -0
  18. package/dist/avatar-Bp4gZh21.js +93 -0
  19. package/dist/avatar-Bp4gZh21.js.map +1 -0
  20. package/dist/badge/index.d.ts +2 -0
  21. package/dist/badge/index.js +1 -0
  22. package/dist/badge-Cl-9WTW-.js +160 -0
  23. package/dist/badge-Cl-9WTW-.js.map +1 -0
  24. package/dist/bento-box/index.d.ts +30 -0
  25. package/dist/bento-box/index.js +103 -0
  26. package/dist/bento-box/index.js.map +1 -0
  27. package/dist/breadcrumb/index.d.ts +18 -0
  28. package/dist/breadcrumb/index.js +58 -0
  29. package/dist/breadcrumb/index.js.map +1 -0
  30. package/dist/button/index.d.ts +3 -0
  31. package/dist/button/index.js +1 -0
  32. package/dist/button-BpUC-R1J.js +307 -0
  33. package/dist/button-BpUC-R1J.js.map +1 -0
  34. package/dist/button-group/index.d.ts +2 -0
  35. package/dist/button-group/index.js +1 -0
  36. package/dist/button-group-7azbqlcO.js +269 -0
  37. package/dist/button-group-7azbqlcO.js.map +1 -0
  38. package/dist/button.types-BFKrBCGd.d.ts +10 -0
  39. package/dist/calendar/index.d.ts +63 -0
  40. package/dist/calendar/index.js +292 -0
  41. package/dist/calendar/index.js.map +1 -0
  42. package/dist/chart/index.d.ts +87 -0
  43. package/dist/chart/index.js +262 -0
  44. package/dist/chart/index.js.map +1 -0
  45. package/dist/checkbox/index.d.ts +2 -0
  46. package/dist/checkbox/index.js +1 -0
  47. package/dist/checkbox-BuUZ1Lly.js +54 -0
  48. package/dist/checkbox-BuUZ1Lly.js.map +1 -0
  49. package/dist/checkbox-group/index.d.ts +6 -0
  50. package/dist/checkbox-group/index.js +17 -0
  51. package/dist/checkbox-group/index.js.map +1 -0
  52. package/dist/cn-BDi0DfT5.js +29 -0
  53. package/dist/cn-BDi0DfT5.js.map +1 -0
  54. package/dist/code-block/index.d.ts +50 -0
  55. package/dist/code-block/index.js +208 -0
  56. package/dist/code-block/index.js.map +1 -0
  57. package/dist/collapsible/index.d.ts +2 -0
  58. package/dist/collapsible/index.js +1 -0
  59. package/dist/collapsible-BVqrh0Q0.js +44 -0
  60. package/dist/collapsible-BVqrh0Q0.js.map +1 -0
  61. package/dist/color-channel-slider/index.d.ts +2 -0
  62. package/dist/color-channel-slider/index.js +1 -0
  63. package/dist/color-channel-slider-h8mUPJ35.js +70 -0
  64. package/dist/color-channel-slider-h8mUPJ35.js.map +1 -0
  65. package/dist/color-picker/index.d.ts +137 -0
  66. package/dist/color-picker/index.js +621 -0
  67. package/dist/color-picker/index.js.map +1 -0
  68. package/dist/combobox/index.d.ts +64 -0
  69. package/dist/combobox/index.js +289 -0
  70. package/dist/combobox/index.js.map +1 -0
  71. package/dist/context-menu/index.d.ts +49 -0
  72. package/dist/context-menu/index.js +166 -0
  73. package/dist/context-menu/index.js.map +1 -0
  74. package/dist/dialog/index.d.ts +36 -0
  75. package/dist/dialog/index.js +119 -0
  76. package/dist/dialog/index.js.map +1 -0
  77. package/dist/drawer/index.d.ts +31 -0
  78. package/dist/drawer/index.js +95 -0
  79. package/dist/drawer/index.js.map +1 -0
  80. package/dist/dropzone/index.d.ts +70 -0
  81. package/dist/dropzone/index.js +479 -0
  82. package/dist/dropzone/index.js.map +1 -0
  83. package/dist/field/index.d.ts +2 -0
  84. package/dist/field/index.js +1 -0
  85. package/dist/field-DTL7eA5y.js +254 -0
  86. package/dist/field-DTL7eA5y.js.map +1 -0
  87. package/dist/form/index.d.ts +220 -0
  88. package/dist/form/index.js +3 -0
  89. package/dist/form-BxMg796f.js +192 -0
  90. package/dist/form-BxMg796f.js.map +1 -0
  91. package/dist/has-single-element-child-DLGI0Dh2.js +12 -0
  92. package/dist/has-single-element-child-DLGI0Dh2.js.map +1 -0
  93. package/dist/hooks/index.d.ts +26 -0
  94. package/dist/hooks/index.js +1 -0
  95. package/dist/hooks-DUm-q_ig.js +68 -0
  96. package/dist/hooks-DUm-q_ig.js.map +1 -0
  97. package/dist/icon/index.d.ts +2 -0
  98. package/dist/icon/index.js +1 -0
  99. package/dist/icon-D3JWfCa2.js +85 -0
  100. package/dist/icon-D3JWfCa2.js.map +1 -0
  101. package/dist/icon-container/index.d.ts +10 -0
  102. package/dist/icon-container/index.js +64 -0
  103. package/dist/icon-container/index.js.map +1 -0
  104. package/dist/index-0ZQzIKoE.d.ts +11 -0
  105. package/dist/index-B3MK1QYh.d.ts +11 -0
  106. package/dist/index-BJVMIPq4.d.ts +54 -0
  107. package/dist/index-BsV-u_jc.d.ts +4 -0
  108. package/dist/index-BygR7cUT.d.ts +22 -0
  109. package/dist/index-BzTOLSgZ.d.ts +9 -0
  110. package/dist/index-C15xiG9O.d.ts +14 -0
  111. package/dist/index-C2zco6-C.d.ts +15 -0
  112. package/dist/index-CIDOd4Z8.d.ts +56 -0
  113. package/dist/index-CQti9gFb.d.ts +49 -0
  114. package/dist/index-CiE-Rqit.d.ts +70 -0
  115. package/dist/index-D1kkOg9k.d.ts +14 -0
  116. package/dist/index-DLfdAked.d.ts +34 -0
  117. package/dist/index-DMaW_XF1.d.ts +24 -0
  118. package/dist/index-Db_QGr6S.d.ts +5 -0
  119. package/dist/index-DdFxZ3Xr.d.ts +22 -0
  120. package/dist/index-DfNHJF0t.d.ts +33 -0
  121. package/dist/index-DyQYoAUf.d.ts +29 -0
  122. package/dist/index-N2CBSUDu.d.ts +14 -0
  123. package/dist/index-PuhTRMce.d.ts +11 -0
  124. package/dist/index-Wb_tILYa.d.ts +24 -0
  125. package/dist/index-bVyqfhJS.d.ts +4 -0
  126. package/dist/index-x4f8gnaI.d.ts +15 -0
  127. package/dist/input/index.d.ts +3 -0
  128. package/dist/input/index.js +1 -0
  129. package/dist/input-Laj6dwtK.js +179 -0
  130. package/dist/input-Laj6dwtK.js.map +1 -0
  131. package/dist/input-group/index.d.ts +2 -0
  132. package/dist/input-group/index.js +1 -0
  133. package/dist/input-group-CgdazGrY.js +111 -0
  134. package/dist/input-group-CgdazGrY.js.map +1 -0
  135. package/dist/input-otp/index.d.ts +13 -0
  136. package/dist/input-otp/index.js +44 -0
  137. package/dist/input-otp/index.js.map +1 -0
  138. package/dist/input.types-816rEVWU.d.ts +20 -0
  139. package/dist/input.types-D0gyoaQv.js +48 -0
  140. package/dist/input.types-D0gyoaQv.js.map +1 -0
  141. package/dist/kbd/index.d.ts +9 -0
  142. package/dist/kbd/index.js +25 -0
  143. package/dist/kbd/index.js.map +1 -0
  144. package/dist/label/index.d.ts +8 -0
  145. package/dist/label/index.js +1 -0
  146. package/dist/label-BgpayDvN.js +27 -0
  147. package/dist/label-BgpayDvN.js.map +1 -0
  148. package/dist/layer-tree/index.d.ts +728 -0
  149. package/dist/layer-tree/index.js +685 -0
  150. package/dist/layer-tree/index.js.map +1 -0
  151. package/dist/map/google/index.d.ts +143 -0
  152. package/dist/map/google/index.js +445 -0
  153. package/dist/map/google/index.js.map +1 -0
  154. package/dist/map/index.d.ts +94 -0
  155. package/dist/map/index.js +208 -0
  156. package/dist/map/index.js.map +1 -0
  157. package/dist/map.context-Dw1D7E8m.js +11 -0
  158. package/dist/map.context-Dw1D7E8m.js.map +1 -0
  159. package/dist/menu/index.d.ts +2 -0
  160. package/dist/menu/index.js +1 -0
  161. package/dist/menu-sf13cnGp.js +173 -0
  162. package/dist/menu-sf13cnGp.js.map +1 -0
  163. package/dist/menu-tone-DWBEHoX2.js +22 -0
  164. package/dist/menu-tone-DWBEHoX2.js.map +1 -0
  165. package/dist/meter/index.d.ts +2 -0
  166. package/dist/meter/index.js +1 -0
  167. package/dist/meter-HD5taq57.js +116 -0
  168. package/dist/meter-HD5taq57.js.map +1 -0
  169. package/dist/nav-bar/index.d.ts +25 -0
  170. package/dist/nav-bar/index.js +133 -0
  171. package/dist/nav-bar/index.js.map +1 -0
  172. package/dist/navigation-menu/index.d.ts +43 -0
  173. package/dist/navigation-menu/index.js +176 -0
  174. package/dist/navigation-menu/index.js.map +1 -0
  175. package/dist/number-field/index.d.ts +14 -0
  176. package/dist/number-field/index.js +116 -0
  177. package/dist/number-field/index.js.map +1 -0
  178. package/dist/popover/index.d.ts +2 -0
  179. package/dist/popover/index.js +1 -0
  180. package/dist/popover-B1s4xXrX.js +114 -0
  181. package/dist/popover-B1s4xXrX.js.map +1 -0
  182. package/dist/preview-card/index.d.ts +13 -0
  183. package/dist/preview-card/index.js +35 -0
  184. package/dist/preview-card/index.js.map +1 -0
  185. package/dist/profile/index.d.ts +21 -0
  186. package/dist/profile/index.js +52 -0
  187. package/dist/profile/index.js.map +1 -0
  188. package/dist/progress/index.d.ts +23 -0
  189. package/dist/progress/index.js +97 -0
  190. package/dist/progress/index.js.map +1 -0
  191. package/dist/radar-ping/index.d.ts +11 -0
  192. package/dist/radar-ping/index.js +49 -0
  193. package/dist/radar-ping/index.js.map +1 -0
  194. package/dist/radio-group/index.d.ts +2 -0
  195. package/dist/radio-group/index.js +1 -0
  196. package/dist/radio-group-Dj43u35Z.js +47 -0
  197. package/dist/radio-group-Dj43u35Z.js.map +1 -0
  198. package/dist/resizeable/index.d.ts +11 -0
  199. package/dist/resizeable/index.js +31 -0
  200. package/dist/resizeable/index.js.map +1 -0
  201. package/dist/scroll-area/index.d.ts +11 -0
  202. package/dist/scroll-area/index.js +51 -0
  203. package/dist/scroll-area/index.js.map +1 -0
  204. package/dist/select/index.d.ts +2 -0
  205. package/dist/select/index.js +1 -0
  206. package/dist/select-DncJXYim.js +159 -0
  207. package/dist/select-DncJXYim.js.map +1 -0
  208. package/dist/separator/index.d.ts +2 -0
  209. package/dist/separator/index.js +1 -0
  210. package/dist/separator-DgIQp1cB.js +97 -0
  211. package/dist/separator-DgIQp1cB.js.map +1 -0
  212. package/dist/sidebar/index.d.ts +80 -0
  213. package/dist/sidebar/index.js +334 -0
  214. package/dist/sidebar/index.js.map +1 -0
  215. package/dist/site-header/index.d.ts +22 -0
  216. package/dist/site-header/index.js +55 -0
  217. package/dist/site-header/index.js.map +1 -0
  218. package/dist/skeleton/index.d.ts +4 -0
  219. package/dist/skeleton/index.js +1 -0
  220. package/dist/skeleton-DSG3FWby.js +13 -0
  221. package/dist/skeleton-DSG3FWby.js.map +1 -0
  222. package/dist/slider/index.d.ts +2 -0
  223. package/dist/slider/index.js +1 -0
  224. package/dist/slider-D_XlV4OW.js +114 -0
  225. package/dist/slider-D_XlV4OW.js.map +1 -0
  226. package/dist/slider-group/index.d.ts +46 -0
  227. package/dist/slider-group/index.js +198 -0
  228. package/dist/slider-group/index.js.map +1 -0
  229. package/dist/styles.css +4 -1
  230. package/dist/switch/index.d.ts +2 -0
  231. package/dist/switch/index.js +1 -0
  232. package/dist/switch-DXHixGHe.js +23 -0
  233. package/dist/switch-DXHixGHe.js.map +1 -0
  234. package/dist/table/index.d.ts +920 -0
  235. package/dist/table/index.js +1544 -0
  236. package/dist/table/index.js.map +1 -0
  237. package/dist/tabs/index.d.ts +2 -0
  238. package/dist/tabs/index.js +1 -0
  239. package/dist/tabs-DTC7coap.js +270 -0
  240. package/dist/tabs-DTC7coap.js.map +1 -0
  241. package/dist/text-area/index.d.ts +2 -0
  242. package/dist/text-area/index.js +1 -0
  243. package/dist/text-area-H6HjKnv_.js +50 -0
  244. package/dist/text-area-H6HjKnv_.js.map +1 -0
  245. package/dist/toast/index.d.ts +65 -0
  246. package/dist/toast/index.js +216 -0
  247. package/dist/toast/index.js.map +1 -0
  248. package/dist/toggle/index.d.ts +2 -0
  249. package/dist/toggle/index.js +1 -0
  250. package/dist/toggle-ZT9thVmz.js +73 -0
  251. package/dist/toggle-ZT9thVmz.js.map +1 -0
  252. package/dist/toggle-group/index.d.ts +10 -0
  253. package/dist/toggle-group/index.js +63 -0
  254. package/dist/toggle-group/index.js.map +1 -0
  255. package/dist/toggle-group-context-CBNZEf1I.js +6 -0
  256. package/dist/toggle-group-context-CBNZEf1I.js.map +1 -0
  257. package/dist/tooltip/index.d.ts +18 -0
  258. package/dist/tooltip/index.js +1 -0
  259. package/dist/tooltip-B6z3tDbW.js +41 -0
  260. package/dist/tooltip-B6z3tDbW.js.map +1 -0
  261. package/dist/trim-text-children-CQRFg2fL.js +33 -0
  262. package/dist/trim-text-children-CQRFg2fL.js.map +1 -0
  263. package/dist/utils/index.d.ts +4 -0
  264. package/dist/utils/index.js +3 -0
  265. package/dist/utils-BI2x7nW5.js +5 -0
  266. package/dist/utils-BI2x7nW5.js.map +1 -0
  267. package/package.json +100 -31
  268. package/dist/index.d.ts +0 -8000
  269. package/dist/index.js +0 -17274
  270. 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":"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"}
@@ -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,4 @@
1
+ type SkeletonProps = React.ComponentProps<'div'>;
2
+ export declare function Skeleton({ className, ref, ...props }: SkeletonProps): import("react").JSX.Element;
3
+ export type { SkeletonProps };
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ import { i as SliderThumbProps, n as SliderThumb, r as SliderProps, t as Slider } from "../index-BygR7cUT.js";
2
+ export { Slider, type SliderProps, SliderThumb, type SliderThumbProps };
@@ -0,0 +1 @@
1
+ export { t as Slider, n as SliderThumb } from "../slider-D_XlV4OW.js";