@supos-grid-table/core 0.1.0-alpha.1 → 0.1.0-alpha.2

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.
@@ -0,0 +1,946 @@
1
+ import * as React from "react";
2
+ import { cn } from "cn";
3
+ import { Button } from "@base-ui/react/button";
4
+ import { cva } from "class-variance-authority";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { Input } from "@base-ui/react/input";
7
+ import { CheckIcon, ChevronDownIcon, ChevronUpIcon, SearchIcon, XIcon } from "lucide-react";
8
+ import { Checkbox } from "@base-ui/react/checkbox";
9
+ import { Dialog } from "@base-ui/react/dialog";
10
+ import { AlertDialog } from "@base-ui/react/alert-dialog";
11
+ import { Tooltip } from "@base-ui/react/tooltip";
12
+ import { Command } from "cmdk";
13
+ import { Popover } from "@base-ui/react/popover";
14
+ import { Select } from "@base-ui/react/select";
15
+ import { Combobox } from "@base-ui/react";
16
+ import { Tabs } from "@base-ui/react/tabs";
17
+ import { Collapsible } from "@base-ui/react/collapsible";
18
+ import { mergeProps } from "@base-ui/react/merge-props";
19
+ import { useRender } from "@base-ui/react/use-render";
20
+ //#region src/components/ui/button.tsx
21
+ const buttonVariants = cva("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
22
+ variants: {
23
+ variant: {
24
+ default: "bg-primary text-primary-foreground hover:bg-primary/80",
25
+ outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
26
+ secondary: "bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
27
+ ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
28
+ destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
29
+ link: "text-primary underline-offset-4 hover:underline"
30
+ },
31
+ size: {
32
+ default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
33
+ xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
34
+ sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
35
+ lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
36
+ icon: "size-8",
37
+ "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
38
+ "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
39
+ "icon-lg": "size-9"
40
+ }
41
+ },
42
+ defaultVariants: {
43
+ variant: "default",
44
+ size: "default"
45
+ }
46
+ });
47
+ function Button$1({ className, variant = "default", size = "default", ...props }) {
48
+ return /* @__PURE__ */ jsx(Button, {
49
+ "data-slot": "button",
50
+ className: cn(buttonVariants({
51
+ variant,
52
+ size,
53
+ className
54
+ })),
55
+ ...props
56
+ });
57
+ }
58
+ //#endregion
59
+ //#region src/components/ui/input.tsx
60
+ function Input$1({ className, type, ...props }) {
61
+ return /* @__PURE__ */ jsx(Input, {
62
+ type,
63
+ "data-slot": "input",
64
+ className: cn("h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className),
65
+ ...props
66
+ });
67
+ }
68
+ //#endregion
69
+ //#region src/components/ui/textarea.tsx
70
+ function Textarea({ className, ...props }) {
71
+ return /* @__PURE__ */ jsx("textarea", {
72
+ "data-slot": "textarea",
73
+ className: cn("flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className),
74
+ ...props
75
+ });
76
+ }
77
+ //#endregion
78
+ //#region src/components/ui/label.tsx
79
+ function Label({ className, ...props }) {
80
+ return /* @__PURE__ */ jsx("label", {
81
+ "data-slot": "label",
82
+ className: cn("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className),
83
+ ...props
84
+ });
85
+ }
86
+ //#endregion
87
+ //#region src/components/ui/native-select.tsx
88
+ function NativeSelect({ className, size = "default", ...props }) {
89
+ return /* @__PURE__ */ jsxs("div", {
90
+ className: cn("group/native-select relative w-fit has-[select:disabled]:opacity-50", className),
91
+ "data-slot": "native-select-wrapper",
92
+ "data-size": size,
93
+ children: [/* @__PURE__ */ jsx("select", {
94
+ "data-slot": "native-select",
95
+ "data-size": size,
96
+ className: "h-8 w-full min-w-0 appearance-none rounded-lg border border-input bg-transparent py-1 pr-8 pl-2.5 text-sm transition-colors outline-none select-none selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-[size=sm]:py-0.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
97
+ ...props
98
+ }), /* @__PURE__ */ jsx(ChevronDownIcon, {
99
+ className: "pointer-events-none absolute top-1/2 right-2.5 size-4 -translate-y-1/2 text-muted-foreground select-none",
100
+ "aria-hidden": "true",
101
+ "data-slot": "native-select-icon"
102
+ })]
103
+ });
104
+ }
105
+ function NativeSelectOption({ className, ...props }) {
106
+ return /* @__PURE__ */ jsx("option", {
107
+ "data-slot": "native-select-option",
108
+ className: cn("bg-[Canvas] text-[CanvasText]", className),
109
+ ...props
110
+ });
111
+ }
112
+ function NativeSelectOptGroup({ className, ...props }) {
113
+ return /* @__PURE__ */ jsx("optgroup", {
114
+ "data-slot": "native-select-optgroup",
115
+ className: cn("bg-[Canvas] text-[CanvasText]", className),
116
+ ...props
117
+ });
118
+ }
119
+ //#endregion
120
+ //#region src/components/ui/checkbox.tsx
121
+ function Checkbox$1({ className, ...props }) {
122
+ return /* @__PURE__ */ jsx(Checkbox.Root, {
123
+ "data-slot": "checkbox",
124
+ className: cn("peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input transition-colors outline-none group-has-disabled/field:opacity-50 group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary", className),
125
+ ...props,
126
+ children: /* @__PURE__ */ jsx(Checkbox.Indicator, {
127
+ "data-slot": "checkbox-indicator",
128
+ className: "grid place-content-center text-current transition-none [&>svg]:size-3.5",
129
+ children: /* @__PURE__ */ jsx(CheckIcon, {})
130
+ })
131
+ });
132
+ }
133
+ //#endregion
134
+ //#region src/components/ui/dialog.tsx
135
+ function Dialog$1({ ...props }) {
136
+ return /* @__PURE__ */ jsx(Dialog.Root, {
137
+ "data-slot": "dialog",
138
+ ...props
139
+ });
140
+ }
141
+ function DialogTrigger({ ...props }) {
142
+ return /* @__PURE__ */ jsx(Dialog.Trigger, {
143
+ "data-slot": "dialog-trigger",
144
+ ...props
145
+ });
146
+ }
147
+ function DialogPortal({ ...props }) {
148
+ return /* @__PURE__ */ jsx(Dialog.Portal, {
149
+ "data-slot": "dialog-portal",
150
+ ...props
151
+ });
152
+ }
153
+ function DialogClose({ ...props }) {
154
+ return /* @__PURE__ */ jsx(Dialog.Close, {
155
+ "data-slot": "dialog-close",
156
+ ...props
157
+ });
158
+ }
159
+ function DialogOverlay({ className, ...props }) {
160
+ return /* @__PURE__ */ jsx(Dialog.Backdrop, {
161
+ "data-slot": "dialog-overlay",
162
+ className: cn("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", className),
163
+ ...props
164
+ });
165
+ }
166
+ function DialogContent({ className, children, showCloseButton = true, ...props }) {
167
+ return /* @__PURE__ */ jsxs(DialogPortal, { children: [/* @__PURE__ */ jsx(DialogOverlay, {}), /* @__PURE__ */ jsxs(Dialog.Popup, {
168
+ "data-slot": "dialog-content",
169
+ className: cn("fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
170
+ ...props,
171
+ children: [children, showCloseButton && /* @__PURE__ */ jsxs(Dialog.Close, {
172
+ "data-slot": "dialog-close",
173
+ render: /* @__PURE__ */ jsx(Button$1, {
174
+ variant: "ghost",
175
+ className: "absolute top-2 right-2",
176
+ size: "icon-sm"
177
+ }),
178
+ children: [/* @__PURE__ */ jsx(XIcon, {}), /* @__PURE__ */ jsx("span", {
179
+ className: "sr-only",
180
+ children: "Close"
181
+ })]
182
+ })]
183
+ })] });
184
+ }
185
+ function DialogHeader({ className, ...props }) {
186
+ return /* @__PURE__ */ jsx("div", {
187
+ "data-slot": "dialog-header",
188
+ className: cn("flex flex-col gap-2", className),
189
+ ...props
190
+ });
191
+ }
192
+ function DialogFooter({ className, showCloseButton = false, children, ...props }) {
193
+ return /* @__PURE__ */ jsxs("div", {
194
+ "data-slot": "dialog-footer",
195
+ className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end", className),
196
+ ...props,
197
+ children: [children, showCloseButton && /* @__PURE__ */ jsx(Dialog.Close, {
198
+ render: /* @__PURE__ */ jsx(Button$1, { variant: "outline" }),
199
+ children: "Close"
200
+ })]
201
+ });
202
+ }
203
+ function DialogTitle({ className, ...props }) {
204
+ return /* @__PURE__ */ jsx(Dialog.Title, {
205
+ "data-slot": "dialog-title",
206
+ className: cn("text-base leading-none font-medium", className),
207
+ ...props
208
+ });
209
+ }
210
+ function DialogDescription({ className, ...props }) {
211
+ return /* @__PURE__ */ jsx(Dialog.Description, {
212
+ "data-slot": "dialog-description",
213
+ className: cn("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
214
+ ...props
215
+ });
216
+ }
217
+ //#endregion
218
+ //#region src/components/ui/alert-dialog.tsx
219
+ function AlertDialog$1({ ...props }) {
220
+ return /* @__PURE__ */ jsx(AlertDialog.Root, {
221
+ "data-slot": "alert-dialog",
222
+ ...props
223
+ });
224
+ }
225
+ function AlertDialogTrigger({ ...props }) {
226
+ return /* @__PURE__ */ jsx(AlertDialog.Trigger, {
227
+ "data-slot": "alert-dialog-trigger",
228
+ ...props
229
+ });
230
+ }
231
+ function AlertDialogPortal({ ...props }) {
232
+ return /* @__PURE__ */ jsx(AlertDialog.Portal, {
233
+ "data-slot": "alert-dialog-portal",
234
+ ...props
235
+ });
236
+ }
237
+ function AlertDialogOverlay({ className, ...props }) {
238
+ return /* @__PURE__ */ jsx(AlertDialog.Backdrop, {
239
+ "data-slot": "alert-dialog-overlay",
240
+ className: cn("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", className),
241
+ ...props
242
+ });
243
+ }
244
+ function AlertDialogContent({ className, size = "default", ...props }) {
245
+ return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [/* @__PURE__ */ jsx(AlertDialogOverlay, {}), /* @__PURE__ */ jsx(AlertDialog.Popup, {
246
+ "data-slot": "alert-dialog-content",
247
+ "data-size": size,
248
+ className: cn("group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
249
+ ...props
250
+ })] });
251
+ }
252
+ function AlertDialogHeader({ className, ...props }) {
253
+ return /* @__PURE__ */ jsx("div", {
254
+ "data-slot": "alert-dialog-header",
255
+ className: cn("grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]", className),
256
+ ...props
257
+ });
258
+ }
259
+ function AlertDialogFooter({ className, ...props }) {
260
+ return /* @__PURE__ */ jsx("div", {
261
+ "data-slot": "alert-dialog-footer",
262
+ className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end", className),
263
+ ...props
264
+ });
265
+ }
266
+ function AlertDialogMedia({ className, ...props }) {
267
+ return /* @__PURE__ */ jsx("div", {
268
+ "data-slot": "alert-dialog-media",
269
+ className: cn("mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6", className),
270
+ ...props
271
+ });
272
+ }
273
+ function AlertDialogTitle({ className, ...props }) {
274
+ return /* @__PURE__ */ jsx(AlertDialog.Title, {
275
+ "data-slot": "alert-dialog-title",
276
+ className: cn("text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2", className),
277
+ ...props
278
+ });
279
+ }
280
+ function AlertDialogDescription({ className, ...props }) {
281
+ return /* @__PURE__ */ jsx(AlertDialog.Description, {
282
+ "data-slot": "alert-dialog-description",
283
+ className: cn("text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
284
+ ...props
285
+ });
286
+ }
287
+ function AlertDialogAction({ className, ...props }) {
288
+ return /* @__PURE__ */ jsx(Button$1, {
289
+ "data-slot": "alert-dialog-action",
290
+ className: cn(className),
291
+ ...props
292
+ });
293
+ }
294
+ function AlertDialogCancel({ className, variant = "outline", size = "default", ...props }) {
295
+ return /* @__PURE__ */ jsx(AlertDialog.Close, {
296
+ "data-slot": "alert-dialog-cancel",
297
+ className: cn(className),
298
+ render: /* @__PURE__ */ jsx(Button$1, {
299
+ variant,
300
+ size
301
+ }),
302
+ ...props
303
+ });
304
+ }
305
+ //#endregion
306
+ //#region src/components/ui/tooltip.tsx
307
+ function TooltipProvider({ delay = 0, ...props }) {
308
+ return /* @__PURE__ */ jsx(Tooltip.Provider, {
309
+ "data-slot": "tooltip-provider",
310
+ delay,
311
+ ...props
312
+ });
313
+ }
314
+ function Tooltip$1({ ...props }) {
315
+ return /* @__PURE__ */ jsx(Tooltip.Root, {
316
+ "data-slot": "tooltip",
317
+ ...props
318
+ });
319
+ }
320
+ function TooltipTrigger({ ...props }) {
321
+ return /* @__PURE__ */ jsx(Tooltip.Trigger, {
322
+ "data-slot": "tooltip-trigger",
323
+ ...props
324
+ });
325
+ }
326
+ function TooltipContent({ className, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props }) {
327
+ return /* @__PURE__ */ jsx(Tooltip.Portal, { children: /* @__PURE__ */ jsx(Tooltip.Positioner, {
328
+ align,
329
+ alignOffset,
330
+ side,
331
+ sideOffset,
332
+ className: "isolate z-50",
333
+ children: /* @__PURE__ */ jsxs(Tooltip.Popup, {
334
+ "data-slot": "tooltip-content",
335
+ className: cn("z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
336
+ ...props,
337
+ children: [children, /* @__PURE__ */ jsx(Tooltip.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })]
338
+ })
339
+ }) });
340
+ }
341
+ //#endregion
342
+ //#region src/components/ui/input-group.tsx
343
+ function InputGroup({ className, ...props }) {
344
+ return /* @__PURE__ */ jsx("div", {
345
+ "data-slot": "input-group",
346
+ role: "group",
347
+ className: cn("group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5", className),
348
+ ...props
349
+ });
350
+ }
351
+ const inputGroupAddonVariants = cva("flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4", {
352
+ variants: { align: {
353
+ "inline-start": "order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]",
354
+ "inline-end": "order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]",
355
+ "block-start": "order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2",
356
+ "block-end": "order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2"
357
+ } },
358
+ defaultVariants: { align: "inline-start" }
359
+ });
360
+ function InputGroupAddon({ className, align = "inline-start", ...props }) {
361
+ return /* @__PURE__ */ jsx("div", {
362
+ role: "group",
363
+ "data-slot": "input-group-addon",
364
+ "data-align": align,
365
+ className: cn(inputGroupAddonVariants({ align }), className),
366
+ onClick: (e) => {
367
+ if (e.target.closest("button")) return;
368
+ e.currentTarget.parentElement?.querySelector("input")?.focus();
369
+ },
370
+ ...props
371
+ });
372
+ }
373
+ const inputGroupButtonVariants = cva("flex items-center gap-2 text-sm shadow-none", {
374
+ variants: { size: {
375
+ xs: "h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
376
+ sm: "",
377
+ "icon-xs": "size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0",
378
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0"
379
+ } },
380
+ defaultVariants: { size: "xs" }
381
+ });
382
+ function InputGroupButton({ className, type = "button", variant = "ghost", size = "xs", ...props }) {
383
+ return /* @__PURE__ */ jsx(Button$1, {
384
+ type,
385
+ "data-size": size,
386
+ variant,
387
+ className: cn(inputGroupButtonVariants({ size }), className),
388
+ ...props
389
+ });
390
+ }
391
+ function InputGroupInput({ className, ...props }) {
392
+ return /* @__PURE__ */ jsx(Input$1, {
393
+ "data-slot": "input-group-control",
394
+ className: cn("flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent", className),
395
+ ...props
396
+ });
397
+ }
398
+ //#endregion
399
+ //#region src/components/ui/command.tsx
400
+ function Command$1({ className, ...props }) {
401
+ return /* @__PURE__ */ jsx(Command, {
402
+ "data-slot": "command",
403
+ className: cn("flex size-full flex-col overflow-hidden rounded-xl! bg-popover p-1 text-popover-foreground", className),
404
+ ...props
405
+ });
406
+ }
407
+ function CommandDialog({ title = "Command Palette", description = "Search for a command to run...", children, className, showCloseButton = false, ...props }) {
408
+ return /* @__PURE__ */ jsxs(Dialog$1, {
409
+ ...props,
410
+ children: [/* @__PURE__ */ jsxs(DialogHeader, {
411
+ className: "sr-only",
412
+ children: [/* @__PURE__ */ jsx(DialogTitle, { children: title }), /* @__PURE__ */ jsx(DialogDescription, { children: description })]
413
+ }), /* @__PURE__ */ jsx(DialogContent, {
414
+ className: cn("top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0", className),
415
+ showCloseButton,
416
+ children
417
+ })]
418
+ });
419
+ }
420
+ function CommandInput({ className, ...props }) {
421
+ return /* @__PURE__ */ jsx("div", {
422
+ "data-slot": "command-input-wrapper",
423
+ className: "p-1 pb-0",
424
+ children: /* @__PURE__ */ jsxs(InputGroup, {
425
+ className: "h-8! rounded-lg! border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:pl-2!",
426
+ children: [/* @__PURE__ */ jsx(Command.Input, {
427
+ "data-slot": "command-input",
428
+ className: cn("w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", className),
429
+ ...props
430
+ }), /* @__PURE__ */ jsx(InputGroupAddon, { children: /* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }) })]
431
+ })
432
+ });
433
+ }
434
+ function CommandList({ className, ...props }) {
435
+ return /* @__PURE__ */ jsx(Command.List, {
436
+ "data-slot": "command-list",
437
+ className: cn("no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none", className),
438
+ ...props
439
+ });
440
+ }
441
+ function CommandEmpty({ className, ...props }) {
442
+ return /* @__PURE__ */ jsx(Command.Empty, {
443
+ "data-slot": "command-empty",
444
+ className: cn("py-6 text-center text-sm", className),
445
+ ...props
446
+ });
447
+ }
448
+ function CommandGroup({ className, ...props }) {
449
+ return /* @__PURE__ */ jsx(Command.Group, {
450
+ "data-slot": "command-group",
451
+ className: cn("overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground", className),
452
+ ...props
453
+ });
454
+ }
455
+ function CommandSeparator({ className, ...props }) {
456
+ return /* @__PURE__ */ jsx(Command.Separator, {
457
+ "data-slot": "command-separator",
458
+ className: cn("-mx-1 h-px bg-border", className),
459
+ ...props
460
+ });
461
+ }
462
+ function CommandItem({ className, children, ...props }) {
463
+ return /* @__PURE__ */ jsxs(Command.Item, {
464
+ "data-slot": "command-item",
465
+ className: cn("group/command-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-selected:*:[svg]:text-foreground", className),
466
+ ...props,
467
+ children: [children, /* @__PURE__ */ jsx(CheckIcon, { className: "ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" })]
468
+ });
469
+ }
470
+ function CommandShortcut({ className, ...props }) {
471
+ return /* @__PURE__ */ jsx("span", {
472
+ "data-slot": "command-shortcut",
473
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground", className),
474
+ ...props
475
+ });
476
+ }
477
+ //#endregion
478
+ //#region src/components/ui/popover.tsx
479
+ function Popover$1({ ...props }) {
480
+ return /* @__PURE__ */ jsx(Popover.Root, {
481
+ "data-slot": "popover",
482
+ ...props
483
+ });
484
+ }
485
+ function PopoverTrigger({ ...props }) {
486
+ return /* @__PURE__ */ jsx(Popover.Trigger, {
487
+ "data-slot": "popover-trigger",
488
+ ...props
489
+ });
490
+ }
491
+ function PopoverContent({ className, align = "center", alignOffset = 0, side = "bottom", sideOffset = 4, ...props }) {
492
+ return /* @__PURE__ */ jsx(Popover.Portal, { children: /* @__PURE__ */ jsx(Popover.Positioner, {
493
+ align,
494
+ alignOffset,
495
+ side,
496
+ sideOffset,
497
+ className: "isolate z-50",
498
+ children: /* @__PURE__ */ jsx(Popover.Popup, {
499
+ "data-slot": "popover-content",
500
+ className: cn("z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
501
+ ...props
502
+ })
503
+ }) });
504
+ }
505
+ function PopoverHeader({ className, ...props }) {
506
+ return /* @__PURE__ */ jsx("div", {
507
+ "data-slot": "popover-header",
508
+ className: cn("flex flex-col gap-0.5 text-sm", className),
509
+ ...props
510
+ });
511
+ }
512
+ function PopoverTitle({ className, ...props }) {
513
+ return /* @__PURE__ */ jsx(Popover.Title, {
514
+ "data-slot": "popover-title",
515
+ className: cn("font-medium", className),
516
+ ...props
517
+ });
518
+ }
519
+ function PopoverDescription({ className, ...props }) {
520
+ return /* @__PURE__ */ jsx(Popover.Description, {
521
+ "data-slot": "popover-description",
522
+ className: cn("text-muted-foreground", className),
523
+ ...props
524
+ });
525
+ }
526
+ //#endregion
527
+ //#region src/components/ui/select.tsx
528
+ const Select$1 = Select.Root;
529
+ function SelectGroup({ className, ...props }) {
530
+ return /* @__PURE__ */ jsx(Select.Group, {
531
+ "data-slot": "select-group",
532
+ className: cn("scroll-my-1 p-1", className),
533
+ ...props
534
+ });
535
+ }
536
+ function SelectValue({ className, ...props }) {
537
+ return /* @__PURE__ */ jsx(Select.Value, {
538
+ "data-slot": "select-value",
539
+ className: cn("flex flex-1 text-left", className),
540
+ ...props
541
+ });
542
+ }
543
+ function SelectTrigger({ className, size = "default", children, ...props }) {
544
+ return /* @__PURE__ */ jsxs(Select.Trigger, {
545
+ "data-slot": "select-trigger",
546
+ "data-size": size,
547
+ className: cn("flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
548
+ ...props,
549
+ children: [children, /* @__PURE__ */ jsx(Select.Icon, { render: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" }) })]
550
+ });
551
+ }
552
+ function SelectContent({ className, children, side = "bottom", sideOffset = 4, align = "center", alignOffset = 0, alignItemWithTrigger = true, ...props }) {
553
+ return /* @__PURE__ */ jsx(Select.Portal, { children: /* @__PURE__ */ jsx(Select.Positioner, {
554
+ side,
555
+ sideOffset,
556
+ align,
557
+ alignOffset,
558
+ alignItemWithTrigger,
559
+ className: "isolate z-50",
560
+ children: /* @__PURE__ */ jsxs(Select.Popup, {
561
+ "data-slot": "select-content",
562
+ "data-align-trigger": alignItemWithTrigger,
563
+ className: cn("relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
564
+ ...props,
565
+ children: [
566
+ /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
567
+ /* @__PURE__ */ jsx(Select.List, { children }),
568
+ /* @__PURE__ */ jsx(SelectScrollDownButton, {})
569
+ ]
570
+ })
571
+ }) });
572
+ }
573
+ function SelectLabel({ className, ...props }) {
574
+ return /* @__PURE__ */ jsx(Select.GroupLabel, {
575
+ "data-slot": "select-label",
576
+ className: cn("px-1.5 py-1 text-xs text-muted-foreground", className),
577
+ ...props
578
+ });
579
+ }
580
+ function SelectItem({ className, children, ...props }) {
581
+ return /* @__PURE__ */ jsxs(Select.Item, {
582
+ "data-slot": "select-item",
583
+ className: cn("relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className),
584
+ ...props,
585
+ children: [/* @__PURE__ */ jsx(Select.ItemText, {
586
+ className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap",
587
+ children
588
+ }), /* @__PURE__ */ jsx(Select.ItemIndicator, {
589
+ render: /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
590
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" })
591
+ })]
592
+ });
593
+ }
594
+ function SelectSeparator({ className, ...props }) {
595
+ return /* @__PURE__ */ jsx(Select.Separator, {
596
+ "data-slot": "select-separator",
597
+ className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
598
+ ...props
599
+ });
600
+ }
601
+ function SelectScrollUpButton({ className, ...props }) {
602
+ return /* @__PURE__ */ jsx(Select.ScrollUpArrow, {
603
+ "data-slot": "select-scroll-up-button",
604
+ className: cn("top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", className),
605
+ ...props,
606
+ children: /* @__PURE__ */ jsx(ChevronUpIcon, {})
607
+ });
608
+ }
609
+ function SelectScrollDownButton({ className, ...props }) {
610
+ return /* @__PURE__ */ jsx(Select.ScrollDownArrow, {
611
+ "data-slot": "select-scroll-down-button",
612
+ className: cn("bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", className),
613
+ ...props,
614
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
615
+ });
616
+ }
617
+ //#endregion
618
+ //#region src/components/ui/combobox.tsx
619
+ const Combobox$1 = Combobox.Root;
620
+ function ComboboxValue({ ...props }) {
621
+ return /* @__PURE__ */ jsx(Combobox.Value, {
622
+ "data-slot": "combobox-value",
623
+ ...props
624
+ });
625
+ }
626
+ function ComboboxTrigger({ className, children, ...props }) {
627
+ return /* @__PURE__ */ jsxs(Combobox.Trigger, {
628
+ "data-slot": "combobox-trigger",
629
+ className: cn("[&_svg:not([class*='size-'])]:size-4", className),
630
+ ...props,
631
+ children: [children, /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" })]
632
+ });
633
+ }
634
+ function ComboboxClear({ className, ...props }) {
635
+ return /* @__PURE__ */ jsx(Combobox.Clear, {
636
+ "data-slot": "combobox-clear",
637
+ render: /* @__PURE__ */ jsx(InputGroupButton, {
638
+ variant: "ghost",
639
+ size: "icon-xs"
640
+ }),
641
+ className: cn(className),
642
+ ...props,
643
+ children: /* @__PURE__ */ jsx(XIcon, { className: "pointer-events-none" })
644
+ });
645
+ }
646
+ function ComboboxInput({ className, children, disabled = false, showTrigger = true, showClear = false, ...props }) {
647
+ return /* @__PURE__ */ jsxs(InputGroup, {
648
+ className: cn("w-auto", className),
649
+ children: [
650
+ /* @__PURE__ */ jsx(Combobox.Input, {
651
+ render: /* @__PURE__ */ jsx(InputGroupInput, { disabled }),
652
+ ...props
653
+ }),
654
+ /* @__PURE__ */ jsxs(InputGroupAddon, {
655
+ align: "inline-end",
656
+ children: [showTrigger && /* @__PURE__ */ jsx(InputGroupButton, {
657
+ size: "icon-xs",
658
+ variant: "ghost",
659
+ render: /* @__PURE__ */ jsx(ComboboxTrigger, {}),
660
+ "data-slot": "input-group-button",
661
+ className: "group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent",
662
+ disabled
663
+ }), showClear && /* @__PURE__ */ jsx(ComboboxClear, { disabled })]
664
+ }),
665
+ children
666
+ ]
667
+ });
668
+ }
669
+ function ComboboxContent({ className, side = "bottom", sideOffset = 6, align = "start", alignOffset = 0, anchor, ...props }) {
670
+ return /* @__PURE__ */ jsx(Combobox.Portal, { children: /* @__PURE__ */ jsx(Combobox.Positioner, {
671
+ side,
672
+ sideOffset,
673
+ align,
674
+ alignOffset,
675
+ anchor,
676
+ className: "isolate z-50",
677
+ children: /* @__PURE__ */ jsx(Combobox.Popup, {
678
+ "data-slot": "combobox-content",
679
+ "data-chips": !!anchor,
680
+ className: cn("group/combobox-content relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[chips=true]:min-w-(--anchor-width) data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
681
+ ...props
682
+ })
683
+ }) });
684
+ }
685
+ function ComboboxList({ className, ...props }) {
686
+ return /* @__PURE__ */ jsx(Combobox.List, {
687
+ "data-slot": "combobox-list",
688
+ className: cn("no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto overscroll-contain p-1 data-empty:p-0", className),
689
+ ...props
690
+ });
691
+ }
692
+ function ComboboxItem({ className, children, ...props }) {
693
+ return /* @__PURE__ */ jsxs(Combobox.Item, {
694
+ "data-slot": "combobox-item",
695
+ className: cn("relative flex w-full cursor-default items-center gap-2 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
696
+ ...props,
697
+ children: [children, /* @__PURE__ */ jsx(Combobox.ItemIndicator, {
698
+ render: /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
699
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" })
700
+ })]
701
+ });
702
+ }
703
+ function ComboboxGroup({ className, ...props }) {
704
+ return /* @__PURE__ */ jsx(Combobox.Group, {
705
+ "data-slot": "combobox-group",
706
+ className: cn(className),
707
+ ...props
708
+ });
709
+ }
710
+ function ComboboxLabel({ className, ...props }) {
711
+ return /* @__PURE__ */ jsx(Combobox.GroupLabel, {
712
+ "data-slot": "combobox-label",
713
+ className: cn("px-2 py-1.5 text-xs text-muted-foreground", className),
714
+ ...props
715
+ });
716
+ }
717
+ function ComboboxCollection({ ...props }) {
718
+ return /* @__PURE__ */ jsx(Combobox.Collection, {
719
+ "data-slot": "combobox-collection",
720
+ ...props
721
+ });
722
+ }
723
+ function ComboboxEmpty({ className, ...props }) {
724
+ return /* @__PURE__ */ jsx(Combobox.Empty, {
725
+ "data-slot": "combobox-empty",
726
+ className: cn("hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/combobox-content:flex", className),
727
+ ...props
728
+ });
729
+ }
730
+ function ComboboxSeparator({ className, ...props }) {
731
+ return /* @__PURE__ */ jsx(Combobox.Separator, {
732
+ "data-slot": "combobox-separator",
733
+ className: cn("-mx-1 my-1 h-px bg-border", className),
734
+ ...props
735
+ });
736
+ }
737
+ function ComboboxChips({ className, ...props }) {
738
+ return /* @__PURE__ */ jsx(Combobox.Chips, {
739
+ "data-slot": "combobox-chips",
740
+ className: cn("flex min-h-8 flex-wrap items-center gap-1 rounded-lg border border-input bg-transparent bg-clip-padding px-2.5 py-1 text-sm transition-colors focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50 has-aria-invalid:border-destructive has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 has-data-[slot=combobox-chip]:px-1 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40", className),
741
+ ...props
742
+ });
743
+ }
744
+ function ComboboxChip({ className, children, showRemove = true, ...props }) {
745
+ return /* @__PURE__ */ jsxs(Combobox.Chip, {
746
+ "data-slot": "combobox-chip",
747
+ className: cn("flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0", className),
748
+ ...props,
749
+ children: [children, showRemove && /* @__PURE__ */ jsx(Combobox.ChipRemove, {
750
+ render: /* @__PURE__ */ jsx(Button$1, {
751
+ variant: "ghost",
752
+ size: "icon-xs"
753
+ }),
754
+ className: "-ml-1 opacity-50 hover:opacity-100",
755
+ "data-slot": "combobox-chip-remove",
756
+ children: /* @__PURE__ */ jsx(XIcon, { className: "pointer-events-none" })
757
+ })]
758
+ });
759
+ }
760
+ function ComboboxChipsInput({ className, ...props }) {
761
+ return /* @__PURE__ */ jsx(Combobox.Input, {
762
+ "data-slot": "combobox-chip-input",
763
+ className: cn("min-w-16 flex-1 outline-none", className),
764
+ ...props
765
+ });
766
+ }
767
+ function useComboboxAnchor() {
768
+ return React.useRef(null);
769
+ }
770
+ //#endregion
771
+ //#region src/components/ui/tabs.tsx
772
+ function Tabs$1({ className, orientation = "horizontal", ...props }) {
773
+ return /* @__PURE__ */ jsx(Tabs.Root, {
774
+ "data-slot": "tabs",
775
+ "data-orientation": orientation,
776
+ className: cn("group/tabs flex gap-2 data-horizontal:flex-col", className),
777
+ ...props
778
+ });
779
+ }
780
+ const tabsListVariants = cva("group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none", {
781
+ variants: { variant: {
782
+ default: "bg-muted",
783
+ line: "gap-1 bg-transparent"
784
+ } },
785
+ defaultVariants: { variant: "default" }
786
+ });
787
+ function TabsList({ className, variant = "default", ...props }) {
788
+ return /* @__PURE__ */ jsx(Tabs.List, {
789
+ "data-slot": "tabs-list",
790
+ "data-variant": variant,
791
+ className: cn(tabsListVariants({ variant }), className),
792
+ ...props
793
+ });
794
+ }
795
+ function TabsTrigger({ className, ...props }) {
796
+ return /* @__PURE__ */ jsx(Tabs.Tab, {
797
+ "data-slot": "tabs-trigger",
798
+ className: cn("relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent", "data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground", "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100", className),
799
+ ...props
800
+ });
801
+ }
802
+ function TabsContent({ className, ...props }) {
803
+ return /* @__PURE__ */ jsx(Tabs.Panel, {
804
+ "data-slot": "tabs-content",
805
+ className: cn("flex-1 text-sm outline-none", className),
806
+ ...props
807
+ });
808
+ }
809
+ //#endregion
810
+ //#region src/components/ui/collapsible.tsx
811
+ function Collapsible$1({ ...props }) {
812
+ return /* @__PURE__ */ jsx(Collapsible.Root, {
813
+ "data-slot": "collapsible",
814
+ ...props
815
+ });
816
+ }
817
+ function CollapsibleTrigger({ ...props }) {
818
+ return /* @__PURE__ */ jsx(Collapsible.Trigger, {
819
+ "data-slot": "collapsible-trigger",
820
+ ...props
821
+ });
822
+ }
823
+ function CollapsibleContent({ ...props }) {
824
+ return /* @__PURE__ */ jsx(Collapsible.Panel, {
825
+ "data-slot": "collapsible-content",
826
+ ...props
827
+ });
828
+ }
829
+ //#endregion
830
+ //#region src/components/ui/badge.tsx
831
+ const badgeVariants = cva("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!", {
832
+ variants: { variant: {
833
+ default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
834
+ secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
835
+ destructive: "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",
836
+ outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
837
+ ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
838
+ link: "text-primary underline-offset-4 hover:underline"
839
+ } },
840
+ defaultVariants: { variant: "default" }
841
+ });
842
+ function Badge({ className, variant = "default", render, ...props }) {
843
+ return useRender({
844
+ defaultTagName: "span",
845
+ props: mergeProps({ className: cn(badgeVariants({ variant }), className) }, props),
846
+ render,
847
+ state: {
848
+ slot: "badge",
849
+ variant
850
+ }
851
+ });
852
+ }
853
+ //#endregion
854
+ //#region src/components/ui/alert.tsx
855
+ const alertVariants = cva("group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4", {
856
+ variants: { variant: {
857
+ default: "bg-card text-card-foreground",
858
+ destructive: "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"
859
+ } },
860
+ defaultVariants: { variant: "default" }
861
+ });
862
+ function Alert({ className, variant, ...props }) {
863
+ return /* @__PURE__ */ jsx("div", {
864
+ "data-slot": "alert",
865
+ role: "alert",
866
+ className: cn(alertVariants({ variant }), className),
867
+ ...props
868
+ });
869
+ }
870
+ function AlertTitle({ className, ...props }) {
871
+ return /* @__PURE__ */ jsx("div", {
872
+ "data-slot": "alert-title",
873
+ className: cn("font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground", className),
874
+ ...props
875
+ });
876
+ }
877
+ function AlertDescription({ className, ...props }) {
878
+ return /* @__PURE__ */ jsx("div", {
879
+ "data-slot": "alert-description",
880
+ className: cn("text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", className),
881
+ ...props
882
+ });
883
+ }
884
+ function AlertAction({ className, ...props }) {
885
+ return /* @__PURE__ */ jsx("div", {
886
+ "data-slot": "alert-action",
887
+ className: cn("absolute top-2 right-2", className),
888
+ ...props
889
+ });
890
+ }
891
+ //#endregion
892
+ //#region src/components/ui/card.tsx
893
+ function Card({ className, size = "default", ...props }) {
894
+ return /* @__PURE__ */ jsx("div", {
895
+ "data-slot": "card",
896
+ "data-size": size,
897
+ className: cn("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl", className),
898
+ ...props
899
+ });
900
+ }
901
+ function CardHeader({ className, ...props }) {
902
+ return /* @__PURE__ */ jsx("div", {
903
+ "data-slot": "card-header",
904
+ className: cn("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)", className),
905
+ ...props
906
+ });
907
+ }
908
+ function CardTitle({ className, ...props }) {
909
+ return /* @__PURE__ */ jsx("div", {
910
+ "data-slot": "card-title",
911
+ className: cn("text-base leading-snug font-medium group-data-[size=sm]/card:text-sm", className),
912
+ ...props
913
+ });
914
+ }
915
+ function CardDescription({ className, ...props }) {
916
+ return /* @__PURE__ */ jsx("div", {
917
+ "data-slot": "card-description",
918
+ className: cn("text-sm text-muted-foreground", className),
919
+ ...props
920
+ });
921
+ }
922
+ function CardAction({ className, ...props }) {
923
+ return /* @__PURE__ */ jsx("div", {
924
+ "data-slot": "card-action",
925
+ className: cn("col-start-2 row-span-2 row-start-1 self-start justify-self-end", className),
926
+ ...props
927
+ });
928
+ }
929
+ function CardContent({ className, ...props }) {
930
+ return /* @__PURE__ */ jsx("div", {
931
+ "data-slot": "card-content",
932
+ className: cn("px-(--card-spacing)", className),
933
+ ...props
934
+ });
935
+ }
936
+ function CardFooter({ className, ...props }) {
937
+ return /* @__PURE__ */ jsx("div", {
938
+ "data-slot": "card-footer",
939
+ className: cn("flex items-center rounded-b-xl border-t bg-muted/50 p-(--card-spacing)", className),
940
+ ...props
941
+ });
942
+ }
943
+ //#endregion
944
+ export { PopoverTrigger as $, ComboboxInput as A, DialogHeader as At, SelectGroup as B, Textarea as Bt, ComboboxChip as C, AlertDialogTitle as Ct, ComboboxContent as D, DialogContent as Dt, ComboboxCollection as E, DialogClose as Et, ComboboxTrigger as F, Checkbox$1 as Ft, SelectSeparator as G, SelectLabel as H, Button$1 as Ht, ComboboxValue as I, NativeSelect as It, Popover$1 as J, SelectTrigger as K, useComboboxAnchor as L, NativeSelectOptGroup as Lt, ComboboxLabel as M, DialogPortal as Mt, ComboboxList as N, DialogTitle as Nt, ComboboxEmpty as O, DialogDescription as Ot, ComboboxSeparator as P, DialogTrigger as Pt, PopoverTitle as Q, Select$1 as R, NativeSelectOption as Rt, Combobox$1 as S, AlertDialogPortal as St, ComboboxChipsInput as T, Dialog$1 as Tt, SelectScrollDownButton as U, buttonVariants as Ut, SelectItem as V, Input$1 as Vt, SelectScrollUpButton as W, PopoverDescription as X, PopoverContent as Y, PopoverHeader as Z, Tabs$1 as _, AlertDialogDescription as _t, CardFooter as a, CommandItem as at, TabsTrigger as b, AlertDialogMedia as bt, Alert as c, CommandShortcut as ct, AlertTitle as d, TooltipProvider as dt, Command$1 as et, Badge as f, TooltipTrigger as ft, CollapsibleTrigger as g, AlertDialogContent as gt, CollapsibleContent as h, AlertDialogCancel as ht, CardDescription as i, CommandInput as it, ComboboxItem as j, DialogOverlay as jt, ComboboxGroup as k, DialogFooter as kt, AlertAction as l, Tooltip$1 as lt, Collapsible$1 as m, AlertDialogAction as mt, CardAction as n, CommandEmpty as nt, CardHeader as o, CommandList as ot, badgeVariants as p, AlertDialog$1 as pt, SelectValue as q, CardContent as r, CommandGroup as rt, CardTitle as s, CommandSeparator as st, Card as t, CommandDialog as tt, AlertDescription as u, TooltipContent as ut, TabsContent as v, AlertDialogFooter as vt, ComboboxChips as w, AlertDialogTrigger as wt, tabsListVariants as x, AlertDialogOverlay as xt, TabsList as y, AlertDialogHeader as yt, SelectContent as z, Label as zt };
945
+
946
+ //# sourceMappingURL=ui-esOhDo-4.mjs.map