@mesob/ui 0.2.2 → 0.2.4

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 (227) hide show
  1. package/dist/components.d.ts +992 -0
  2. package/dist/components.js +8030 -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/providers.d.ts +20 -0
  8. package/dist/providers.js +61 -0
  9. package/dist/providers.js.map +1 -0
  10. package/dist/use-entity-params-nqD69tdX.d.ts +82 -0
  11. package/package.json +14 -27
  12. package/dist/components/accordion.d.ts +0 -10
  13. package/dist/components/accordion.js +0 -74
  14. package/dist/components/accordion.js.map +0 -1
  15. package/dist/components/alert-dialog.d.ts +0 -17
  16. package/dist/components/alert-dialog.js +0 -187
  17. package/dist/components/alert-dialog.js.map +0 -1
  18. package/dist/components/alert.d.ts +0 -13
  19. package/dist/components/alert.js +0 -74
  20. package/dist/components/alert.js.map +0 -1
  21. package/dist/components/animated-tabs.d.ts +0 -26
  22. package/dist/components/animated-tabs.js +0 -290
  23. package/dist/components/animated-tabs.js.map +0 -1
  24. package/dist/components/app-breadcrumbs.d.ts +0 -34
  25. package/dist/components/app-breadcrumbs.js +0 -177
  26. package/dist/components/app-breadcrumbs.js.map +0 -1
  27. package/dist/components/app-header-actions.d.ts +0 -39
  28. package/dist/components/app-header-actions.js +0 -644
  29. package/dist/components/app-header-actions.js.map +0 -1
  30. package/dist/components/app-sidebar.d.ts +0 -24
  31. package/dist/components/app-sidebar.js +0 -674
  32. package/dist/components/app-sidebar.js.map +0 -1
  33. package/dist/components/aspect-ratio.d.ts +0 -6
  34. package/dist/components/aspect-ratio.js +0 -14
  35. package/dist/components/aspect-ratio.js.map +0 -1
  36. package/dist/components/avatar.d.ts +0 -9
  37. package/dist/components/avatar.js +0 -63
  38. package/dist/components/avatar.js.map +0 -1
  39. package/dist/components/badge.d.ts +0 -13
  40. package/dist/components/badge.js +0 -48
  41. package/dist/components/badge.js.map +0 -1
  42. package/dist/components/breadcrumb.d.ts +0 -14
  43. package/dist/components/breadcrumb.js +0 -110
  44. package/dist/components/breadcrumb.js.map +0 -1
  45. package/dist/components/button-group.d.ts +0 -17
  46. package/dist/components/button-group.js +0 -106
  47. package/dist/components/button-group.js.map +0 -1
  48. package/dist/components/button.d.ts +0 -17
  49. package/dist/components/button.js +0 -68
  50. package/dist/components/button.js.map +0 -1
  51. package/dist/components/calendar.d.ts +0 -13
  52. package/dist/components/calendar.js +0 -262
  53. package/dist/components/calendar.js.map +0 -1
  54. package/dist/components/card.d.ts +0 -12
  55. package/dist/components/card.js +0 -98
  56. package/dist/components/card.js.map +0 -1
  57. package/dist/components/carousel.d.ts +0 -24
  58. package/dist/components/carousel.js +0 -268
  59. package/dist/components/carousel.js.map +0 -1
  60. package/dist/components/chart.d.ts +0 -43
  61. package/dist/components/chart.js +0 -271
  62. package/dist/components/chart.js.map +0 -1
  63. package/dist/components/checkbox.d.ts +0 -7
  64. package/dist/components/checkbox.js +0 -41
  65. package/dist/components/checkbox.js.map +0 -1
  66. package/dist/components/collapsible.d.ts +0 -8
  67. package/dist/components/collapsible.js +0 -38
  68. package/dist/components/collapsible.js.map +0 -1
  69. package/dist/components/command.d.ts +0 -22
  70. package/dist/components/command.js +0 -281
  71. package/dist/components/command.js.map +0 -1
  72. package/dist/components/context-menu.d.ts +0 -28
  73. package/dist/components/context-menu.js +0 -233
  74. package/dist/components/context-menu.js.map +0 -1
  75. package/dist/components/data-table/index.d.ts +0 -53
  76. package/dist/components/data-table/index.js +0 -823
  77. package/dist/components/data-table/index.js.map +0 -1
  78. package/dist/components/dialog.d.ts +0 -18
  79. package/dist/components/dialog.js +0 -146
  80. package/dist/components/dialog.js.map +0 -1
  81. package/dist/components/drawer.d.ts +0 -16
  82. package/dist/components/drawer.js +0 -138
  83. package/dist/components/drawer.js.map +0 -1
  84. package/dist/components/dropdown-menu.d.ts +0 -28
  85. package/dist/components/dropdown-menu.js +0 -241
  86. package/dist/components/dropdown-menu.js.map +0 -1
  87. package/dist/components/empty.d.ts +0 -15
  88. package/dist/components/empty.js +0 -110
  89. package/dist/components/empty.js.map +0 -1
  90. package/dist/components/entity/index.d.ts +0 -236
  91. package/dist/components/entity/index.js +0 -1796
  92. package/dist/components/entity/index.js.map +0 -1
  93. package/dist/components/field.d.ts +0 -30
  94. package/dist/components/field.js +0 -279
  95. package/dist/components/field.js.map +0 -1
  96. package/dist/components/form.d.ts +0 -28
  97. package/dist/components/form.js +0 -150
  98. package/dist/components/form.js.map +0 -1
  99. package/dist/components/hover-card.d.ts +0 -9
  100. package/dist/components/hover-card.js +0 -48
  101. package/dist/components/hover-card.js.map +0 -1
  102. package/dist/components/input-group.d.ts +0 -20
  103. package/dist/components/input-group.js +0 -265
  104. package/dist/components/input-group.js.map +0 -1
  105. package/dist/components/input-otp.d.ts +0 -14
  106. package/dist/components/input-otp.js +0 -76
  107. package/dist/components/input-otp.js.map +0 -1
  108. package/dist/components/input.d.ts +0 -6
  109. package/dist/components/input.js +0 -29
  110. package/dist/components/input.js.map +0 -1
  111. package/dist/components/item.d.ts +0 -28
  112. package/dist/components/item.js +0 -220
  113. package/dist/components/item.js.map +0 -1
  114. package/dist/components/kbd.d.ts +0 -6
  115. package/dist/components/kbd.js +0 -39
  116. package/dist/components/kbd.js.map +0 -1
  117. package/dist/components/label.d.ts +0 -7
  118. package/dist/components/label.js +0 -32
  119. package/dist/components/label.js.map +0 -1
  120. package/dist/components/link.d.ts +0 -12
  121. package/dist/components/link.js +0 -51
  122. package/dist/components/link.js.map +0 -1
  123. package/dist/components/menubar.d.ts +0 -29
  124. package/dist/components/menubar.js +0 -261
  125. package/dist/components/menubar.js.map +0 -1
  126. package/dist/components/mesob-context.d.ts +0 -34
  127. package/dist/components/mesob-context.js +0 -53
  128. package/dist/components/mesob-context.js.map +0 -1
  129. package/dist/components/mesob-logo.d.ts +0 -13
  130. package/dist/components/mesob-logo.js +0 -80
  131. package/dist/components/mesob-logo.js.map +0 -1
  132. package/dist/components/navigation-menu.d.ts +0 -18
  133. package/dist/components/navigation-menu.js +0 -178
  134. package/dist/components/navigation-menu.js.map +0 -1
  135. package/dist/components/page/index.d.ts +0 -46
  136. package/dist/components/page/index.js +0 -205
  137. package/dist/components/page/index.js.map +0 -1
  138. package/dist/components/pagination.d.ts +0 -18
  139. package/dist/components/pagination.js +0 -160
  140. package/dist/components/pagination.js.map +0 -1
  141. package/dist/components/popover.d.ts +0 -10
  142. package/dist/components/popover.js +0 -54
  143. package/dist/components/popover.js.map +0 -1
  144. package/dist/components/powered-by.d.ts +0 -8
  145. package/dist/components/powered-by.js +0 -114
  146. package/dist/components/powered-by.js.map +0 -1
  147. package/dist/components/progress.d.ts +0 -7
  148. package/dist/components/progress.js +0 -41
  149. package/dist/components/progress.js.map +0 -1
  150. package/dist/components/radio-group.d.ts +0 -8
  151. package/dist/components/radio-group.js +0 -55
  152. package/dist/components/radio-group.js.map +0 -1
  153. package/dist/components/resizable.d.ts +0 -11
  154. package/dist/components/resizable.js +0 -58
  155. package/dist/components/resizable.js.map +0 -1
  156. package/dist/components/scroll-area.d.ts +0 -8
  157. package/dist/components/scroll-area.js +0 -70
  158. package/dist/components/scroll-area.js.map +0 -1
  159. package/dist/components/section/index.d.ts +0 -14
  160. package/dist/components/section/index.js +0 -147
  161. package/dist/components/section/index.js.map +0 -1
  162. package/dist/components/select.d.ts +0 -18
  163. package/dist/components/select.js +0 -181
  164. package/dist/components/select.js.map +0 -1
  165. package/dist/components/separator.d.ts +0 -7
  166. package/dist/components/separator.js +0 -36
  167. package/dist/components/separator.js.map +0 -1
  168. package/dist/components/sheet.d.ts +0 -16
  169. package/dist/components/sheet.js +0 -136
  170. package/dist/components/sheet.js.map +0 -1
  171. package/dist/components/shell.d.ts +0 -13
  172. package/dist/components/shell.js +0 -558
  173. package/dist/components/shell.js.map +0 -1
  174. package/dist/components/sidebar-context.d.ts +0 -19
  175. package/dist/components/sidebar-context.js +0 -17
  176. package/dist/components/sidebar-context.js.map +0 -1
  177. package/dist/components/sidebar.d.ts +0 -66
  178. package/dist/components/sidebar.js +0 -951
  179. package/dist/components/sidebar.js.map +0 -1
  180. package/dist/components/skeleton.d.ts +0 -5
  181. package/dist/components/skeleton.js +0 -23
  182. package/dist/components/skeleton.js.map +0 -1
  183. package/dist/components/slider.d.ts +0 -7
  184. package/dist/components/slider.js +0 -76
  185. package/dist/components/slider.js.map +0 -1
  186. package/dist/components/sonner.d.ts +0 -7
  187. package/dist/components/sonner.js +0 -43
  188. package/dist/components/sonner.js.map +0 -1
  189. package/dist/components/spinner.d.ts +0 -6
  190. package/dist/components/spinner.js +0 -28
  191. package/dist/components/spinner.js.map +0 -1
  192. package/dist/components/spotlight-search.d.ts +0 -25
  193. package/dist/components/spotlight-search.js +0 -395
  194. package/dist/components/spotlight-search.js.map +0 -1
  195. package/dist/components/switch.d.ts +0 -7
  196. package/dist/components/switch.js +0 -41
  197. package/dist/components/switch.js.map +0 -1
  198. package/dist/components/table.d.ts +0 -13
  199. package/dist/components/table.js +0 -124
  200. package/dist/components/table.js.map +0 -1
  201. package/dist/components/tabs.d.ts +0 -10
  202. package/dist/components/tabs.js +0 -77
  203. package/dist/components/tabs.js.map +0 -1
  204. package/dist/components/textarea.d.ts +0 -6
  205. package/dist/components/textarea.js +0 -26
  206. package/dist/components/textarea.js.map +0 -1
  207. package/dist/components/theme-toggle.d.ts +0 -8
  208. package/dist/components/theme-toggle.js +0 -94
  209. package/dist/components/theme-toggle.js.map +0 -1
  210. package/dist/components/toggle-group.d.ts +0 -14
  211. package/dist/components/toggle-group.js +0 -102
  212. package/dist/components/toggle-group.js.map +0 -1
  213. package/dist/components/toggle.d.ts +0 -13
  214. package/dist/components/toggle.js +0 -53
  215. package/dist/components/toggle.js.map +0 -1
  216. package/dist/components/tooltip.d.ts +0 -10
  217. package/dist/components/tooltip.js +0 -66
  218. package/dist/components/tooltip.js.map +0 -1
  219. package/dist/hooks/use-mobile.d.ts +0 -3
  220. package/dist/hooks/use-mobile.js +0 -22
  221. package/dist/hooks/use-mobile.js.map +0 -1
  222. package/dist/hooks/use-router.d.ts +0 -7
  223. package/dist/hooks/use-router.js +0 -36
  224. package/dist/hooks/use-router.js.map +0 -1
  225. package/dist/hooks/use-translation.d.ts +0 -5
  226. package/dist/hooks/use-translation.js +0 -42
  227. package/dist/hooks/use-translation.js.map +0 -1
@@ -1,558 +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/breadcrumb.tsx
11
- import { Slot } from "@radix-ui/react-slot";
12
- import { IconChevronRight, IconDots } from "@tabler/icons-react";
13
- import { jsx, jsxs } from "react/jsx-runtime";
14
- function Breadcrumb({ ...props }) {
15
- return /* @__PURE__ */ jsx("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props });
16
- }
17
- function BreadcrumbList({ className, ...props }) {
18
- return /* @__PURE__ */ jsx(
19
- "ol",
20
- {
21
- "data-slot": "breadcrumb-list",
22
- className: cn(
23
- "text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5",
24
- className
25
- ),
26
- ...props
27
- }
28
- );
29
- }
30
- function BreadcrumbItem({ className, ...props }) {
31
- return /* @__PURE__ */ jsx(
32
- "li",
33
- {
34
- "data-slot": "breadcrumb-item",
35
- className: cn("inline-flex items-center gap-1.5", className),
36
- ...props
37
- }
38
- );
39
- }
40
- function BreadcrumbPage({ className, ...props }) {
41
- return /* @__PURE__ */ jsx(
42
- "span",
43
- {
44
- "data-slot": "breadcrumb-page",
45
- "aria-disabled": "true",
46
- "aria-current": "page",
47
- className: cn("text-foreground font-normal", className),
48
- ...props
49
- }
50
- );
51
- }
52
- function BreadcrumbSeparator({
53
- children,
54
- className,
55
- ...props
56
- }) {
57
- return /* @__PURE__ */ jsx(
58
- "li",
59
- {
60
- "data-slot": "breadcrumb-separator",
61
- role: "presentation",
62
- "aria-hidden": "true",
63
- className: cn("[&>svg]:size-3.5", className),
64
- ...props,
65
- children: children ?? /* @__PURE__ */ jsx(IconChevronRight, {})
66
- }
67
- );
68
- }
69
-
70
- // src/components/tooltip.tsx
71
- import * as TooltipPrimitive from "@radix-ui/react-tooltip";
72
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
73
- function TooltipProvider({
74
- delayDuration = 0,
75
- ...props
76
- }) {
77
- return /* @__PURE__ */ jsx2(
78
- TooltipPrimitive.Provider,
79
- {
80
- "data-slot": "tooltip-provider",
81
- delayDuration,
82
- ...props
83
- }
84
- );
85
- }
86
-
87
- // src/components/mesob-context.tsx
88
- import {
89
- createContext,
90
- useContext,
91
- useMemo
92
- } from "react";
93
- import { jsx as jsx3 } from "react/jsx-runtime";
94
- var MesobContext = createContext(null);
95
- function useMesob() {
96
- return useContext(MesobContext);
97
- }
98
-
99
- // src/components/app-breadcrumbs.tsx
100
- import {
101
- createContext as createContext2,
102
- Fragment,
103
- useCallback,
104
- useContext as useContext2,
105
- useEffect,
106
- useMemo as useMemo2,
107
- useRef,
108
- useState
109
- } from "react";
110
- import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
111
- var BreadcrumbContext = createContext2(null);
112
- function useBreadcrumbs(options) {
113
- const context = useContext2(BreadcrumbContext);
114
- if (!context) {
115
- throw new Error("useBreadcrumbs must be used within BreadcrumbProvider");
116
- }
117
- const { setItems } = context;
118
- const prevItemsStrRef = useRef(void 0);
119
- useEffect(() => {
120
- const items = options?.items;
121
- if (!items) {
122
- return;
123
- }
124
- const itemsStr = JSON.stringify(items);
125
- if (prevItemsStrRef.current !== itemsStr) {
126
- prevItemsStrRef.current = itemsStr;
127
- setItems(items);
128
- }
129
- }, [options?.items, setItems]);
130
- return context;
131
- }
132
- function BreadcrumbProvider({
133
- children,
134
- defaultItems = []
135
- }) {
136
- const [items, setItems] = useState(defaultItems);
137
- const push = useCallback((item) => {
138
- setItems((prev) => [...prev, item]);
139
- }, []);
140
- const pop = useCallback(() => {
141
- setItems((prev) => prev.slice(0, -1));
142
- }, []);
143
- const clear = useCallback(() => {
144
- setItems([]);
145
- }, []);
146
- const value = useMemo2(
147
- () => ({
148
- items,
149
- setItems,
150
- push,
151
- pop,
152
- clear
153
- }),
154
- [items, push, pop, clear]
155
- );
156
- return /* @__PURE__ */ jsx4(BreadcrumbContext.Provider, { value, children });
157
- }
158
- function AppBreadcrumbs({
159
- linkComponent: linkProp,
160
- className
161
- }) {
162
- const mesob = useMesob();
163
- const Link = linkProp ?? mesob?.linkComponent;
164
- const { items } = useBreadcrumbs(void 0);
165
- if (items.length === 0) {
166
- return null;
167
- }
168
- return /* @__PURE__ */ jsx4(Breadcrumb, { className, children: /* @__PURE__ */ jsx4(BreadcrumbList, { children: items.map((crumb, index) => {
169
- let content;
170
- if (crumb.href) {
171
- if (Link) {
172
- content = /* @__PURE__ */ jsx4(Link, { href: crumb.href, className: "hover:underline", children: crumb.label });
173
- } else {
174
- content = /* @__PURE__ */ jsx4("a", { href: crumb.href, className: "hover:underline", children: crumb.label });
175
- }
176
- } else {
177
- content = /* @__PURE__ */ jsx4(BreadcrumbPage, { children: crumb.label });
178
- }
179
- return /* @__PURE__ */ jsxs3(Fragment, { children: [
180
- index > 0 && /* @__PURE__ */ jsx4(BreadcrumbSeparator, { className: "hidden md:block" }),
181
- /* @__PURE__ */ jsx4(BreadcrumbItem, { className: index === 0 ? "hidden md:block" : "", children: content })
182
- ] }, `${crumb.label}-${crumb.href ?? ""}-${index}`);
183
- }) }) });
184
- }
185
-
186
- // src/components/separator.tsx
187
- import * as SeparatorPrimitive from "@radix-ui/react-separator";
188
- import { jsx as jsx5 } from "react/jsx-runtime";
189
- function Separator({
190
- className,
191
- orientation = "horizontal",
192
- decorative = true,
193
- ...props
194
- }) {
195
- return /* @__PURE__ */ jsx5(
196
- SeparatorPrimitive.Root,
197
- {
198
- "data-slot": "separator",
199
- decorative,
200
- orientation,
201
- className: cn(
202
- "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
203
- className
204
- ),
205
- ...props
206
- }
207
- );
208
- }
209
-
210
- // src/components/button.tsx
211
- import { Slot as Slot2 } from "@radix-ui/react-slot";
212
- import { cva } from "class-variance-authority";
213
- import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
214
- var buttonVariants = cva(
215
- "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",
216
- {
217
- variants: {
218
- variant: {
219
- default: "bg-primary text-primary-foreground hover:bg-primary-600 dark:hover:bg-primary-400",
220
- destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
221
- 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",
222
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary-600 dark:hover:bg-secondary-400",
223
- ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
224
- link: "text-primary underline-offset-4 hover:text-primary-600 dark:hover:text-primary-400 hover:underline"
225
- },
226
- size: {
227
- default: "h-9 px-4 py-2 has-[>svg]:px-3",
228
- sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
229
- lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
230
- icon: "size-9",
231
- "icon-sm": "size-8",
232
- "icon-lg": "size-10"
233
- }
234
- },
235
- defaultVariants: {
236
- variant: "default",
237
- size: "default"
238
- }
239
- }
240
- );
241
- function Button({
242
- className,
243
- variant,
244
- size,
245
- asChild = false,
246
- leftIcon,
247
- rightIcon,
248
- children,
249
- ...props
250
- }) {
251
- const Comp = asChild ? Slot2 : "button";
252
- return /* @__PURE__ */ jsx6(
253
- Comp,
254
- {
255
- "data-slot": "button",
256
- className: cn(buttonVariants({ variant, size, className })),
257
- ...props,
258
- children: asChild ? children : /* @__PURE__ */ jsxs4(Fragment2, { children: [
259
- leftIcon,
260
- children,
261
- rightIcon
262
- ] })
263
- }
264
- );
265
- }
266
-
267
- // src/components/input.tsx
268
- import { jsx as jsx7 } from "react/jsx-runtime";
269
-
270
- // src/components/sheet.tsx
271
- import * as SheetPrimitive from "@radix-ui/react-dialog";
272
- import { IconX } from "@tabler/icons-react";
273
- import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
274
-
275
- // src/components/skeleton.tsx
276
- import { jsx as jsx9 } from "react/jsx-runtime";
277
-
278
- // src/hooks/use-mobile.ts
279
- import * as React from "react";
280
- var MOBILE_BREAKPOINT = 768;
281
- function useIsMobile() {
282
- const [isMobile, setIsMobile] = React.useState(
283
- void 0
284
- );
285
- React.useEffect(() => {
286
- const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
287
- const onChange = () => {
288
- setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
289
- };
290
- mql.addEventListener("change", onChange);
291
- setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
292
- return () => mql.removeEventListener("change", onChange);
293
- }, []);
294
- return !!isMobile;
295
- }
296
-
297
- // src/components/sidebar.tsx
298
- import { Slot as Slot3 } from "@radix-ui/react-slot";
299
- import { IconMenu2 } from "@tabler/icons-react";
300
- import { cva as cva2 } from "class-variance-authority";
301
- import * as React3 from "react";
302
-
303
- // src/components/sidebar-context.tsx
304
- import * as React2 from "react";
305
- var SidebarContext = React2.createContext(null);
306
- function useSidebar() {
307
- const context = React2.useContext(SidebarContext);
308
- if (!context) {
309
- throw new Error("useSidebar must be used within a SidebarProvider.");
310
- }
311
- return context;
312
- }
313
-
314
- // src/components/sidebar.tsx
315
- import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
316
- var SIDEBAR_COOKIE_NAME = "sidebar_state";
317
- var SIDEBAR_WIDTH_COOKIE = "sidebar_width";
318
- var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
319
- var SIDEBAR_WIDTH_DEFAULT = 256;
320
- var SIDEBAR_WIDTH_MIN = 200;
321
- var SIDEBAR_WIDTH_MAX = 480;
322
- var SIDEBAR_WIDTH = "16rem";
323
- var SIDEBAR_WIDTH_ICON = "3rem";
324
- var SIDEBAR_KEYBOARD_SHORTCUT = "b";
325
- function getWidthFromCookie() {
326
- if (typeof document === "undefined") {
327
- return SIDEBAR_WIDTH_DEFAULT;
328
- }
329
- const m = document.cookie.match(
330
- new RegExp(`(?:^|; )${SIDEBAR_WIDTH_COOKIE}=([^;]*)`)
331
- );
332
- const n = m ? Number(m[1]) : Number.NaN;
333
- return Number.isFinite(n) && n >= SIDEBAR_WIDTH_MIN && n <= SIDEBAR_WIDTH_MAX ? n : SIDEBAR_WIDTH_DEFAULT;
334
- }
335
- function setWidthCookie(width) {
336
- document.cookie = `${SIDEBAR_WIDTH_COOKIE}=${width}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
337
- }
338
- function SidebarProvider({
339
- defaultOpen = true,
340
- open: openProp,
341
- onOpenChange: setOpenProp,
342
- className,
343
- style,
344
- children,
345
- ...props
346
- }) {
347
- const isMobile = useIsMobile();
348
- const [openMobile, setOpenMobile] = React3.useState(false);
349
- const [width, setWidthState] = React3.useState(getWidthFromCookie);
350
- const setWidth = React3.useCallback((w) => {
351
- const clamped = Math.max(SIDEBAR_WIDTH_MIN, Math.min(SIDEBAR_WIDTH_MAX, w));
352
- setWidthState(clamped);
353
- setWidthCookie(clamped);
354
- }, []);
355
- const [_open, _setOpen] = React3.useState(defaultOpen);
356
- const open = openProp ?? _open;
357
- const setOpen = React3.useCallback(
358
- (value) => {
359
- const openState = typeof value === "function" ? value(open) : value;
360
- if (setOpenProp) {
361
- setOpenProp(openState);
362
- } else {
363
- _setOpen(openState);
364
- }
365
- document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
366
- },
367
- [open, setOpenProp]
368
- );
369
- const toggleSidebar = React3.useCallback(() => {
370
- return isMobile ? setOpenMobile((value) => !value) : setOpen((value) => !value);
371
- }, [isMobile, setOpen]);
372
- React3.useEffect(() => {
373
- const handleKeyDown = (event) => {
374
- if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
375
- event.preventDefault();
376
- toggleSidebar();
377
- }
378
- };
379
- window.addEventListener("keydown", handleKeyDown);
380
- return () => window.removeEventListener("keydown", handleKeyDown);
381
- }, [toggleSidebar]);
382
- const state = open ? "expanded" : "collapsed";
383
- const contextValue = {
384
- state,
385
- open,
386
- setOpen,
387
- isMobile,
388
- openMobile,
389
- setOpenMobile,
390
- toggleSidebar,
391
- width,
392
- setWidth,
393
- minWidth: SIDEBAR_WIDTH_MIN,
394
- maxWidth: SIDEBAR_WIDTH_MAX
395
- };
396
- const sidebarWidthValue = open ? `${width}px` : SIDEBAR_WIDTH;
397
- return /* @__PURE__ */ jsx10(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx10(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx10(
398
- "div",
399
- {
400
- "data-slot": "sidebar-wrapper",
401
- style: {
402
- "--sidebar-width": sidebarWidthValue,
403
- "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
404
- ...style
405
- },
406
- className: cn(
407
- "group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full",
408
- className
409
- ),
410
- ...props,
411
- children
412
- }
413
- ) }) });
414
- }
415
- function SidebarTrigger({
416
- className,
417
- onClick,
418
- ...props
419
- }) {
420
- const { toggleSidebar } = useSidebar();
421
- return /* @__PURE__ */ jsxs6(
422
- Button,
423
- {
424
- "data-sidebar": "trigger",
425
- "data-slot": "sidebar-trigger",
426
- variant: "ghost",
427
- size: "icon",
428
- className: cn("size-7", className),
429
- onClick: (event) => {
430
- onClick?.(event);
431
- toggleSidebar();
432
- },
433
- ...props,
434
- children: [
435
- /* @__PURE__ */ jsx10(IconMenu2, {}),
436
- /* @__PURE__ */ jsx10("span", { className: "sr-only", children: "Toggle Sidebar" })
437
- ]
438
- }
439
- );
440
- }
441
- function SidebarInset({ className, ...props }) {
442
- return /* @__PURE__ */ jsx10(
443
- "main",
444
- {
445
- "data-slot": "sidebar-inset",
446
- className: cn(
447
- "bg-background relative flex w-full flex-1 flex-col",
448
- "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",
449
- className
450
- ),
451
- ...props
452
- }
453
- );
454
- }
455
- var sidebarMenuButtonVariants = cva2(
456
- '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',
457
- {
458
- variants: {
459
- variant: {
460
- default: "hover:bg-sidebar-active",
461
- 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))]"
462
- },
463
- size: {
464
- default: "h-8 text-sm",
465
- sm: "h-7 text-xs",
466
- lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!"
467
- }
468
- },
469
- defaultVariants: {
470
- variant: "default",
471
- size: "default"
472
- }
473
- }
474
- );
475
-
476
- // src/components/sonner.tsx
477
- import {
478
- IconAlertTriangle,
479
- IconCircleCheck,
480
- IconInfoCircle,
481
- IconLoader2,
482
- IconX as IconX2
483
- } from "@tabler/icons-react";
484
- import { useTheme } from "next-themes";
485
- import { Toaster as Sonner } from "sonner";
486
- import { toast } from "sonner";
487
- import { jsx as jsx11 } from "react/jsx-runtime";
488
- var Toaster = ({ ...props }) => {
489
- const { theme = "system" } = useTheme();
490
- return /* @__PURE__ */ jsx11(
491
- Sonner,
492
- {
493
- theme,
494
- className: "toaster group",
495
- icons: {
496
- success: /* @__PURE__ */ jsx11(IconCircleCheck, { className: "size-4" }),
497
- info: /* @__PURE__ */ jsx11(IconInfoCircle, { className: "size-4" }),
498
- warning: /* @__PURE__ */ jsx11(IconAlertTriangle, { className: "size-4" }),
499
- error: /* @__PURE__ */ jsx11(IconX2, { className: "size-4" }),
500
- loading: /* @__PURE__ */ jsx11(IconLoader2, { className: "size-4 animate-spin" })
501
- },
502
- style: {
503
- "--normal-bg": "var(--popover)",
504
- "--normal-text": "var(--popover-foreground)",
505
- "--normal-border": "var(--border)",
506
- "--border-radius": "var(--radius)"
507
- },
508
- ...props
509
- }
510
- );
511
- };
512
-
513
- // src/components/shell.tsx
514
- import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
515
- function Shell({
516
- sidebar,
517
- headerActions,
518
- children,
519
- showToaster = true,
520
- contentClassName
521
- }) {
522
- return /* @__PURE__ */ jsx12(BreadcrumbProvider, { children: /* @__PURE__ */ jsxs7(SidebarProvider, { children: [
523
- sidebar,
524
- /* @__PURE__ */ jsxs7(SidebarInset, { children: [
525
- /* @__PURE__ */ jsxs7("header", { className: "flex h-16 shrink-0 items-center justify-between gap-2 border-b px-4", children: [
526
- /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-2", children: [
527
- /* @__PURE__ */ jsx12(SidebarTrigger, { className: "-ml-1" }),
528
- /* @__PURE__ */ jsxs7("div", { className: "hidden md:flex md:items-center md:gap-2", children: [
529
- /* @__PURE__ */ jsx12(
530
- Separator,
531
- {
532
- orientation: "vertical",
533
- className: "mr-2 data-[orientation=vertical]:h-4"
534
- }
535
- ),
536
- /* @__PURE__ */ jsx12(AppBreadcrumbs, {})
537
- ] })
538
- ] }),
539
- headerActions
540
- ] }),
541
- /* @__PURE__ */ jsx12(
542
- "div",
543
- {
544
- className: cn(
545
- "flex min-h-0 flex-1 flex-col gap-4 overflow-auto p-4",
546
- contentClassName
547
- ),
548
- children: /* @__PURE__ */ jsx12("div", { className: "mx-auto w-full max-w-7xl", children })
549
- }
550
- )
551
- ] }),
552
- showToaster && /* @__PURE__ */ jsx12(Toaster, {})
553
- ] }) });
554
- }
555
- export {
556
- Shell
557
- };
558
- //# sourceMappingURL=shell.js.map