@mesob/ui 0.2.3 → 0.2.5

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 (236) hide show
  1. package/dist/components.d.ts +1112 -0
  2. package/dist/components.js +9460 -0
  3. package/dist/components.js.map +1 -0
  4. package/dist/hooks.d.ts +6 -0
  5. package/dist/hooks.js +85 -0
  6. package/dist/hooks.js.map +1 -0
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.js +53 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/locale.d.ts +37 -0
  11. package/dist/lib/locale.js +55 -0
  12. package/dist/lib/locale.js.map +1 -0
  13. package/dist/providers.d.ts +20 -0
  14. package/dist/providers.js +61 -0
  15. package/dist/providers.js.map +1 -0
  16. package/dist/use-entity-params-nqD69tdX.d.ts +82 -0
  17. package/package.json +34 -27
  18. package/dist/components/accordion.d.ts +0 -10
  19. package/dist/components/accordion.js +0 -74
  20. package/dist/components/accordion.js.map +0 -1
  21. package/dist/components/alert-dialog.d.ts +0 -17
  22. package/dist/components/alert-dialog.js +0 -187
  23. package/dist/components/alert-dialog.js.map +0 -1
  24. package/dist/components/alert.d.ts +0 -13
  25. package/dist/components/alert.js +0 -74
  26. package/dist/components/alert.js.map +0 -1
  27. package/dist/components/animated-tabs.d.ts +0 -26
  28. package/dist/components/animated-tabs.js +0 -290
  29. package/dist/components/animated-tabs.js.map +0 -1
  30. package/dist/components/app-breadcrumbs-context.d.ts +0 -19
  31. package/dist/components/app-breadcrumbs-context.js +0 -19
  32. package/dist/components/app-breadcrumbs-context.js.map +0 -1
  33. package/dist/components/app-breadcrumbs.d.ts +0 -25
  34. package/dist/components/app-breadcrumbs.js +0 -175
  35. package/dist/components/app-breadcrumbs.js.map +0 -1
  36. package/dist/components/app-header-actions.d.ts +0 -39
  37. package/dist/components/app-header-actions.js +0 -644
  38. package/dist/components/app-header-actions.js.map +0 -1
  39. package/dist/components/app-sidebar.d.ts +0 -24
  40. package/dist/components/app-sidebar.js +0 -667
  41. package/dist/components/app-sidebar.js.map +0 -1
  42. package/dist/components/aspect-ratio.d.ts +0 -6
  43. package/dist/components/aspect-ratio.js +0 -14
  44. package/dist/components/aspect-ratio.js.map +0 -1
  45. package/dist/components/avatar.d.ts +0 -9
  46. package/dist/components/avatar.js +0 -63
  47. package/dist/components/avatar.js.map +0 -1
  48. package/dist/components/badge.d.ts +0 -13
  49. package/dist/components/badge.js +0 -48
  50. package/dist/components/badge.js.map +0 -1
  51. package/dist/components/breadcrumb.d.ts +0 -14
  52. package/dist/components/breadcrumb.js +0 -110
  53. package/dist/components/breadcrumb.js.map +0 -1
  54. package/dist/components/button-group.d.ts +0 -17
  55. package/dist/components/button-group.js +0 -106
  56. package/dist/components/button-group.js.map +0 -1
  57. package/dist/components/button.d.ts +0 -17
  58. package/dist/components/button.js +0 -68
  59. package/dist/components/button.js.map +0 -1
  60. package/dist/components/calendar.d.ts +0 -13
  61. package/dist/components/calendar.js +0 -262
  62. package/dist/components/calendar.js.map +0 -1
  63. package/dist/components/card.d.ts +0 -12
  64. package/dist/components/card.js +0 -98
  65. package/dist/components/card.js.map +0 -1
  66. package/dist/components/carousel.d.ts +0 -24
  67. package/dist/components/carousel.js +0 -268
  68. package/dist/components/carousel.js.map +0 -1
  69. package/dist/components/chart.d.ts +0 -43
  70. package/dist/components/chart.js +0 -271
  71. package/dist/components/chart.js.map +0 -1
  72. package/dist/components/checkbox.d.ts +0 -7
  73. package/dist/components/checkbox.js +0 -41
  74. package/dist/components/checkbox.js.map +0 -1
  75. package/dist/components/collapsible.d.ts +0 -8
  76. package/dist/components/collapsible.js +0 -38
  77. package/dist/components/collapsible.js.map +0 -1
  78. package/dist/components/command.d.ts +0 -22
  79. package/dist/components/command.js +0 -281
  80. package/dist/components/command.js.map +0 -1
  81. package/dist/components/context-menu.d.ts +0 -28
  82. package/dist/components/context-menu.js +0 -233
  83. package/dist/components/context-menu.js.map +0 -1
  84. package/dist/components/data-table/index.d.ts +0 -53
  85. package/dist/components/data-table/index.js +0 -823
  86. package/dist/components/data-table/index.js.map +0 -1
  87. package/dist/components/dialog.d.ts +0 -18
  88. package/dist/components/dialog.js +0 -146
  89. package/dist/components/dialog.js.map +0 -1
  90. package/dist/components/drawer.d.ts +0 -16
  91. package/dist/components/drawer.js +0 -138
  92. package/dist/components/drawer.js.map +0 -1
  93. package/dist/components/dropdown-menu.d.ts +0 -28
  94. package/dist/components/dropdown-menu.js +0 -241
  95. package/dist/components/dropdown-menu.js.map +0 -1
  96. package/dist/components/empty.d.ts +0 -15
  97. package/dist/components/empty.js +0 -110
  98. package/dist/components/empty.js.map +0 -1
  99. package/dist/components/entity/index.d.ts +0 -236
  100. package/dist/components/entity/index.js +0 -1796
  101. package/dist/components/entity/index.js.map +0 -1
  102. package/dist/components/field.d.ts +0 -30
  103. package/dist/components/field.js +0 -279
  104. package/dist/components/field.js.map +0 -1
  105. package/dist/components/form.d.ts +0 -28
  106. package/dist/components/form.js +0 -150
  107. package/dist/components/form.js.map +0 -1
  108. package/dist/components/hover-card.d.ts +0 -9
  109. package/dist/components/hover-card.js +0 -48
  110. package/dist/components/hover-card.js.map +0 -1
  111. package/dist/components/input-group.d.ts +0 -20
  112. package/dist/components/input-group.js +0 -265
  113. package/dist/components/input-group.js.map +0 -1
  114. package/dist/components/input-otp.d.ts +0 -14
  115. package/dist/components/input-otp.js +0 -76
  116. package/dist/components/input-otp.js.map +0 -1
  117. package/dist/components/input.d.ts +0 -6
  118. package/dist/components/input.js +0 -29
  119. package/dist/components/input.js.map +0 -1
  120. package/dist/components/item.d.ts +0 -28
  121. package/dist/components/item.js +0 -220
  122. package/dist/components/item.js.map +0 -1
  123. package/dist/components/kbd.d.ts +0 -6
  124. package/dist/components/kbd.js +0 -39
  125. package/dist/components/kbd.js.map +0 -1
  126. package/dist/components/label.d.ts +0 -7
  127. package/dist/components/label.js +0 -32
  128. package/dist/components/label.js.map +0 -1
  129. package/dist/components/link.d.ts +0 -12
  130. package/dist/components/link.js +0 -51
  131. package/dist/components/link.js.map +0 -1
  132. package/dist/components/menubar.d.ts +0 -29
  133. package/dist/components/menubar.js +0 -261
  134. package/dist/components/menubar.js.map +0 -1
  135. package/dist/components/mesob-context.d.ts +0 -34
  136. package/dist/components/mesob-context.js +0 -53
  137. package/dist/components/mesob-context.js.map +0 -1
  138. package/dist/components/mesob-logo.d.ts +0 -13
  139. package/dist/components/mesob-logo.js +0 -80
  140. package/dist/components/mesob-logo.js.map +0 -1
  141. package/dist/components/navigation-menu.d.ts +0 -18
  142. package/dist/components/navigation-menu.js +0 -178
  143. package/dist/components/navigation-menu.js.map +0 -1
  144. package/dist/components/page/index.d.ts +0 -46
  145. package/dist/components/page/index.js +0 -205
  146. package/dist/components/page/index.js.map +0 -1
  147. package/dist/components/pagination.d.ts +0 -18
  148. package/dist/components/pagination.js +0 -160
  149. package/dist/components/pagination.js.map +0 -1
  150. package/dist/components/popover.d.ts +0 -10
  151. package/dist/components/popover.js +0 -54
  152. package/dist/components/popover.js.map +0 -1
  153. package/dist/components/powered-by.d.ts +0 -8
  154. package/dist/components/powered-by.js +0 -114
  155. package/dist/components/powered-by.js.map +0 -1
  156. package/dist/components/progress.d.ts +0 -7
  157. package/dist/components/progress.js +0 -41
  158. package/dist/components/progress.js.map +0 -1
  159. package/dist/components/radio-group.d.ts +0 -8
  160. package/dist/components/radio-group.js +0 -55
  161. package/dist/components/radio-group.js.map +0 -1
  162. package/dist/components/resizable.d.ts +0 -11
  163. package/dist/components/resizable.js +0 -58
  164. package/dist/components/resizable.js.map +0 -1
  165. package/dist/components/scroll-area.d.ts +0 -8
  166. package/dist/components/scroll-area.js +0 -70
  167. package/dist/components/scroll-area.js.map +0 -1
  168. package/dist/components/section/index.d.ts +0 -14
  169. package/dist/components/section/index.js +0 -147
  170. package/dist/components/section/index.js.map +0 -1
  171. package/dist/components/select.d.ts +0 -18
  172. package/dist/components/select.js +0 -181
  173. package/dist/components/select.js.map +0 -1
  174. package/dist/components/separator.d.ts +0 -7
  175. package/dist/components/separator.js +0 -36
  176. package/dist/components/separator.js.map +0 -1
  177. package/dist/components/sheet.d.ts +0 -16
  178. package/dist/components/sheet.js +0 -136
  179. package/dist/components/sheet.js.map +0 -1
  180. package/dist/components/shell.d.ts +0 -13
  181. package/dist/components/shell.js +0 -548
  182. package/dist/components/shell.js.map +0 -1
  183. package/dist/components/sidebar-context.d.ts +0 -19
  184. package/dist/components/sidebar-context.js +0 -17
  185. package/dist/components/sidebar-context.js.map +0 -1
  186. package/dist/components/sidebar.d.ts +0 -66
  187. package/dist/components/sidebar.js +0 -943
  188. package/dist/components/sidebar.js.map +0 -1
  189. package/dist/components/skeleton.d.ts +0 -5
  190. package/dist/components/skeleton.js +0 -23
  191. package/dist/components/skeleton.js.map +0 -1
  192. package/dist/components/slider.d.ts +0 -7
  193. package/dist/components/slider.js +0 -76
  194. package/dist/components/slider.js.map +0 -1
  195. package/dist/components/sonner.d.ts +0 -7
  196. package/dist/components/sonner.js +0 -43
  197. package/dist/components/sonner.js.map +0 -1
  198. package/dist/components/spinner.d.ts +0 -6
  199. package/dist/components/spinner.js +0 -28
  200. package/dist/components/spinner.js.map +0 -1
  201. package/dist/components/spotlight-search.d.ts +0 -25
  202. package/dist/components/spotlight-search.js +0 -395
  203. package/dist/components/spotlight-search.js.map +0 -1
  204. package/dist/components/switch.d.ts +0 -7
  205. package/dist/components/switch.js +0 -41
  206. package/dist/components/switch.js.map +0 -1
  207. package/dist/components/table.d.ts +0 -13
  208. package/dist/components/table.js +0 -124
  209. package/dist/components/table.js.map +0 -1
  210. package/dist/components/tabs.d.ts +0 -10
  211. package/dist/components/tabs.js +0 -77
  212. package/dist/components/tabs.js.map +0 -1
  213. package/dist/components/textarea.d.ts +0 -6
  214. package/dist/components/textarea.js +0 -26
  215. package/dist/components/textarea.js.map +0 -1
  216. package/dist/components/theme-toggle.d.ts +0 -8
  217. package/dist/components/theme-toggle.js +0 -94
  218. package/dist/components/theme-toggle.js.map +0 -1
  219. package/dist/components/toggle-group.d.ts +0 -14
  220. package/dist/components/toggle-group.js +0 -102
  221. package/dist/components/toggle-group.js.map +0 -1
  222. package/dist/components/toggle.d.ts +0 -13
  223. package/dist/components/toggle.js +0 -53
  224. package/dist/components/toggle.js.map +0 -1
  225. package/dist/components/tooltip.d.ts +0 -10
  226. package/dist/components/tooltip.js +0 -66
  227. package/dist/components/tooltip.js.map +0 -1
  228. package/dist/hooks/use-mobile.d.ts +0 -3
  229. package/dist/hooks/use-mobile.js +0 -22
  230. package/dist/hooks/use-mobile.js.map +0 -1
  231. package/dist/hooks/use-router.d.ts +0 -7
  232. package/dist/hooks/use-router.js +0 -36
  233. package/dist/hooks/use-router.js.map +0 -1
  234. package/dist/hooks/use-translation.d.ts +0 -5
  235. package/dist/hooks/use-translation.js +0 -42
  236. package/dist/hooks/use-translation.js.map +0 -1
@@ -1,667 +0,0 @@
1
- "use client";
2
-
3
- // src/lib/utils.ts
4
- import { clsx } from "clsx";
5
- import { twMerge } from "tailwind-merge";
6
- function cn(...inputs) {
7
- return twMerge(clsx(inputs));
8
- }
9
-
10
- // src/components/tooltip.tsx
11
- import * as TooltipPrimitive from "@radix-ui/react-tooltip";
12
- import { jsx, jsxs } from "react/jsx-runtime";
13
- function Tooltip({
14
- children,
15
- ...props
16
- }) {
17
- return /* @__PURE__ */ jsx(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props, children });
18
- }
19
- function TooltipTrigger({
20
- ...props
21
- }) {
22
- return /* @__PURE__ */ jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
23
- }
24
- function TooltipContent({
25
- className,
26
- sideOffset = 0,
27
- children,
28
- ...props
29
- }) {
30
- return /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
31
- TooltipPrimitive.Content,
32
- {
33
- "data-slot": "tooltip-content",
34
- sideOffset,
35
- className: cn(
36
- "bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",
37
- className
38
- ),
39
- ...props,
40
- children: [
41
- children,
42
- /* @__PURE__ */ jsx(TooltipPrimitive.Arrow, { className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })
43
- ]
44
- }
45
- ) });
46
- }
47
-
48
- // src/components/mesob-context.tsx
49
- import {
50
- createContext,
51
- useContext,
52
- useMemo
53
- } from "react";
54
- import { jsx as jsx2 } from "react/jsx-runtime";
55
- var MesobContext = createContext(null);
56
- function useMesob() {
57
- return useContext(MesobContext);
58
- }
59
-
60
- // src/components/link.tsx
61
- import { jsx as jsx3 } from "react/jsx-runtime";
62
- function Link({
63
- href,
64
- children,
65
- className,
66
- onClick,
67
- ...props
68
- }) {
69
- const mesob = useMesob();
70
- const LinkComponent = mesob?.linkComponent ?? "a";
71
- if (LinkComponent === "a") {
72
- return /* @__PURE__ */ jsx3("a", { href, className, onClick, ...props, children });
73
- }
74
- return /* @__PURE__ */ jsx3(
75
- LinkComponent,
76
- {
77
- href,
78
- className,
79
- onClick,
80
- ...props,
81
- children
82
- }
83
- );
84
- }
85
-
86
- // src/components/button.tsx
87
- import { Slot } from "@radix-ui/react-slot";
88
- import { cva } from "class-variance-authority";
89
- import { Fragment, jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
90
- var buttonVariants = cva(
91
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
92
- {
93
- variants: {
94
- variant: {
95
- default: "bg-primary text-primary-foreground hover:bg-primary-600 dark:hover:bg-primary-400",
96
- destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
97
- outline: "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
98
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary-600 dark:hover:bg-secondary-400",
99
- ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
100
- link: "text-primary underline-offset-4 hover:text-primary-600 dark:hover:text-primary-400 hover:underline"
101
- },
102
- size: {
103
- default: "h-9 px-4 py-2 has-[>svg]:px-3",
104
- sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
105
- lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
106
- icon: "size-9",
107
- "icon-sm": "size-8",
108
- "icon-lg": "size-10"
109
- }
110
- },
111
- defaultVariants: {
112
- variant: "default",
113
- size: "default"
114
- }
115
- }
116
- );
117
-
118
- // src/components/input.tsx
119
- import { jsx as jsx5 } from "react/jsx-runtime";
120
-
121
- // src/components/separator.tsx
122
- import * as SeparatorPrimitive from "@radix-ui/react-separator";
123
- import { jsx as jsx6 } from "react/jsx-runtime";
124
-
125
- // src/components/sheet.tsx
126
- import * as SheetPrimitive from "@radix-ui/react-dialog";
127
- import { IconX } from "@tabler/icons-react";
128
- import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
129
- function Sheet({ ...props }) {
130
- return /* @__PURE__ */ jsx7(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
131
- }
132
- function SheetPortal({
133
- ...props
134
- }) {
135
- return /* @__PURE__ */ jsx7(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
136
- }
137
- function SheetOverlay({
138
- className,
139
- ...props
140
- }) {
141
- return /* @__PURE__ */ jsx7(
142
- SheetPrimitive.Overlay,
143
- {
144
- "data-slot": "sheet-overlay",
145
- className: cn(
146
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=open]:opacity-100 fixed inset-0 z-50 bg-[var(--overlay,oklch(0_0_0/0.5))]",
147
- className
148
- ),
149
- ...props
150
- }
151
- );
152
- }
153
- function SheetContent({
154
- className,
155
- children,
156
- side = "right",
157
- ...props
158
- }) {
159
- return /* @__PURE__ */ jsxs3(SheetPortal, { children: [
160
- /* @__PURE__ */ jsx7(SheetOverlay, {}),
161
- /* @__PURE__ */ jsxs3(
162
- SheetPrimitive.Content,
163
- {
164
- "data-slot": "sheet-content",
165
- className: cn(
166
- "bg-background text-foreground border-border data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:opacity-100 fixed z-[51] flex min-w-0 flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
167
- side === "right" && "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",
168
- side === "left" && "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",
169
- side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",
170
- side === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",
171
- className
172
- ),
173
- ...props,
174
- children: [
175
- children,
176
- /* @__PURE__ */ jsxs3(SheetPrimitive.Close, { className: "ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none", children: [
177
- /* @__PURE__ */ jsx7(IconX, { className: "size-4" }),
178
- /* @__PURE__ */ jsx7("span", { className: "sr-only", children: "Close" })
179
- ] })
180
- ]
181
- }
182
- )
183
- ] });
184
- }
185
- function SheetHeader({ className, ...props }) {
186
- return /* @__PURE__ */ jsx7(
187
- "div",
188
- {
189
- "data-slot": "sheet-header",
190
- className: cn("flex flex-col gap-1.5 p-4", className),
191
- ...props
192
- }
193
- );
194
- }
195
- function SheetTitle({
196
- className,
197
- ...props
198
- }) {
199
- return /* @__PURE__ */ jsx7(
200
- SheetPrimitive.Title,
201
- {
202
- "data-slot": "sheet-title",
203
- className: cn("text-foreground font-semibold", className),
204
- ...props
205
- }
206
- );
207
- }
208
- function SheetDescription({
209
- className,
210
- ...props
211
- }) {
212
- return /* @__PURE__ */ jsx7(
213
- SheetPrimitive.Description,
214
- {
215
- "data-slot": "sheet-description",
216
- className: cn("text-muted-foreground text-sm", className),
217
- ...props
218
- }
219
- );
220
- }
221
-
222
- // src/components/skeleton.tsx
223
- import { jsx as jsx8 } from "react/jsx-runtime";
224
-
225
- // src/hooks/use-mobile.ts
226
- import * as React from "react";
227
-
228
- // src/components/sidebar.tsx
229
- import { Slot as Slot2 } from "@radix-ui/react-slot";
230
- import { IconMenu2 } from "@tabler/icons-react";
231
- import { cva as cva2 } from "class-variance-authority";
232
- import * as React2 from "react";
233
- import {
234
- SidebarContext,
235
- useSidebar
236
- } from "./sidebar-context";
237
- import { useSidebar as useSidebar2 } from "./sidebar-context";
238
- import { jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
239
- var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
240
- var SIDEBAR_WIDTH_MOBILE = "18rem";
241
- function Sidebar({
242
- side = "left",
243
- variant = "sidebar",
244
- collapsible = "offcanvas",
245
- className,
246
- children,
247
- ...props
248
- }) {
249
- const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
250
- if (collapsible === "none") {
251
- return /* @__PURE__ */ jsx9(
252
- "div",
253
- {
254
- "data-slot": "sidebar",
255
- className: cn(
256
- "bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col",
257
- className
258
- ),
259
- ...props,
260
- children
261
- }
262
- );
263
- }
264
- if (isMobile) {
265
- return /* @__PURE__ */ jsx9(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsxs4(
266
- SheetContent,
267
- {
268
- "data-sidebar": "sidebar",
269
- "data-slot": "sidebar",
270
- "data-mobile": "true",
271
- className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden",
272
- style: {
273
- "--sidebar-width": SIDEBAR_WIDTH_MOBILE
274
- },
275
- side,
276
- children: [
277
- /* @__PURE__ */ jsxs4(SheetHeader, { className: "sr-only", children: [
278
- /* @__PURE__ */ jsx9(SheetTitle, { children: "Sidebar" }),
279
- /* @__PURE__ */ jsx9(SheetDescription, { children: "Displays the mobile sidebar." })
280
- ] }),
281
- /* @__PURE__ */ jsx9("div", { className: "flex h-full w-full flex-col", children })
282
- ]
283
- }
284
- ) });
285
- }
286
- return /* @__PURE__ */ jsxs4(
287
- "div",
288
- {
289
- className: "group peer text-sidebar-foreground hidden md:block",
290
- "data-state": state,
291
- "data-collapsible": state === "collapsed" ? collapsible : "",
292
- "data-variant": variant,
293
- "data-side": side,
294
- "data-slot": "sidebar",
295
- children: [
296
- /* @__PURE__ */ jsx9(
297
- "div",
298
- {
299
- "data-slot": "sidebar-gap",
300
- className: cn(
301
- "relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear",
302
- "group-data-[collapsible=offcanvas]:w-0",
303
- "group-data-[side=right]:rotate-180",
304
- variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)"
305
- )
306
- }
307
- ),
308
- /* @__PURE__ */ jsx9(
309
- "div",
310
- {
311
- "data-slot": "sidebar-container",
312
- className: cn(
313
- "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",
314
- 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)]",
315
- // Adjust the padding for floating and inset variants.
316
- 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",
317
- className
318
- ),
319
- ...props,
320
- children: /* @__PURE__ */ jsx9(
321
- "div",
322
- {
323
- "data-sidebar": "sidebar",
324
- "data-slot": "sidebar-inner",
325
- className: "bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm",
326
- children
327
- }
328
- )
329
- }
330
- )
331
- ]
332
- }
333
- );
334
- }
335
- function SidebarHeader({ className, ...props }) {
336
- return /* @__PURE__ */ jsx9(
337
- "div",
338
- {
339
- "data-slot": "sidebar-header",
340
- "data-sidebar": "header",
341
- className: cn("flex flex-col gap-2 p-2", className),
342
- ...props
343
- }
344
- );
345
- }
346
- function SidebarFooter({ className, ...props }) {
347
- return /* @__PURE__ */ jsx9(
348
- "div",
349
- {
350
- "data-slot": "sidebar-footer",
351
- "data-sidebar": "footer",
352
- className: cn("flex flex-col gap-2 p-2", className),
353
- ...props
354
- }
355
- );
356
- }
357
- function SidebarContent({ className, ...props }) {
358
- return /* @__PURE__ */ jsx9(
359
- "div",
360
- {
361
- "data-slot": "sidebar-content",
362
- "data-sidebar": "content",
363
- className: cn(
364
- "flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",
365
- className
366
- ),
367
- ...props
368
- }
369
- );
370
- }
371
- function SidebarGroup({ className, ...props }) {
372
- return /* @__PURE__ */ jsx9(
373
- "div",
374
- {
375
- "data-slot": "sidebar-group",
376
- "data-sidebar": "group",
377
- className: cn("relative flex w-full min-w-0 flex-col p-2", className),
378
- ...props
379
- }
380
- );
381
- }
382
- function SidebarGroupLabel({
383
- className,
384
- asChild = false,
385
- ...props
386
- }) {
387
- const Comp = asChild ? Slot2 : "div";
388
- return /* @__PURE__ */ jsx9(
389
- Comp,
390
- {
391
- "data-slot": "sidebar-group-label",
392
- "data-sidebar": "group-label",
393
- className: cn(
394
- "text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
395
- "group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",
396
- className
397
- ),
398
- ...props
399
- }
400
- );
401
- }
402
- function SidebarGroupContent({
403
- className,
404
- ...props
405
- }) {
406
- return /* @__PURE__ */ jsx9(
407
- "div",
408
- {
409
- "data-slot": "sidebar-group-content",
410
- "data-sidebar": "group-content",
411
- className: cn("w-full text-sm", className),
412
- ...props
413
- }
414
- );
415
- }
416
- var sidebarMenuButtonVariants = cva2(
417
- 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-active focus-visible:ring-2 active:bg-sidebar-active disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:relative data-[active=true]:bg-sidebar-active data-[active=true]:pl-3 data-[active=true]:font-medium data-[active=true]:text-sidebar-primary data-[active=true]:before:absolute data-[active=true]:before:left-1 data-[active=true]:before:top-[6px] data-[active=true]:before:bottom-[6px] data-[active=true]:before:w-[3px] data-[active=true]:before:rounded-full data-[active=true]:before:bg-primary data-[active=true]:before:content-[""] data-[state=open]:hover:bg-sidebar-active group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 min-w-0',
418
- {
419
- variants: {
420
- variant: {
421
- default: "hover:bg-sidebar-active",
422
- 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))]"
423
- },
424
- size: {
425
- default: "h-8 text-sm",
426
- sm: "h-7 text-xs",
427
- lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!"
428
- }
429
- },
430
- defaultVariants: {
431
- variant: "default",
432
- size: "default"
433
- }
434
- }
435
- );
436
-
437
- // src/components/app-sidebar.tsx
438
- import { IconChevronDown } from "@tabler/icons-react";
439
- import { useEffect as useEffect3, useRef, useState as useState3 } from "react";
440
- import { useToggle } from "react-use";
441
- import { useSidebar as useSidebar3 } from "./sidebar-context";
442
- import { Fragment as Fragment2, jsx as jsx10, jsxs as jsxs5 } from "react/jsx-runtime";
443
- function isLinkActive(pathname, href, pathMatch = "prefix") {
444
- if (!pathname) {
445
- return false;
446
- }
447
- if (!href) {
448
- return false;
449
- }
450
- if (pathMatch === "exact") {
451
- return pathname === href;
452
- }
453
- if (pathname === href) {
454
- return true;
455
- }
456
- return pathname.startsWith(`${href}/`);
457
- }
458
- function hasActiveDescendant(item, pathname) {
459
- if (!pathname) {
460
- return false;
461
- }
462
- if (isLinkActive(pathname, item.href, item.pathMatch ?? "prefix")) {
463
- return true;
464
- }
465
- return item.children?.some((c) => hasActiveDescendant(c, pathname)) ?? false;
466
- }
467
- function hasPermission(roles, permission) {
468
- if (!permission?.length) {
469
- return true;
470
- }
471
- if (!roles?.length) {
472
- return true;
473
- }
474
- return permission.some((p) => roles.includes(p));
475
- }
476
- var TRUNCATION_TOOLTIP_MIN_LENGTH = 24;
477
- function TruncationTooltip({
478
- text,
479
- children
480
- }) {
481
- const ref = useRef(null);
482
- const [truncated, setTruncated] = useState3(false);
483
- useEffect3(() => {
484
- const el = ref.current;
485
- if (!el) {
486
- return;
487
- }
488
- const check = () => setTruncated(el.scrollWidth > el.clientWidth);
489
- check();
490
- const ro = new ResizeObserver(check);
491
- ro.observe(el);
492
- return () => ro.disconnect();
493
- }, [text]);
494
- const showTooltip = truncated || text.length >= TRUNCATION_TOOLTIP_MIN_LENGTH;
495
- const inner = /* @__PURE__ */ jsx10("span", { ref, className: "min-w-0 truncate block", children });
496
- if (!showTooltip) {
497
- return inner;
498
- }
499
- return /* @__PURE__ */ jsxs5(Tooltip, { children: [
500
- /* @__PURE__ */ jsx10(TooltipTrigger, { asChild: true, children: inner }),
501
- /* @__PURE__ */ jsx10(TooltipContent, { side: "right", sideOffset: 8, children: text })
502
- ] });
503
- }
504
- function MenuLabel({ icon: Icon, label }) {
505
- return /* @__PURE__ */ jsxs5("div", { className: "text-sidebar-foreground flex min-h-0 min-w-0 flex-1 cursor-pointer items-center gap-2 text-sm", children: [
506
- Icon ? /* @__PURE__ */ jsx10(Icon, { className: "size-4 shrink-0" }) : null,
507
- /* @__PURE__ */ jsx10(TruncationTooltip, { text: label, children: label })
508
- ] });
509
- }
510
- function RowContent({
511
- item,
512
- hasChildren,
513
- showChildren
514
- }) {
515
- return /* @__PURE__ */ jsxs5(Fragment2, { children: [
516
- /* @__PURE__ */ jsx10(MenuLabel, { icon: item.icon, label: item.title }),
517
- hasChildren && /* @__PURE__ */ jsx10(
518
- IconChevronDown,
519
- {
520
- className: cn(
521
- "ml-auto size-4 shrink-0 cursor-pointer transition-transform",
522
- showChildren && "rotate-180"
523
- ),
524
- "aria-hidden": true
525
- }
526
- )
527
- ] });
528
- }
529
- function NavItemRow({
530
- item,
531
- level,
532
- pathname,
533
- roles,
534
- onNavClick
535
- }) {
536
- const [open, toggle] = useToggle(hasActiveDescendant(item, pathname));
537
- const hasChildren = (item.children?.length ?? 0) > 0;
538
- const showChildren = (open || hasActiveDescendant(item, pathname)) && hasChildren;
539
- const pathMatch = item.pathMatch ?? "prefix";
540
- const isActive = isLinkActive(pathname, item.href, pathMatch);
541
- const lineLeft = 28 + 20 * level;
542
- if (!hasPermission(roles, item.permission)) {
543
- return null;
544
- }
545
- const paddingLeft = 20 + 20 * level;
546
- const rowWrapperClass = cn(
547
- "text-sidebar-foreground relative flex h-8 w-full min-w-0 items-center rounded-md pr-2 text-left text-sm transition duration-300 ease-in-out",
548
- "hover:bg-sidebar-active",
549
- isActive && "bg-sidebar-active text-sidebar-primary"
550
- );
551
- const rowContent = /* @__PURE__ */ jsxs5(Fragment2, { children: [
552
- isActive && /* @__PURE__ */ jsx10(
553
- "div",
554
- {
555
- className: "absolute left-1 top-1.5 bottom-1.5 z-10 w-[3px] rounded-full bg-primary",
556
- "aria-hidden": true
557
- }
558
- ),
559
- /* @__PURE__ */ jsx10(
560
- RowContent,
561
- {
562
- item,
563
- hasChildren,
564
- showChildren
565
- }
566
- )
567
- ] });
568
- return /* @__PURE__ */ jsxs5("li", { className: "relative mt-1", children: [
569
- item.href ? /* @__PURE__ */ jsx10(
570
- Link,
571
- {
572
- href: item.href,
573
- onClick: hasChildren ? toggle : onNavClick,
574
- className: rowWrapperClass,
575
- style: { paddingLeft },
576
- "aria-current": isActive ? "page" : void 0,
577
- children: rowContent
578
- }
579
- ) : /* @__PURE__ */ jsx10(
580
- "button",
581
- {
582
- type: "button",
583
- onClick: toggle,
584
- className: rowWrapperClass,
585
- style: { paddingLeft },
586
- "aria-expanded": showChildren,
587
- "aria-label": item.title,
588
- children: rowContent
589
- }
590
- ),
591
- showChildren && /* @__PURE__ */ jsxs5("ul", { className: "relative mt-1", children: [
592
- /* @__PURE__ */ jsx10(
593
- "div",
594
- {
595
- className: "absolute top-0 bottom-0 z-10 w-px bg-sidebar-border",
596
- style: { left: lineLeft },
597
- "aria-hidden": true
598
- }
599
- ),
600
- (item.children ?? []).map((child) => /* @__PURE__ */ jsx10(
601
- NavItemRow,
602
- {
603
- item: child,
604
- level: level + 1,
605
- pathname,
606
- roles,
607
- onNavClick
608
- },
609
- child.href ?? child.title
610
- ))
611
- ] })
612
- ] });
613
- }
614
- function AppSidebar({
615
- logo,
616
- navItems,
617
- footer,
618
- pathname,
619
- roles
620
- }) {
621
- const { isMobile, setOpenMobile } = useSidebar3();
622
- const closeSidebar = () => {
623
- if (isMobile) {
624
- setOpenMobile(false);
625
- }
626
- };
627
- const groupedItems = navItems.reduce(
628
- (acc, item) => {
629
- const group = item.group ?? "default";
630
- if (!acc[group]) {
631
- acc[group] = [];
632
- }
633
- acc[group].push(item);
634
- return acc;
635
- },
636
- {}
637
- );
638
- return /* @__PURE__ */ jsxs5(Sidebar, { children: [
639
- /* @__PURE__ */ jsx10(SidebarHeader, { children: logo }),
640
- /* @__PURE__ */ jsx10(SidebarContent, { children: /* @__PURE__ */ jsx10(
641
- "nav",
642
- {
643
- "aria-label": "Main navigation",
644
- className: "flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto",
645
- children: Object.entries(groupedItems).map(([groupName, items]) => /* @__PURE__ */ jsxs5(SidebarGroup, { className: "py-0", children: [
646
- groupName !== "default" && /* @__PURE__ */ jsx10(SidebarGroupLabel, { className: "uppercase tracking-wide", children: groupName }),
647
- /* @__PURE__ */ jsx10(SidebarGroupContent, { children: /* @__PURE__ */ jsx10("ul", { className: "flex w-full min-w-0 list-none flex-col gap-0 p-0", children: items.map((item) => /* @__PURE__ */ jsx10(
648
- NavItemRow,
649
- {
650
- item,
651
- level: 0,
652
- pathname,
653
- roles,
654
- onNavClick: closeSidebar
655
- },
656
- item.href ?? item.title
657
- )) }) })
658
- ] }, groupName))
659
- }
660
- ) }),
661
- footer && /* @__PURE__ */ jsx10(SidebarFooter, { children: footer })
662
- ] });
663
- }
664
- export {
665
- AppSidebar
666
- };
667
- //# sourceMappingURL=app-sidebar.js.map