@mesob/ui 0.2.0 → 0.2.1
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.
- package/dist/components/alert-dialog.js +22 -22
- package/dist/components/alert-dialog.js.map +1 -1
- package/dist/components/alert.js +1 -1
- package/dist/components/alert.js.map +1 -1
- package/dist/components/animated-tabs.js +1 -1
- package/dist/components/animated-tabs.js.map +1 -1
- package/dist/components/app-header-actions.js +118 -103
- package/dist/components/app-header-actions.js.map +1 -1
- package/dist/components/app-sidebar.js +69 -69
- package/dist/components/app-sidebar.js.map +1 -1
- package/dist/components/button-group.js +1 -1
- package/dist/components/button-group.js.map +1 -1
- package/dist/components/button.d.ts +6 -3
- package/dist/components/button.js +16 -8
- package/dist/components/button.js.map +1 -1
- package/dist/components/calendar.js +24 -16
- package/dist/components/calendar.js.map +1 -1
- package/dist/components/card.js +1 -1
- package/dist/components/card.js.map +1 -1
- package/dist/components/carousel.js +28 -20
- package/dist/components/carousel.js.map +1 -1
- package/dist/components/command.js +5 -5
- package/dist/components/command.js.map +1 -1
- package/dist/components/context-menu.js +2 -2
- package/dist/components/context-menu.js.map +1 -1
- package/dist/components/data-table/index.js +162 -153
- package/dist/components/data-table/index.js.map +1 -1
- package/dist/components/dialog.js +2 -2
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/drawer.js +2 -2
- package/dist/components/drawer.js.map +1 -1
- package/dist/components/dropdown-menu.js +2 -2
- package/dist/components/dropdown-menu.js.map +1 -1
- package/dist/components/entity/index.js +261 -256
- package/dist/components/entity/index.js.map +1 -1
- package/dist/components/hover-card.js +1 -1
- package/dist/components/hover-card.js.map +1 -1
- package/dist/components/input-group.js +27 -19
- package/dist/components/input-group.js.map +1 -1
- package/dist/components/item.d.ts +1 -1
- package/dist/components/menubar.js +3 -3
- package/dist/components/menubar.js.map +1 -1
- package/dist/components/navigation-menu.js +1 -1
- package/dist/components/navigation-menu.js.map +1 -1
- package/dist/components/page/index.js +36 -28
- package/dist/components/page/index.js.map +1 -1
- package/dist/components/pagination.js +20 -20
- package/dist/components/pagination.js.map +1 -1
- package/dist/components/popover.js +1 -1
- package/dist/components/popover.js.map +1 -1
- package/dist/components/section/index.js +29 -21
- package/dist/components/section/index.js.map +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/select.js.map +1 -1
- package/dist/components/sheet.js +2 -2
- package/dist/components/sheet.js.map +1 -1
- package/dist/components/shell.js +44 -36
- package/dist/components/shell.js.map +1 -1
- package/dist/components/sidebar.js +83 -75
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/spotlight-search.js +67 -59
- package/dist/components/spotlight-search.js.map +1 -1
- package/dist/components/theme-toggle.js +21 -13
- package/dist/components/theme-toggle.js.map +1 -1
- package/dist/hooks/use-translation.js +3 -2
- package/dist/hooks/use-translation.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +94 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/theme-schema.d.ts +21 -0
- package/dist/lib/theme-schema.js +95 -0
- package/dist/lib/theme-schema.js.map +1 -0
- package/package.json +2 -5
- package/src/styles/globals.css +0 -130
|
@@ -12,18 +12,18 @@ function cn(...inputs) {
|
|
|
12
12
|
// src/components/button.tsx
|
|
13
13
|
import { Slot } from "@radix-ui/react-slot";
|
|
14
14
|
import { cva } from "class-variance-authority";
|
|
15
|
-
import {
|
|
15
|
+
import { jsxs } from "react/jsx-runtime";
|
|
16
16
|
var buttonVariants = cva(
|
|
17
17
|
"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",
|
|
18
18
|
{
|
|
19
19
|
variants: {
|
|
20
20
|
variant: {
|
|
21
|
-
default: "bg-primary text-primary-foreground hover:bg-primary
|
|
22
|
-
destructive: "bg-destructive text-
|
|
23
|
-
outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
|
|
24
|
-
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary
|
|
21
|
+
default: "bg-primary text-primary-foreground hover:bg-primary-600 dark:hover:bg-primary-400",
|
|
22
|
+
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
|
|
23
|
+
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",
|
|
24
|
+
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary-600 dark:hover:bg-secondary-400",
|
|
25
25
|
ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
|
26
|
-
link: "text-primary underline-offset-4 hover:underline"
|
|
26
|
+
link: "text-primary underline-offset-4 hover:text-primary-600 dark:hover:text-primary-400 hover:underline"
|
|
27
27
|
},
|
|
28
28
|
size: {
|
|
29
29
|
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
@@ -45,47 +45,55 @@ function Button({
|
|
|
45
45
|
variant,
|
|
46
46
|
size,
|
|
47
47
|
asChild = false,
|
|
48
|
+
leftIcon,
|
|
49
|
+
rightIcon,
|
|
50
|
+
children,
|
|
48
51
|
...props
|
|
49
52
|
}) {
|
|
50
53
|
const Comp = asChild ? Slot : "button";
|
|
51
|
-
return /* @__PURE__ */
|
|
54
|
+
return /* @__PURE__ */ jsxs(
|
|
52
55
|
Comp,
|
|
53
56
|
{
|
|
54
57
|
"data-slot": "button",
|
|
55
58
|
className: cn(buttonVariants({ variant, size, className })),
|
|
56
|
-
...props
|
|
59
|
+
...props,
|
|
60
|
+
children: [
|
|
61
|
+
leftIcon,
|
|
62
|
+
children,
|
|
63
|
+
rightIcon
|
|
64
|
+
]
|
|
57
65
|
}
|
|
58
66
|
);
|
|
59
67
|
}
|
|
60
68
|
|
|
61
69
|
// src/components/alert-dialog.tsx
|
|
62
70
|
import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
|
|
63
|
-
import { jsx as
|
|
71
|
+
import { jsx, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
64
72
|
function AlertDialog({
|
|
65
73
|
...props
|
|
66
74
|
}) {
|
|
67
|
-
return /* @__PURE__ */
|
|
75
|
+
return /* @__PURE__ */ jsx(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
|
|
68
76
|
}
|
|
69
77
|
function AlertDialogTrigger({
|
|
70
78
|
...props
|
|
71
79
|
}) {
|
|
72
|
-
return /* @__PURE__ */
|
|
80
|
+
return /* @__PURE__ */ jsx(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
|
|
73
81
|
}
|
|
74
82
|
function AlertDialogPortal({
|
|
75
83
|
...props
|
|
76
84
|
}) {
|
|
77
|
-
return /* @__PURE__ */
|
|
85
|
+
return /* @__PURE__ */ jsx(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
|
|
78
86
|
}
|
|
79
87
|
function AlertDialogOverlay({
|
|
80
88
|
className,
|
|
81
89
|
...props
|
|
82
90
|
}) {
|
|
83
|
-
return /* @__PURE__ */
|
|
91
|
+
return /* @__PURE__ */ jsx(
|
|
84
92
|
AlertDialogPrimitive.Overlay,
|
|
85
93
|
{
|
|
86
94
|
"data-slot": "alert-dialog-overlay",
|
|
87
95
|
className: cn(
|
|
88
|
-
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-
|
|
96
|
+
"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))]",
|
|
89
97
|
className
|
|
90
98
|
),
|
|
91
99
|
...props
|
|
@@ -96,14 +104,14 @@ function AlertDialogContent({
|
|
|
96
104
|
className,
|
|
97
105
|
...props
|
|
98
106
|
}) {
|
|
99
|
-
return /* @__PURE__ */
|
|
100
|
-
/* @__PURE__ */
|
|
101
|
-
/* @__PURE__ */
|
|
107
|
+
return /* @__PURE__ */ jsxs2(AlertDialogPortal, { children: [
|
|
108
|
+
/* @__PURE__ */ jsx(AlertDialogOverlay, {}),
|
|
109
|
+
/* @__PURE__ */ jsx(
|
|
102
110
|
AlertDialogPrimitive.Content,
|
|
103
111
|
{
|
|
104
112
|
"data-slot": "alert-dialog-content",
|
|
105
113
|
className: cn(
|
|
106
|
-
"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-
|
|
114
|
+
"bg-background text-foreground border-border data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-[51] grid w-full min-w-[280px] max-w-[calc(100vw-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:min-w-[320px] sm:max-w-[32rem]",
|
|
107
115
|
className
|
|
108
116
|
),
|
|
109
117
|
...props
|
|
@@ -115,7 +123,7 @@ function AlertDialogHeader({
|
|
|
115
123
|
className,
|
|
116
124
|
...props
|
|
117
125
|
}) {
|
|
118
|
-
return /* @__PURE__ */
|
|
126
|
+
return /* @__PURE__ */ jsx(
|
|
119
127
|
"div",
|
|
120
128
|
{
|
|
121
129
|
"data-slot": "alert-dialog-header",
|
|
@@ -128,7 +136,7 @@ function AlertDialogFooter({
|
|
|
128
136
|
className,
|
|
129
137
|
...props
|
|
130
138
|
}) {
|
|
131
|
-
return /* @__PURE__ */
|
|
139
|
+
return /* @__PURE__ */ jsx(
|
|
132
140
|
"div",
|
|
133
141
|
{
|
|
134
142
|
"data-slot": "alert-dialog-footer",
|
|
@@ -144,7 +152,7 @@ function AlertDialogTitle({
|
|
|
144
152
|
className,
|
|
145
153
|
...props
|
|
146
154
|
}) {
|
|
147
|
-
return /* @__PURE__ */
|
|
155
|
+
return /* @__PURE__ */ jsx(
|
|
148
156
|
AlertDialogPrimitive.Title,
|
|
149
157
|
{
|
|
150
158
|
"data-slot": "alert-dialog-title",
|
|
@@ -157,7 +165,7 @@ function AlertDialogDescription({
|
|
|
157
165
|
className,
|
|
158
166
|
...props
|
|
159
167
|
}) {
|
|
160
|
-
return /* @__PURE__ */
|
|
168
|
+
return /* @__PURE__ */ jsx(
|
|
161
169
|
AlertDialogPrimitive.Description,
|
|
162
170
|
{
|
|
163
171
|
"data-slot": "alert-dialog-description",
|
|
@@ -170,7 +178,7 @@ function AlertDialogAction({
|
|
|
170
178
|
className,
|
|
171
179
|
...props
|
|
172
180
|
}) {
|
|
173
|
-
return /* @__PURE__ */
|
|
181
|
+
return /* @__PURE__ */ jsx(
|
|
174
182
|
AlertDialogPrimitive.Action,
|
|
175
183
|
{
|
|
176
184
|
className: cn(buttonVariants(), className),
|
|
@@ -182,7 +190,7 @@ function AlertDialogCancel({
|
|
|
182
190
|
className,
|
|
183
191
|
...props
|
|
184
192
|
}) {
|
|
185
|
-
return /* @__PURE__ */
|
|
193
|
+
return /* @__PURE__ */ jsx(
|
|
186
194
|
AlertDialogPrimitive.Cancel,
|
|
187
195
|
{
|
|
188
196
|
className: cn(buttonVariants({ variant: "outline" }), className),
|
|
@@ -194,16 +202,16 @@ function AlertDialogCancel({
|
|
|
194
202
|
// src/components/dropdown-menu.tsx
|
|
195
203
|
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
196
204
|
import { IconCheck, IconChevronRight, IconCircle } from "@tabler/icons-react";
|
|
197
|
-
import { jsx as
|
|
205
|
+
import { jsx as jsx2, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
198
206
|
function DropdownMenu({
|
|
199
207
|
...props
|
|
200
208
|
}) {
|
|
201
|
-
return /* @__PURE__ */
|
|
209
|
+
return /* @__PURE__ */ jsx2(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
|
|
202
210
|
}
|
|
203
211
|
function DropdownMenuTrigger({
|
|
204
212
|
...props
|
|
205
213
|
}) {
|
|
206
|
-
return /* @__PURE__ */
|
|
214
|
+
return /* @__PURE__ */ jsx2(
|
|
207
215
|
DropdownMenuPrimitive.Trigger,
|
|
208
216
|
{
|
|
209
217
|
"data-slot": "dropdown-menu-trigger",
|
|
@@ -216,13 +224,13 @@ function DropdownMenuContent({
|
|
|
216
224
|
sideOffset = 4,
|
|
217
225
|
...props
|
|
218
226
|
}) {
|
|
219
|
-
return /* @__PURE__ */
|
|
227
|
+
return /* @__PURE__ */ jsx2(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx2(
|
|
220
228
|
DropdownMenuPrimitive.Content,
|
|
221
229
|
{
|
|
222
230
|
"data-slot": "dropdown-menu-content",
|
|
223
231
|
sideOffset,
|
|
224
232
|
className: cn(
|
|
225
|
-
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
|
|
233
|
+
"bg-popover text-popover-foreground border-border data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
|
|
226
234
|
className
|
|
227
235
|
),
|
|
228
236
|
...props
|
|
@@ -235,7 +243,7 @@ function DropdownMenuItem({
|
|
|
235
243
|
variant = "default",
|
|
236
244
|
...props
|
|
237
245
|
}) {
|
|
238
|
-
return /* @__PURE__ */
|
|
246
|
+
return /* @__PURE__ */ jsx2(
|
|
239
247
|
DropdownMenuPrimitive.Item,
|
|
240
248
|
{
|
|
241
249
|
"data-slot": "dropdown-menu-item",
|
|
@@ -253,7 +261,7 @@ function DropdownMenuSeparator({
|
|
|
253
261
|
className,
|
|
254
262
|
...props
|
|
255
263
|
}) {
|
|
256
|
-
return /* @__PURE__ */
|
|
264
|
+
return /* @__PURE__ */ jsx2(
|
|
257
265
|
DropdownMenuPrimitive.Separator,
|
|
258
266
|
{
|
|
259
267
|
"data-slot": "dropdown-menu-separator",
|
|
@@ -264,7 +272,7 @@ function DropdownMenuSeparator({
|
|
|
264
272
|
}
|
|
265
273
|
|
|
266
274
|
// src/components/entity/entity-bulk-actions.tsx
|
|
267
|
-
import { Fragment, jsx as
|
|
275
|
+
import { Fragment, jsx as jsx3, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
268
276
|
function EntityBulkActions({
|
|
269
277
|
selectedCount,
|
|
270
278
|
actions,
|
|
@@ -278,22 +286,22 @@ function EntityBulkActions({
|
|
|
278
286
|
if (onExport) {
|
|
279
287
|
defaultActions.push({
|
|
280
288
|
label: "Export",
|
|
281
|
-
icon: /* @__PURE__ */
|
|
289
|
+
icon: /* @__PURE__ */ jsx3(IconDownload, { className: "mr-2 h-4 w-4" }),
|
|
282
290
|
onClick: onExport
|
|
283
291
|
});
|
|
284
292
|
}
|
|
285
293
|
if (onDelete) {
|
|
286
294
|
defaultActions.push({
|
|
287
295
|
label: "Delete",
|
|
288
|
-
icon: /* @__PURE__ */
|
|
296
|
+
icon: /* @__PURE__ */ jsx3(IconTrash, { className: "mr-2 h-4 w-4" }),
|
|
289
297
|
onClick: () => setShowDeleteConfirm(true),
|
|
290
298
|
variant: "destructive"
|
|
291
299
|
});
|
|
292
300
|
}
|
|
293
301
|
const allActions = actions ? [...actions, ...defaultActions] : defaultActions;
|
|
294
|
-
return /* @__PURE__ */
|
|
295
|
-
/* @__PURE__ */
|
|
296
|
-
/* @__PURE__ */
|
|
302
|
+
return /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
303
|
+
/* @__PURE__ */ jsxs4(DropdownMenu, { children: [
|
|
304
|
+
/* @__PURE__ */ jsx3(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs4(
|
|
297
305
|
Button,
|
|
298
306
|
{
|
|
299
307
|
variant: "outline",
|
|
@@ -302,13 +310,13 @@ function EntityBulkActions({
|
|
|
302
310
|
className: "min-w-[140px]",
|
|
303
311
|
children: [
|
|
304
312
|
hasSelection ? `${selectedCount} selected` : "Bulk Actions",
|
|
305
|
-
/* @__PURE__ */
|
|
313
|
+
/* @__PURE__ */ jsx3(IconChevronDown, { className: "ml-2 h-4 w-4" })
|
|
306
314
|
]
|
|
307
315
|
}
|
|
308
316
|
) }),
|
|
309
|
-
/* @__PURE__ */
|
|
310
|
-
action.variant === "destructive" && index > 0 && /* @__PURE__ */
|
|
311
|
-
/* @__PURE__ */
|
|
317
|
+
/* @__PURE__ */ jsx3(DropdownMenuContent, { align: "end", children: allActions.map((action, index) => /* @__PURE__ */ jsxs4("div", { children: [
|
|
318
|
+
action.variant === "destructive" && index > 0 && /* @__PURE__ */ jsx3(DropdownMenuSeparator, {}),
|
|
319
|
+
/* @__PURE__ */ jsxs4(
|
|
312
320
|
DropdownMenuItem,
|
|
313
321
|
{
|
|
314
322
|
onClick: action.onClick,
|
|
@@ -321,24 +329,24 @@ function EntityBulkActions({
|
|
|
321
329
|
)
|
|
322
330
|
] }, action.label)) })
|
|
323
331
|
] }),
|
|
324
|
-
/* @__PURE__ */
|
|
325
|
-
/* @__PURE__ */
|
|
326
|
-
/* @__PURE__ */
|
|
332
|
+
/* @__PURE__ */ jsx3(AlertDialog, { open: showDeleteConfirm, onOpenChange: setShowDeleteConfirm, children: /* @__PURE__ */ jsxs4(AlertDialogContent, { children: [
|
|
333
|
+
/* @__PURE__ */ jsxs4(AlertDialogHeader, { children: [
|
|
334
|
+
/* @__PURE__ */ jsxs4(AlertDialogTitle, { children: [
|
|
327
335
|
"Delete ",
|
|
328
336
|
selectedCount,
|
|
329
337
|
" ",
|
|
330
338
|
itemName,
|
|
331
339
|
"(s)?"
|
|
332
340
|
] }),
|
|
333
|
-
/* @__PURE__ */
|
|
341
|
+
/* @__PURE__ */ jsxs4(AlertDialogDescription, { children: [
|
|
334
342
|
"This will permanently delete the selected ",
|
|
335
343
|
itemName,
|
|
336
344
|
"(s). This action cannot be undone."
|
|
337
345
|
] })
|
|
338
346
|
] }),
|
|
339
|
-
/* @__PURE__ */
|
|
340
|
-
/* @__PURE__ */
|
|
341
|
-
/* @__PURE__ */
|
|
347
|
+
/* @__PURE__ */ jsxs4(AlertDialogFooter, { children: [
|
|
348
|
+
/* @__PURE__ */ jsx3(AlertDialogCancel, { children: "Cancel" }),
|
|
349
|
+
/* @__PURE__ */ jsx3(
|
|
342
350
|
AlertDialogAction,
|
|
343
351
|
{
|
|
344
352
|
onClick: () => {
|
|
@@ -360,14 +368,14 @@ import { motion } from "motion/react";
|
|
|
360
368
|
import { useLayoutEffect, useMemo, useRef, useState as useState2 } from "react";
|
|
361
369
|
|
|
362
370
|
// src/components/card.tsx
|
|
363
|
-
import { jsx as
|
|
371
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
364
372
|
function Card({ className, ...props }) {
|
|
365
|
-
return /* @__PURE__ */
|
|
373
|
+
return /* @__PURE__ */ jsx4(
|
|
366
374
|
"div",
|
|
367
375
|
{
|
|
368
376
|
"data-slot": "card",
|
|
369
377
|
className: cn(
|
|
370
|
-
"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6
|
|
378
|
+
"bg-card text-card-foreground border-border flex flex-col gap-6 rounded-xl border py-6",
|
|
371
379
|
className
|
|
372
380
|
),
|
|
373
381
|
...props
|
|
@@ -378,16 +386,16 @@ function Card({ className, ...props }) {
|
|
|
378
386
|
// src/components/select.tsx
|
|
379
387
|
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
380
388
|
import { IconCheck as IconCheck2, IconChevronDown as IconChevronDown2, IconChevronUp } from "@tabler/icons-react";
|
|
381
|
-
import { jsx as
|
|
389
|
+
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
382
390
|
function Select({
|
|
383
391
|
...props
|
|
384
392
|
}) {
|
|
385
|
-
return /* @__PURE__ */
|
|
393
|
+
return /* @__PURE__ */ jsx5(SelectPrimitive.Root, { "data-slot": "select", ...props });
|
|
386
394
|
}
|
|
387
395
|
function SelectValue({
|
|
388
396
|
...props
|
|
389
397
|
}) {
|
|
390
|
-
return /* @__PURE__ */
|
|
398
|
+
return /* @__PURE__ */ jsx5(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
|
|
391
399
|
}
|
|
392
400
|
function SelectTrigger({
|
|
393
401
|
className,
|
|
@@ -395,7 +403,7 @@ function SelectTrigger({
|
|
|
395
403
|
children,
|
|
396
404
|
...props
|
|
397
405
|
}) {
|
|
398
|
-
return /* @__PURE__ */
|
|
406
|
+
return /* @__PURE__ */ jsxs5(
|
|
399
407
|
SelectPrimitive.Trigger,
|
|
400
408
|
{
|
|
401
409
|
"data-slot": "select-trigger",
|
|
@@ -407,7 +415,7 @@ function SelectTrigger({
|
|
|
407
415
|
...props,
|
|
408
416
|
children: [
|
|
409
417
|
children,
|
|
410
|
-
/* @__PURE__ */
|
|
418
|
+
/* @__PURE__ */ jsx5(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx5(IconChevronDown2, { className: "size-4 opacity-50" }) })
|
|
411
419
|
]
|
|
412
420
|
}
|
|
413
421
|
);
|
|
@@ -419,12 +427,12 @@ function SelectContent({
|
|
|
419
427
|
align = "center",
|
|
420
428
|
...props
|
|
421
429
|
}) {
|
|
422
|
-
return /* @__PURE__ */
|
|
430
|
+
return /* @__PURE__ */ jsx5(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs5(
|
|
423
431
|
SelectPrimitive.Content,
|
|
424
432
|
{
|
|
425
433
|
"data-slot": "select-content",
|
|
426
434
|
className: cn(
|
|
427
|
-
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
|
|
435
|
+
"bg-popover text-popover-foreground border-border data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
|
|
428
436
|
position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
|
|
429
437
|
className
|
|
430
438
|
),
|
|
@@ -432,8 +440,8 @@ function SelectContent({
|
|
|
432
440
|
align,
|
|
433
441
|
...props,
|
|
434
442
|
children: [
|
|
435
|
-
/* @__PURE__ */
|
|
436
|
-
/* @__PURE__ */
|
|
443
|
+
/* @__PURE__ */ jsx5(SelectScrollUpButton, {}),
|
|
444
|
+
/* @__PURE__ */ jsx5(
|
|
437
445
|
SelectPrimitive.Viewport,
|
|
438
446
|
{
|
|
439
447
|
className: cn(
|
|
@@ -443,7 +451,7 @@ function SelectContent({
|
|
|
443
451
|
children
|
|
444
452
|
}
|
|
445
453
|
),
|
|
446
|
-
/* @__PURE__ */
|
|
454
|
+
/* @__PURE__ */ jsx5(SelectScrollDownButton, {})
|
|
447
455
|
]
|
|
448
456
|
}
|
|
449
457
|
) });
|
|
@@ -453,7 +461,7 @@ function SelectItem({
|
|
|
453
461
|
children,
|
|
454
462
|
...props
|
|
455
463
|
}) {
|
|
456
|
-
return /* @__PURE__ */
|
|
464
|
+
return /* @__PURE__ */ jsxs5(
|
|
457
465
|
SelectPrimitive.Item,
|
|
458
466
|
{
|
|
459
467
|
"data-slot": "select-item",
|
|
@@ -463,8 +471,8 @@ function SelectItem({
|
|
|
463
471
|
),
|
|
464
472
|
...props,
|
|
465
473
|
children: [
|
|
466
|
-
/* @__PURE__ */
|
|
467
|
-
/* @__PURE__ */
|
|
474
|
+
/* @__PURE__ */ jsx5("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx5(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx5(IconCheck2, { className: "size-4" }) }) }),
|
|
475
|
+
/* @__PURE__ */ jsx5(SelectPrimitive.ItemText, { children })
|
|
468
476
|
]
|
|
469
477
|
}
|
|
470
478
|
);
|
|
@@ -473,7 +481,7 @@ function SelectScrollUpButton({
|
|
|
473
481
|
className,
|
|
474
482
|
...props
|
|
475
483
|
}) {
|
|
476
|
-
return /* @__PURE__ */
|
|
484
|
+
return /* @__PURE__ */ jsx5(
|
|
477
485
|
SelectPrimitive.ScrollUpButton,
|
|
478
486
|
{
|
|
479
487
|
"data-slot": "select-scroll-up-button",
|
|
@@ -482,7 +490,7 @@ function SelectScrollUpButton({
|
|
|
482
490
|
className
|
|
483
491
|
),
|
|
484
492
|
...props,
|
|
485
|
-
children: /* @__PURE__ */
|
|
493
|
+
children: /* @__PURE__ */ jsx5(IconChevronUp, { className: "size-4" })
|
|
486
494
|
}
|
|
487
495
|
);
|
|
488
496
|
}
|
|
@@ -490,7 +498,7 @@ function SelectScrollDownButton({
|
|
|
490
498
|
className,
|
|
491
499
|
...props
|
|
492
500
|
}) {
|
|
493
|
-
return /* @__PURE__ */
|
|
501
|
+
return /* @__PURE__ */ jsx5(
|
|
494
502
|
SelectPrimitive.ScrollDownButton,
|
|
495
503
|
{
|
|
496
504
|
"data-slot": "select-scroll-down-button",
|
|
@@ -499,13 +507,13 @@ function SelectScrollDownButton({
|
|
|
499
507
|
className
|
|
500
508
|
),
|
|
501
509
|
...props,
|
|
502
|
-
children: /* @__PURE__ */
|
|
510
|
+
children: /* @__PURE__ */ jsx5(IconChevronDown2, { className: "size-4" })
|
|
503
511
|
}
|
|
504
512
|
);
|
|
505
513
|
}
|
|
506
514
|
|
|
507
515
|
// src/components/entity/entity-detail-header.tsx
|
|
508
|
-
import { jsx as
|
|
516
|
+
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
509
517
|
function EntityDetailHeader({
|
|
510
518
|
title,
|
|
511
519
|
icon,
|
|
@@ -641,7 +649,7 @@ function EntityDetailHeader({
|
|
|
641
649
|
}
|
|
642
650
|
};
|
|
643
651
|
if (tab.href && LinkComponent) {
|
|
644
|
-
return /* @__PURE__ */
|
|
652
|
+
return /* @__PURE__ */ jsx6(
|
|
645
653
|
LinkComponent,
|
|
646
654
|
{
|
|
647
655
|
href: tab.href,
|
|
@@ -652,7 +660,7 @@ function EntityDetailHeader({
|
|
|
652
660
|
tab.value
|
|
653
661
|
);
|
|
654
662
|
}
|
|
655
|
-
return /* @__PURE__ */
|
|
663
|
+
return /* @__PURE__ */ jsx6(
|
|
656
664
|
"button",
|
|
657
665
|
{
|
|
658
666
|
type: "button",
|
|
@@ -671,9 +679,9 @@ function EntityDetailHeader({
|
|
|
671
679
|
isActive && "bg-accent font-medium"
|
|
672
680
|
);
|
|
673
681
|
if (tab.href && LinkComponent) {
|
|
674
|
-
return /* @__PURE__ */
|
|
682
|
+
return /* @__PURE__ */ jsx6(DropdownMenuItem, { asChild: true, className: itemClassName, children: /* @__PURE__ */ jsx6(LinkComponent, { href: tab.href, children: tab.name }) }, tab.value);
|
|
675
683
|
}
|
|
676
|
-
return /* @__PURE__ */
|
|
684
|
+
return /* @__PURE__ */ jsx6(
|
|
677
685
|
DropdownMenuItem,
|
|
678
686
|
{
|
|
679
687
|
onClick: () => handleTabChange(tab.value),
|
|
@@ -683,25 +691,25 @@ function EntityDetailHeader({
|
|
|
683
691
|
tab.value
|
|
684
692
|
);
|
|
685
693
|
};
|
|
686
|
-
return /* @__PURE__ */
|
|
687
|
-
/* @__PURE__ */
|
|
688
|
-
/* @__PURE__ */
|
|
689
|
-
/* @__PURE__ */
|
|
694
|
+
return /* @__PURE__ */ jsxs6("div", { className: cn("flex flex-col", className), children: [
|
|
695
|
+
/* @__PURE__ */ jsxs6(Card, { className: "overflow-hidden p-0 gap-0", children: [
|
|
696
|
+
/* @__PURE__ */ jsxs6("div", { className: "flex items-center justify-between gap-2 p-4 pb-2 ", children: [
|
|
697
|
+
/* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
|
|
690
698
|
backButton,
|
|
691
699
|
icon,
|
|
692
|
-
/* @__PURE__ */
|
|
700
|
+
/* @__PURE__ */ jsx6("span", { className: "text-lg font-semibold", children: title })
|
|
693
701
|
] }),
|
|
694
|
-
actions && /* @__PURE__ */
|
|
702
|
+
actions && /* @__PURE__ */ jsx6("div", { className: "flex items-center gap-2", children: actions })
|
|
695
703
|
] }),
|
|
696
|
-
/* @__PURE__ */
|
|
697
|
-
/* @__PURE__ */
|
|
698
|
-
/* @__PURE__ */
|
|
699
|
-
/* @__PURE__ */
|
|
700
|
-
/* @__PURE__ */
|
|
704
|
+
/* @__PURE__ */ jsxs6("div", { ref: containerRef, className: "w-full px-4", children: [
|
|
705
|
+
/* @__PURE__ */ jsx6("div", { className: "mb-3 w-full sm:hidden", children: /* @__PURE__ */ jsxs6(Select, { value: activeTab, onValueChange: handleTabChange, children: [
|
|
706
|
+
/* @__PURE__ */ jsxs6(SelectTrigger, { className: "h-9 w-full gap-2 [&>svg:first-child]:shrink-0", children: [
|
|
707
|
+
/* @__PURE__ */ jsx6(IconMenu2, { className: "size-4 text-muted-foreground" }),
|
|
708
|
+
/* @__PURE__ */ jsx6(SelectValue, {})
|
|
701
709
|
] }),
|
|
702
|
-
/* @__PURE__ */
|
|
710
|
+
/* @__PURE__ */ jsx6(SelectContent, { children: tabs.map((tab) => /* @__PURE__ */ jsx6(SelectItem, { value: tab.value, children: tab.name }, tab.value)) })
|
|
703
711
|
] }) }),
|
|
704
|
-
/* @__PURE__ */
|
|
712
|
+
/* @__PURE__ */ jsxs6(
|
|
705
713
|
"div",
|
|
706
714
|
{
|
|
707
715
|
ref: tabsListRef,
|
|
@@ -713,8 +721,8 @@ function EntityDetailHeader({
|
|
|
713
721
|
);
|
|
714
722
|
return renderTab(tab, originalIndex);
|
|
715
723
|
}),
|
|
716
|
-
overflowTabs.length > 0 && /* @__PURE__ */
|
|
717
|
-
/* @__PURE__ */
|
|
724
|
+
overflowTabs.length > 0 && /* @__PURE__ */ jsxs6(DropdownMenu, { children: [
|
|
725
|
+
/* @__PURE__ */ jsxs6(
|
|
718
726
|
DropdownMenuTrigger,
|
|
719
727
|
{
|
|
720
728
|
ref: dropdownTriggerRef,
|
|
@@ -725,13 +733,13 @@ function EntityDetailHeader({
|
|
|
725
733
|
),
|
|
726
734
|
children: [
|
|
727
735
|
"More",
|
|
728
|
-
/* @__PURE__ */
|
|
736
|
+
/* @__PURE__ */ jsx6(IconChevronDown3, { className: "h-4 w-4" })
|
|
729
737
|
]
|
|
730
738
|
}
|
|
731
739
|
),
|
|
732
|
-
/* @__PURE__ */
|
|
740
|
+
/* @__PURE__ */ jsx6(DropdownMenuContent, { align: "start", className: "min-w-40", children: overflowTabs.map(renderDropdownItem) })
|
|
733
741
|
] }),
|
|
734
|
-
/* @__PURE__ */
|
|
742
|
+
/* @__PURE__ */ jsx6(
|
|
735
743
|
motion.div,
|
|
736
744
|
{
|
|
737
745
|
className: "absolute bottom-0 left-0 z-20 h-0.5 bg-primary",
|
|
@@ -751,7 +759,7 @@ function EntityDetailHeader({
|
|
|
751
759
|
)
|
|
752
760
|
] })
|
|
753
761
|
] }),
|
|
754
|
-
activeTabData?.content && /* @__PURE__ */
|
|
762
|
+
activeTabData?.content && /* @__PURE__ */ jsx6("div", { className: "flex-1", children: activeTabData.content })
|
|
755
763
|
] });
|
|
756
764
|
}
|
|
757
765
|
|
|
@@ -761,25 +769,25 @@ import { useState as useState3 } from "react";
|
|
|
761
769
|
// src/components/sheet.tsx
|
|
762
770
|
import * as SheetPrimitive from "@radix-ui/react-dialog";
|
|
763
771
|
import { IconX } from "@tabler/icons-react";
|
|
764
|
-
import { jsx as
|
|
772
|
+
import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
765
773
|
function Sheet({ ...props }) {
|
|
766
|
-
return /* @__PURE__ */
|
|
774
|
+
return /* @__PURE__ */ jsx7(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
|
|
767
775
|
}
|
|
768
776
|
function SheetPortal({
|
|
769
777
|
...props
|
|
770
778
|
}) {
|
|
771
|
-
return /* @__PURE__ */
|
|
779
|
+
return /* @__PURE__ */ jsx7(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
|
|
772
780
|
}
|
|
773
781
|
function SheetOverlay({
|
|
774
782
|
className,
|
|
775
783
|
...props
|
|
776
784
|
}) {
|
|
777
|
-
return /* @__PURE__ */
|
|
785
|
+
return /* @__PURE__ */ jsx7(
|
|
778
786
|
SheetPrimitive.Overlay,
|
|
779
787
|
{
|
|
780
788
|
"data-slot": "sheet-overlay",
|
|
781
789
|
className: cn(
|
|
782
|
-
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-
|
|
790
|
+
"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))]",
|
|
783
791
|
className
|
|
784
792
|
),
|
|
785
793
|
...props
|
|
@@ -792,14 +800,14 @@ function SheetContent({
|
|
|
792
800
|
side = "right",
|
|
793
801
|
...props
|
|
794
802
|
}) {
|
|
795
|
-
return /* @__PURE__ */
|
|
796
|
-
/* @__PURE__ */
|
|
797
|
-
/* @__PURE__ */
|
|
803
|
+
return /* @__PURE__ */ jsxs7(SheetPortal, { children: [
|
|
804
|
+
/* @__PURE__ */ jsx7(SheetOverlay, {}),
|
|
805
|
+
/* @__PURE__ */ jsxs7(
|
|
798
806
|
SheetPrimitive.Content,
|
|
799
807
|
{
|
|
800
808
|
"data-slot": "sheet-content",
|
|
801
809
|
className: cn(
|
|
802
|
-
"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-
|
|
810
|
+
"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",
|
|
803
811
|
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",
|
|
804
812
|
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",
|
|
805
813
|
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",
|
|
@@ -809,9 +817,9 @@ function SheetContent({
|
|
|
809
817
|
...props,
|
|
810
818
|
children: [
|
|
811
819
|
children,
|
|
812
|
-
/* @__PURE__ */
|
|
813
|
-
/* @__PURE__ */
|
|
814
|
-
/* @__PURE__ */
|
|
820
|
+
/* @__PURE__ */ jsxs7(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: [
|
|
821
|
+
/* @__PURE__ */ jsx7(IconX, { className: "size-4" }),
|
|
822
|
+
/* @__PURE__ */ jsx7("span", { className: "sr-only", children: "Close" })
|
|
815
823
|
] })
|
|
816
824
|
]
|
|
817
825
|
}
|
|
@@ -819,7 +827,7 @@ function SheetContent({
|
|
|
819
827
|
] });
|
|
820
828
|
}
|
|
821
829
|
function SheetHeader({ className, ...props }) {
|
|
822
|
-
return /* @__PURE__ */
|
|
830
|
+
return /* @__PURE__ */ jsx7(
|
|
823
831
|
"div",
|
|
824
832
|
{
|
|
825
833
|
"data-slot": "sheet-header",
|
|
@@ -832,7 +840,7 @@ function SheetTitle({
|
|
|
832
840
|
className,
|
|
833
841
|
...props
|
|
834
842
|
}) {
|
|
835
|
-
return /* @__PURE__ */
|
|
843
|
+
return /* @__PURE__ */ jsx7(
|
|
836
844
|
SheetPrimitive.Title,
|
|
837
845
|
{
|
|
838
846
|
"data-slot": "sheet-title",
|
|
@@ -843,12 +851,12 @@ function SheetTitle({
|
|
|
843
851
|
}
|
|
844
852
|
|
|
845
853
|
// src/components/entity/entity-drawer.tsx
|
|
846
|
-
import { Fragment as Fragment2, jsx as
|
|
854
|
+
import { Fragment as Fragment2, jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
847
855
|
var sizeClasses = {
|
|
848
|
-
sm: "sm
|
|
849
|
-
md: "sm
|
|
850
|
-
lg: "sm
|
|
851
|
-
xl: "sm
|
|
856
|
+
sm: "w-full min-w-0 sm:!max-w-[24rem]",
|
|
857
|
+
md: "w-full min-w-0 sm:!max-w-[28rem]",
|
|
858
|
+
lg: "w-full min-w-0 sm:!max-w-[32rem]",
|
|
859
|
+
xl: "w-full min-w-0 sm:!max-w-[36rem]"
|
|
852
860
|
};
|
|
853
861
|
function EntityDrawer({
|
|
854
862
|
title,
|
|
@@ -871,11 +879,11 @@ function EntityDrawer({
|
|
|
871
879
|
setShowConfirm(false);
|
|
872
880
|
onClose();
|
|
873
881
|
};
|
|
874
|
-
return /* @__PURE__ */
|
|
875
|
-
/* @__PURE__ */
|
|
882
|
+
return /* @__PURE__ */ jsxs8(Fragment2, { children: [
|
|
883
|
+
/* @__PURE__ */ jsx8(Sheet, { open, onOpenChange: (isOpen) => !isOpen && handleClose(), children: /* @__PURE__ */ jsxs8(
|
|
876
884
|
SheetContent,
|
|
877
885
|
{
|
|
878
|
-
className: `${sizeClasses[size]} flex flex-col p-0`,
|
|
886
|
+
className: `${sizeClasses[size]} flex min-h-0 flex-col overflow-hidden p-0`,
|
|
879
887
|
onInteractOutside: (e) => {
|
|
880
888
|
if (isDirty) {
|
|
881
889
|
e.preventDefault();
|
|
@@ -889,20 +897,20 @@ function EntityDrawer({
|
|
|
889
897
|
}
|
|
890
898
|
},
|
|
891
899
|
children: [
|
|
892
|
-
/* @__PURE__ */
|
|
893
|
-
/* @__PURE__ */
|
|
894
|
-
/* @__PURE__ */
|
|
900
|
+
/* @__PURE__ */ jsx8(SheetHeader, { className: "border-border bg-background border-b px-6 py-4", children: /* @__PURE__ */ jsx8(SheetTitle, { children: title }) }),
|
|
901
|
+
/* @__PURE__ */ jsx8("div", { className: "bg-background flex-1 overflow-y-auto px-6 py-4", children: form }),
|
|
902
|
+
/* @__PURE__ */ jsx8("div", { className: "border-border bg-background border-t px-6 py-4", children: actions })
|
|
895
903
|
]
|
|
896
904
|
}
|
|
897
905
|
) }),
|
|
898
|
-
/* @__PURE__ */
|
|
899
|
-
/* @__PURE__ */
|
|
900
|
-
/* @__PURE__ */
|
|
901
|
-
/* @__PURE__ */
|
|
906
|
+
/* @__PURE__ */ jsx8(AlertDialog, { open: showConfirm, onOpenChange: setShowConfirm, children: /* @__PURE__ */ jsxs8(AlertDialogContent, { children: [
|
|
907
|
+
/* @__PURE__ */ jsxs8(AlertDialogHeader, { children: [
|
|
908
|
+
/* @__PURE__ */ jsx8(AlertDialogTitle, { children: "Discard changes?" }),
|
|
909
|
+
/* @__PURE__ */ jsx8(AlertDialogDescription, { children: "You have unsaved changes. Are you sure you want to discard them?" })
|
|
902
910
|
] }),
|
|
903
|
-
/* @__PURE__ */
|
|
904
|
-
/* @__PURE__ */
|
|
905
|
-
/* @__PURE__ */
|
|
911
|
+
/* @__PURE__ */ jsxs8(AlertDialogFooter, { children: [
|
|
912
|
+
/* @__PURE__ */ jsx8(AlertDialogCancel, { children: "Cancel" }),
|
|
913
|
+
/* @__PURE__ */ jsx8(
|
|
906
914
|
AlertDialogAction,
|
|
907
915
|
{
|
|
908
916
|
onClick: handleConfirmDiscard,
|
|
@@ -918,7 +926,7 @@ function EntityDrawer({
|
|
|
918
926
|
// src/components/entity/entity-drawer-trigger.tsx
|
|
919
927
|
import { IconChevronRight as IconChevronRight2, IconPencil, IconPlus } from "@tabler/icons-react";
|
|
920
928
|
import { useState as useState4 } from "react";
|
|
921
|
-
import { Fragment as Fragment3, jsx as
|
|
929
|
+
import { Fragment as Fragment3, jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
922
930
|
function EntityDrawerTrigger({
|
|
923
931
|
mode,
|
|
924
932
|
entity,
|
|
@@ -948,19 +956,19 @@ function EntityDrawerTrigger({
|
|
|
948
956
|
}
|
|
949
957
|
};
|
|
950
958
|
const buttonLabel = label || (mode === "new" ? `New ${entity}` : `Edit ${entity}`);
|
|
951
|
-
return /* @__PURE__ */
|
|
952
|
-
mode === "edit" && variant === "icon" && /* @__PURE__ */
|
|
959
|
+
return /* @__PURE__ */ jsxs9(Fragment3, { children: [
|
|
960
|
+
mode === "edit" && variant === "icon" && /* @__PURE__ */ jsx9(
|
|
953
961
|
Button,
|
|
954
962
|
{
|
|
955
963
|
variant: "ghost",
|
|
956
964
|
size: "icon",
|
|
957
|
-
className: `
|
|
965
|
+
className: `size-8 opacity-0 group-hover:opacity-100 transition-opacity ${className}`,
|
|
958
966
|
onClick: handleOpen,
|
|
959
967
|
disabled,
|
|
960
|
-
children: /* @__PURE__ */
|
|
968
|
+
children: /* @__PURE__ */ jsx9(IconChevronRight2, { className: "size-4" })
|
|
961
969
|
}
|
|
962
970
|
),
|
|
963
|
-
mode === "edit" && variant !== "icon" && /* @__PURE__ */
|
|
971
|
+
mode === "edit" && variant !== "icon" && /* @__PURE__ */ jsx9(
|
|
964
972
|
Button,
|
|
965
973
|
{
|
|
966
974
|
variant: variant === "outline" ? "outline" : "default",
|
|
@@ -968,13 +976,11 @@ function EntityDrawerTrigger({
|
|
|
968
976
|
onClick: handleOpen,
|
|
969
977
|
disabled,
|
|
970
978
|
className,
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
buttonLabel
|
|
974
|
-
]
|
|
979
|
+
leftIcon: /* @__PURE__ */ jsx9(IconPencil, { className: "size-4" }),
|
|
980
|
+
children: buttonLabel
|
|
975
981
|
}
|
|
976
982
|
),
|
|
977
|
-
mode === "new" && /* @__PURE__ */
|
|
983
|
+
mode === "new" && /* @__PURE__ */ jsx9(
|
|
978
984
|
Button,
|
|
979
985
|
{
|
|
980
986
|
variant: variant === "outline" ? "outline" : "default",
|
|
@@ -985,10 +991,8 @@ function EntityDrawerTrigger({
|
|
|
985
991
|
"max-sm:h-8 max-sm:w-8 max-sm:shrink-0 max-sm:justify-center max-sm:p-0",
|
|
986
992
|
className
|
|
987
993
|
),
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
/* @__PURE__ */ jsx10("span", { className: "hidden sm:inline", children: buttonLabel })
|
|
991
|
-
]
|
|
994
|
+
leftIcon: /* @__PURE__ */ jsx9(IconPlus, { className: "size-4" }),
|
|
995
|
+
children: /* @__PURE__ */ jsx9("span", { className: "hidden sm:inline", children: buttonLabel })
|
|
992
996
|
}
|
|
993
997
|
),
|
|
994
998
|
open && children(open, handleClose)
|
|
@@ -1000,9 +1004,9 @@ import { IconPackage } from "@tabler/icons-react";
|
|
|
1000
1004
|
|
|
1001
1005
|
// src/components/empty.tsx
|
|
1002
1006
|
import { cva as cva2 } from "class-variance-authority";
|
|
1003
|
-
import { jsx as
|
|
1007
|
+
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
1004
1008
|
function Empty({ className, ...props }) {
|
|
1005
|
-
return /* @__PURE__ */
|
|
1009
|
+
return /* @__PURE__ */ jsx10(
|
|
1006
1010
|
"div",
|
|
1007
1011
|
{
|
|
1008
1012
|
"data-slot": "empty",
|
|
@@ -1015,7 +1019,7 @@ function Empty({ className, ...props }) {
|
|
|
1015
1019
|
);
|
|
1016
1020
|
}
|
|
1017
1021
|
function EmptyHeader({ className, ...props }) {
|
|
1018
|
-
return /* @__PURE__ */
|
|
1022
|
+
return /* @__PURE__ */ jsx10(
|
|
1019
1023
|
"div",
|
|
1020
1024
|
{
|
|
1021
1025
|
"data-slot": "empty-header",
|
|
@@ -1046,7 +1050,7 @@ function EmptyMedia({
|
|
|
1046
1050
|
variant = "default",
|
|
1047
1051
|
...props
|
|
1048
1052
|
}) {
|
|
1049
|
-
return /* @__PURE__ */
|
|
1053
|
+
return /* @__PURE__ */ jsx10(
|
|
1050
1054
|
"div",
|
|
1051
1055
|
{
|
|
1052
1056
|
"data-slot": "empty-icon",
|
|
@@ -1057,7 +1061,7 @@ function EmptyMedia({
|
|
|
1057
1061
|
);
|
|
1058
1062
|
}
|
|
1059
1063
|
function EmptyTitle({ className, ...props }) {
|
|
1060
|
-
return /* @__PURE__ */
|
|
1064
|
+
return /* @__PURE__ */ jsx10(
|
|
1061
1065
|
"div",
|
|
1062
1066
|
{
|
|
1063
1067
|
"data-slot": "empty-title",
|
|
@@ -1067,7 +1071,7 @@ function EmptyTitle({ className, ...props }) {
|
|
|
1067
1071
|
);
|
|
1068
1072
|
}
|
|
1069
1073
|
function EmptyDescription({ className, ...props }) {
|
|
1070
|
-
return /* @__PURE__ */
|
|
1074
|
+
return /* @__PURE__ */ jsx10(
|
|
1071
1075
|
"div",
|
|
1072
1076
|
{
|
|
1073
1077
|
"data-slot": "empty-description",
|
|
@@ -1080,7 +1084,7 @@ function EmptyDescription({ className, ...props }) {
|
|
|
1080
1084
|
);
|
|
1081
1085
|
}
|
|
1082
1086
|
function EmptyContent({ className, ...props }) {
|
|
1083
|
-
return /* @__PURE__ */
|
|
1087
|
+
return /* @__PURE__ */ jsx10(
|
|
1084
1088
|
"div",
|
|
1085
1089
|
{
|
|
1086
1090
|
"data-slot": "empty-content",
|
|
@@ -1094,7 +1098,7 @@ function EmptyContent({ className, ...props }) {
|
|
|
1094
1098
|
}
|
|
1095
1099
|
|
|
1096
1100
|
// src/components/entity/entity-empty-state.tsx
|
|
1097
|
-
import { jsx as
|
|
1101
|
+
import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1098
1102
|
function EntityEmptyState({
|
|
1099
1103
|
icon: Icon2 = IconPackage,
|
|
1100
1104
|
title,
|
|
@@ -1108,20 +1112,20 @@ function EntityEmptyState({
|
|
|
1108
1112
|
const defaultTitle = `No ${entityName}s yet`;
|
|
1109
1113
|
const defaultDescription = `Get started by creating your first ${entityName}.`;
|
|
1110
1114
|
const defaultActionLabel = `Create ${entityName}`;
|
|
1111
|
-
return /* @__PURE__ */
|
|
1112
|
-
/* @__PURE__ */
|
|
1113
|
-
/* @__PURE__ */
|
|
1114
|
-
/* @__PURE__ */
|
|
1115
|
-
/* @__PURE__ */
|
|
1115
|
+
return /* @__PURE__ */ jsxs10(Empty, { className: cn("border py-12", className), children: [
|
|
1116
|
+
/* @__PURE__ */ jsxs10(EmptyHeader, { children: [
|
|
1117
|
+
/* @__PURE__ */ jsx11(EmptyMedia, { variant: "icon", children: /* @__PURE__ */ jsx11(Icon2, { className: "size-5" }) }),
|
|
1118
|
+
/* @__PURE__ */ jsx11(EmptyTitle, { children: title ?? defaultTitle }),
|
|
1119
|
+
/* @__PURE__ */ jsx11(EmptyDescription, { children: description ?? defaultDescription })
|
|
1116
1120
|
] }),
|
|
1117
|
-
/* @__PURE__ */
|
|
1121
|
+
/* @__PURE__ */ jsx11(EmptyContent, { children: children ?? (onAction && /* @__PURE__ */ jsx11(Button, { onClick: onAction, children: actionLabel ?? defaultActionLabel })) })
|
|
1118
1122
|
] });
|
|
1119
1123
|
}
|
|
1120
1124
|
|
|
1121
1125
|
// src/components/entity/entity-filter.tsx
|
|
1122
1126
|
import { IconFilter } from "@tabler/icons-react";
|
|
1123
1127
|
import { parseAsInteger, parseAsString, useQueryState } from "nuqs";
|
|
1124
|
-
import { jsx as
|
|
1128
|
+
import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1125
1129
|
function EntityFilter({
|
|
1126
1130
|
options,
|
|
1127
1131
|
placeholder = "Filter",
|
|
@@ -1140,16 +1144,16 @@ function EntityFilter({
|
|
|
1140
1144
|
};
|
|
1141
1145
|
const validOptions = options.filter((opt) => opt.value !== "");
|
|
1142
1146
|
const displayValue = value || (options.some((opt) => opt.value === "") ? "__all__" : void 0);
|
|
1143
|
-
return /* @__PURE__ */
|
|
1144
|
-
label && /* @__PURE__ */
|
|
1145
|
-
/* @__PURE__ */
|
|
1146
|
-
/* @__PURE__ */
|
|
1147
|
-
/* @__PURE__ */
|
|
1148
|
-
/* @__PURE__ */
|
|
1147
|
+
return /* @__PURE__ */ jsxs11("div", { className: cn("flex w-full items-center gap-2", className), children: [
|
|
1148
|
+
label && /* @__PURE__ */ jsx12("span", { className: "shrink-0 text-sm text-muted-foreground", children: label }),
|
|
1149
|
+
/* @__PURE__ */ jsx12("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxs11(Select, { value: displayValue, onValueChange: handleChange, children: [
|
|
1150
|
+
/* @__PURE__ */ jsxs11(SelectTrigger, { className: "h-9 w-full min-w-[150px]", children: [
|
|
1151
|
+
/* @__PURE__ */ jsx12(IconFilter, { className: "size-4" }),
|
|
1152
|
+
/* @__PURE__ */ jsx12(SelectValue, { placeholder })
|
|
1149
1153
|
] }),
|
|
1150
|
-
/* @__PURE__ */
|
|
1151
|
-
options.some((opt) => opt.value === "") && /* @__PURE__ */
|
|
1152
|
-
validOptions.map((option) => /* @__PURE__ */
|
|
1154
|
+
/* @__PURE__ */ jsxs11(SelectContent, { children: [
|
|
1155
|
+
options.some((opt) => opt.value === "") && /* @__PURE__ */ jsx12(SelectItem, { value: "__all__", children: options.find((opt) => opt.value === "")?.label || "All" }, "__all__"),
|
|
1156
|
+
validOptions.map((option) => /* @__PURE__ */ jsx12(SelectItem, { value: option.value, children: option.label }, option.value))
|
|
1153
1157
|
] })
|
|
1154
1158
|
] }) })
|
|
1155
1159
|
] });
|
|
@@ -1164,12 +1168,12 @@ import {
|
|
|
1164
1168
|
|
|
1165
1169
|
// src/components/spinner.tsx
|
|
1166
1170
|
import { IconLoader2 } from "@tabler/icons-react";
|
|
1167
|
-
import { jsx as
|
|
1171
|
+
import { jsx as jsx13 } from "react/jsx-runtime";
|
|
1168
1172
|
function Spinner({
|
|
1169
1173
|
className,
|
|
1170
1174
|
...props
|
|
1171
1175
|
}) {
|
|
1172
|
-
return /* @__PURE__ */
|
|
1176
|
+
return /* @__PURE__ */ jsx13(
|
|
1173
1177
|
IconLoader2,
|
|
1174
1178
|
{
|
|
1175
1179
|
role: "status",
|
|
@@ -1181,7 +1185,7 @@ function Spinner({
|
|
|
1181
1185
|
}
|
|
1182
1186
|
|
|
1183
1187
|
// src/components/entity/entity-form-actions.tsx
|
|
1184
|
-
import { jsx as
|
|
1188
|
+
import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1185
1189
|
function EntityFormActions({
|
|
1186
1190
|
mode,
|
|
1187
1191
|
onSubmit,
|
|
@@ -1197,21 +1201,18 @@ function EntityFormActions({
|
|
|
1197
1201
|
}) {
|
|
1198
1202
|
const defaultSubmitLabel = mode === "new" ? "Create" : "Update";
|
|
1199
1203
|
const label = submitLabel || defaultSubmitLabel;
|
|
1200
|
-
return /* @__PURE__ */
|
|
1201
|
-
onSubmit && /* @__PURE__ */
|
|
1204
|
+
return /* @__PURE__ */ jsxs12("div", { className: "flex items-center gap-3", children: [
|
|
1205
|
+
onSubmit && /* @__PURE__ */ jsx14(
|
|
1202
1206
|
Button,
|
|
1203
1207
|
{
|
|
1204
1208
|
onClick: onSubmit,
|
|
1205
1209
|
disabled: disabled || isSubmitting,
|
|
1206
1210
|
className: "cursor-pointer",
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
!isSubmitting && /* @__PURE__ */ jsx15(IconDeviceFloppy, { className: " h-4 w-4" }),
|
|
1210
|
-
label
|
|
1211
|
-
]
|
|
1211
|
+
leftIcon: isSubmitting ? /* @__PURE__ */ jsx14(Spinner, { className: "size-4" }) : /* @__PURE__ */ jsx14(IconDeviceFloppy, { className: "size-4" }),
|
|
1212
|
+
children: label
|
|
1212
1213
|
}
|
|
1213
1214
|
),
|
|
1214
|
-
mode === "new" && onReset && /* @__PURE__ */
|
|
1215
|
+
mode === "new" && onReset && /* @__PURE__ */ jsxs12(
|
|
1215
1216
|
Button,
|
|
1216
1217
|
{
|
|
1217
1218
|
variant: "outline",
|
|
@@ -1219,37 +1220,34 @@ function EntityFormActions({
|
|
|
1219
1220
|
disabled,
|
|
1220
1221
|
className: "cursor-pointer",
|
|
1221
1222
|
children: [
|
|
1222
|
-
/* @__PURE__ */
|
|
1223
|
+
/* @__PURE__ */ jsx14(IconRotateClockwise, { className: " h-4 w-4" }),
|
|
1223
1224
|
"Reset"
|
|
1224
1225
|
]
|
|
1225
1226
|
}
|
|
1226
1227
|
),
|
|
1227
|
-
mode === "edit" && onDelete && /* @__PURE__ */
|
|
1228
|
-
/* @__PURE__ */
|
|
1228
|
+
mode === "edit" && onDelete && /* @__PURE__ */ jsxs12(AlertDialog, { children: [
|
|
1229
|
+
/* @__PURE__ */ jsx14(AlertDialogTrigger, { asChild: true, children: /* @__PURE__ */ jsx14(
|
|
1229
1230
|
Button,
|
|
1230
1231
|
{
|
|
1231
1232
|
variant: "destructive",
|
|
1232
1233
|
disabled: disabled || isDeleting,
|
|
1233
1234
|
className: "cursor-pointer",
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
/* @__PURE__ */ jsx15(IconTrash2, { className: " h-4 w-4" }),
|
|
1237
|
-
deleteLabel
|
|
1238
|
-
]
|
|
1235
|
+
leftIcon: isDeleting ? /* @__PURE__ */ jsx14(Spinner, { className: "size-4" }) : /* @__PURE__ */ jsx14(IconTrash2, { className: "size-4" }),
|
|
1236
|
+
children: deleteLabel
|
|
1239
1237
|
}
|
|
1240
1238
|
) }),
|
|
1241
|
-
/* @__PURE__ */
|
|
1242
|
-
/* @__PURE__ */
|
|
1243
|
-
/* @__PURE__ */
|
|
1244
|
-
/* @__PURE__ */
|
|
1239
|
+
/* @__PURE__ */ jsxs12(AlertDialogContent, { children: [
|
|
1240
|
+
/* @__PURE__ */ jsxs12(AlertDialogHeader, { children: [
|
|
1241
|
+
/* @__PURE__ */ jsx14(AlertDialogTitle, { children: "Are you sure?" }),
|
|
1242
|
+
/* @__PURE__ */ jsxs12(AlertDialogDescription, { children: [
|
|
1245
1243
|
"This will permanently delete this ",
|
|
1246
1244
|
itemName,
|
|
1247
1245
|
". This action cannot be undone."
|
|
1248
1246
|
] })
|
|
1249
1247
|
] }),
|
|
1250
|
-
/* @__PURE__ */
|
|
1251
|
-
/* @__PURE__ */
|
|
1252
|
-
/* @__PURE__ */
|
|
1248
|
+
/* @__PURE__ */ jsxs12(AlertDialogFooter, { children: [
|
|
1249
|
+
/* @__PURE__ */ jsx14(AlertDialogCancel, { children: "Cancel" }),
|
|
1250
|
+
/* @__PURE__ */ jsx14(
|
|
1253
1251
|
AlertDialogAction,
|
|
1254
1252
|
{
|
|
1255
1253
|
onClick: onDelete,
|
|
@@ -1260,7 +1258,7 @@ function EntityFormActions({
|
|
|
1260
1258
|
] })
|
|
1261
1259
|
] })
|
|
1262
1260
|
] }),
|
|
1263
|
-
onCancel && /* @__PURE__ */
|
|
1261
|
+
onCancel && /* @__PURE__ */ jsx14(
|
|
1264
1262
|
Button,
|
|
1265
1263
|
{
|
|
1266
1264
|
variant: "ghost",
|
|
@@ -1276,7 +1274,7 @@ function EntityFormActions({
|
|
|
1276
1274
|
// src/components/entity/entity-header.tsx
|
|
1277
1275
|
import { IconChevronDown as IconChevronDown4, IconChevronUp as IconChevronUp2 } from "@tabler/icons-react";
|
|
1278
1276
|
import { useState as useState5 } from "react";
|
|
1279
|
-
import { jsx as
|
|
1277
|
+
import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1280
1278
|
function EntityHeader({
|
|
1281
1279
|
title,
|
|
1282
1280
|
icon,
|
|
@@ -1288,15 +1286,15 @@ function EntityHeader({
|
|
|
1288
1286
|
}) {
|
|
1289
1287
|
const [toolbarOpen, setToolbarOpen] = useState5(false);
|
|
1290
1288
|
const hasToolbar = [search, filter, sort, view].some(Boolean);
|
|
1291
|
-
return /* @__PURE__ */
|
|
1292
|
-
/* @__PURE__ */
|
|
1293
|
-
/* @__PURE__ */
|
|
1289
|
+
return /* @__PURE__ */ jsx15(Card, { className: "p-4", children: /* @__PURE__ */ jsxs13("div", { className: "flex flex-col gap-4", children: [
|
|
1290
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex items-center justify-between", children: [
|
|
1291
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-2", children: [
|
|
1294
1292
|
icon,
|
|
1295
|
-
/* @__PURE__ */
|
|
1293
|
+
/* @__PURE__ */ jsx15("span", { className: "text-lg font-semibold", children: title })
|
|
1296
1294
|
] }),
|
|
1297
|
-
/* @__PURE__ */
|
|
1295
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-3", children: [
|
|
1298
1296
|
actions,
|
|
1299
|
-
hasToolbar && /* @__PURE__ */
|
|
1297
|
+
hasToolbar && /* @__PURE__ */ jsx15(
|
|
1300
1298
|
Button,
|
|
1301
1299
|
{
|
|
1302
1300
|
variant: "secondary",
|
|
@@ -1305,22 +1303,22 @@ function EntityHeader({
|
|
|
1305
1303
|
onClick: () => setToolbarOpen((o) => !o),
|
|
1306
1304
|
"aria-expanded": toolbarOpen,
|
|
1307
1305
|
"aria-label": toolbarOpen ? "Hide filters" : "Show filters",
|
|
1308
|
-
children: toolbarOpen ? /* @__PURE__ */
|
|
1306
|
+
children: toolbarOpen ? /* @__PURE__ */ jsx15(IconChevronUp2, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx15(IconChevronDown4, { className: "h-4 w-4" })
|
|
1309
1307
|
}
|
|
1310
1308
|
)
|
|
1311
1309
|
] })
|
|
1312
1310
|
] }),
|
|
1313
|
-
hasToolbar && /* @__PURE__ */
|
|
1311
|
+
hasToolbar && /* @__PURE__ */ jsxs13(
|
|
1314
1312
|
"div",
|
|
1315
1313
|
{
|
|
1316
1314
|
className: cn(
|
|
1317
|
-
"flex flex-col gap-2 md:flex-row md:items-center md:justify-between",
|
|
1315
|
+
"flex flex-col gap-2 md:flex-row md:items-center md:gap-2 md:justify-between",
|
|
1318
1316
|
!toolbarOpen && "hidden",
|
|
1319
1317
|
"md:flex"
|
|
1320
1318
|
),
|
|
1321
1319
|
children: [
|
|
1322
|
-
/* @__PURE__ */
|
|
1323
|
-
/* @__PURE__ */
|
|
1320
|
+
/* @__PURE__ */ jsx15("div", { className: "w-full min-w-0 flex-1 md:min-w-[12rem]", children: search }),
|
|
1321
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex w-full shrink-0 flex-col gap-2 *:w-full md:w-auto md:flex-row md:items-center md:gap-2 md:*:w-auto", children: [
|
|
1324
1322
|
filter,
|
|
1325
1323
|
sort,
|
|
1326
1324
|
view
|
|
@@ -1332,9 +1330,9 @@ function EntityHeader({
|
|
|
1332
1330
|
}
|
|
1333
1331
|
|
|
1334
1332
|
// src/components/skeleton.tsx
|
|
1335
|
-
import { jsx as
|
|
1333
|
+
import { jsx as jsx16 } from "react/jsx-runtime";
|
|
1336
1334
|
function Skeleton({ className, ...props }) {
|
|
1337
|
-
return /* @__PURE__ */
|
|
1335
|
+
return /* @__PURE__ */ jsx16(
|
|
1338
1336
|
"div",
|
|
1339
1337
|
{
|
|
1340
1338
|
"data-slot": "skeleton",
|
|
@@ -1345,14 +1343,14 @@ function Skeleton({ className, ...props }) {
|
|
|
1345
1343
|
}
|
|
1346
1344
|
|
|
1347
1345
|
// src/components/table.tsx
|
|
1348
|
-
import { jsx as
|
|
1346
|
+
import { jsx as jsx17 } from "react/jsx-runtime";
|
|
1349
1347
|
function Table({ className, ...props }) {
|
|
1350
|
-
return /* @__PURE__ */
|
|
1348
|
+
return /* @__PURE__ */ jsx17(
|
|
1351
1349
|
"div",
|
|
1352
1350
|
{
|
|
1353
1351
|
"data-slot": "table-container",
|
|
1354
1352
|
className: "relative w-full overflow-x-auto",
|
|
1355
|
-
children: /* @__PURE__ */
|
|
1353
|
+
children: /* @__PURE__ */ jsx17(
|
|
1356
1354
|
"table",
|
|
1357
1355
|
{
|
|
1358
1356
|
"data-slot": "table",
|
|
@@ -1364,7 +1362,7 @@ function Table({ className, ...props }) {
|
|
|
1364
1362
|
);
|
|
1365
1363
|
}
|
|
1366
1364
|
function TableHeader({ className, ...props }) {
|
|
1367
|
-
return /* @__PURE__ */
|
|
1365
|
+
return /* @__PURE__ */ jsx17(
|
|
1368
1366
|
"thead",
|
|
1369
1367
|
{
|
|
1370
1368
|
"data-slot": "table-header",
|
|
@@ -1374,7 +1372,7 @@ function TableHeader({ className, ...props }) {
|
|
|
1374
1372
|
);
|
|
1375
1373
|
}
|
|
1376
1374
|
function TableBody({ className, ...props }) {
|
|
1377
|
-
return /* @__PURE__ */
|
|
1375
|
+
return /* @__PURE__ */ jsx17(
|
|
1378
1376
|
"tbody",
|
|
1379
1377
|
{
|
|
1380
1378
|
"data-slot": "table-body",
|
|
@@ -1384,7 +1382,7 @@ function TableBody({ className, ...props }) {
|
|
|
1384
1382
|
);
|
|
1385
1383
|
}
|
|
1386
1384
|
function TableRow({ className, ...props }) {
|
|
1387
|
-
return /* @__PURE__ */
|
|
1385
|
+
return /* @__PURE__ */ jsx17(
|
|
1388
1386
|
"tr",
|
|
1389
1387
|
{
|
|
1390
1388
|
"data-slot": "table-row",
|
|
@@ -1397,7 +1395,7 @@ function TableRow({ className, ...props }) {
|
|
|
1397
1395
|
);
|
|
1398
1396
|
}
|
|
1399
1397
|
function TableHead({ className, ...props }) {
|
|
1400
|
-
return /* @__PURE__ */
|
|
1398
|
+
return /* @__PURE__ */ jsx17(
|
|
1401
1399
|
"th",
|
|
1402
1400
|
{
|
|
1403
1401
|
"data-slot": "table-head",
|
|
@@ -1410,7 +1408,7 @@ function TableHead({ className, ...props }) {
|
|
|
1410
1408
|
);
|
|
1411
1409
|
}
|
|
1412
1410
|
function TableCell({ className, ...props }) {
|
|
1413
|
-
return /* @__PURE__ */
|
|
1411
|
+
return /* @__PURE__ */ jsx17(
|
|
1414
1412
|
"td",
|
|
1415
1413
|
{
|
|
1416
1414
|
"data-slot": "table-cell",
|
|
@@ -1424,7 +1422,7 @@ function TableCell({ className, ...props }) {
|
|
|
1424
1422
|
}
|
|
1425
1423
|
|
|
1426
1424
|
// src/components/entity/entity-loading-state.tsx
|
|
1427
|
-
import { jsx as
|
|
1425
|
+
import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1428
1426
|
function EntityLoadingState({
|
|
1429
1427
|
view,
|
|
1430
1428
|
rowCount = 5,
|
|
@@ -1433,31 +1431,38 @@ function EntityLoadingState({
|
|
|
1433
1431
|
className
|
|
1434
1432
|
}) {
|
|
1435
1433
|
if (view === "table") {
|
|
1436
|
-
return /* @__PURE__ */
|
|
1437
|
-
/* @__PURE__ */
|
|
1438
|
-
/* @__PURE__ */
|
|
1434
|
+
return /* @__PURE__ */ jsx18("div", { className: cn("rounded-md border", className), children: /* @__PURE__ */ jsxs14(Table, { children: [
|
|
1435
|
+
/* @__PURE__ */ jsx18(TableHeader, { children: /* @__PURE__ */ jsx18(TableRow, { children: Array.from({ length: columnCount }).map((_, i) => /* @__PURE__ */ jsx18(TableHead, { children: /* @__PURE__ */ jsx18(Skeleton, { className: "h-4 w-24" }) }, `header-${i}`)) }) }),
|
|
1436
|
+
/* @__PURE__ */ jsx18(TableBody, { children: Array.from({ length: rowCount }).map((_, rowIndex) => /* @__PURE__ */ jsx18(TableRow, { children: Array.from({ length: columnCount }).map((_2, colIndex) => /* @__PURE__ */ jsx18(TableCell, { children: /* @__PURE__ */ jsx18(Skeleton, { className: "h-4 w-full" }) }, `cell-${rowIndex}-${colIndex}`)) }, `row-${rowIndex}`)) })
|
|
1439
1437
|
] }) });
|
|
1440
1438
|
}
|
|
1441
|
-
return /* @__PURE__ */
|
|
1439
|
+
return /* @__PURE__ */ jsx18(
|
|
1442
1440
|
"div",
|
|
1443
1441
|
{
|
|
1444
1442
|
className: cn(
|
|
1445
1443
|
"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4",
|
|
1446
1444
|
className
|
|
1447
1445
|
),
|
|
1448
|
-
children: Array.from({ length: cardCount }).map((_, i) => /* @__PURE__ */
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1446
|
+
children: Array.from({ length: cardCount }).map((_, i) => /* @__PURE__ */ jsxs14(
|
|
1447
|
+
"div",
|
|
1448
|
+
{
|
|
1449
|
+
className: "border-border space-y-3 rounded-lg border p-4",
|
|
1450
|
+
children: [
|
|
1451
|
+
/* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-2", children: [
|
|
1452
|
+
/* @__PURE__ */ jsx18(Skeleton, { className: "h-4 w-4 rounded-full" }),
|
|
1453
|
+
/* @__PURE__ */ jsx18(Skeleton, { className: "h-5 w-32" })
|
|
1454
|
+
] }),
|
|
1455
|
+
/* @__PURE__ */ jsxs14("div", { className: "flex gap-2", children: [
|
|
1456
|
+
/* @__PURE__ */ jsx18(Skeleton, { className: "h-5 w-16" }),
|
|
1457
|
+
/* @__PURE__ */ jsx18(Skeleton, { className: "h-5 w-16" })
|
|
1458
|
+
] }),
|
|
1459
|
+
/* @__PURE__ */ jsx18(Skeleton, { className: "h-4 w-full" }),
|
|
1460
|
+
/* @__PURE__ */ jsx18(Skeleton, { className: "h-4 w-3/4" }),
|
|
1461
|
+
/* @__PURE__ */ jsx18(Skeleton, { className: "h-3 w-24" })
|
|
1462
|
+
]
|
|
1463
|
+
},
|
|
1464
|
+
`card-${i}`
|
|
1465
|
+
))
|
|
1461
1466
|
}
|
|
1462
1467
|
);
|
|
1463
1468
|
}
|
|
@@ -1469,9 +1474,9 @@ import { useRef as useRef2 } from "react";
|
|
|
1469
1474
|
import { useDebouncedCallback } from "use-debounce";
|
|
1470
1475
|
|
|
1471
1476
|
// src/components/input.tsx
|
|
1472
|
-
import { jsx as
|
|
1477
|
+
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
1473
1478
|
function Input({ className, type, ...props }) {
|
|
1474
|
-
return /* @__PURE__ */
|
|
1479
|
+
return /* @__PURE__ */ jsx19(
|
|
1475
1480
|
"input",
|
|
1476
1481
|
{
|
|
1477
1482
|
type,
|
|
@@ -1488,7 +1493,7 @@ function Input({ className, type, ...props }) {
|
|
|
1488
1493
|
}
|
|
1489
1494
|
|
|
1490
1495
|
// src/components/entity/entity-search.tsx
|
|
1491
|
-
import { jsx as
|
|
1496
|
+
import { jsx as jsx20, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1492
1497
|
function EntitySearch({
|
|
1493
1498
|
paramKey = "search",
|
|
1494
1499
|
placeholder = "Search...",
|
|
@@ -1511,9 +1516,9 @@ function EntitySearch({
|
|
|
1511
1516
|
ref.current.value = "";
|
|
1512
1517
|
}
|
|
1513
1518
|
};
|
|
1514
|
-
return /* @__PURE__ */
|
|
1515
|
-
/* @__PURE__ */
|
|
1516
|
-
/* @__PURE__ */
|
|
1519
|
+
return /* @__PURE__ */ jsxs15("div", { className: cn("relative w-full min-w-0", className), children: [
|
|
1520
|
+
/* @__PURE__ */ jsx20(IconSearch, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }),
|
|
1521
|
+
/* @__PURE__ */ jsx20(
|
|
1517
1522
|
Input,
|
|
1518
1523
|
{
|
|
1519
1524
|
ref,
|
|
@@ -1523,13 +1528,13 @@ function EntitySearch({
|
|
|
1523
1528
|
className: "w-full min-w-0 pl-9 pr-9"
|
|
1524
1529
|
}
|
|
1525
1530
|
),
|
|
1526
|
-
value && /* @__PURE__ */
|
|
1531
|
+
value && /* @__PURE__ */ jsx20(
|
|
1527
1532
|
"button",
|
|
1528
1533
|
{
|
|
1529
1534
|
type: "button",
|
|
1530
1535
|
onClick: handleClear,
|
|
1531
1536
|
className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground",
|
|
1532
|
-
children: /* @__PURE__ */
|
|
1537
|
+
children: /* @__PURE__ */ jsx20(IconX2, { className: "h-4 w-4" })
|
|
1533
1538
|
}
|
|
1534
1539
|
)
|
|
1535
1540
|
] });
|
|
@@ -1541,7 +1546,7 @@ import {
|
|
|
1541
1546
|
IconSortDescendingLetters
|
|
1542
1547
|
} from "@tabler/icons-react";
|
|
1543
1548
|
import { parseAsInteger as parseAsInteger3, parseAsString as parseAsString3, useQueryState as useQueryState3 } from "nuqs";
|
|
1544
|
-
import { jsx as
|
|
1549
|
+
import { jsx as jsx21, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1545
1550
|
function EntitySort({
|
|
1546
1551
|
options,
|
|
1547
1552
|
defaultSort = "createdAt",
|
|
@@ -1565,19 +1570,19 @@ function EntitySort({
|
|
|
1565
1570
|
setOrder(order === "asc" ? "desc" : "asc");
|
|
1566
1571
|
setPage(1);
|
|
1567
1572
|
};
|
|
1568
|
-
return /* @__PURE__ */
|
|
1569
|
-
/* @__PURE__ */
|
|
1570
|
-
/* @__PURE__ */
|
|
1571
|
-
/* @__PURE__ */
|
|
1573
|
+
return /* @__PURE__ */ jsxs16("div", { className: cn("flex w-full items-center gap-0", className), children: [
|
|
1574
|
+
/* @__PURE__ */ jsx21("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxs16(Select, { value: sort, onValueChange: handleSortChange, children: [
|
|
1575
|
+
/* @__PURE__ */ jsx21(SelectTrigger, { className: "h-9 w-full min-w-[150px] rounded-r-none border-r-0", children: /* @__PURE__ */ jsx21(SelectValue, { placeholder: "Sort by" }) }),
|
|
1576
|
+
/* @__PURE__ */ jsx21(SelectContent, { children: options.map((option) => /* @__PURE__ */ jsx21(SelectItem, { value: option.value, children: option.label }, option.value)) })
|
|
1572
1577
|
] }) }),
|
|
1573
|
-
/* @__PURE__ */
|
|
1578
|
+
/* @__PURE__ */ jsx21(
|
|
1574
1579
|
Button,
|
|
1575
1580
|
{
|
|
1576
1581
|
variant: "outline",
|
|
1577
1582
|
size: "icon",
|
|
1578
1583
|
className: "h-9 shrink-0 rounded-l-none",
|
|
1579
1584
|
onClick: toggleOrder,
|
|
1580
|
-
children: order === "asc" ? /* @__PURE__ */
|
|
1585
|
+
children: order === "asc" ? /* @__PURE__ */ jsx21(IconSortAscendingLetters, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx21(IconSortDescendingLetters, { className: "h-4 w-4" })
|
|
1581
1586
|
}
|
|
1582
1587
|
)
|
|
1583
1588
|
] });
|
|
@@ -1590,7 +1595,7 @@ import { parseAsString as parseAsString4, useQueryState as useQueryState4 } from
|
|
|
1590
1595
|
// src/components/toggle.tsx
|
|
1591
1596
|
import * as TogglePrimitive from "@radix-ui/react-toggle";
|
|
1592
1597
|
import { cva as cva3 } from "class-variance-authority";
|
|
1593
|
-
import { jsx as
|
|
1598
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
1594
1599
|
var toggleVariants = cva3(
|
|
1595
1600
|
"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap",
|
|
1596
1601
|
{
|
|
@@ -1615,7 +1620,7 @@ var toggleVariants = cva3(
|
|
|
1615
1620
|
// src/components/toggle-group.tsx
|
|
1616
1621
|
import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
|
|
1617
1622
|
import * as React from "react";
|
|
1618
|
-
import { jsx as
|
|
1623
|
+
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
1619
1624
|
var ToggleGroupContext = React.createContext({
|
|
1620
1625
|
size: "default",
|
|
1621
1626
|
variant: "default",
|
|
@@ -1629,7 +1634,7 @@ function ToggleGroup({
|
|
|
1629
1634
|
children,
|
|
1630
1635
|
...props
|
|
1631
1636
|
}) {
|
|
1632
|
-
return /* @__PURE__ */
|
|
1637
|
+
return /* @__PURE__ */ jsx23(
|
|
1633
1638
|
ToggleGroupPrimitive.Root,
|
|
1634
1639
|
{
|
|
1635
1640
|
"data-slot": "toggle-group",
|
|
@@ -1642,7 +1647,7 @@ function ToggleGroup({
|
|
|
1642
1647
|
className
|
|
1643
1648
|
),
|
|
1644
1649
|
...props,
|
|
1645
|
-
children: /* @__PURE__ */
|
|
1650
|
+
children: /* @__PURE__ */ jsx23(ToggleGroupContext.Provider, { value: { variant, size, spacing }, children })
|
|
1646
1651
|
}
|
|
1647
1652
|
);
|
|
1648
1653
|
}
|
|
@@ -1654,7 +1659,7 @@ function ToggleGroupItem({
|
|
|
1654
1659
|
...props
|
|
1655
1660
|
}) {
|
|
1656
1661
|
const context = React.useContext(ToggleGroupContext);
|
|
1657
|
-
return /* @__PURE__ */
|
|
1662
|
+
return /* @__PURE__ */ jsx23(
|
|
1658
1663
|
ToggleGroupPrimitive.Item,
|
|
1659
1664
|
{
|
|
1660
1665
|
"data-slot": "toggle-group-item",
|
|
@@ -1677,11 +1682,11 @@ function ToggleGroupItem({
|
|
|
1677
1682
|
}
|
|
1678
1683
|
|
|
1679
1684
|
// src/components/entity/entity-view-toggle.tsx
|
|
1680
|
-
import { jsx as
|
|
1685
|
+
import { jsx as jsx24 } from "react/jsx-runtime";
|
|
1681
1686
|
var viewIcons = {
|
|
1682
|
-
table: /* @__PURE__ */
|
|
1683
|
-
card: /* @__PURE__ */
|
|
1684
|
-
list: /* @__PURE__ */
|
|
1687
|
+
table: /* @__PURE__ */ jsx24(IconTable, { className: "h-4 w-4" }),
|
|
1688
|
+
card: /* @__PURE__ */ jsx24(IconGridDots, { className: "h-4 w-4" }),
|
|
1689
|
+
list: /* @__PURE__ */ jsx24(IconList, { className: "h-4 w-4" })
|
|
1685
1690
|
};
|
|
1686
1691
|
function EntityViewToggle({
|
|
1687
1692
|
views = ["table", "card"],
|
|
@@ -1691,14 +1696,14 @@ function EntityViewToggle({
|
|
|
1691
1696
|
"view",
|
|
1692
1697
|
parseAsString4.withDefault("table")
|
|
1693
1698
|
);
|
|
1694
|
-
return /* @__PURE__ */
|
|
1699
|
+
return /* @__PURE__ */ jsx24(
|
|
1695
1700
|
ToggleGroup,
|
|
1696
1701
|
{
|
|
1697
1702
|
type: "single",
|
|
1698
1703
|
value,
|
|
1699
1704
|
onValueChange: (v) => v && setValue(v),
|
|
1700
1705
|
className: cn("w-full! border rounded-md md:w-auto!", className),
|
|
1701
|
-
children: views.map((v) => /* @__PURE__ */
|
|
1706
|
+
children: views.map((v) => /* @__PURE__ */ jsx24(
|
|
1702
1707
|
ToggleGroupItem,
|
|
1703
1708
|
{
|
|
1704
1709
|
value: v,
|