@codefast/ui 0.3.11 → 0.3.12-canary.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 (246) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +4 -0
  3. package/dist/components/accordion.d.ts +11 -29
  4. package/dist/components/accordion.d.ts.map +1 -0
  5. package/dist/components/accordion.js +10 -37
  6. package/dist/components/alert-dialog.d.ts +25 -60
  7. package/dist/components/alert-dialog.d.ts.map +1 -0
  8. package/dist/components/alert-dialog.js +16 -69
  9. package/dist/components/alert.d.ts +16 -27
  10. package/dist/components/alert.d.ts.map +1 -0
  11. package/dist/components/alert.js +22 -30
  12. package/dist/components/aspect-ratio.d.ts +5 -8
  13. package/dist/components/aspect-ratio.d.ts.map +1 -0
  14. package/dist/components/aspect-ratio.js +5 -7
  15. package/dist/components/avatar.d.ts +7 -17
  16. package/dist/components/avatar.d.ts.map +1 -0
  17. package/dist/components/avatar.js +7 -18
  18. package/dist/components/badge.d.ts +15 -21
  19. package/dist/components/badge.d.ts.map +1 -0
  20. package/dist/components/badge.js +23 -20
  21. package/dist/components/breadcrumb.d.ts +13 -35
  22. package/dist/components/breadcrumb.d.ts.map +1 -0
  23. package/dist/components/breadcrumb.js +13 -49
  24. package/dist/components/button-group.d.ts +15 -29
  25. package/dist/components/button-group.d.ts.map +1 -0
  26. package/dist/components/button-group.js +22 -27
  27. package/dist/components/button.d.ts +26 -35
  28. package/dist/components/button.d.ts.map +1 -0
  29. package/dist/components/button.js +43 -51
  30. package/dist/components/calendar.d.ts +10 -24
  31. package/dist/components/calendar.d.ts.map +1 -0
  32. package/dist/components/calendar.js +75 -92
  33. package/dist/components/card.d.ts +11 -34
  34. package/dist/components/card.d.ts.map +1 -0
  35. package/dist/components/card.js +11 -39
  36. package/dist/components/carousel.d.ts +25 -55
  37. package/dist/components/carousel.d.ts.map +1 -0
  38. package/dist/components/carousel.js +82 -114
  39. package/dist/components/chart.d.ts +37 -72
  40. package/dist/components/chart.d.ts.map +1 -0
  41. package/dist/components/chart.js +161 -150
  42. package/dist/components/checkbox-cards.d.ts +9 -15
  43. package/dist/components/checkbox-cards.d.ts.map +1 -0
  44. package/dist/components/checkbox-cards.js +8 -22
  45. package/dist/components/checkbox-group.d.ts +9 -16
  46. package/dist/components/checkbox-group.d.ts.map +1 -0
  47. package/dist/components/checkbox-group.js +7 -19
  48. package/dist/components/checkbox.d.ts +5 -9
  49. package/dist/components/checkbox.d.ts.map +1 -0
  50. package/dist/components/checkbox.js +6 -14
  51. package/dist/components/collapsible.d.ts +7 -14
  52. package/dist/components/collapsible.d.ts.map +1 -0
  53. package/dist/components/collapsible.js +7 -15
  54. package/dist/components/command.d.ts +24 -55
  55. package/dist/components/command.d.ts.map +1 -0
  56. package/dist/components/command.js +18 -69
  57. package/dist/components/context-menu.d.ts +23 -72
  58. package/dist/components/context-menu.d.ts.map +1 -0
  59. package/dist/components/context-menu.js +21 -89
  60. package/dist/components/dialog.d.ts +23 -53
  61. package/dist/components/dialog.d.ts.map +1 -0
  62. package/dist/components/dialog.js +20 -72
  63. package/dist/components/drawer.d.ts +29 -60
  64. package/dist/components/drawer.d.ts.map +1 -0
  65. package/dist/components/drawer.js +16 -58
  66. package/dist/components/dropdown-menu.d.ts +23 -73
  67. package/dist/components/dropdown-menu.d.ts.map +1 -0
  68. package/dist/components/dropdown-menu.js +21 -96
  69. package/dist/components/empty.d.ts +16 -37
  70. package/dist/components/empty.d.ts.map +1 -0
  71. package/dist/components/empty.js +24 -44
  72. package/dist/components/field.d.ts +26 -63
  73. package/dist/components/field.d.ts.map +1 -0
  74. package/dist/components/field.js +46 -89
  75. package/dist/components/form.d.ts +16 -37
  76. package/dist/components/form.d.ts.map +1 -0
  77. package/dist/components/form.js +50 -66
  78. package/dist/components/hover-card.d.ts +8 -21
  79. package/dist/components/hover-card.d.ts.map +1 -0
  80. package/dist/components/hover-card.js +8 -23
  81. package/dist/components/input-group.d.ts +29 -53
  82. package/dist/components/input-group.d.ts.map +1 -0
  83. package/dist/components/input-group.js +59 -66
  84. package/dist/components/input-number.d.ts +8 -28
  85. package/dist/components/input-number.d.ts.map +1 -0
  86. package/dist/components/input-number.js +14 -55
  87. package/dist/components/input-otp.d.ts +11 -24
  88. package/dist/components/input-otp.d.ts.map +1 -0
  89. package/dist/components/input-otp.js +13 -34
  90. package/dist/components/input-password.d.ts +6 -12
  91. package/dist/components/input-password.d.ts.map +1 -0
  92. package/dist/components/input-password.js +10 -31
  93. package/dist/components/input-search.d.ts +9 -18
  94. package/dist/components/input-search.d.ts.map +1 -0
  95. package/dist/components/input-search.js +16 -44
  96. package/dist/components/input.d.ts +5 -10
  97. package/dist/components/input.d.ts.map +1 -0
  98. package/dist/components/input.js +5 -9
  99. package/dist/components/item.d.ts +33 -69
  100. package/dist/components/item.d.ts.map +1 -0
  101. package/dist/components/item.js +47 -90
  102. package/dist/components/kbd.d.ts +6 -13
  103. package/dist/components/kbd.d.ts.map +1 -0
  104. package/dist/components/kbd.js +6 -13
  105. package/dist/components/label.d.ts +5 -9
  106. package/dist/components/label.d.ts.map +1 -0
  107. package/dist/components/label.js +5 -8
  108. package/dist/components/menubar.d.ts +24 -80
  109. package/dist/components/menubar.d.ts.map +1 -0
  110. package/dist/components/menubar.js +23 -99
  111. package/dist/components/native-select.d.ts +7 -16
  112. package/dist/components/native-select.d.ts.map +1 -0
  113. package/dist/components/native-select.js +7 -25
  114. package/dist/components/navigation-menu.d.ts +13 -36
  115. package/dist/components/navigation-menu.d.ts.map +1 -0
  116. package/dist/components/navigation-menu.js +25 -61
  117. package/dist/components/pagination.d.ts +15 -35
  118. package/dist/components/pagination.d.ts.map +1 -0
  119. package/dist/components/pagination.js +13 -55
  120. package/dist/components/popover.d.ts +9 -24
  121. package/dist/components/popover.d.ts.map +1 -0
  122. package/dist/components/popover.js +9 -27
  123. package/dist/components/progress-circle.d.ts +89 -106
  124. package/dist/components/progress-circle.d.ts.map +1 -0
  125. package/dist/components/progress-circle.js +70 -103
  126. package/dist/components/progress.d.ts +5 -10
  127. package/dist/components/progress.d.ts.map +1 -0
  128. package/dist/components/progress.js +7 -13
  129. package/dist/components/radio-cards.d.ts +5 -10
  130. package/dist/components/radio-cards.d.ts.map +1 -0
  131. package/dist/components/radio-cards.js +7 -21
  132. package/dist/components/radio-group.d.ts +6 -13
  133. package/dist/components/radio-group.d.ts.map +1 -0
  134. package/dist/components/radio-group.js +6 -17
  135. package/dist/components/radio.d.ts +6 -12
  136. package/dist/components/radio.d.ts.map +1 -0
  137. package/dist/components/radio.js +5 -10
  138. package/dist/components/resizable.d.ts +8 -18
  139. package/dist/components/resizable.d.ts.map +1 -0
  140. package/dist/components/resizable.js +7 -21
  141. package/dist/components/scroll-area.d.ts +21 -33
  142. package/dist/components/scroll-area.d.ts.map +1 -0
  143. package/dist/components/scroll-area.js +64 -84
  144. package/dist/components/select.d.ts +17 -50
  145. package/dist/components/select.d.ts.map +1 -0
  146. package/dist/components/select.js +26 -78
  147. package/dist/components/separator.d.ts +20 -29
  148. package/dist/components/separator.d.ts.map +1 -0
  149. package/dist/components/separator.js +27 -36
  150. package/dist/components/sheet.d.ts +30 -62
  151. package/dist/components/sheet.d.ts.map +1 -0
  152. package/dist/components/sheet.js +36 -80
  153. package/dist/components/sidebar.d.ts +67 -160
  154. package/dist/components/sidebar.d.ts.map +1 -0
  155. package/dist/components/sidebar.js +166 -301
  156. package/dist/components/skeleton.d.ts +5 -9
  157. package/dist/components/skeleton.d.ts.map +1 -0
  158. package/dist/components/skeleton.js +5 -8
  159. package/dist/components/slider.d.ts +5 -13
  160. package/dist/components/slider.d.ts.map +1 -0
  161. package/dist/components/slider.js +12 -34
  162. package/dist/components/sonner.d.ts +8 -10
  163. package/dist/components/sonner.d.ts.map +1 -0
  164. package/dist/components/sonner.js +13 -16
  165. package/dist/components/spinner.d.ts +6 -12
  166. package/dist/components/spinner.d.ts.map +1 -0
  167. package/dist/components/spinner.js +20 -33
  168. package/dist/components/switch.d.ts +5 -9
  169. package/dist/components/switch.d.ts.map +1 -0
  170. package/dist/components/switch.js +5 -12
  171. package/dist/components/table.d.ts +12 -37
  172. package/dist/components/table.d.ts.map +1 -0
  173. package/dist/components/table.js +12 -47
  174. package/dist/components/tabs.d.ts +8 -21
  175. package/dist/components/tabs.d.ts.map +1 -0
  176. package/dist/components/tabs.js +8 -23
  177. package/dist/components/textarea.d.ts +5 -9
  178. package/dist/components/textarea.d.ts.map +1 -0
  179. package/dist/components/textarea.js +5 -8
  180. package/dist/components/toggle-group.d.ts +10 -24
  181. package/dist/components/toggle-group.d.ts.map +1 -0
  182. package/dist/components/toggle-group.js +20 -38
  183. package/dist/components/toggle.d.ts +18 -25
  184. package/dist/components/toggle.d.ts.map +1 -0
  185. package/dist/components/toggle.js +24 -29
  186. package/dist/components/tooltip.d.ts +9 -24
  187. package/dist/components/tooltip.d.ts.map +1 -0
  188. package/dist/components/tooltip.js +9 -28
  189. package/dist/hooks/use-animated-value.d.ts +2 -4
  190. package/dist/hooks/use-animated-value.d.ts.map +1 -0
  191. package/dist/hooks/use-animated-value.js +67 -58
  192. package/dist/hooks/use-copy-to-clipboard.d.ts +6 -11
  193. package/dist/hooks/use-copy-to-clipboard.d.ts.map +1 -0
  194. package/dist/hooks/use-copy-to-clipboard.js +42 -39
  195. package/dist/hooks/use-is-mobile.d.ts +2 -4
  196. package/dist/hooks/use-is-mobile.d.ts.map +1 -0
  197. package/dist/hooks/use-is-mobile.js +20 -23
  198. package/dist/hooks/use-media-query.d.ts +2 -4
  199. package/dist/hooks/use-media-query.d.ts.map +1 -0
  200. package/dist/hooks/use-media-query.js +49 -46
  201. package/dist/hooks/use-mutation-observer.d.ts +3 -6
  202. package/dist/hooks/use-mutation-observer.d.ts.map +1 -0
  203. package/dist/hooks/use-mutation-observer.js +33 -34
  204. package/dist/hooks/use-pagination.d.ts +15 -22
  205. package/dist/hooks/use-pagination.d.ts.map +1 -0
  206. package/dist/hooks/use-pagination.js +99 -99
  207. package/dist/index.d.ts +131 -69
  208. package/dist/index.d.ts.map +1 -0
  209. package/dist/index.js +68 -69
  210. package/dist/primitives/checkbox-group.d.ts +84 -105
  211. package/dist/primitives/checkbox-group.d.ts.map +1 -0
  212. package/dist/primitives/checkbox-group.js +91 -105
  213. package/dist/primitives/input-number.d.ts +41 -51
  214. package/dist/primitives/input-number.d.ts.map +1 -0
  215. package/dist/primitives/input-number.js +417 -473
  216. package/dist/primitives/input.d.ts +43 -48
  217. package/dist/primitives/input.d.ts.map +1 -0
  218. package/dist/primitives/input.js +67 -66
  219. package/dist/primitives/progress-circle.d.ts +49 -79
  220. package/dist/primitives/progress-circle.d.ts.map +1 -0
  221. package/dist/primitives/progress-circle.js +134 -149
  222. package/package.json +17 -10
  223. package/{dist → src}/css/preset.css +1 -1
  224. /package/{dist → src}/css/amber.css +0 -0
  225. /package/{dist → src}/css/blue.css +0 -0
  226. /package/{dist → src}/css/cyan.css +0 -0
  227. /package/{dist → src}/css/emerald.css +0 -0
  228. /package/{dist → src}/css/fuchsia.css +0 -0
  229. /package/{dist → src}/css/gray.css +0 -0
  230. /package/{dist → src}/css/green.css +0 -0
  231. /package/{dist → src}/css/indigo.css +0 -0
  232. /package/{dist → src}/css/lime.css +0 -0
  233. /package/{dist → src}/css/neutral.css +0 -0
  234. /package/{dist → src}/css/orange.css +0 -0
  235. /package/{dist → src}/css/pink.css +0 -0
  236. /package/{dist → src}/css/purple.css +0 -0
  237. /package/{dist → src}/css/red.css +0 -0
  238. /package/{dist → src}/css/rose.css +0 -0
  239. /package/{dist → src}/css/sky.css +0 -0
  240. /package/{dist → src}/css/slate.css +0 -0
  241. /package/{dist → src}/css/stone.css +0 -0
  242. /package/{dist → src}/css/style.css +0 -0
  243. /package/{dist → src}/css/teal.css +0 -0
  244. /package/{dist → src}/css/violet.css +0 -0
  245. /package/{dist → src}/css/yellow.css +0 -0
  246. /package/{dist → src}/css/zinc.css +0 -0
@@ -1,359 +1,224 @@
1
1
  "use client";
2
- import { Button } from "./button.js";
3
- import { Separator } from "./separator.js";
4
- import { Input } from "./input.js";
5
- import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from "./sheet.js";
6
- import { Skeleton } from "./skeleton.js";
7
- import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./tooltip.js";
8
- import { useIsMobile } from "../hooks/use-is-mobile.js";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
3
  import { cn, tv } from "@codefast/tailwind-variants";
4
+ import { createContext } from "@radix-ui/react-context";
10
5
  import { Slot } from "@radix-ui/react-slot";
11
6
  import { PanelLeftIcon } from "lucide-react";
12
- import { jsx, jsxs } from "react/jsx-runtime";
13
7
  import { useCallback, useEffect, useState } from "react";
14
- import { createContext } from "@radix-ui/react-context";
15
- //#region src/components/sidebar.tsx
8
+ import { Button } from "#components/button";
9
+ import { Input } from "#components/input";
10
+ import { Separator } from "#components/separator";
11
+ import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from "#components/sheet";
12
+ import { Skeleton } from "#components/skeleton";
13
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "#components/tooltip";
14
+ import { useIsMobile } from "#hooks/use-is-mobile";
15
+ /* -----------------------------------------------------------------------------
16
+ * Variant: SidebarMenuButton
17
+ * -------------------------------------------------------------------------- */
16
18
  const sidebarMenuButtonVariants = tv({
17
- base: "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-3 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
18
- defaultVariants: {
19
- size: "md",
20
- variant: "default"
21
- },
22
- variants: {
23
- size: {
24
- sm: "h-7 text-xs",
25
- md: "h-8 text-sm",
26
- lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!"
27
- },
28
- variant: {
29
- default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
30
- outline: "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"
31
- }
32
- }
19
+ base: "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-3 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
20
+ defaultVariants: {
21
+ size: "md",
22
+ variant: "default",
23
+ },
24
+ variants: {
25
+ size: {
26
+ sm: "h-7 text-xs",
27
+ md: "h-8 text-sm",
28
+ lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!",
29
+ },
30
+ variant: {
31
+ default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
32
+ outline: "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]",
33
+ },
34
+ },
33
35
  });
34
36
  const SIDEBAR_COOKIE_NAME = "sidebar_state";
35
- const SIDEBAR_COOKIE_MAX_AGE = 3600 * 24 * 7;
37
+ const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
36
38
  const SIDEBAR_WIDTH = "16rem";
37
39
  const SIDEBAR_WIDTH_MOBILE = "18rem";
38
40
  const SIDEBAR_WIDTH_ICON = "3.0625rem";
39
41
  const SIDEBAR_KEYBOARD_SHORTCUT = "b";
40
- const [SidebarContextProvider, useSidebar] = createContext("SidebarProvider");
42
+ /* -----------------------------------------------------------------------------
43
+ * Context: SidebarProvider
44
+ * -------------------------------------------------------------------------- */
45
+ const SIDEBAR_PROVIDER_NAME = "SidebarProvider";
46
+ const [SidebarContextProvider, useSidebar] = createContext(SIDEBAR_PROVIDER_NAME);
41
47
  function SidebarProvider({ children, className, defaultOpen = true, onOpenChange: setOpenProperty, open: openProperty, style, ...props }) {
42
- const isMobile = useIsMobile();
43
- const [openMobile, setOpenMobile] = useState(false);
44
- const [isOpen, setIsOpen] = useState(defaultOpen);
45
- const open = openProperty ?? isOpen;
46
- const setOpen = useCallback((value) => {
47
- const openState = typeof value === "function" ? value(open) : value;
48
- if (setOpenProperty) setOpenProperty(openState);
49
- else setIsOpen(openState);
50
- document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState.toString()}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE.toString()}`;
51
- }, [setOpenProperty, open]);
52
- const toggleSidebar = useCallback(() => {
53
- if (isMobile) setOpenMobile((currentValue) => !currentValue);
54
- else setOpen((currentValue) => !currentValue);
55
- }, [isMobile, setOpen]);
56
- useEffect(() => {
57
- const handleKeyDown = (event) => {
58
- if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
59
- event.preventDefault();
60
- toggleSidebar();
61
- }
62
- };
63
- window.addEventListener("keydown", handleKeyDown);
64
- return () => {
65
- window.removeEventListener("keydown", handleKeyDown);
66
- };
67
- }, [toggleSidebar]);
68
- return /* @__PURE__ */ jsx(SidebarContextProvider, {
69
- isMobile,
70
- open,
71
- openMobile,
72
- setOpen,
73
- setOpenMobile,
74
- state: open ? "expanded" : "collapsed",
75
- toggleSidebar,
76
- children: /* @__PURE__ */ jsx(TooltipProvider, {
77
- delayDuration: 0,
78
- children: /* @__PURE__ */ jsx("div", {
79
- className: cn("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar", className),
80
- "data-slot": "sidebar-wrapper",
81
- style: {
82
- "--sidebar-width": SIDEBAR_WIDTH,
83
- "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
84
- ...style
85
- },
86
- ...props,
87
- children
88
- })
89
- })
90
- });
91
- }
48
+ const isMobile = useIsMobile();
49
+ const [openMobile, setOpenMobile] = useState(false);
50
+ // This is the internal state of the sidebar.
51
+ // We use openProp and setOpenProp for control from outside the component.
52
+ const [isOpen, setIsOpen] = useState(defaultOpen);
53
+ const open = openProperty ?? isOpen;
54
+ const setOpen = useCallback((value) => {
55
+ const openState = typeof value === "function" ? value(open) : value;
56
+ if (setOpenProperty) {
57
+ setOpenProperty(openState);
58
+ }
59
+ else {
60
+ setIsOpen(openState);
61
+ }
62
+ // eslint-disable-next-line unicorn/no-document-cookie
63
+ document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState.toString()}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE.toString()}`;
64
+ }, [setOpenProperty, open]);
65
+ // Helper to toggle the sidebar.
66
+ const toggleSidebar = useCallback(() => {
67
+ if (isMobile) {
68
+ setOpenMobile((currentValue) => !currentValue);
69
+ }
70
+ else {
71
+ setOpen((currentValue) => !currentValue);
72
+ }
73
+ }, [isMobile, setOpen]);
74
+ // Adds a keyboard shortcut to toggle the sidebar.
75
+ useEffect(() => {
76
+ const handleKeyDown = (event) => {
77
+ if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
78
+ event.preventDefault();
79
+ toggleSidebar();
80
+ }
81
+ };
82
+ window.addEventListener("keydown", handleKeyDown);
83
+ return () => {
84
+ window.removeEventListener("keydown", handleKeyDown);
85
+ };
86
+ }, [toggleSidebar]);
87
+ // We add a state so that we can do data-state="expanded" or "collapsed".
88
+ // This makes it easier to style the sidebar with Tailwind classes.
89
+ const state = open ? "expanded" : "collapsed";
90
+ return (_jsx(SidebarContextProvider, { isMobile: isMobile, open: open, openMobile: openMobile, setOpen: setOpen, setOpenMobile: setOpenMobile, state: state, toggleSidebar: toggleSidebar, children: _jsx(TooltipProvider, { delayDuration: 0, children: _jsx("div", { className: cn("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar", className), "data-slot": "sidebar-wrapper", style: {
91
+ "--sidebar-width": SIDEBAR_WIDTH,
92
+ "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
93
+ ...style,
94
+ }, ...props, children: children }) }) }));
95
+ }
96
+ /* -----------------------------------------------------------------------------
97
+ * Component: Sidebar
98
+ * -------------------------------------------------------------------------- */
92
99
  const SIDEBAR_NAME = "Sidebar";
93
100
  function Sidebar({ children, className, collapsible = "offcanvas", side = "left", variant = "sidebar", ...props }) {
94
- const { isMobile, openMobile, setOpenMobile, state } = useSidebar(SIDEBAR_NAME);
95
- if (collapsible === "none") return /* @__PURE__ */ jsx("div", {
96
- className: cn("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground", className),
97
- "data-slot": "sidebar",
98
- ...props,
99
- children
100
- });
101
- if (isMobile) return /* @__PURE__ */ jsx(Sheet, {
102
- open: openMobile,
103
- onOpenChange: setOpenMobile,
104
- ...props,
105
- children: /* @__PURE__ */ jsxs(SheetContent, {
106
- className: "w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",
107
- "data-mobile": "true",
108
- "data-sidebar": "sidebar",
109
- "data-slot": "sidebar",
110
- side,
111
- style: { "--sidebar-width": SIDEBAR_WIDTH_MOBILE },
112
- children: [/* @__PURE__ */ jsxs(SheetHeader, {
113
- className: "sr-only",
114
- children: [/* @__PURE__ */ jsx(SheetTitle, { children: "Sidebar" }), /* @__PURE__ */ jsx(SheetDescription, { children: "Displays the mobile sidebar." })]
115
- }), /* @__PURE__ */ jsx("div", {
116
- className: "flex h-full w-full flex-col",
117
- children
118
- })]
119
- })
120
- });
121
- return /* @__PURE__ */ jsxs("div", {
122
- className: cn("group peer hidden text-sidebar-foreground md:block", className),
123
- "data-collapsible": state === "collapsed" ? collapsible : "",
124
- "data-side": side,
125
- "data-slot": "sidebar",
126
- "data-state": state,
127
- "data-variant": variant,
128
- children: [/* @__PURE__ */ jsx("div", {
129
- 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)"),
130
- "data-slot": "sidebar-gap"
131
- }), /* @__PURE__ */ jsx("div", {
132
- 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) group-data-[side=left]:border-r group-data-[side=right]:border-l", className),
133
- "data-slot": "sidebar-container",
134
- ...props,
135
- children: /* @__PURE__ */ jsx("div", {
136
- className: "flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm",
137
- "data-sidebar": "sidebar",
138
- "data-slot": "sidebar-inner",
139
- children
140
- })
141
- })]
142
- });
143
- }
101
+ const { isMobile, openMobile, setOpenMobile, state } = useSidebar(SIDEBAR_NAME);
102
+ if (collapsible === "none") {
103
+ return (_jsx("div", { className: cn("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground", className), "data-slot": "sidebar", ...props, children: children }));
104
+ }
105
+ if (isMobile) {
106
+ return (_jsx(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: _jsxs(SheetContent, { className: "w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden", "data-mobile": "true", "data-sidebar": "sidebar", "data-slot": "sidebar", side: side, style: {
107
+ "--sidebar-width": SIDEBAR_WIDTH_MOBILE,
108
+ }, children: [_jsxs(SheetHeader, { className: "sr-only", children: [_jsx(SheetTitle, { children: "Sidebar" }), _jsx(SheetDescription, { children: "Displays the mobile sidebar." })] }), _jsx("div", { className: "flex h-full w-full flex-col", children: children })] }) }));
109
+ }
110
+ return (_jsxs("div", { className: cn("group peer hidden text-sidebar-foreground md:block", className), "data-collapsible": state === "collapsed" ? collapsible : "", "data-side": side, "data-slot": "sidebar", "data-state": state, "data-variant": variant, children: [_jsx("div", { 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"
111
+ ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]"
112
+ : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)"), "data-slot": "sidebar-gap" }), _jsx("div", { 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"
113
+ ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]"
114
+ : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
115
+ // Adjust the padding for floating and inset variants.
116
+ variant === "floating" || variant === "inset"
117
+ ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]"
118
+ : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l", className), "data-slot": "sidebar-container", ...props, children: _jsx("div", { className: "flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm", "data-sidebar": "sidebar", "data-slot": "sidebar-inner", children: children }) })] }));
119
+ }
120
+ /* -----------------------------------------------------------------------------
121
+ * Component: SidebarTrigger
122
+ * -------------------------------------------------------------------------- */
144
123
  const SIDEBAR_TRIGGER_NAME = "SidebarTrigger";
145
124
  function SidebarTrigger({ className, onClick, ...props }) {
146
- const { toggleSidebar } = useSidebar(SIDEBAR_TRIGGER_NAME);
147
- return /* @__PURE__ */ jsxs(Button, {
148
- className: cn("size-7", className),
149
- "data-sidebar": "trigger",
150
- "data-slot": "sidebar-trigger",
151
- size: "icon",
152
- variant: "ghost",
153
- onClick: (event) => {
154
- onClick?.(event);
155
- toggleSidebar();
156
- },
157
- ...props,
158
- children: [/* @__PURE__ */ jsx(PanelLeftIcon, {}), /* @__PURE__ */ jsx("span", {
159
- className: "sr-only",
160
- children: "Toggle Sidebar"
161
- })]
162
- });
163
- }
125
+ const { toggleSidebar } = useSidebar(SIDEBAR_TRIGGER_NAME);
126
+ return (_jsxs(Button, { className: cn("size-7", className), "data-sidebar": "trigger", "data-slot": "sidebar-trigger", size: "icon", variant: "ghost", onClick: (event) => {
127
+ onClick?.(event);
128
+ toggleSidebar();
129
+ }, ...props, children: [_jsx(PanelLeftIcon, {}), _jsx("span", { className: "sr-only", children: "Toggle Sidebar" })] }));
130
+ }
131
+ /* -----------------------------------------------------------------------------
132
+ * Component: SidebarRail
133
+ * -------------------------------------------------------------------------- */
164
134
  const SIDEBAR_RAIL_NAME = "SidebarRail";
165
135
  function SidebarRail({ className, ...props }) {
166
- const { toggleSidebar } = useSidebar(SIDEBAR_RAIL_NAME);
167
- return /* @__PURE__ */ jsx("button", {
168
- className: cn("absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[collapsible=offcanvas]:translate-x-0 group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-0.5 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar hover:after:bg-sidebar-border in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize sm:flex [[data-side=left][data-collapsible=offcanvas]_&]:-right-2 [[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-collapsible=offcanvas]_&]:-left-2 [[data-side=right][data-state=collapsed]_&]:cursor-w-resize", className),
169
- "data-sidebar": "rail",
170
- "data-slot": "sidebar-rail",
171
- title: "Toggle Sidebar",
172
- type: "button",
173
- onClick: toggleSidebar,
174
- ...props
175
- });
136
+ const { toggleSidebar } = useSidebar(SIDEBAR_RAIL_NAME);
137
+ return (_jsx("button", { className: cn("absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[collapsible=offcanvas]:translate-x-0 group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-0.5 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar hover:after:bg-sidebar-border in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize sm:flex [[data-side=left][data-collapsible=offcanvas]_&]:-right-2 [[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-collapsible=offcanvas]_&]:-left-2 [[data-side=right][data-state=collapsed]_&]:cursor-w-resize", className), "data-sidebar": "rail", "data-slot": "sidebar-rail", title: "Toggle Sidebar", type: "button", onClick: toggleSidebar, ...props }));
176
138
  }
177
139
  function SidebarInset({ className, ...props }) {
178
- return /* @__PURE__ */ jsx("main", {
179
- className: cn("relative flex w-full min-w-0 flex-1 flex-col 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", className),
180
- "data-slot": "sidebar-inset",
181
- ...props
182
- });
140
+ return (_jsx("main", { className: cn("relative flex w-full min-w-0 flex-1 flex-col 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", className), "data-slot": "sidebar-inset", ...props }));
183
141
  }
184
142
  function SidebarInput({ className, ...props }) {
185
- return /* @__PURE__ */ jsx(Input, {
186
- className: cn("h-8 w-full bg-background shadow-none", className),
187
- "data-sidebar": "input",
188
- "data-slot": "sidebar-input",
189
- ...props
190
- });
143
+ return (_jsx(Input, { className: cn("h-8 w-full bg-background shadow-none", className), "data-sidebar": "input", "data-slot": "sidebar-input", ...props }));
191
144
  }
192
145
  function SidebarHeader({ className, ...props }) {
193
- return /* @__PURE__ */ jsx("div", {
194
- className: cn("flex flex-col gap-2 p-2", className),
195
- "data-sidebar": "header",
196
- "data-slot": "sidebar-header",
197
- ...props
198
- });
146
+ return (_jsx("div", { className: cn("flex flex-col gap-2 p-2", className), "data-sidebar": "header", "data-slot": "sidebar-header", ...props }));
199
147
  }
200
148
  function SidebarFooter({ className, ...props }) {
201
- return /* @__PURE__ */ jsx("div", {
202
- className: cn("flex flex-col gap-2 p-2", className),
203
- "data-sidebar": "footer",
204
- "data-slot": "sidebar-footer",
205
- ...props
206
- });
149
+ return (_jsx("div", { className: cn("flex flex-col gap-2 p-2", className), "data-sidebar": "footer", "data-slot": "sidebar-footer", ...props }));
207
150
  }
208
151
  function SidebarSeparator({ className, ...props }) {
209
- return /* @__PURE__ */ jsx(Separator, {
210
- className: cn("mx-2 w-auto bg-sidebar-border", className),
211
- "data-sidebar": "separator",
212
- "data-slot": "sidebar-separator",
213
- ...props
214
- });
152
+ return (_jsx(Separator, { className: cn("mx-2 w-auto bg-sidebar-border", className), "data-sidebar": "separator", "data-slot": "sidebar-separator", ...props }));
215
153
  }
216
154
  function SidebarContent({ className, ...props }) {
217
- return /* @__PURE__ */ jsx("div", {
218
- className: cn("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden", className),
219
- "data-sidebar": "content",
220
- "data-slot": "sidebar-content",
221
- ...props
222
- });
155
+ return (_jsx("div", { className: cn("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden", className), "data-sidebar": "content", "data-slot": "sidebar-content", ...props }));
223
156
  }
224
157
  function SidebarGroup({ className, ...props }) {
225
- return /* @__PURE__ */ jsx("div", {
226
- className: cn("relative flex w-full min-w-0 flex-col p-2", className),
227
- "data-sidebar": "group",
228
- "data-slot": "sidebar-group",
229
- ...props
230
- });
158
+ return (_jsx("div", { className: cn("relative flex w-full min-w-0 flex-col p-2", className), "data-sidebar": "group", "data-slot": "sidebar-group", ...props }));
231
159
  }
232
160
  function SidebarGroupLabel({ asChild = false, className, ...props }) {
233
- return /* @__PURE__ */ jsx(asChild ? Slot : "div", {
234
- className: cn("flex h-8 shrink-0 items-center truncate rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-3 [&>svg]:size-4 [&>svg]:shrink-0", className),
235
- "data-sidebar": "group-label",
236
- "data-slot": "sidebar-group-label",
237
- ...props
238
- });
161
+ const Component = asChild ? Slot : "div";
162
+ return (_jsx(Component, { className: cn("flex h-8 shrink-0 items-center truncate rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-3 [&>svg]:size-4 [&>svg]:shrink-0", className), "data-sidebar": "group-label", "data-slot": "sidebar-group-label", ...props }));
239
163
  }
240
164
  function SidebarGroupAction({ asChild = false, className, ...props }) {
241
- return /* @__PURE__ */ jsx(asChild ? Slot : "button", {
242
- className: cn("absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-3 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0", className),
243
- "data-sidebar": "group-action",
244
- "data-slot": "sidebar-group-action",
245
- ...props
246
- });
165
+ const Component = asChild ? Slot : "button";
166
+ return (_jsx(Component, { className: cn("absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-3 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0", className), "data-sidebar": "group-action", "data-slot": "sidebar-group-action", ...props }));
247
167
  }
248
168
  function SidebarGroupContent({ className, ...props }) {
249
- return /* @__PURE__ */ jsx("div", {
250
- className: cn("w-full text-sm", className),
251
- "data-sidebar": "group-content",
252
- "data-slot": "sidebar-group-content",
253
- ...props
254
- });
169
+ return (_jsx("div", { className: cn("w-full text-sm", className), "data-sidebar": "group-content", "data-slot": "sidebar-group-content", ...props }));
255
170
  }
256
171
  function SidebarMenu({ className, ...props }) {
257
- return /* @__PURE__ */ jsx("ul", {
258
- className: cn("flex w-full min-w-0 flex-col gap-1", className),
259
- "data-sidebar": "menu",
260
- "data-slot": "sidebar-menu",
261
- ...props
262
- });
172
+ return (_jsx("ul", { className: cn("flex w-full min-w-0 flex-col gap-1", className), "data-sidebar": "menu", "data-slot": "sidebar-menu", ...props }));
263
173
  }
264
174
  function SidebarMenuItem({ className, ...props }) {
265
- return /* @__PURE__ */ jsx("li", {
266
- className: cn("group/menu-item relative", className),
267
- "data-sidebar": "menu-item",
268
- "data-slot": "sidebar-menu-item",
269
- ...props
270
- });
175
+ return (_jsx("li", { className: cn("group/menu-item relative", className), "data-sidebar": "menu-item", "data-slot": "sidebar-menu-item", ...props }));
271
176
  }
177
+ /* -----------------------------------------------------------------------------
178
+ * Component: SidebarMenuButton
179
+ * -------------------------------------------------------------------------- */
272
180
  const SIDEBAR_MENU_BUTTON_NAME = "SidebarMenuButton";
273
181
  function SidebarMenuButton({ asChild = false, className, isActive = false, size = "md", tooltip, variant = "default", ...props }) {
274
- const Component = asChild ? Slot : "button";
275
- const { isMobile, state } = useSidebar(SIDEBAR_MENU_BUTTON_NAME);
276
- const button = /* @__PURE__ */ jsx(Component, {
277
- className: cn(sidebarMenuButtonVariants({
278
- size,
279
- variant
280
- }), className),
281
- "data-active": isActive,
282
- "data-sidebar": "menu-button",
283
- "data-size": size,
284
- "data-slot": "sidebar-menu-button",
285
- ...props
286
- });
287
- if (!tooltip) return button;
288
- if (typeof tooltip === "string") tooltip = { children: tooltip };
289
- return /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
290
- asChild: true,
291
- children: button
292
- }), /* @__PURE__ */ jsx(TooltipContent, {
293
- align: "center",
294
- hidden: state !== "collapsed" || isMobile,
295
- side: "right",
296
- ...tooltip
297
- })] });
182
+ const Component = asChild ? Slot : "button";
183
+ const { isMobile, state } = useSidebar(SIDEBAR_MENU_BUTTON_NAME);
184
+ const button = (_jsx(Component, { className: cn(sidebarMenuButtonVariants({ size, variant }), className), "data-active": isActive, "data-sidebar": "menu-button", "data-size": size, "data-slot": "sidebar-menu-button", ...props }));
185
+ if (!tooltip) {
186
+ return button;
187
+ }
188
+ if (typeof tooltip === "string") {
189
+ tooltip = {
190
+ children: tooltip,
191
+ };
192
+ }
193
+ return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: button }), _jsx(TooltipContent, { align: "center", hidden: state !== "collapsed" || isMobile, side: "right", ...tooltip })] }));
298
194
  }
299
195
  function SidebarMenuAction({ asChild = false, className, showOnHover = false, ...props }) {
300
- return /* @__PURE__ */ jsx(asChild ? Slot : "button", {
301
- className: cn("absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-3 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0", showOnHover && "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground data-[state=open]:opacity-100 md:opacity-0", className),
302
- "data-sidebar": "menu-action",
303
- "data-slot": "sidebar-menu-action",
304
- ...props
305
- });
196
+ const Component = asChild ? Slot : "button";
197
+ return (_jsx(Component, { className: cn("absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-3 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0", showOnHover &&
198
+ "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground data-[state=open]:opacity-100 md:opacity-0", className), "data-sidebar": "menu-action", "data-slot": "sidebar-menu-action", ...props }));
306
199
  }
307
200
  function SidebarMenuBadge({ className, ...props }) {
308
- return /* @__PURE__ */ jsx("div", {
309
- className: cn("pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1", className),
310
- "data-sidebar": "menu-badge",
311
- "data-slot": "sidebar-menu-badge",
312
- ...props
313
- });
201
+ return (_jsx("div", { className: cn("pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1", className), "data-sidebar": "menu-badge", "data-slot": "sidebar-menu-badge", ...props }));
314
202
  }
315
203
  function SidebarMenuSkeleton({ className, showIcon = false, ...props }) {
316
- const [width] = useState(() => `${String(Math.floor(Math.random() * 40) + 50)}%`);
317
- return /* @__PURE__ */ jsxs("div", {
318
- className: cn("flex h-8 items-center gap-2 rounded-md px-2", className),
319
- "data-sidebar": "menu-skeleton",
320
- "data-slot": "sidebar-menu-skeleton",
321
- ...props,
322
- children: [showIcon ? /* @__PURE__ */ jsx(Skeleton, {
323
- className: "size-4 rounded-md",
324
- "data-sidebar": "menu-skeleton-icon"
325
- }) : null, /* @__PURE__ */ jsx(Skeleton, {
326
- className: "h-4 max-w-(--skeleton-width) flex-1",
327
- "data-sidebar": "menu-skeleton-text",
328
- style: { "--skeleton-width": width }
329
- })]
330
- });
204
+ // Random width between 50 to 90% - use useState with lazy initializer to avoid calling Math.random during render
205
+ const [width] = useState(() => `${String(Math.floor(Math.random() * 40) + 50)}%`);
206
+ return (_jsxs("div", { className: cn("flex h-8 items-center gap-2 rounded-md px-2", className), "data-sidebar": "menu-skeleton", "data-slot": "sidebar-menu-skeleton", ...props, children: [showIcon ? (_jsx(Skeleton, { className: "size-4 rounded-md", "data-sidebar": "menu-skeleton-icon" })) : null, _jsx(Skeleton, { className: "h-4 max-w-(--skeleton-width) flex-1", "data-sidebar": "menu-skeleton-text", style: {
207
+ "--skeleton-width": width,
208
+ } })] }));
331
209
  }
332
210
  function SidebarMenuSub({ className, ...props }) {
333
- return /* @__PURE__ */ jsx("ul", {
334
- className: cn("mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5 group-data-[collapsible=icon]:hidden", className),
335
- "data-sidebar": "menu-sub",
336
- "data-slot": "sidebar-menu-sub",
337
- ...props
338
- });
211
+ return (_jsx("ul", { className: cn("mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5 group-data-[collapsible=icon]:hidden", className), "data-sidebar": "menu-sub", "data-slot": "sidebar-menu-sub", ...props }));
339
212
  }
340
213
  function SidebarMenuSubItem({ className, ...props }) {
341
- return /* @__PURE__ */ jsx("li", {
342
- className: cn("group/menu-sub-item relative", className),
343
- "data-sidebar": "menu-sub-item",
344
- "data-slot": "sidebar-menu-sub-item",
345
- ...props
346
- });
214
+ return (_jsx("li", { className: cn("group/menu-sub-item relative", className), "data-sidebar": "menu-sub-item", "data-slot": "sidebar-menu-sub-item", ...props }));
347
215
  }
348
216
  function SidebarMenuSubButton({ asChild = false, className, isActive = false, size = "md", ...props }) {
349
- return /* @__PURE__ */ jsx(asChild ? Slot : "a", {
350
- className: cn("flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-3 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground", size === "sm" && "text-xs", size === "md" && "text-sm", "group-data-[collapsible=icon]:hidden", className),
351
- "data-active": isActive,
352
- "data-sidebar": "menu-sub-button",
353
- "data-size": size,
354
- "data-slot": "sidebar-menu-sub-button",
355
- ...props
356
- });
357
- }
358
- //#endregion
359
- export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, sidebarMenuButtonVariants, useSidebar };
217
+ const Component = asChild ? Slot : "a";
218
+ return (_jsx(Component, { className: cn("flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-3 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground", size === "sm" && "text-xs", size === "md" && "text-sm", "group-data-[collapsible=icon]:hidden", className), "data-active": isActive, "data-sidebar": "menu-sub-button", "data-size": size, "data-slot": "sidebar-menu-sub-button", ...props }));
219
+ }
220
+ /* -----------------------------------------------------------------------------
221
+ * Exports
222
+ * -------------------------------------------------------------------------- */
223
+ export { sidebarMenuButtonVariants };
224
+ export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar, };
@@ -1,10 +1,6 @@
1
- import { ComponentProps, JSX } from "react";
2
-
3
- //#region src/components/skeleton.d.ts
1
+ import type { ComponentProps, JSX } from "react";
4
2
  type SkeletonProps = ComponentProps<"div">;
5
- declare function Skeleton({
6
- className,
7
- ...props
8
- }: SkeletonProps): JSX.Element;
9
- //#endregion
10
- export { Skeleton, type SkeletonProps };
3
+ declare function Skeleton({ className, ...props }: SkeletonProps): JSX.Element;
4
+ export { Skeleton };
5
+ export type { SkeletonProps };
6
+ //# sourceMappingURL=skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/components/skeleton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAQjD,KAAK,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAE3C,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,GAAG,GAAG,CAAC,OAAO,CAQrE;AAMD,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,CAAC"}
@@ -1,12 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
1
2
  import { cn } from "@codefast/tailwind-variants";
2
- import { jsx } from "react/jsx-runtime";
3
- //#region src/components/skeleton.tsx
4
3
  function Skeleton({ className, ...props }) {
5
- return /* @__PURE__ */ jsx("div", {
6
- className: cn("animate-pulse rounded-lg bg-muted", className),
7
- "data-slot": "skeleton",
8
- ...props
9
- });
4
+ return (_jsx("div", { className: cn("animate-pulse rounded-lg bg-muted", className), "data-slot": "skeleton", ...props }));
10
5
  }
11
- //#endregion
6
+ /* -----------------------------------------------------------------------------
7
+ * Exports
8
+ * -------------------------------------------------------------------------- */
12
9
  export { Skeleton };
@@ -1,15 +1,7 @@
1
- import { ComponentProps, JSX } from "react";
1
+ import type { ComponentProps, JSX } from "react";
2
2
  import * as SliderPrimitive from "@radix-ui/react-slider";
3
-
4
- //#region src/components/slider.d.ts
5
3
  type SliderProps = ComponentProps<typeof SliderPrimitive.Root>;
6
- declare function Slider({
7
- className,
8
- defaultValue,
9
- max,
10
- min,
11
- value,
12
- ...props
13
- }: SliderProps): JSX.Element;
14
- //#endregion
15
- export { Slider, type SliderProps };
4
+ declare function Slider({ className, defaultValue, max, min, value, ...props }: SliderProps): JSX.Element;
5
+ export { Slider };
6
+ export type { SliderProps };
7
+ //# sourceMappingURL=slider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../src/components/slider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAGjD,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAO1D,KAAK,WAAW,GAAG,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAE/D,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,YAAY,EACZ,GAAS,EACT,GAAO,EACP,KAAK,EACL,GAAG,KAAK,EACT,EAAE,WAAW,GAAG,GAAG,CAAC,OAAO,CA2C3B;AAMD,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,CAAC"}