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