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