@cuxt/chama 0.0.1 → 0.0.3
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/index.d.mts +755 -2
- package/dist/index.mjs +3883 -4
- package/package.json +15 -6
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,135 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { cva } from "class-variance-authority";
|
|
1
|
+
import { Accordion as Accordion$1 } from "@base-ui/react/accordion";
|
|
3
2
|
import { cn } from "cn";
|
|
4
|
-
import {
|
|
3
|
+
import { ArrowDownIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CircleCheckIcon, InfoIcon, Loader2Icon, MinusIcon, MoreHorizontalIcon, OctagonXIcon, PanelLeftIcon, SearchIcon, TriangleAlertIcon, XIcon } from "lucide-react";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { useMemo } from "react";
|
|
7
|
+
import { cva } from "class-variance-authority";
|
|
8
|
+
import { AlertDialog as AlertDialog$1 } from "@base-ui/react/alert-dialog";
|
|
9
|
+
import { Button as Button$1 } from "@base-ui/react/button";
|
|
10
|
+
import { mergeProps } from "@base-ui/react/merge-props";
|
|
11
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
12
|
+
import { Avatar as Avatar$1 } from "@base-ui/react/avatar";
|
|
13
|
+
import { Separator as Separator$1 } from "@base-ui/react/separator";
|
|
14
|
+
import { DayPicker, getDefaultClassNames } from "react-day-picker";
|
|
15
|
+
import useEmblaCarousel from "embla-carousel-react";
|
|
16
|
+
import * as RechartsPrimitive from "recharts";
|
|
17
|
+
import { Checkbox as Checkbox$1 } from "@base-ui/react/checkbox";
|
|
18
|
+
import { Collapsible as Collapsible$1 } from "@base-ui/react/collapsible";
|
|
19
|
+
import { Combobox as Combobox$1 } from "@base-ui/react";
|
|
20
|
+
import { Input as Input$1 } from "@base-ui/react/input";
|
|
21
|
+
import { Command as Command$1 } from "cmdk";
|
|
22
|
+
import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
|
|
23
|
+
import { ContextMenu as ContextMenu$1 } from "@base-ui/react/context-menu";
|
|
24
|
+
import { DirectionProvider, useDirection } from "@base-ui/react/direction-provider";
|
|
25
|
+
import { Drawer as Drawer$1 } from "@base-ui/react/drawer";
|
|
26
|
+
import { Menu } from "@base-ui/react/menu";
|
|
27
|
+
import { PreviewCard } from "@base-ui/react/preview-card";
|
|
28
|
+
import { OTPInput, OTPInputContext } from "input-otp";
|
|
29
|
+
import { Menubar as Menubar$1 } from "@base-ui/react/menubar";
|
|
30
|
+
import { MessageScroller as MessageScroller$1, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility } from "@shadcn/react/message-scroller";
|
|
31
|
+
import { NavigationMenu as NavigationMenu$1 } from "@base-ui/react/navigation-menu";
|
|
32
|
+
import { Popover as Popover$1 } from "@base-ui/react/popover";
|
|
33
|
+
import { Progress as Progress$1 } from "@base-ui/react/progress";
|
|
34
|
+
import { Questionnaire as Questionnaire$1 } from "@shadcn/react/questionnaire";
|
|
35
|
+
import { Radio } from "@base-ui/react/radio";
|
|
36
|
+
import { RadioGroup as RadioGroup$1 } from "@base-ui/react/radio-group";
|
|
37
|
+
import * as ResizablePrimitive from "react-resizable-panels";
|
|
38
|
+
import { ScrollArea as ScrollArea$1 } from "@base-ui/react/scroll-area";
|
|
39
|
+
import { Select as Select$1 } from "@base-ui/react/select";
|
|
40
|
+
import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
|
|
41
|
+
import { Slider as Slider$1 } from "@base-ui/react/slider";
|
|
42
|
+
import { Switch as Switch$1 } from "@base-ui/react/switch";
|
|
43
|
+
import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
|
|
44
|
+
import { Toast as Toast$1 } from "@base-ui/react/toast";
|
|
45
|
+
import { Toggle as Toggle$1 } from "@base-ui/react/toggle";
|
|
46
|
+
import { ToggleGroup as ToggleGroup$1 } from "@base-ui/react/toggle-group";
|
|
47
|
+
//#region src/components/ui/accordion.tsx
|
|
48
|
+
function Accordion({ className, ...props }) {
|
|
49
|
+
return /* @__PURE__ */ jsx(Accordion$1.Root, {
|
|
50
|
+
"data-slot": "accordion",
|
|
51
|
+
className: cn("flex w-full flex-col", className),
|
|
52
|
+
...props
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function AccordionItem({ className, ...props }) {
|
|
56
|
+
return /* @__PURE__ */ jsx(Accordion$1.Item, {
|
|
57
|
+
"data-slot": "accordion-item",
|
|
58
|
+
className: cn("not-last:border-b", className),
|
|
59
|
+
...props
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function AccordionTrigger({ className, children, ...props }) {
|
|
63
|
+
return /* @__PURE__ */ jsx(Accordion$1.Header, {
|
|
64
|
+
className: "flex",
|
|
65
|
+
children: /* @__PURE__ */ jsxs(Accordion$1.Trigger, {
|
|
66
|
+
"data-slot": "accordion-trigger",
|
|
67
|
+
className: cn("group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground", className),
|
|
68
|
+
...props,
|
|
69
|
+
children: [
|
|
70
|
+
children,
|
|
71
|
+
/* @__PURE__ */ jsx(ChevronDownIcon, {
|
|
72
|
+
"data-slot": "accordion-trigger-icon",
|
|
73
|
+
className: "pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden"
|
|
74
|
+
}),
|
|
75
|
+
/* @__PURE__ */ jsx(ChevronUpIcon, {
|
|
76
|
+
"data-slot": "accordion-trigger-icon",
|
|
77
|
+
className: "pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline"
|
|
78
|
+
})
|
|
79
|
+
]
|
|
80
|
+
})
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function AccordionContent({ className, children, ...props }) {
|
|
84
|
+
return /* @__PURE__ */ jsx(Accordion$1.Panel, {
|
|
85
|
+
"data-slot": "accordion-content",
|
|
86
|
+
className: "overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up",
|
|
87
|
+
...props,
|
|
88
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
89
|
+
className: cn("h-(--accordion-panel-height) pt-0 pb-2.5 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", className),
|
|
90
|
+
children
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//#endregion
|
|
95
|
+
//#region src/components/ui/alert.tsx
|
|
96
|
+
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", {
|
|
97
|
+
variants: { variant: {
|
|
98
|
+
default: "bg-card text-card-foreground",
|
|
99
|
+
destructive: "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"
|
|
100
|
+
} },
|
|
101
|
+
defaultVariants: { variant: "default" }
|
|
102
|
+
});
|
|
103
|
+
function Alert({ className, variant, ...props }) {
|
|
104
|
+
return /* @__PURE__ */ jsx("div", {
|
|
105
|
+
"data-slot": "alert",
|
|
106
|
+
role: "alert",
|
|
107
|
+
className: cn(alertVariants({ variant }), className),
|
|
108
|
+
...props
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
function AlertTitle({ className, ...props }) {
|
|
112
|
+
return /* @__PURE__ */ jsx("div", {
|
|
113
|
+
"data-slot": "alert-title",
|
|
114
|
+
className: cn("font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground", className),
|
|
115
|
+
...props
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
function AlertDescription({ className, ...props }) {
|
|
119
|
+
return /* @__PURE__ */ jsx("div", {
|
|
120
|
+
"data-slot": "alert-description",
|
|
121
|
+
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),
|
|
122
|
+
...props
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
function AlertAction({ className, ...props }) {
|
|
126
|
+
return /* @__PURE__ */ jsx("div", {
|
|
127
|
+
"data-slot": "alert-action",
|
|
128
|
+
className: cn("absolute top-2 right-2", className),
|
|
129
|
+
...props
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
//#endregion
|
|
5
133
|
//#region src/components/ui/button.tsx
|
|
6
134
|
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", {
|
|
7
135
|
variants: {
|
|
@@ -41,4 +169,3755 @@ function Button({ className, variant = "default", size = "default", ...props })
|
|
|
41
169
|
});
|
|
42
170
|
}
|
|
43
171
|
//#endregion
|
|
44
|
-
|
|
172
|
+
//#region src/components/ui/alert-dialog.tsx
|
|
173
|
+
function AlertDialog({ ...props }) {
|
|
174
|
+
return /* @__PURE__ */ jsx(AlertDialog$1.Root, {
|
|
175
|
+
"data-slot": "alert-dialog",
|
|
176
|
+
...props
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
function AlertDialogTrigger({ ...props }) {
|
|
180
|
+
return /* @__PURE__ */ jsx(AlertDialog$1.Trigger, {
|
|
181
|
+
"data-slot": "alert-dialog-trigger",
|
|
182
|
+
...props
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
function AlertDialogPortal({ ...props }) {
|
|
186
|
+
return /* @__PURE__ */ jsx(AlertDialog$1.Portal, {
|
|
187
|
+
"data-slot": "alert-dialog-portal",
|
|
188
|
+
...props
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
function AlertDialogOverlay({ className, ...props }) {
|
|
192
|
+
return /* @__PURE__ */ jsx(AlertDialog$1.Backdrop, {
|
|
193
|
+
"data-slot": "alert-dialog-overlay",
|
|
194
|
+
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),
|
|
195
|
+
...props
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
function AlertDialogContent({ className, size = "default", ...props }) {
|
|
199
|
+
return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [/* @__PURE__ */ jsx(AlertDialogOverlay, {}), /* @__PURE__ */ jsx(AlertDialog$1.Popup, {
|
|
200
|
+
"data-slot": "alert-dialog-content",
|
|
201
|
+
"data-size": size,
|
|
202
|
+
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),
|
|
203
|
+
...props
|
|
204
|
+
})] });
|
|
205
|
+
}
|
|
206
|
+
function AlertDialogHeader({ className, ...props }) {
|
|
207
|
+
return /* @__PURE__ */ jsx("div", {
|
|
208
|
+
"data-slot": "alert-dialog-header",
|
|
209
|
+
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),
|
|
210
|
+
...props
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
function AlertDialogFooter({ className, ...props }) {
|
|
214
|
+
return /* @__PURE__ */ jsx("div", {
|
|
215
|
+
"data-slot": "alert-dialog-footer",
|
|
216
|
+
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),
|
|
217
|
+
...props
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
function AlertDialogMedia({ className, ...props }) {
|
|
221
|
+
return /* @__PURE__ */ jsx("div", {
|
|
222
|
+
"data-slot": "alert-dialog-media",
|
|
223
|
+
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),
|
|
224
|
+
...props
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
function AlertDialogTitle({ className, ...props }) {
|
|
228
|
+
return /* @__PURE__ */ jsx(AlertDialog$1.Title, {
|
|
229
|
+
"data-slot": "alert-dialog-title",
|
|
230
|
+
className: cn("font-heading 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),
|
|
231
|
+
...props
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
function AlertDialogDescription({ className, ...props }) {
|
|
235
|
+
return /* @__PURE__ */ jsx(AlertDialog$1.Description, {
|
|
236
|
+
"data-slot": "alert-dialog-description",
|
|
237
|
+
className: cn("text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
|
|
238
|
+
...props
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
function AlertDialogAction({ className, ...props }) {
|
|
242
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
243
|
+
"data-slot": "alert-dialog-action",
|
|
244
|
+
className: cn(className),
|
|
245
|
+
...props
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
function AlertDialogCancel({ className, variant = "outline", size = "default", ...props }) {
|
|
249
|
+
return /* @__PURE__ */ jsx(AlertDialog$1.Close, {
|
|
250
|
+
"data-slot": "alert-dialog-cancel",
|
|
251
|
+
className: cn(className),
|
|
252
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
253
|
+
variant,
|
|
254
|
+
size
|
|
255
|
+
}),
|
|
256
|
+
...props
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
//#endregion
|
|
260
|
+
//#region src/components/ui/aspect-ratio.tsx
|
|
261
|
+
function AspectRatio({ ratio, className, ...props }) {
|
|
262
|
+
return /* @__PURE__ */ jsx("div", {
|
|
263
|
+
"data-slot": "aspect-ratio",
|
|
264
|
+
style: { "--ratio": ratio },
|
|
265
|
+
className: cn("relative aspect-(--ratio)", className),
|
|
266
|
+
...props
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
//#endregion
|
|
270
|
+
//#region src/components/ui/attachment.tsx
|
|
271
|
+
const attachmentVariants = cva("group/attachment relative flex w-fit max-w-full min-w-0 shrink-0 flex-wrap rounded-xl border bg-card text-card-foreground transition-colors focus-within:ring-1 focus-within:ring-ring/50 has-[>a,>button]:hover:bg-muted/50 data-[state=error]:border-destructive/30 data-[state=idle]:border-dashed", { variants: {
|
|
272
|
+
size: {
|
|
273
|
+
default: "gap-2 text-sm has-data-[slot=attachment-content]:px-2.5 has-data-[slot=attachment-content]:py-2 has-data-[slot=attachment-media]:p-2",
|
|
274
|
+
sm: "gap-2.5 text-xs has-data-[slot=attachment-content]:px-2 has-data-[slot=attachment-content]:py-1.5 has-data-[slot=attachment-media]:p-1.5",
|
|
275
|
+
xs: "gap-1.5 rounded-lg text-xs has-data-[slot=attachment-content]:px-1.5 has-data-[slot=attachment-content]:py-1 has-data-[slot=attachment-media]:p-1"
|
|
276
|
+
},
|
|
277
|
+
orientation: {
|
|
278
|
+
horizontal: "min-w-40 items-center",
|
|
279
|
+
vertical: "w-24 flex-col has-data-[slot=attachment-content]:w-30"
|
|
280
|
+
}
|
|
281
|
+
} });
|
|
282
|
+
function Attachment({ className, state = "done", size = "default", orientation = "horizontal", ...props }) {
|
|
283
|
+
return /* @__PURE__ */ jsx("div", {
|
|
284
|
+
"data-slot": "attachment",
|
|
285
|
+
"data-state": state,
|
|
286
|
+
"data-size": size,
|
|
287
|
+
"data-orientation": orientation,
|
|
288
|
+
className: cn(attachmentVariants({
|
|
289
|
+
size,
|
|
290
|
+
orientation
|
|
291
|
+
}), className),
|
|
292
|
+
...props
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
const attachmentMediaVariants = cva("relative flex aspect-square w-10 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted text-foreground group-data-[orientation=vertical]/attachment:w-full group-data-[size=sm]/attachment:w-8 group-data-[size=xs]/attachment:w-7 group-data-[size=xs]/attachment:rounded-md group-data-[state=error]/attachment:bg-destructive/10 group-data-[state=error]/attachment:text-destructive group-data-[orientation=vertical]/attachment:*:data-[slot=spinner]:size-6! [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 group-data-[orientation=vertical]/attachment:[&_svg:not([class*='size-'])]:size-6 group-data-[size=xs]/attachment:[&_svg:not([class*='size-'])]:size-3.5", {
|
|
296
|
+
variants: { variant: {
|
|
297
|
+
icon: "",
|
|
298
|
+
image: "opacity-60 group-data-[state=done]/attachment:opacity-100 group-data-[state=idle]/attachment:opacity-100 *:[img]:aspect-square *:[img]:w-full *:[img]:object-cover"
|
|
299
|
+
} },
|
|
300
|
+
defaultVariants: { variant: "icon" }
|
|
301
|
+
});
|
|
302
|
+
function AttachmentMedia({ className, variant = "icon", ...props }) {
|
|
303
|
+
return /* @__PURE__ */ jsx("div", {
|
|
304
|
+
"data-slot": "attachment-media",
|
|
305
|
+
"data-variant": variant,
|
|
306
|
+
className: cn(attachmentMediaVariants({ variant }), className),
|
|
307
|
+
...props
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
function AttachmentContent({ className, ...props }) {
|
|
311
|
+
return /* @__PURE__ */ jsx("div", {
|
|
312
|
+
"data-slot": "attachment-content",
|
|
313
|
+
className: cn("max-w-full min-w-0 flex-1 leading-tight group-data-[orientation=vertical]/attachment:px-1", className),
|
|
314
|
+
...props
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
function AttachmentTitle({ className, ...props }) {
|
|
318
|
+
return /* @__PURE__ */ jsx("span", {
|
|
319
|
+
"data-slot": "attachment-title",
|
|
320
|
+
className: cn("block max-w-full min-w-0 truncate font-medium group-data-[state=processing]/attachment:shimmer group-data-[state=uploading]/attachment:shimmer", className),
|
|
321
|
+
...props
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
function AttachmentDescription({ className, ...props }) {
|
|
325
|
+
return /* @__PURE__ */ jsx("span", {
|
|
326
|
+
"data-slot": "attachment-description",
|
|
327
|
+
className: cn("mt-0.5 block min-w-0 truncate text-xs text-muted-foreground group-data-[state=error]/attachment:text-destructive/80", "max-w-full", className),
|
|
328
|
+
...props
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
function AttachmentActions({ className, ...props }) {
|
|
332
|
+
return /* @__PURE__ */ jsx("div", {
|
|
333
|
+
"data-slot": "attachment-actions",
|
|
334
|
+
className: cn("relative z-20 flex shrink-0 items-center group-data-[orientation=vertical]/attachment:absolute group-data-[orientation=vertical]/attachment:top-3 group-data-[orientation=vertical]/attachment:right-3 group-data-[orientation=vertical]/attachment:gap-1", className),
|
|
335
|
+
...props
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
function AttachmentAction({ className, variant, size = "icon-xs", ...props }) {
|
|
339
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
340
|
+
"data-slot": "attachment-action",
|
|
341
|
+
variant: variant ?? "ghost",
|
|
342
|
+
size,
|
|
343
|
+
className: cn(className),
|
|
344
|
+
...props
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
function AttachmentTrigger({ className, render, type, ...props }) {
|
|
348
|
+
return useRender({
|
|
349
|
+
defaultTagName: "button",
|
|
350
|
+
props: mergeProps({
|
|
351
|
+
type: render ? type : type ?? "button",
|
|
352
|
+
className: cn("absolute inset-0 z-10 outline-none", className)
|
|
353
|
+
}, props),
|
|
354
|
+
render,
|
|
355
|
+
state: { slot: "attachment-trigger" }
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
function AttachmentGroup({ className, ...props }) {
|
|
359
|
+
return /* @__PURE__ */ jsx("div", {
|
|
360
|
+
"data-slot": "attachment-group",
|
|
361
|
+
className: cn("flex min-w-0 scroll-fade-x snap-x snap-mandatory scroll-px-1 scrollbar-none gap-3 overflow-x-auto overscroll-x-contain py-1 *:data-[slot=attachment]:flex-none *:data-[slot=attachment]:snap-start", className),
|
|
362
|
+
...props
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
//#endregion
|
|
366
|
+
//#region src/components/ui/avatar.tsx
|
|
367
|
+
function Avatar({ className, size = "default", ...props }) {
|
|
368
|
+
return /* @__PURE__ */ jsx(Avatar$1.Root, {
|
|
369
|
+
"data-slot": "avatar",
|
|
370
|
+
"data-size": size,
|
|
371
|
+
className: cn("group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten", className),
|
|
372
|
+
...props
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
function AvatarImage({ className, ...props }) {
|
|
376
|
+
return /* @__PURE__ */ jsx(Avatar$1.Image, {
|
|
377
|
+
"data-slot": "avatar-image",
|
|
378
|
+
className: cn("aspect-square size-full rounded-full object-cover", className),
|
|
379
|
+
...props
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
function AvatarFallback({ className, ...props }) {
|
|
383
|
+
return /* @__PURE__ */ jsx(Avatar$1.Fallback, {
|
|
384
|
+
"data-slot": "avatar-fallback",
|
|
385
|
+
className: cn("flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs", className),
|
|
386
|
+
...props
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
function AvatarBadge({ className, ...props }) {
|
|
390
|
+
return /* @__PURE__ */ jsx("span", {
|
|
391
|
+
"data-slot": "avatar-badge",
|
|
392
|
+
className: cn("absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none", "group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden", "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2", "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2", className),
|
|
393
|
+
...props
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
function AvatarGroup({ className, ...props }) {
|
|
397
|
+
return /* @__PURE__ */ jsx("div", {
|
|
398
|
+
"data-slot": "avatar-group",
|
|
399
|
+
className: cn("group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background", className),
|
|
400
|
+
...props
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
function AvatarGroupCount({ className, ...props }) {
|
|
404
|
+
return /* @__PURE__ */ jsx("div", {
|
|
405
|
+
"data-slot": "avatar-group-count",
|
|
406
|
+
className: cn("relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3", className),
|
|
407
|
+
...props
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
//#endregion
|
|
411
|
+
//#region src/components/ui/badge.tsx
|
|
412
|
+
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!", {
|
|
413
|
+
variants: { variant: {
|
|
414
|
+
default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
|
|
415
|
+
secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
|
|
416
|
+
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",
|
|
417
|
+
outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
|
|
418
|
+
ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
|
|
419
|
+
link: "text-primary underline-offset-4 hover:underline"
|
|
420
|
+
} },
|
|
421
|
+
defaultVariants: { variant: "default" }
|
|
422
|
+
});
|
|
423
|
+
function Badge({ className, variant = "default", render, ...props }) {
|
|
424
|
+
return useRender({
|
|
425
|
+
defaultTagName: "span",
|
|
426
|
+
props: mergeProps({ className: cn(badgeVariants({ variant }), className) }, props),
|
|
427
|
+
render,
|
|
428
|
+
state: {
|
|
429
|
+
slot: "badge",
|
|
430
|
+
variant
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
//#endregion
|
|
435
|
+
//#region src/components/ui/breadcrumb.tsx
|
|
436
|
+
function Breadcrumb({ className, ...props }) {
|
|
437
|
+
return /* @__PURE__ */ jsx("nav", {
|
|
438
|
+
"aria-label": "breadcrumb",
|
|
439
|
+
"data-slot": "breadcrumb",
|
|
440
|
+
className: cn(className),
|
|
441
|
+
...props
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
function BreadcrumbList({ className, ...props }) {
|
|
445
|
+
return /* @__PURE__ */ jsx("ol", {
|
|
446
|
+
"data-slot": "breadcrumb-list",
|
|
447
|
+
className: cn("flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground", className),
|
|
448
|
+
...props
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
function BreadcrumbItem({ className, ...props }) {
|
|
452
|
+
return /* @__PURE__ */ jsx("li", {
|
|
453
|
+
"data-slot": "breadcrumb-item",
|
|
454
|
+
className: cn("inline-flex items-center gap-1", className),
|
|
455
|
+
...props
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
function BreadcrumbLink({ className, render, ...props }) {
|
|
459
|
+
return useRender({
|
|
460
|
+
defaultTagName: "a",
|
|
461
|
+
props: mergeProps({ className: cn("transition-colors hover:text-foreground", className) }, props),
|
|
462
|
+
render,
|
|
463
|
+
state: { slot: "breadcrumb-link" }
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
function BreadcrumbPage({ className, ...props }) {
|
|
467
|
+
return /* @__PURE__ */ jsx("span", {
|
|
468
|
+
"data-slot": "breadcrumb-page",
|
|
469
|
+
role: "link",
|
|
470
|
+
"aria-disabled": "true",
|
|
471
|
+
"aria-current": "page",
|
|
472
|
+
className: cn("font-normal text-foreground", className),
|
|
473
|
+
...props
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
function BreadcrumbSeparator({ children, className, ...props }) {
|
|
477
|
+
return /* @__PURE__ */ jsx("li", {
|
|
478
|
+
"data-slot": "breadcrumb-separator",
|
|
479
|
+
role: "presentation",
|
|
480
|
+
"aria-hidden": "true",
|
|
481
|
+
className: cn("[&>svg]:size-3.5", className),
|
|
482
|
+
...props,
|
|
483
|
+
children: children ?? /* @__PURE__ */ jsx(ChevronRightIcon, {})
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
function BreadcrumbEllipsis({ className, ...props }) {
|
|
487
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
488
|
+
"data-slot": "breadcrumb-ellipsis",
|
|
489
|
+
role: "presentation",
|
|
490
|
+
"aria-hidden": "true",
|
|
491
|
+
className: cn("flex size-5 items-center justify-center [&>svg]:size-4", className),
|
|
492
|
+
...props,
|
|
493
|
+
children: [/* @__PURE__ */ jsx(MoreHorizontalIcon, {}), /* @__PURE__ */ jsx("span", {
|
|
494
|
+
className: "sr-only",
|
|
495
|
+
children: "More"
|
|
496
|
+
})]
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
//#endregion
|
|
500
|
+
//#region src/components/ui/bubble.tsx
|
|
501
|
+
function BubbleGroup({ className, ...props }) {
|
|
502
|
+
return /* @__PURE__ */ jsx("div", {
|
|
503
|
+
"data-slot": "bubble-group",
|
|
504
|
+
className: cn("flex min-w-0 flex-col gap-2", className),
|
|
505
|
+
...props
|
|
506
|
+
});
|
|
507
|
+
}
|
|
508
|
+
const bubbleVariants = cva("group/bubble relative flex w-fit max-w-[80%] min-w-0 flex-col gap-1 group-data-[align=end]/message:self-end data-[align=end]:self-end data-[variant=ghost]:max-w-full", {
|
|
509
|
+
variants: { variant: {
|
|
510
|
+
default: "*:data-[slot=bubble-content]:bg-primary *:data-[slot=bubble-content]:text-primary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-primary/80",
|
|
511
|
+
secondary: "*:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)]",
|
|
512
|
+
muted: "*:data-[slot=bubble-content]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--muted),var(--foreground)_5%)]",
|
|
513
|
+
tinted: "*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.93_calc(c*0.4)_h)] *:data-[slot=bubble-content]:text-foreground dark:*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.3_calc(c*0.4)_h)] [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.88_calc(c*0.5)_h)] dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.35_calc(c*0.5)_h)]",
|
|
514
|
+
outline: "*:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-input/30",
|
|
515
|
+
ghost: "border-none *:data-[slot=bubble-content]:rounded-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted/50",
|
|
516
|
+
destructive: "*:data-[slot=bubble-content]:bg-destructive/10 *:data-[slot=bubble-content]:text-destructive dark:*:data-[slot=bubble-content]:bg-destructive/20 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/20 dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/30"
|
|
517
|
+
} },
|
|
518
|
+
defaultVariants: { variant: "default" }
|
|
519
|
+
});
|
|
520
|
+
function Bubble({ variant = "default", align = "start", className, ...props }) {
|
|
521
|
+
return /* @__PURE__ */ jsx("div", {
|
|
522
|
+
"data-slot": "bubble",
|
|
523
|
+
"data-variant": variant,
|
|
524
|
+
"data-align": align,
|
|
525
|
+
className: cn(bubbleVariants({ variant }), className),
|
|
526
|
+
...props
|
|
527
|
+
});
|
|
528
|
+
}
|
|
529
|
+
function BubbleContent({ className, render, ...props }) {
|
|
530
|
+
return useRender({
|
|
531
|
+
defaultTagName: "div",
|
|
532
|
+
props: mergeProps({ className: cn("w-fit max-w-full min-w-0 overflow-hidden rounded-xl border border-transparent px-3 py-2 text-sm leading-relaxed wrap-break-word group-data-[align=end]/bubble:self-end [button]:text-left [button,a]:transition-colors [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-3 [button,a]:focus-visible:ring-ring/50", className) }, props),
|
|
533
|
+
render,
|
|
534
|
+
state: { slot: "bubble-content" }
|
|
535
|
+
});
|
|
536
|
+
}
|
|
537
|
+
const bubbleReactionsVariants = cva("absolute z-10 flex w-fit shrink-0 items-center justify-center gap-1 rounded-full bg-muted px-1.5 py-0.5 text-sm ring-3 ring-card has-[button]:p-0", {
|
|
538
|
+
variants: {
|
|
539
|
+
side: {
|
|
540
|
+
top: "top-0 -translate-y-3/4",
|
|
541
|
+
bottom: "bottom-0 translate-y-3/4"
|
|
542
|
+
},
|
|
543
|
+
align: {
|
|
544
|
+
start: "left-3",
|
|
545
|
+
end: "right-3"
|
|
546
|
+
}
|
|
547
|
+
},
|
|
548
|
+
defaultVariants: {
|
|
549
|
+
side: "bottom",
|
|
550
|
+
align: "end"
|
|
551
|
+
}
|
|
552
|
+
});
|
|
553
|
+
function BubbleReactions({ side = "bottom", align = "end", className, ...props }) {
|
|
554
|
+
return /* @__PURE__ */ jsx("div", {
|
|
555
|
+
"data-slot": "bubble-reactions",
|
|
556
|
+
"data-align": align,
|
|
557
|
+
"data-side": side,
|
|
558
|
+
className: cn(bubbleReactionsVariants({
|
|
559
|
+
side,
|
|
560
|
+
align
|
|
561
|
+
}), className),
|
|
562
|
+
...props
|
|
563
|
+
});
|
|
564
|
+
}
|
|
565
|
+
//#endregion
|
|
566
|
+
//#region src/components/ui/separator.tsx
|
|
567
|
+
function Separator({ className, orientation = "horizontal", ...props }) {
|
|
568
|
+
return /* @__PURE__ */ jsx(Separator$1, {
|
|
569
|
+
"data-slot": "separator",
|
|
570
|
+
orientation,
|
|
571
|
+
className: cn("shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch", className),
|
|
572
|
+
...props
|
|
573
|
+
});
|
|
574
|
+
}
|
|
575
|
+
//#endregion
|
|
576
|
+
//#region src/components/ui/button-group.tsx
|
|
577
|
+
const buttonGroupVariants = cva("flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1", {
|
|
578
|
+
variants: { orientation: {
|
|
579
|
+
horizontal: "*:data-slot:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg! [&>[data-slot]~[data-slot]]:rounded-l-none [&>[data-slot]~[data-slot]]:border-l-0",
|
|
580
|
+
vertical: "flex-col *:data-slot:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg! [&>[data-slot]~[data-slot]]:rounded-t-none [&>[data-slot]~[data-slot]]:border-t-0"
|
|
581
|
+
} },
|
|
582
|
+
defaultVariants: { orientation: "horizontal" }
|
|
583
|
+
});
|
|
584
|
+
function ButtonGroup({ className, orientation, ...props }) {
|
|
585
|
+
return /* @__PURE__ */ jsx("div", {
|
|
586
|
+
role: "group",
|
|
587
|
+
"data-slot": "button-group",
|
|
588
|
+
"data-orientation": orientation,
|
|
589
|
+
className: cn(buttonGroupVariants({ orientation }), className),
|
|
590
|
+
...props
|
|
591
|
+
});
|
|
592
|
+
}
|
|
593
|
+
function ButtonGroupText({ className, render, ...props }) {
|
|
594
|
+
return useRender({
|
|
595
|
+
defaultTagName: "div",
|
|
596
|
+
props: mergeProps({ className: cn("flex items-center gap-2 rounded-lg border bg-muted px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", className) }, props),
|
|
597
|
+
render,
|
|
598
|
+
state: { slot: "button-group-text" }
|
|
599
|
+
});
|
|
600
|
+
}
|
|
601
|
+
function ButtonGroupSeparator({ className, orientation = "vertical", ...props }) {
|
|
602
|
+
return /* @__PURE__ */ jsx(Separator, {
|
|
603
|
+
"data-slot": "button-group-separator",
|
|
604
|
+
orientation,
|
|
605
|
+
className: cn("relative self-stretch bg-input data-horizontal:mx-px data-horizontal:w-auto data-vertical:my-px data-vertical:h-auto", className),
|
|
606
|
+
...props
|
|
607
|
+
});
|
|
608
|
+
}
|
|
609
|
+
//#endregion
|
|
610
|
+
//#region src/components/ui/calendar.tsx
|
|
611
|
+
function Calendar({ className, classNames, showOutsideDays = true, captionLayout = "label", buttonVariant = "ghost", locale, formatters, components, ...props }) {
|
|
612
|
+
const defaultClassNames = getDefaultClassNames();
|
|
613
|
+
return /* @__PURE__ */ jsx(DayPicker, {
|
|
614
|
+
showOutsideDays,
|
|
615
|
+
className: cn("group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent", String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`, String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`, className),
|
|
616
|
+
captionLayout,
|
|
617
|
+
locale,
|
|
618
|
+
formatters: {
|
|
619
|
+
formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: "short" }),
|
|
620
|
+
...formatters
|
|
621
|
+
},
|
|
622
|
+
classNames: {
|
|
623
|
+
root: cn("w-fit", defaultClassNames.root),
|
|
624
|
+
months: cn("relative flex flex-col gap-4 md:flex-row", defaultClassNames.months),
|
|
625
|
+
month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
|
|
626
|
+
nav: cn("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1", defaultClassNames.nav),
|
|
627
|
+
button_previous: cn(buttonVariants({ variant: buttonVariant }), "size-(--cell-size) p-0 select-none aria-disabled:opacity-50", defaultClassNames.button_previous),
|
|
628
|
+
button_next: cn(buttonVariants({ variant: buttonVariant }), "size-(--cell-size) p-0 select-none aria-disabled:opacity-50", defaultClassNames.button_next),
|
|
629
|
+
month_caption: cn("flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)", defaultClassNames.month_caption),
|
|
630
|
+
dropdowns: cn("flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium", defaultClassNames.dropdowns),
|
|
631
|
+
dropdown_root: cn("relative rounded-(--cell-radius)", defaultClassNames.dropdown_root),
|
|
632
|
+
dropdown: cn("absolute inset-0 bg-popover opacity-0", defaultClassNames.dropdown),
|
|
633
|
+
caption_label: cn("font-medium select-none", captionLayout === "label" ? "text-sm" : "flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground", defaultClassNames.caption_label),
|
|
634
|
+
month_grid: cn("w-full border-collapse", defaultClassNames.month_grid),
|
|
635
|
+
weekdays: cn("flex", defaultClassNames.weekdays),
|
|
636
|
+
weekday: cn("flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none", defaultClassNames.weekday),
|
|
637
|
+
week: cn("mt-2 flex w-full", defaultClassNames.week),
|
|
638
|
+
week_number_header: cn("w-(--cell-size) select-none", defaultClassNames.week_number_header),
|
|
639
|
+
week_number: cn("text-[0.8rem] text-muted-foreground select-none", defaultClassNames.week_number),
|
|
640
|
+
day: cn("group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)", props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)" : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)", defaultClassNames.day),
|
|
641
|
+
range_start: cn("relative isolate z-0 rounded-l-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-muted", defaultClassNames.range_start),
|
|
642
|
+
range_middle: cn("rounded-none", defaultClassNames.range_middle),
|
|
643
|
+
range_end: cn("relative isolate z-0 rounded-r-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-muted", defaultClassNames.range_end),
|
|
644
|
+
today: cn("rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none", defaultClassNames.today),
|
|
645
|
+
outside: cn("text-muted-foreground aria-selected:text-muted-foreground", defaultClassNames.outside),
|
|
646
|
+
disabled: cn("text-muted-foreground opacity-50", defaultClassNames.disabled),
|
|
647
|
+
hidden: cn("invisible", defaultClassNames.hidden),
|
|
648
|
+
...classNames
|
|
649
|
+
},
|
|
650
|
+
components: {
|
|
651
|
+
Root: ({ className, rootRef, ...props }) => {
|
|
652
|
+
return /* @__PURE__ */ jsx("div", {
|
|
653
|
+
"data-slot": "calendar",
|
|
654
|
+
ref: rootRef,
|
|
655
|
+
className: cn(className),
|
|
656
|
+
...props
|
|
657
|
+
});
|
|
658
|
+
},
|
|
659
|
+
Chevron: ({ className, orientation, ...props }) => {
|
|
660
|
+
if (orientation === "left") return /* @__PURE__ */ jsx(ChevronLeftIcon, {
|
|
661
|
+
className: cn("size-4", className),
|
|
662
|
+
...props
|
|
663
|
+
});
|
|
664
|
+
if (orientation === "right") return /* @__PURE__ */ jsx(ChevronRightIcon, {
|
|
665
|
+
className: cn("size-4", className),
|
|
666
|
+
...props
|
|
667
|
+
});
|
|
668
|
+
return /* @__PURE__ */ jsx(ChevronDownIcon, {
|
|
669
|
+
className: cn("size-4", className),
|
|
670
|
+
...props
|
|
671
|
+
});
|
|
672
|
+
},
|
|
673
|
+
DayButton: ({ ...props }) => /* @__PURE__ */ jsx(CalendarDayButton, {
|
|
674
|
+
locale,
|
|
675
|
+
...props
|
|
676
|
+
}),
|
|
677
|
+
WeekNumber: ({ children, ...props }) => {
|
|
678
|
+
return /* @__PURE__ */ jsx("td", {
|
|
679
|
+
...props,
|
|
680
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
681
|
+
className: "flex size-(--cell-size) items-center justify-center text-center",
|
|
682
|
+
children
|
|
683
|
+
})
|
|
684
|
+
});
|
|
685
|
+
},
|
|
686
|
+
...components
|
|
687
|
+
},
|
|
688
|
+
...props
|
|
689
|
+
});
|
|
690
|
+
}
|
|
691
|
+
function CalendarDayButton({ className, day, modifiers, locale, ...props }) {
|
|
692
|
+
const defaultClassNames = getDefaultClassNames();
|
|
693
|
+
const ref = React.useRef(null);
|
|
694
|
+
React.useEffect(() => {
|
|
695
|
+
if (modifiers.focused) ref.current?.focus();
|
|
696
|
+
}, [modifiers.focused]);
|
|
697
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
698
|
+
variant: "ghost",
|
|
699
|
+
size: "icon",
|
|
700
|
+
"data-day": day.date.toLocaleDateString(locale?.code),
|
|
701
|
+
"data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
|
|
702
|
+
"data-range-start": modifiers.range_start,
|
|
703
|
+
"data-range-end": modifiers.range_end,
|
|
704
|
+
"data-range-middle": modifiers.range_middle,
|
|
705
|
+
className: cn("relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70", defaultClassNames.day, className),
|
|
706
|
+
...props
|
|
707
|
+
});
|
|
708
|
+
}
|
|
709
|
+
//#endregion
|
|
710
|
+
//#region src/components/ui/card.tsx
|
|
711
|
+
function Card({ className, size = "default", ...props }) {
|
|
712
|
+
return /* @__PURE__ */ jsx("div", {
|
|
713
|
+
"data-slot": "card",
|
|
714
|
+
"data-size": size,
|
|
715
|
+
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),
|
|
716
|
+
...props
|
|
717
|
+
});
|
|
718
|
+
}
|
|
719
|
+
function CardHeader({ className, ...props }) {
|
|
720
|
+
return /* @__PURE__ */ jsx("div", {
|
|
721
|
+
"data-slot": "card-header",
|
|
722
|
+
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),
|
|
723
|
+
...props
|
|
724
|
+
});
|
|
725
|
+
}
|
|
726
|
+
function CardTitle({ className, ...props }) {
|
|
727
|
+
return /* @__PURE__ */ jsx("div", {
|
|
728
|
+
"data-slot": "card-title",
|
|
729
|
+
className: cn("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm", className),
|
|
730
|
+
...props
|
|
731
|
+
});
|
|
732
|
+
}
|
|
733
|
+
function CardDescription({ className, ...props }) {
|
|
734
|
+
return /* @__PURE__ */ jsx("div", {
|
|
735
|
+
"data-slot": "card-description",
|
|
736
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
737
|
+
...props
|
|
738
|
+
});
|
|
739
|
+
}
|
|
740
|
+
function CardAction({ className, ...props }) {
|
|
741
|
+
return /* @__PURE__ */ jsx("div", {
|
|
742
|
+
"data-slot": "card-action",
|
|
743
|
+
className: cn("col-start-2 row-span-2 row-start-1 self-start justify-self-end", className),
|
|
744
|
+
...props
|
|
745
|
+
});
|
|
746
|
+
}
|
|
747
|
+
function CardContent({ className, ...props }) {
|
|
748
|
+
return /* @__PURE__ */ jsx("div", {
|
|
749
|
+
"data-slot": "card-content",
|
|
750
|
+
className: cn("px-(--card-spacing)", className),
|
|
751
|
+
...props
|
|
752
|
+
});
|
|
753
|
+
}
|
|
754
|
+
function CardFooter({ className, ...props }) {
|
|
755
|
+
return /* @__PURE__ */ jsx("div", {
|
|
756
|
+
"data-slot": "card-footer",
|
|
757
|
+
className: cn("flex items-center rounded-b-xl border-t bg-muted/50 p-(--card-spacing)", className),
|
|
758
|
+
...props
|
|
759
|
+
});
|
|
760
|
+
}
|
|
761
|
+
//#endregion
|
|
762
|
+
//#region src/components/ui/carousel.tsx
|
|
763
|
+
const CarouselContext = React.createContext(null);
|
|
764
|
+
function useCarousel() {
|
|
765
|
+
const context = React.useContext(CarouselContext);
|
|
766
|
+
if (!context) throw new Error("useCarousel must be used within a <Carousel />");
|
|
767
|
+
return context;
|
|
768
|
+
}
|
|
769
|
+
function Carousel({ orientation = "horizontal", opts, setApi, plugins, className, children, ...props }) {
|
|
770
|
+
const [carouselRef, api] = useEmblaCarousel({
|
|
771
|
+
...opts,
|
|
772
|
+
axis: orientation === "horizontal" ? "x" : "y"
|
|
773
|
+
}, plugins);
|
|
774
|
+
const [canScrollPrev, setCanScrollPrev] = React.useState(false);
|
|
775
|
+
const [canScrollNext, setCanScrollNext] = React.useState(false);
|
|
776
|
+
const onSelect = React.useCallback((api) => {
|
|
777
|
+
if (!api) return;
|
|
778
|
+
setCanScrollPrev(api.canScrollPrev());
|
|
779
|
+
setCanScrollNext(api.canScrollNext());
|
|
780
|
+
}, []);
|
|
781
|
+
const scrollPrev = React.useCallback(() => {
|
|
782
|
+
api?.scrollPrev();
|
|
783
|
+
}, [api]);
|
|
784
|
+
const scrollNext = React.useCallback(() => {
|
|
785
|
+
api?.scrollNext();
|
|
786
|
+
}, [api]);
|
|
787
|
+
const handleKeyDown = React.useCallback((event) => {
|
|
788
|
+
if (event.key === "ArrowLeft") {
|
|
789
|
+
event.preventDefault();
|
|
790
|
+
scrollPrev();
|
|
791
|
+
} else if (event.key === "ArrowRight") {
|
|
792
|
+
event.preventDefault();
|
|
793
|
+
scrollNext();
|
|
794
|
+
}
|
|
795
|
+
}, [scrollPrev, scrollNext]);
|
|
796
|
+
React.useEffect(() => {
|
|
797
|
+
if (!api || !setApi) return;
|
|
798
|
+
setApi(api);
|
|
799
|
+
}, [api, setApi]);
|
|
800
|
+
React.useEffect(() => {
|
|
801
|
+
if (!api) return;
|
|
802
|
+
onSelect(api);
|
|
803
|
+
api.on("reInit", onSelect);
|
|
804
|
+
api.on("select", onSelect);
|
|
805
|
+
return () => {
|
|
806
|
+
api?.off("select", onSelect);
|
|
807
|
+
};
|
|
808
|
+
}, [api, onSelect]);
|
|
809
|
+
return /* @__PURE__ */ jsx(CarouselContext.Provider, {
|
|
810
|
+
value: {
|
|
811
|
+
carouselRef,
|
|
812
|
+
api,
|
|
813
|
+
opts,
|
|
814
|
+
orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
|
|
815
|
+
scrollPrev,
|
|
816
|
+
scrollNext,
|
|
817
|
+
canScrollPrev,
|
|
818
|
+
canScrollNext
|
|
819
|
+
},
|
|
820
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
821
|
+
onKeyDownCapture: handleKeyDown,
|
|
822
|
+
className: cn("relative", className),
|
|
823
|
+
role: "region",
|
|
824
|
+
"aria-roledescription": "carousel",
|
|
825
|
+
"data-slot": "carousel",
|
|
826
|
+
...props,
|
|
827
|
+
children
|
|
828
|
+
})
|
|
829
|
+
});
|
|
830
|
+
}
|
|
831
|
+
function CarouselContent({ className, ...props }) {
|
|
832
|
+
const { carouselRef, orientation } = useCarousel();
|
|
833
|
+
return /* @__PURE__ */ jsx("div", {
|
|
834
|
+
ref: carouselRef,
|
|
835
|
+
className: "overflow-hidden",
|
|
836
|
+
"data-slot": "carousel-content",
|
|
837
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
838
|
+
className: cn("flex", orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col", className),
|
|
839
|
+
...props
|
|
840
|
+
})
|
|
841
|
+
});
|
|
842
|
+
}
|
|
843
|
+
function CarouselItem({ className, ...props }) {
|
|
844
|
+
const { orientation } = useCarousel();
|
|
845
|
+
return /* @__PURE__ */ jsx("div", {
|
|
846
|
+
role: "group",
|
|
847
|
+
"aria-roledescription": "slide",
|
|
848
|
+
"data-slot": "carousel-item",
|
|
849
|
+
className: cn("min-w-0 shrink-0 grow-0 basis-full", orientation === "horizontal" ? "pl-4" : "pt-4", className),
|
|
850
|
+
...props
|
|
851
|
+
});
|
|
852
|
+
}
|
|
853
|
+
function CarouselPrevious({ className, variant = "outline", size = "icon-sm", ...props }) {
|
|
854
|
+
const { orientation, scrollPrev, canScrollPrev } = useCarousel();
|
|
855
|
+
return /* @__PURE__ */ jsxs(Button, {
|
|
856
|
+
"data-slot": "carousel-previous",
|
|
857
|
+
variant,
|
|
858
|
+
size,
|
|
859
|
+
className: cn("absolute touch-manipulation rounded-full", orientation === "horizontal" ? "inset-y-0 -left-12 my-auto" : "-top-12 left-1/2 -translate-x-1/2 rotate-90", className),
|
|
860
|
+
disabled: !canScrollPrev,
|
|
861
|
+
onClick: scrollPrev,
|
|
862
|
+
...props,
|
|
863
|
+
children: [/* @__PURE__ */ jsx(ChevronLeftIcon, {}), /* @__PURE__ */ jsx("span", {
|
|
864
|
+
className: "sr-only",
|
|
865
|
+
children: "Previous slide"
|
|
866
|
+
})]
|
|
867
|
+
});
|
|
868
|
+
}
|
|
869
|
+
function CarouselNext({ className, variant = "outline", size = "icon-sm", ...props }) {
|
|
870
|
+
const { orientation, scrollNext, canScrollNext } = useCarousel();
|
|
871
|
+
return /* @__PURE__ */ jsxs(Button, {
|
|
872
|
+
"data-slot": "carousel-next",
|
|
873
|
+
variant,
|
|
874
|
+
size,
|
|
875
|
+
className: cn("absolute touch-manipulation rounded-full", orientation === "horizontal" ? "inset-y-0 -right-12 my-auto" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90", className),
|
|
876
|
+
disabled: !canScrollNext,
|
|
877
|
+
onClick: scrollNext,
|
|
878
|
+
...props,
|
|
879
|
+
children: [/* @__PURE__ */ jsx(ChevronRightIcon, {}), /* @__PURE__ */ jsx("span", {
|
|
880
|
+
className: "sr-only",
|
|
881
|
+
children: "Next slide"
|
|
882
|
+
})]
|
|
883
|
+
});
|
|
884
|
+
}
|
|
885
|
+
//#endregion
|
|
886
|
+
//#region src/components/ui/chart.tsx
|
|
887
|
+
const THEMES = {
|
|
888
|
+
light: "",
|
|
889
|
+
dark: ".dark"
|
|
890
|
+
};
|
|
891
|
+
const INITIAL_DIMENSION = {
|
|
892
|
+
width: 320,
|
|
893
|
+
height: 200
|
|
894
|
+
};
|
|
895
|
+
const ChartContext = React.createContext(null);
|
|
896
|
+
function useChart() {
|
|
897
|
+
const context = React.useContext(ChartContext);
|
|
898
|
+
if (!context) throw new Error("useChart must be used within a <ChartContainer />");
|
|
899
|
+
return context;
|
|
900
|
+
}
|
|
901
|
+
function ChartContainer({ id, className, children, config, initialDimension = INITIAL_DIMENSION, ...props }) {
|
|
902
|
+
const uniqueId = React.useId();
|
|
903
|
+
const chartId = `chart-${id ?? uniqueId.replace(/:/g, "")}`;
|
|
904
|
+
return /* @__PURE__ */ jsx(ChartContext.Provider, {
|
|
905
|
+
value: { config },
|
|
906
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
907
|
+
"data-slot": "chart",
|
|
908
|
+
"data-chart": chartId,
|
|
909
|
+
className: cn("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden", className),
|
|
910
|
+
...props,
|
|
911
|
+
children: [/* @__PURE__ */ jsx(ChartStyle, {
|
|
912
|
+
id: chartId,
|
|
913
|
+
config
|
|
914
|
+
}), /* @__PURE__ */ jsx(RechartsPrimitive.ResponsiveContainer, {
|
|
915
|
+
initialDimension,
|
|
916
|
+
children
|
|
917
|
+
})]
|
|
918
|
+
})
|
|
919
|
+
});
|
|
920
|
+
}
|
|
921
|
+
const ChartStyle = ({ id, config }) => {
|
|
922
|
+
const colorConfig = Object.entries(config).filter(([, config]) => config.theme ?? config.color);
|
|
923
|
+
if (!colorConfig.length) return null;
|
|
924
|
+
return /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: Object.entries(THEMES).map(([theme, prefix]) => `
|
|
925
|
+
${prefix} [data-chart=${id}] {
|
|
926
|
+
${colorConfig.map(([key, itemConfig]) => {
|
|
927
|
+
const color = itemConfig.theme?.[theme] ?? itemConfig.color;
|
|
928
|
+
return color ? ` --color-${key}: ${color};` : null;
|
|
929
|
+
}).join("\n")}
|
|
930
|
+
}
|
|
931
|
+
`).join("\n") } });
|
|
932
|
+
};
|
|
933
|
+
const ChartTooltip = RechartsPrimitive.Tooltip;
|
|
934
|
+
function ChartTooltipContent({ active, payload, className, indicator = "dot", hideLabel = false, hideIndicator = false, label, labelFormatter, labelClassName, formatter, color, nameKey, labelKey }) {
|
|
935
|
+
const { config } = useChart();
|
|
936
|
+
const tooltipLabel = React.useMemo(() => {
|
|
937
|
+
if (hideLabel || !payload?.length) return null;
|
|
938
|
+
const [item] = payload;
|
|
939
|
+
const key = `${labelKey ?? item?.dataKey ?? item?.name ?? "value"}`;
|
|
940
|
+
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
941
|
+
const value = !labelKey && typeof label === "string" ? config[label]?.label ?? label : itemConfig?.label;
|
|
942
|
+
if (labelFormatter) return /* @__PURE__ */ jsx("div", {
|
|
943
|
+
className: cn("font-medium", labelClassName),
|
|
944
|
+
children: labelFormatter(value, payload)
|
|
945
|
+
});
|
|
946
|
+
if (!value) return null;
|
|
947
|
+
return /* @__PURE__ */ jsx("div", {
|
|
948
|
+
className: cn("font-medium", labelClassName),
|
|
949
|
+
children: value
|
|
950
|
+
});
|
|
951
|
+
}, [
|
|
952
|
+
label,
|
|
953
|
+
labelFormatter,
|
|
954
|
+
payload,
|
|
955
|
+
hideLabel,
|
|
956
|
+
labelClassName,
|
|
957
|
+
config,
|
|
958
|
+
labelKey
|
|
959
|
+
]);
|
|
960
|
+
if (!active || !payload?.length) return null;
|
|
961
|
+
const nestLabel = payload.length === 1 && indicator !== "dot";
|
|
962
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
963
|
+
className: cn("grid min-w-32 items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl", className),
|
|
964
|
+
children: [!nestLabel ? tooltipLabel : null, /* @__PURE__ */ jsx("div", {
|
|
965
|
+
className: "grid gap-1.5",
|
|
966
|
+
children: payload.filter((item) => item.type !== "none").map((item, index) => {
|
|
967
|
+
const key = `${nameKey ?? item.name ?? item.dataKey ?? "value"}`;
|
|
968
|
+
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
969
|
+
const indicatorColor = color ?? item.payload?.fill ?? item.color;
|
|
970
|
+
return /* @__PURE__ */ jsx("div", {
|
|
971
|
+
className: cn("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground", indicator === "dot" && "items-center"),
|
|
972
|
+
children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs(Fragment, { children: [itemConfig?.icon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx("div", {
|
|
973
|
+
className: cn("shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)", {
|
|
974
|
+
"h-2.5 w-2.5": indicator === "dot",
|
|
975
|
+
"w-1": indicator === "line",
|
|
976
|
+
"w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
|
|
977
|
+
"my-0.5": nestLabel && indicator === "dashed"
|
|
978
|
+
}),
|
|
979
|
+
style: {
|
|
980
|
+
"--color-bg": indicatorColor,
|
|
981
|
+
"--color-border": indicatorColor
|
|
982
|
+
}
|
|
983
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
984
|
+
className: cn("flex flex-1 justify-between leading-none", nestLabel ? "items-end" : "items-center"),
|
|
985
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
986
|
+
className: "grid gap-1.5",
|
|
987
|
+
children: [nestLabel ? tooltipLabel : null, /* @__PURE__ */ jsx("span", {
|
|
988
|
+
className: "text-muted-foreground",
|
|
989
|
+
children: itemConfig?.label ?? item.name
|
|
990
|
+
})]
|
|
991
|
+
}), item.value != null && /* @__PURE__ */ jsx("span", {
|
|
992
|
+
className: "font-mono font-medium text-foreground tabular-nums",
|
|
993
|
+
children: typeof item.value === "number" ? item.value.toLocaleString() : String(item.value)
|
|
994
|
+
})]
|
|
995
|
+
})] })
|
|
996
|
+
}, index);
|
|
997
|
+
})
|
|
998
|
+
})]
|
|
999
|
+
});
|
|
1000
|
+
}
|
|
1001
|
+
const ChartLegend = RechartsPrimitive.Legend;
|
|
1002
|
+
function ChartLegendContent({ className, hideIcon = false, payload, verticalAlign = "bottom", nameKey }) {
|
|
1003
|
+
const { config } = useChart();
|
|
1004
|
+
if (!payload?.length) return null;
|
|
1005
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1006
|
+
className: cn("flex items-center justify-center gap-4", verticalAlign === "top" ? "pb-3" : "pt-3", className),
|
|
1007
|
+
children: payload.filter((item) => item.type !== "none").map((item, index) => {
|
|
1008
|
+
const key = `${nameKey ?? item.dataKey ?? "value"}`;
|
|
1009
|
+
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
1010
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
1011
|
+
className: cn("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"),
|
|
1012
|
+
children: [itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsx("div", {
|
|
1013
|
+
className: "h-2 w-2 shrink-0 rounded-[2px]",
|
|
1014
|
+
style: { backgroundColor: item.color }
|
|
1015
|
+
}), itemConfig?.label]
|
|
1016
|
+
}, index);
|
|
1017
|
+
})
|
|
1018
|
+
});
|
|
1019
|
+
}
|
|
1020
|
+
function getPayloadConfigFromPayload(config, payload, key) {
|
|
1021
|
+
if (typeof payload !== "object" || payload === null) return;
|
|
1022
|
+
const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
|
|
1023
|
+
let configLabelKey = key;
|
|
1024
|
+
if (key in payload && typeof payload[key] === "string") configLabelKey = payload[key];
|
|
1025
|
+
else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") configLabelKey = payloadPayload[key];
|
|
1026
|
+
return configLabelKey in config ? config[configLabelKey] : config[key];
|
|
1027
|
+
}
|
|
1028
|
+
//#endregion
|
|
1029
|
+
//#region src/components/ui/checkbox.tsx
|
|
1030
|
+
function Checkbox({ className, ...props }) {
|
|
1031
|
+
return /* @__PURE__ */ jsx(Checkbox$1.Root, {
|
|
1032
|
+
"data-slot": "checkbox",
|
|
1033
|
+
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),
|
|
1034
|
+
...props,
|
|
1035
|
+
children: /* @__PURE__ */ jsx(Checkbox$1.Indicator, {
|
|
1036
|
+
"data-slot": "checkbox-indicator",
|
|
1037
|
+
className: "grid place-content-center text-current transition-none [&>svg]:size-3.5",
|
|
1038
|
+
children: /* @__PURE__ */ jsx(CheckIcon, {})
|
|
1039
|
+
})
|
|
1040
|
+
});
|
|
1041
|
+
}
|
|
1042
|
+
//#endregion
|
|
1043
|
+
//#region src/components/ui/collapsible.tsx
|
|
1044
|
+
function Collapsible({ ...props }) {
|
|
1045
|
+
return /* @__PURE__ */ jsx(Collapsible$1.Root, {
|
|
1046
|
+
"data-slot": "collapsible",
|
|
1047
|
+
...props
|
|
1048
|
+
});
|
|
1049
|
+
}
|
|
1050
|
+
function CollapsibleTrigger({ ...props }) {
|
|
1051
|
+
return /* @__PURE__ */ jsx(Collapsible$1.Trigger, {
|
|
1052
|
+
"data-slot": "collapsible-trigger",
|
|
1053
|
+
...props
|
|
1054
|
+
});
|
|
1055
|
+
}
|
|
1056
|
+
function CollapsibleContent({ ...props }) {
|
|
1057
|
+
return /* @__PURE__ */ jsx(Collapsible$1.Panel, {
|
|
1058
|
+
"data-slot": "collapsible-content",
|
|
1059
|
+
...props
|
|
1060
|
+
});
|
|
1061
|
+
}
|
|
1062
|
+
//#endregion
|
|
1063
|
+
//#region src/components/ui/input.tsx
|
|
1064
|
+
function Input({ className, type, ...props }) {
|
|
1065
|
+
return /* @__PURE__ */ jsx(Input$1, {
|
|
1066
|
+
type,
|
|
1067
|
+
"data-slot": "input",
|
|
1068
|
+
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),
|
|
1069
|
+
...props
|
|
1070
|
+
});
|
|
1071
|
+
}
|
|
1072
|
+
//#endregion
|
|
1073
|
+
//#region src/components/ui/textarea.tsx
|
|
1074
|
+
function Textarea({ className, ...props }) {
|
|
1075
|
+
return /* @__PURE__ */ jsx("textarea", {
|
|
1076
|
+
"data-slot": "textarea",
|
|
1077
|
+
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),
|
|
1078
|
+
...props
|
|
1079
|
+
});
|
|
1080
|
+
}
|
|
1081
|
+
//#endregion
|
|
1082
|
+
//#region src/components/ui/input-group.tsx
|
|
1083
|
+
function InputGroup({ className, ...props }) {
|
|
1084
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1085
|
+
"data-slot": "input-group",
|
|
1086
|
+
role: "group",
|
|
1087
|
+
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),
|
|
1088
|
+
...props
|
|
1089
|
+
});
|
|
1090
|
+
}
|
|
1091
|
+
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", {
|
|
1092
|
+
variants: { align: {
|
|
1093
|
+
"inline-start": "order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]",
|
|
1094
|
+
"inline-end": "order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]",
|
|
1095
|
+
"block-start": "order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2",
|
|
1096
|
+
"block-end": "order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2"
|
|
1097
|
+
} },
|
|
1098
|
+
defaultVariants: { align: "inline-start" }
|
|
1099
|
+
});
|
|
1100
|
+
function InputGroupAddon({ className, align = "inline-start", ...props }) {
|
|
1101
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1102
|
+
role: "group",
|
|
1103
|
+
"data-slot": "input-group-addon",
|
|
1104
|
+
"data-align": align,
|
|
1105
|
+
className: cn(inputGroupAddonVariants({ align }), className),
|
|
1106
|
+
onClick: (e) => {
|
|
1107
|
+
if (e.target.closest("button")) return;
|
|
1108
|
+
e.currentTarget.parentElement?.querySelector("input")?.focus();
|
|
1109
|
+
},
|
|
1110
|
+
...props
|
|
1111
|
+
});
|
|
1112
|
+
}
|
|
1113
|
+
const inputGroupButtonVariants = cva("flex items-center gap-2 text-sm shadow-none", {
|
|
1114
|
+
variants: { size: {
|
|
1115
|
+
xs: "h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
|
|
1116
|
+
sm: "",
|
|
1117
|
+
"icon-xs": "size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0",
|
|
1118
|
+
"icon-sm": "size-8 p-0 has-[>svg]:p-0"
|
|
1119
|
+
} },
|
|
1120
|
+
defaultVariants: { size: "xs" }
|
|
1121
|
+
});
|
|
1122
|
+
function InputGroupButton({ className, type = "button", variant = "ghost", size = "xs", ...props }) {
|
|
1123
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
1124
|
+
type,
|
|
1125
|
+
"data-size": size,
|
|
1126
|
+
variant,
|
|
1127
|
+
className: cn(inputGroupButtonVariants({ size }), className),
|
|
1128
|
+
...props
|
|
1129
|
+
});
|
|
1130
|
+
}
|
|
1131
|
+
function InputGroupText({ className, ...props }) {
|
|
1132
|
+
return /* @__PURE__ */ jsx("span", {
|
|
1133
|
+
className: cn("flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", className),
|
|
1134
|
+
...props
|
|
1135
|
+
});
|
|
1136
|
+
}
|
|
1137
|
+
function InputGroupInput({ className, ...props }) {
|
|
1138
|
+
return /* @__PURE__ */ jsx(Input, {
|
|
1139
|
+
"data-slot": "input-group-control",
|
|
1140
|
+
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),
|
|
1141
|
+
...props
|
|
1142
|
+
});
|
|
1143
|
+
}
|
|
1144
|
+
function InputGroupTextarea({ className, ...props }) {
|
|
1145
|
+
return /* @__PURE__ */ jsx(Textarea, {
|
|
1146
|
+
"data-slot": "input-group-control",
|
|
1147
|
+
className: cn("flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent", className),
|
|
1148
|
+
...props
|
|
1149
|
+
});
|
|
1150
|
+
}
|
|
1151
|
+
//#endregion
|
|
1152
|
+
//#region src/components/ui/combobox.tsx
|
|
1153
|
+
const Combobox = Combobox$1.Root;
|
|
1154
|
+
function ComboboxValue({ ...props }) {
|
|
1155
|
+
return /* @__PURE__ */ jsx(Combobox$1.Value, {
|
|
1156
|
+
"data-slot": "combobox-value",
|
|
1157
|
+
...props
|
|
1158
|
+
});
|
|
1159
|
+
}
|
|
1160
|
+
function ComboboxTrigger({ className, children, ...props }) {
|
|
1161
|
+
return /* @__PURE__ */ jsxs(Combobox$1.Trigger, {
|
|
1162
|
+
"data-slot": "combobox-trigger",
|
|
1163
|
+
className: cn("[&_svg:not([class*='size-'])]:size-4", className),
|
|
1164
|
+
...props,
|
|
1165
|
+
children: [children, /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" })]
|
|
1166
|
+
});
|
|
1167
|
+
}
|
|
1168
|
+
function ComboboxClear({ className, ...props }) {
|
|
1169
|
+
return /* @__PURE__ */ jsx(Combobox$1.Clear, {
|
|
1170
|
+
"data-slot": "combobox-clear",
|
|
1171
|
+
render: /* @__PURE__ */ jsx(InputGroupButton, {
|
|
1172
|
+
variant: "ghost",
|
|
1173
|
+
size: "icon-xs"
|
|
1174
|
+
}),
|
|
1175
|
+
className: cn(className),
|
|
1176
|
+
...props,
|
|
1177
|
+
children: /* @__PURE__ */ jsx(XIcon, { className: "pointer-events-none" })
|
|
1178
|
+
});
|
|
1179
|
+
}
|
|
1180
|
+
function ComboboxInput({ className, children, disabled = false, showTrigger = true, showClear = false, ...props }) {
|
|
1181
|
+
return /* @__PURE__ */ jsxs(InputGroup, {
|
|
1182
|
+
className: cn("w-auto", className),
|
|
1183
|
+
children: [
|
|
1184
|
+
/* @__PURE__ */ jsx(Combobox$1.Input, {
|
|
1185
|
+
render: /* @__PURE__ */ jsx(InputGroupInput, { disabled }),
|
|
1186
|
+
...props
|
|
1187
|
+
}),
|
|
1188
|
+
/* @__PURE__ */ jsxs(InputGroupAddon, {
|
|
1189
|
+
align: "inline-end",
|
|
1190
|
+
children: [showTrigger && /* @__PURE__ */ jsx(InputGroupButton, {
|
|
1191
|
+
size: "icon-xs",
|
|
1192
|
+
variant: "ghost",
|
|
1193
|
+
render: /* @__PURE__ */ jsx(ComboboxTrigger, {}),
|
|
1194
|
+
"data-slot": "input-group-button",
|
|
1195
|
+
className: "group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent",
|
|
1196
|
+
disabled
|
|
1197
|
+
}), showClear && /* @__PURE__ */ jsx(ComboboxClear, { disabled })]
|
|
1198
|
+
}),
|
|
1199
|
+
children
|
|
1200
|
+
]
|
|
1201
|
+
});
|
|
1202
|
+
}
|
|
1203
|
+
function ComboboxContent({ className, side = "bottom", sideOffset = 6, align = "start", alignOffset = 0, anchor, ...props }) {
|
|
1204
|
+
return /* @__PURE__ */ jsx(Combobox$1.Portal, { children: /* @__PURE__ */ jsx(Combobox$1.Positioner, {
|
|
1205
|
+
side,
|
|
1206
|
+
sideOffset,
|
|
1207
|
+
align,
|
|
1208
|
+
alignOffset,
|
|
1209
|
+
anchor,
|
|
1210
|
+
className: "isolate z-50",
|
|
1211
|
+
children: /* @__PURE__ */ jsx(Combobox$1.Popup, {
|
|
1212
|
+
"data-slot": "combobox-content",
|
|
1213
|
+
"data-chips": !!anchor,
|
|
1214
|
+
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),
|
|
1215
|
+
...props
|
|
1216
|
+
})
|
|
1217
|
+
}) });
|
|
1218
|
+
}
|
|
1219
|
+
function ComboboxList({ className, ...props }) {
|
|
1220
|
+
return /* @__PURE__ */ jsx(Combobox$1.List, {
|
|
1221
|
+
"data-slot": "combobox-list",
|
|
1222
|
+
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),
|
|
1223
|
+
...props
|
|
1224
|
+
});
|
|
1225
|
+
}
|
|
1226
|
+
function ComboboxItem({ className, children, ...props }) {
|
|
1227
|
+
return /* @__PURE__ */ jsxs(Combobox$1.Item, {
|
|
1228
|
+
"data-slot": "combobox-item",
|
|
1229
|
+
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),
|
|
1230
|
+
...props,
|
|
1231
|
+
children: [children, /* @__PURE__ */ jsx(Combobox$1.ItemIndicator, {
|
|
1232
|
+
render: /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
|
|
1233
|
+
children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" })
|
|
1234
|
+
})]
|
|
1235
|
+
});
|
|
1236
|
+
}
|
|
1237
|
+
function ComboboxGroup({ className, ...props }) {
|
|
1238
|
+
return /* @__PURE__ */ jsx(Combobox$1.Group, {
|
|
1239
|
+
"data-slot": "combobox-group",
|
|
1240
|
+
className: cn(className),
|
|
1241
|
+
...props
|
|
1242
|
+
});
|
|
1243
|
+
}
|
|
1244
|
+
function ComboboxLabel({ className, ...props }) {
|
|
1245
|
+
return /* @__PURE__ */ jsx(Combobox$1.GroupLabel, {
|
|
1246
|
+
"data-slot": "combobox-label",
|
|
1247
|
+
className: cn("px-2 py-1.5 text-xs text-muted-foreground", className),
|
|
1248
|
+
...props
|
|
1249
|
+
});
|
|
1250
|
+
}
|
|
1251
|
+
function ComboboxCollection({ ...props }) {
|
|
1252
|
+
return /* @__PURE__ */ jsx(Combobox$1.Collection, {
|
|
1253
|
+
"data-slot": "combobox-collection",
|
|
1254
|
+
...props
|
|
1255
|
+
});
|
|
1256
|
+
}
|
|
1257
|
+
function ComboboxEmpty({ className, ...props }) {
|
|
1258
|
+
return /* @__PURE__ */ jsx(Combobox$1.Empty, {
|
|
1259
|
+
"data-slot": "combobox-empty",
|
|
1260
|
+
className: cn("hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/combobox-content:flex", className),
|
|
1261
|
+
...props
|
|
1262
|
+
});
|
|
1263
|
+
}
|
|
1264
|
+
function ComboboxSeparator({ className, ...props }) {
|
|
1265
|
+
return /* @__PURE__ */ jsx(Combobox$1.Separator, {
|
|
1266
|
+
"data-slot": "combobox-separator",
|
|
1267
|
+
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
1268
|
+
...props
|
|
1269
|
+
});
|
|
1270
|
+
}
|
|
1271
|
+
function ComboboxChips({ className, ...props }) {
|
|
1272
|
+
return /* @__PURE__ */ jsx(Combobox$1.Chips, {
|
|
1273
|
+
"data-slot": "combobox-chips",
|
|
1274
|
+
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),
|
|
1275
|
+
...props
|
|
1276
|
+
});
|
|
1277
|
+
}
|
|
1278
|
+
function ComboboxChip({ className, children, showRemove = true, ...props }) {
|
|
1279
|
+
return /* @__PURE__ */ jsxs(Combobox$1.Chip, {
|
|
1280
|
+
"data-slot": "combobox-chip",
|
|
1281
|
+
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),
|
|
1282
|
+
...props,
|
|
1283
|
+
children: [children, showRemove && /* @__PURE__ */ jsx(Combobox$1.ChipRemove, {
|
|
1284
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
1285
|
+
variant: "ghost",
|
|
1286
|
+
size: "icon-xs"
|
|
1287
|
+
}),
|
|
1288
|
+
className: "-ml-1 opacity-50 hover:opacity-100",
|
|
1289
|
+
"data-slot": "combobox-chip-remove",
|
|
1290
|
+
children: /* @__PURE__ */ jsx(XIcon, { className: "pointer-events-none" })
|
|
1291
|
+
})]
|
|
1292
|
+
});
|
|
1293
|
+
}
|
|
1294
|
+
function ComboboxChipsInput({ className, ...props }) {
|
|
1295
|
+
return /* @__PURE__ */ jsx(Combobox$1.Input, {
|
|
1296
|
+
"data-slot": "combobox-chip-input",
|
|
1297
|
+
className: cn("min-w-16 flex-1 outline-none", className),
|
|
1298
|
+
...props
|
|
1299
|
+
});
|
|
1300
|
+
}
|
|
1301
|
+
function useComboboxAnchor() {
|
|
1302
|
+
return React.useRef(null);
|
|
1303
|
+
}
|
|
1304
|
+
//#endregion
|
|
1305
|
+
//#region src/components/ui/dialog.tsx
|
|
1306
|
+
function Dialog({ ...props }) {
|
|
1307
|
+
return /* @__PURE__ */ jsx(Dialog$1.Root, {
|
|
1308
|
+
"data-slot": "dialog",
|
|
1309
|
+
...props
|
|
1310
|
+
});
|
|
1311
|
+
}
|
|
1312
|
+
function DialogTrigger({ ...props }) {
|
|
1313
|
+
return /* @__PURE__ */ jsx(Dialog$1.Trigger, {
|
|
1314
|
+
"data-slot": "dialog-trigger",
|
|
1315
|
+
...props
|
|
1316
|
+
});
|
|
1317
|
+
}
|
|
1318
|
+
function DialogPortal({ ...props }) {
|
|
1319
|
+
return /* @__PURE__ */ jsx(Dialog$1.Portal, {
|
|
1320
|
+
"data-slot": "dialog-portal",
|
|
1321
|
+
...props
|
|
1322
|
+
});
|
|
1323
|
+
}
|
|
1324
|
+
function DialogClose({ ...props }) {
|
|
1325
|
+
return /* @__PURE__ */ jsx(Dialog$1.Close, {
|
|
1326
|
+
"data-slot": "dialog-close",
|
|
1327
|
+
...props
|
|
1328
|
+
});
|
|
1329
|
+
}
|
|
1330
|
+
function DialogOverlay({ className, ...props }) {
|
|
1331
|
+
return /* @__PURE__ */ jsx(Dialog$1.Backdrop, {
|
|
1332
|
+
"data-slot": "dialog-overlay",
|
|
1333
|
+
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),
|
|
1334
|
+
...props
|
|
1335
|
+
});
|
|
1336
|
+
}
|
|
1337
|
+
function DialogContent({ className, children, showCloseButton = true, ...props }) {
|
|
1338
|
+
return /* @__PURE__ */ jsxs(DialogPortal, { children: [/* @__PURE__ */ jsx(DialogOverlay, {}), /* @__PURE__ */ jsxs(Dialog$1.Popup, {
|
|
1339
|
+
"data-slot": "dialog-content",
|
|
1340
|
+
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),
|
|
1341
|
+
...props,
|
|
1342
|
+
children: [children, showCloseButton && /* @__PURE__ */ jsxs(Dialog$1.Close, {
|
|
1343
|
+
"data-slot": "dialog-close",
|
|
1344
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
1345
|
+
variant: "ghost",
|
|
1346
|
+
className: "absolute top-2 right-2",
|
|
1347
|
+
size: "icon-sm"
|
|
1348
|
+
}),
|
|
1349
|
+
children: [/* @__PURE__ */ jsx(XIcon, {}), /* @__PURE__ */ jsx("span", {
|
|
1350
|
+
className: "sr-only",
|
|
1351
|
+
children: "Close"
|
|
1352
|
+
})]
|
|
1353
|
+
})]
|
|
1354
|
+
})] });
|
|
1355
|
+
}
|
|
1356
|
+
function DialogHeader({ className, ...props }) {
|
|
1357
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1358
|
+
"data-slot": "dialog-header",
|
|
1359
|
+
className: cn("flex flex-col gap-2", className),
|
|
1360
|
+
...props
|
|
1361
|
+
});
|
|
1362
|
+
}
|
|
1363
|
+
function DialogFooter({ className, showCloseButton = false, children, ...props }) {
|
|
1364
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
1365
|
+
"data-slot": "dialog-footer",
|
|
1366
|
+
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),
|
|
1367
|
+
...props,
|
|
1368
|
+
children: [children, showCloseButton && /* @__PURE__ */ jsx(Dialog$1.Close, {
|
|
1369
|
+
render: /* @__PURE__ */ jsx(Button, { variant: "outline" }),
|
|
1370
|
+
children: "Close"
|
|
1371
|
+
})]
|
|
1372
|
+
});
|
|
1373
|
+
}
|
|
1374
|
+
function DialogTitle({ className, ...props }) {
|
|
1375
|
+
return /* @__PURE__ */ jsx(Dialog$1.Title, {
|
|
1376
|
+
"data-slot": "dialog-title",
|
|
1377
|
+
className: cn("font-heading text-base leading-none font-medium", className),
|
|
1378
|
+
...props
|
|
1379
|
+
});
|
|
1380
|
+
}
|
|
1381
|
+
function DialogDescription({ className, ...props }) {
|
|
1382
|
+
return /* @__PURE__ */ jsx(Dialog$1.Description, {
|
|
1383
|
+
"data-slot": "dialog-description",
|
|
1384
|
+
className: cn("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
|
|
1385
|
+
...props
|
|
1386
|
+
});
|
|
1387
|
+
}
|
|
1388
|
+
//#endregion
|
|
1389
|
+
//#region src/components/ui/command.tsx
|
|
1390
|
+
function Command({ className, ...props }) {
|
|
1391
|
+
return /* @__PURE__ */ jsx(Command$1, {
|
|
1392
|
+
"data-slot": "command",
|
|
1393
|
+
className: cn("flex size-full flex-col overflow-hidden rounded-xl! bg-popover p-1 text-popover-foreground", className),
|
|
1394
|
+
...props
|
|
1395
|
+
});
|
|
1396
|
+
}
|
|
1397
|
+
function CommandDialog({ title = "Command Palette", description = "Search for a command to run...", children, className, showCloseButton = false, ...props }) {
|
|
1398
|
+
return /* @__PURE__ */ jsxs(Dialog, {
|
|
1399
|
+
...props,
|
|
1400
|
+
children: [/* @__PURE__ */ jsxs(DialogHeader, {
|
|
1401
|
+
className: "sr-only",
|
|
1402
|
+
children: [/* @__PURE__ */ jsx(DialogTitle, { children: title }), /* @__PURE__ */ jsx(DialogDescription, { children: description })]
|
|
1403
|
+
}), /* @__PURE__ */ jsx(DialogContent, {
|
|
1404
|
+
className: cn("top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0", className),
|
|
1405
|
+
showCloseButton,
|
|
1406
|
+
children
|
|
1407
|
+
})]
|
|
1408
|
+
});
|
|
1409
|
+
}
|
|
1410
|
+
function CommandInput({ className, ...props }) {
|
|
1411
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1412
|
+
"data-slot": "command-input-wrapper",
|
|
1413
|
+
className: "p-1 pb-0",
|
|
1414
|
+
children: /* @__PURE__ */ jsxs(InputGroup, {
|
|
1415
|
+
className: "h-8! rounded-lg! border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:pl-2!",
|
|
1416
|
+
children: [/* @__PURE__ */ jsx(Command$1.Input, {
|
|
1417
|
+
"data-slot": "command-input",
|
|
1418
|
+
className: cn("w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", className),
|
|
1419
|
+
...props
|
|
1420
|
+
}), /* @__PURE__ */ jsx(InputGroupAddon, { children: /* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }) })]
|
|
1421
|
+
})
|
|
1422
|
+
});
|
|
1423
|
+
}
|
|
1424
|
+
function CommandList({ className, ...props }) {
|
|
1425
|
+
return /* @__PURE__ */ jsx(Command$1.List, {
|
|
1426
|
+
"data-slot": "command-list",
|
|
1427
|
+
className: cn("no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none", className),
|
|
1428
|
+
...props
|
|
1429
|
+
});
|
|
1430
|
+
}
|
|
1431
|
+
function CommandEmpty({ className, ...props }) {
|
|
1432
|
+
return /* @__PURE__ */ jsx(Command$1.Empty, {
|
|
1433
|
+
"data-slot": "command-empty",
|
|
1434
|
+
className: cn("py-6 text-center text-sm", className),
|
|
1435
|
+
...props
|
|
1436
|
+
});
|
|
1437
|
+
}
|
|
1438
|
+
function CommandGroup({ className, ...props }) {
|
|
1439
|
+
return /* @__PURE__ */ jsx(Command$1.Group, {
|
|
1440
|
+
"data-slot": "command-group",
|
|
1441
|
+
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),
|
|
1442
|
+
...props
|
|
1443
|
+
});
|
|
1444
|
+
}
|
|
1445
|
+
function CommandSeparator({ className, ...props }) {
|
|
1446
|
+
return /* @__PURE__ */ jsx(Command$1.Separator, {
|
|
1447
|
+
"data-slot": "command-separator",
|
|
1448
|
+
className: cn("-mx-1 h-px bg-border", className),
|
|
1449
|
+
...props
|
|
1450
|
+
});
|
|
1451
|
+
}
|
|
1452
|
+
function CommandItem({ className, children, ...props }) {
|
|
1453
|
+
return /* @__PURE__ */ jsxs(Command$1.Item, {
|
|
1454
|
+
"data-slot": "command-item",
|
|
1455
|
+
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),
|
|
1456
|
+
...props,
|
|
1457
|
+
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" })]
|
|
1458
|
+
});
|
|
1459
|
+
}
|
|
1460
|
+
function CommandShortcut({ className, ...props }) {
|
|
1461
|
+
return /* @__PURE__ */ jsx("span", {
|
|
1462
|
+
"data-slot": "command-shortcut",
|
|
1463
|
+
className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground", className),
|
|
1464
|
+
...props
|
|
1465
|
+
});
|
|
1466
|
+
}
|
|
1467
|
+
//#endregion
|
|
1468
|
+
//#region src/components/ui/context-menu.tsx
|
|
1469
|
+
function ContextMenu({ ...props }) {
|
|
1470
|
+
return /* @__PURE__ */ jsx(ContextMenu$1.Root, {
|
|
1471
|
+
"data-slot": "context-menu",
|
|
1472
|
+
...props
|
|
1473
|
+
});
|
|
1474
|
+
}
|
|
1475
|
+
function ContextMenuPortal({ ...props }) {
|
|
1476
|
+
return /* @__PURE__ */ jsx(ContextMenu$1.Portal, {
|
|
1477
|
+
"data-slot": "context-menu-portal",
|
|
1478
|
+
...props
|
|
1479
|
+
});
|
|
1480
|
+
}
|
|
1481
|
+
function ContextMenuTrigger({ className, ...props }) {
|
|
1482
|
+
return /* @__PURE__ */ jsx(ContextMenu$1.Trigger, {
|
|
1483
|
+
"data-slot": "context-menu-trigger",
|
|
1484
|
+
className: cn("select-none", className),
|
|
1485
|
+
...props
|
|
1486
|
+
});
|
|
1487
|
+
}
|
|
1488
|
+
function ContextMenuContent({ className, align = "start", alignOffset = 4, side = "right", sideOffset = 0, ...props }) {
|
|
1489
|
+
return /* @__PURE__ */ jsx(ContextMenu$1.Portal, { children: /* @__PURE__ */ jsx(ContextMenu$1.Positioner, {
|
|
1490
|
+
className: "isolate z-50 outline-none",
|
|
1491
|
+
align,
|
|
1492
|
+
alignOffset,
|
|
1493
|
+
side,
|
|
1494
|
+
sideOffset,
|
|
1495
|
+
children: /* @__PURE__ */ jsx(ContextMenu$1.Popup, {
|
|
1496
|
+
"data-slot": "context-menu-content",
|
|
1497
|
+
className: cn("z-50 max-h-(--available-height) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-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),
|
|
1498
|
+
...props
|
|
1499
|
+
})
|
|
1500
|
+
}) });
|
|
1501
|
+
}
|
|
1502
|
+
function ContextMenuGroup({ ...props }) {
|
|
1503
|
+
return /* @__PURE__ */ jsx(ContextMenu$1.Group, {
|
|
1504
|
+
"data-slot": "context-menu-group",
|
|
1505
|
+
...props
|
|
1506
|
+
});
|
|
1507
|
+
}
|
|
1508
|
+
function ContextMenuLabel({ className, inset, ...props }) {
|
|
1509
|
+
return /* @__PURE__ */ jsx(ContextMenu$1.GroupLabel, {
|
|
1510
|
+
"data-slot": "context-menu-label",
|
|
1511
|
+
"data-inset": inset,
|
|
1512
|
+
className: cn("px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7", className),
|
|
1513
|
+
...props
|
|
1514
|
+
});
|
|
1515
|
+
}
|
|
1516
|
+
function ContextMenuItem({ className, inset, variant = "default", ...props }) {
|
|
1517
|
+
return /* @__PURE__ */ jsx(ContextMenu$1.Item, {
|
|
1518
|
+
"data-slot": "context-menu-item",
|
|
1519
|
+
"data-inset": inset,
|
|
1520
|
+
"data-variant": variant,
|
|
1521
|
+
className: cn("group/context-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 focus:*:[svg]:text-accent-foreground data-[variant=destructive]:*:[svg]:text-destructive", className),
|
|
1522
|
+
...props
|
|
1523
|
+
});
|
|
1524
|
+
}
|
|
1525
|
+
function ContextMenuSub({ ...props }) {
|
|
1526
|
+
return /* @__PURE__ */ jsx(ContextMenu$1.SubmenuRoot, {
|
|
1527
|
+
"data-slot": "context-menu-sub",
|
|
1528
|
+
...props
|
|
1529
|
+
});
|
|
1530
|
+
}
|
|
1531
|
+
function ContextMenuSubTrigger({ className, inset, children, ...props }) {
|
|
1532
|
+
return /* @__PURE__ */ jsxs(ContextMenu$1.SubmenuTrigger, {
|
|
1533
|
+
"data-slot": "context-menu-sub-trigger",
|
|
1534
|
+
"data-inset": inset,
|
|
1535
|
+
className: cn("flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
1536
|
+
...props,
|
|
1537
|
+
children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })]
|
|
1538
|
+
});
|
|
1539
|
+
}
|
|
1540
|
+
function ContextMenuSubContent({ ...props }) {
|
|
1541
|
+
return /* @__PURE__ */ jsx(ContextMenuContent, {
|
|
1542
|
+
"data-slot": "context-menu-sub-content",
|
|
1543
|
+
className: "shadow-lg",
|
|
1544
|
+
side: "right",
|
|
1545
|
+
...props
|
|
1546
|
+
});
|
|
1547
|
+
}
|
|
1548
|
+
function ContextMenuCheckboxItem({ className, children, checked, inset, ...props }) {
|
|
1549
|
+
return /* @__PURE__ */ jsxs(ContextMenu$1.CheckboxItem, {
|
|
1550
|
+
"data-slot": "context-menu-checkbox-item",
|
|
1551
|
+
"data-inset": inset,
|
|
1552
|
+
className: cn("relative flex 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 data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
1553
|
+
checked,
|
|
1554
|
+
...props,
|
|
1555
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
1556
|
+
className: "pointer-events-none absolute right-2",
|
|
1557
|
+
children: /* @__PURE__ */ jsx(ContextMenu$1.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
|
|
1558
|
+
}), children]
|
|
1559
|
+
});
|
|
1560
|
+
}
|
|
1561
|
+
function ContextMenuRadioGroup({ ...props }) {
|
|
1562
|
+
return /* @__PURE__ */ jsx(ContextMenu$1.RadioGroup, {
|
|
1563
|
+
"data-slot": "context-menu-radio-group",
|
|
1564
|
+
...props
|
|
1565
|
+
});
|
|
1566
|
+
}
|
|
1567
|
+
function ContextMenuRadioItem({ className, children, inset, ...props }) {
|
|
1568
|
+
return /* @__PURE__ */ jsxs(ContextMenu$1.RadioItem, {
|
|
1569
|
+
"data-slot": "context-menu-radio-item",
|
|
1570
|
+
"data-inset": inset,
|
|
1571
|
+
className: cn("relative flex 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 data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
1572
|
+
...props,
|
|
1573
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
1574
|
+
className: "pointer-events-none absolute right-2",
|
|
1575
|
+
children: /* @__PURE__ */ jsx(ContextMenu$1.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
|
|
1576
|
+
}), children]
|
|
1577
|
+
});
|
|
1578
|
+
}
|
|
1579
|
+
function ContextMenuSeparator({ className, ...props }) {
|
|
1580
|
+
return /* @__PURE__ */ jsx(ContextMenu$1.Separator, {
|
|
1581
|
+
"data-slot": "context-menu-separator",
|
|
1582
|
+
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
1583
|
+
...props
|
|
1584
|
+
});
|
|
1585
|
+
}
|
|
1586
|
+
function ContextMenuShortcut({ className, ...props }) {
|
|
1587
|
+
return /* @__PURE__ */ jsx("span", {
|
|
1588
|
+
"data-slot": "context-menu-shortcut",
|
|
1589
|
+
className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/context-menu-item:text-accent-foreground", className),
|
|
1590
|
+
...props
|
|
1591
|
+
});
|
|
1592
|
+
}
|
|
1593
|
+
//#endregion
|
|
1594
|
+
//#region src/components/ui/drawer.tsx
|
|
1595
|
+
const DrawerContext = React.createContext(null);
|
|
1596
|
+
function useDrawer() {
|
|
1597
|
+
const context = React.useContext(DrawerContext);
|
|
1598
|
+
if (!context) throw new Error("useDrawer must be used within a Drawer.");
|
|
1599
|
+
return context;
|
|
1600
|
+
}
|
|
1601
|
+
function Drawer({ modal = true, showSwipeHandle = false, snapPoints, swipeDirection = "down", ...props }) {
|
|
1602
|
+
const hasSnapPoints = snapPoints != null && snapPoints.length > 0;
|
|
1603
|
+
const contextValue = React.useMemo(() => ({
|
|
1604
|
+
hasSnapPoints,
|
|
1605
|
+
modal,
|
|
1606
|
+
showSwipeHandle,
|
|
1607
|
+
swipeDirection
|
|
1608
|
+
}), [
|
|
1609
|
+
hasSnapPoints,
|
|
1610
|
+
modal,
|
|
1611
|
+
showSwipeHandle,
|
|
1612
|
+
swipeDirection
|
|
1613
|
+
]);
|
|
1614
|
+
return /* @__PURE__ */ jsx(DrawerContext.Provider, {
|
|
1615
|
+
value: contextValue,
|
|
1616
|
+
children: /* @__PURE__ */ jsx(Drawer$1.Root, {
|
|
1617
|
+
"data-slot": "drawer",
|
|
1618
|
+
modal,
|
|
1619
|
+
snapPoints,
|
|
1620
|
+
swipeDirection,
|
|
1621
|
+
...props
|
|
1622
|
+
})
|
|
1623
|
+
});
|
|
1624
|
+
}
|
|
1625
|
+
function DrawerTrigger({ ...props }) {
|
|
1626
|
+
return /* @__PURE__ */ jsx(Drawer$1.Trigger, {
|
|
1627
|
+
"data-slot": "drawer-trigger",
|
|
1628
|
+
...props
|
|
1629
|
+
});
|
|
1630
|
+
}
|
|
1631
|
+
function DrawerPortal({ ...props }) {
|
|
1632
|
+
return /* @__PURE__ */ jsx(Drawer$1.Portal, {
|
|
1633
|
+
"data-slot": "drawer-portal",
|
|
1634
|
+
...props
|
|
1635
|
+
});
|
|
1636
|
+
}
|
|
1637
|
+
function DrawerClose({ ...props }) {
|
|
1638
|
+
return /* @__PURE__ */ jsx(Drawer$1.Close, {
|
|
1639
|
+
"data-slot": "drawer-close",
|
|
1640
|
+
...props
|
|
1641
|
+
});
|
|
1642
|
+
}
|
|
1643
|
+
function DrawerOverlay({ className, ...props }) {
|
|
1644
|
+
return /* @__PURE__ */ jsx(Drawer$1.Backdrop, {
|
|
1645
|
+
"data-slot": "drawer-overlay",
|
|
1646
|
+
className: cn("fixed inset-0 z-50 min-h-dvh bg-black/10 opacity-[max(var(--drawer-overlay-min-opacity,0),calc(1-var(--drawer-swipe-progress)))] transition-opacity duration-450 ease-[cubic-bezier(0.32,0.72,0,1)] select-none data-ending-style:pointer-events-none data-ending-style:opacity-0 data-ending-style:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-snap-points:[--drawer-overlay-min-opacity:0.5] data-starting-style:opacity-0 data-swiping:duration-0 supports-backdrop-filter:backdrop-blur-xs supports-[-webkit-touch-callout:none]:absolute", className),
|
|
1647
|
+
...props
|
|
1648
|
+
});
|
|
1649
|
+
}
|
|
1650
|
+
function DrawerSwipeHandle({ className, ...props }) {
|
|
1651
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1652
|
+
"data-slot": "drawer-swipe-handle",
|
|
1653
|
+
"aria-hidden": "true",
|
|
1654
|
+
className: cn("relative z-10 flex shrink-0 cursor-grab transition-opacity duration-200 group-data-nested-drawer-open/drawer-popup:opacity-0 group-data-nested-drawer-swiping/drawer-popup:opacity-100 group-data-[swipe-axis=x]/drawer-popup:h-full group-data-[swipe-axis=x]/drawer-popup:w-3 group-data-[swipe-axis=x]/drawer-popup:items-center group-data-[swipe-axis=y]/drawer-popup:h-3 group-data-[swipe-axis=y]/drawer-popup:w-full group-data-[swipe-axis=y]/drawer-popup:justify-center group-data-[swipe-direction=down]/drawer-popup:items-end group-data-[swipe-direction=left]/drawer-popup:order-last group-data-[swipe-direction=left]/drawer-popup:justify-start group-data-[swipe-direction=right]/drawer-popup:justify-end group-data-[swipe-direction=up]/drawer-popup:order-last group-data-[swipe-direction=up]/drawer-popup:items-start after:block after:shrink-0 after:rounded-full after:bg-muted group-data-[swipe-axis=x]/drawer-popup:after:h-24 group-data-[swipe-axis=x]/drawer-popup:after:w-1 group-data-[swipe-axis=y]/drawer-popup:after:h-1 group-data-[swipe-axis=y]/drawer-popup:after:w-24 active:cursor-grabbing", className),
|
|
1655
|
+
...props
|
|
1656
|
+
});
|
|
1657
|
+
}
|
|
1658
|
+
function DrawerContent({ className, children, ...props }) {
|
|
1659
|
+
const { hasSnapPoints, modal, showSwipeHandle, swipeDirection } = useDrawer();
|
|
1660
|
+
const swipeAxis = swipeDirection === "down" || swipeDirection === "up" ? "y" : "x";
|
|
1661
|
+
return /* @__PURE__ */ jsxs(DrawerPortal, {
|
|
1662
|
+
"data-slot": "drawer-portal",
|
|
1663
|
+
children: [modal === true && /* @__PURE__ */ jsx(DrawerOverlay, { "data-snap-points": hasSnapPoints ? "" : void 0 }), /* @__PURE__ */ jsx(Drawer$1.Viewport, {
|
|
1664
|
+
"data-slot": "drawer-viewport",
|
|
1665
|
+
"data-modal": modal,
|
|
1666
|
+
className: "pointer-events-none fixed inset-0 z-50 select-none data-[modal=true]:pointer-events-auto",
|
|
1667
|
+
children: /* @__PURE__ */ jsxs(Drawer$1.Popup, {
|
|
1668
|
+
"data-slot": "drawer-popup",
|
|
1669
|
+
"data-swipe-axis": swipeAxis,
|
|
1670
|
+
"data-snap-points": hasSnapPoints ? "" : void 0,
|
|
1671
|
+
className: cn("group/drawer-popup pointer-events-auto fixed z-50 m-(--drawer-inset,0px) flex h-(--drawer-content-height) max-h-(--drawer-content-max-height,none) min-h-0 w-(--drawer-content-width,auto) transform-[translate3d(var(--translate-x,0px),var(--translate-y,0px),0)_scale(var(--stack-scale))] flex-col bg-popover text-sm text-popover-foreground transition-[transform,height,opacity,filter] duration-450 ease-[cubic-bezier(0.22,1,0.36,1)] will-change-transform outline-none select-none [interpolate-size:allow-keywords] data-[swipe-direction=down]:rounded-t-xl data-[swipe-direction=down]:border-t data-[swipe-direction=left]:rounded-r-xl data-[swipe-direction=left]:border-r data-[swipe-direction=right]:rounded-l-xl data-[swipe-direction=right]:border-l data-[swipe-direction=up]:rounded-b-xl data-[swipe-direction=up]:border-b", "data-nested-drawer-open:overflow-hidden data-nested-drawer-open:brightness-95", "after:pointer-events-none after:absolute after:bg-(--drawer-bleed-background,var(--color-popover)) data-[swipe-axis=x]:after:inset-y-0 data-[swipe-axis=x]:after:w-(--bleed) data-[swipe-axis=y]:after:inset-x-0 data-[swipe-axis=y]:after:h-(--bleed) data-[swipe-direction=down]:after:top-full data-[swipe-direction=left]:after:right-full data-[swipe-direction=right]:after:left-full data-[swipe-direction=up]:after:bottom-full", "[--drawer-content-height:var(--drawer-height,auto)] data-[swipe-axis=x]:[--drawer-content-width:75%] data-[swipe-axis=y]:[--drawer-content-max-height:calc(100dvh-6rem)] data-[swipe-axis=y]:data-snap-points:[--drawer-content-height:100dvh] data-[swipe-axis=x]:sm:[--drawer-content-width:24rem]", "[--bleed:3rem] [--peek:1rem] [--stack-height:var(--drawer-frontmost-height,var(--drawer-height,0px))] [--stack-peek-offset:max(0px,calc((var(--nested-drawers)-var(--stack-progress))*var(--peek)))] [--stack-progress:clamp(0,var(--drawer-swipe-progress),1)] [--stack-scale-base:max(0,calc(1-(var(--nested-drawers)*var(--stack-step))))] [--stack-scale:clamp(0,calc(var(--stack-scale-base)+(var(--stack-step)*var(--stack-progress))),1)] [--stack-shrink:calc(1-var(--stack-scale))] [--stack-step:0.05]", "data-ending-style:transform-(--closed-transform) data-ending-style:opacity-[0.9999] data-ending-style:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-nested-drawer-swiping:duration-0 data-ending-style:data-nested-drawer-swiping:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-starting-style:transform-(--closed-transform) data-swiping:duration-0 data-ending-style:data-swiping:duration-[calc(var(--drawer-swipe-strength)*400ms)]", "data-[swipe-axis=y]:inset-x-0 data-[swipe-axis=y]:data-nested-drawer-open:h-(--stack-height)", "data-[swipe-axis=x]:inset-y-0 data-[swipe-axis=x]:flex-row", "data-[swipe-direction=down]:bottom-0 data-[swipe-direction=down]:origin-bottom data-[swipe-direction=down]:[--closed-transform:translate3d(0,calc(100%+var(--drawer-inset,0px)+2px),0)] data-[swipe-direction=down]:[--translate-y:calc(var(--drawer-snap-point-offset,0px)+var(--drawer-swipe-movement-y)-var(--stack-peek-offset)-(var(--stack-shrink)*var(--stack-height)))]", "data-[swipe-direction=up]:top-0 data-[swipe-direction=up]:origin-top data-[swipe-direction=up]:[--closed-transform:translate3d(0,calc(-100%-var(--drawer-inset,0px)-2px),0)] data-[swipe-direction=up]:[--translate-y:calc(var(--drawer-snap-point-offset,0px)+var(--drawer-swipe-movement-y)+var(--stack-peek-offset)+(var(--stack-shrink)*var(--stack-height)))]", "data-[swipe-direction=left]:left-0 data-[swipe-direction=left]:origin-left data-[swipe-direction=left]:[--closed-transform:translate3d(calc(-100%-var(--drawer-inset,0px)-2px),0,0)] data-[swipe-direction=left]:[--translate-x:calc(var(--drawer-swipe-movement-x)+var(--stack-peek-offset)+(var(--stack-shrink)*100%))]", "data-[swipe-direction=right]:right-0 data-[swipe-direction=right]:origin-right data-[swipe-direction=right]:[--closed-transform:translate3d(calc(100%+var(--drawer-inset,0px)+2px),0,0)] data-[swipe-direction=right]:[--translate-x:calc(var(--drawer-swipe-movement-x)-var(--stack-peek-offset)-(var(--stack-shrink)*100%))]", className),
|
|
1672
|
+
...props,
|
|
1673
|
+
children: [showSwipeHandle && /* @__PURE__ */ jsx(DrawerSwipeHandle, {}), /* @__PURE__ */ jsx(Drawer$1.Content, {
|
|
1674
|
+
"data-slot": "drawer-content",
|
|
1675
|
+
className: cn("flex min-h-0 flex-1 flex-col overflow-hidden overscroll-contain rounded-[inherit] transition-opacity duration-300 ease-[cubic-bezier(0.45,1.005,0,1.005)] select-text group-data-nested-drawer-open/drawer-popup:opacity-0 group-data-nested-drawer-swiping/drawer-popup:opacity-100 group-data-swiping/drawer-popup:select-none"),
|
|
1676
|
+
children
|
|
1677
|
+
})]
|
|
1678
|
+
})
|
|
1679
|
+
})]
|
|
1680
|
+
});
|
|
1681
|
+
}
|
|
1682
|
+
function DrawerHeader({ className, ...props }) {
|
|
1683
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1684
|
+
"data-slot": "drawer-header",
|
|
1685
|
+
className: cn("flex shrink-0 flex-col gap-0.5 p-4 pb-0 group-data-[swipe-axis=y]/drawer-popup:text-center md:gap-0.5 md:text-left", className),
|
|
1686
|
+
...props
|
|
1687
|
+
});
|
|
1688
|
+
}
|
|
1689
|
+
function DrawerFooter({ className, ...props }) {
|
|
1690
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1691
|
+
"data-slot": "drawer-footer",
|
|
1692
|
+
className: cn("mt-auto flex shrink-0 flex-col gap-2 p-4 pt-0", className),
|
|
1693
|
+
...props
|
|
1694
|
+
});
|
|
1695
|
+
}
|
|
1696
|
+
function DrawerTitle({ className, ...props }) {
|
|
1697
|
+
return /* @__PURE__ */ jsx(Drawer$1.Title, {
|
|
1698
|
+
"data-slot": "drawer-title",
|
|
1699
|
+
className: cn("font-heading text-base font-medium text-foreground", className),
|
|
1700
|
+
...props
|
|
1701
|
+
});
|
|
1702
|
+
}
|
|
1703
|
+
function DrawerDescription({ className, ...props }) {
|
|
1704
|
+
return /* @__PURE__ */ jsx(Drawer$1.Description, {
|
|
1705
|
+
"data-slot": "drawer-description",
|
|
1706
|
+
className: cn("text-sm text-balance text-muted-foreground", className),
|
|
1707
|
+
...props
|
|
1708
|
+
});
|
|
1709
|
+
}
|
|
1710
|
+
//#endregion
|
|
1711
|
+
//#region src/components/ui/dropdown-menu.tsx
|
|
1712
|
+
function DropdownMenu({ ...props }) {
|
|
1713
|
+
return /* @__PURE__ */ jsx(Menu.Root, {
|
|
1714
|
+
"data-slot": "dropdown-menu",
|
|
1715
|
+
...props
|
|
1716
|
+
});
|
|
1717
|
+
}
|
|
1718
|
+
function DropdownMenuPortal({ ...props }) {
|
|
1719
|
+
return /* @__PURE__ */ jsx(Menu.Portal, {
|
|
1720
|
+
"data-slot": "dropdown-menu-portal",
|
|
1721
|
+
...props
|
|
1722
|
+
});
|
|
1723
|
+
}
|
|
1724
|
+
function DropdownMenuTrigger({ ...props }) {
|
|
1725
|
+
return /* @__PURE__ */ jsx(Menu.Trigger, {
|
|
1726
|
+
"data-slot": "dropdown-menu-trigger",
|
|
1727
|
+
...props
|
|
1728
|
+
});
|
|
1729
|
+
}
|
|
1730
|
+
function DropdownMenuContent({ align = "start", alignOffset = 0, side = "bottom", sideOffset = 4, className, ...props }) {
|
|
1731
|
+
return /* @__PURE__ */ jsx(Menu.Portal, { children: /* @__PURE__ */ jsx(Menu.Positioner, {
|
|
1732
|
+
className: "isolate z-50 outline-none",
|
|
1733
|
+
align,
|
|
1734
|
+
alignOffset,
|
|
1735
|
+
side,
|
|
1736
|
+
sideOffset,
|
|
1737
|
+
children: /* @__PURE__ */ jsx(Menu.Popup, {
|
|
1738
|
+
"data-slot": "dropdown-menu-content",
|
|
1739
|
+
className: cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-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:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95", className),
|
|
1740
|
+
...props
|
|
1741
|
+
})
|
|
1742
|
+
}) });
|
|
1743
|
+
}
|
|
1744
|
+
function DropdownMenuGroup({ ...props }) {
|
|
1745
|
+
return /* @__PURE__ */ jsx(Menu.Group, {
|
|
1746
|
+
"data-slot": "dropdown-menu-group",
|
|
1747
|
+
...props
|
|
1748
|
+
});
|
|
1749
|
+
}
|
|
1750
|
+
function DropdownMenuLabel({ className, inset, ...props }) {
|
|
1751
|
+
return /* @__PURE__ */ jsx(Menu.GroupLabel, {
|
|
1752
|
+
"data-slot": "dropdown-menu-label",
|
|
1753
|
+
"data-inset": inset,
|
|
1754
|
+
className: cn("px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7", className),
|
|
1755
|
+
...props
|
|
1756
|
+
});
|
|
1757
|
+
}
|
|
1758
|
+
function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
|
|
1759
|
+
return /* @__PURE__ */ jsx(Menu.Item, {
|
|
1760
|
+
"data-slot": "dropdown-menu-item",
|
|
1761
|
+
"data-inset": inset,
|
|
1762
|
+
"data-variant": variant,
|
|
1763
|
+
className: cn("group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive", className),
|
|
1764
|
+
...props
|
|
1765
|
+
});
|
|
1766
|
+
}
|
|
1767
|
+
function DropdownMenuSub({ ...props }) {
|
|
1768
|
+
return /* @__PURE__ */ jsx(Menu.SubmenuRoot, {
|
|
1769
|
+
"data-slot": "dropdown-menu-sub",
|
|
1770
|
+
...props
|
|
1771
|
+
});
|
|
1772
|
+
}
|
|
1773
|
+
function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
|
|
1774
|
+
return /* @__PURE__ */ jsxs(Menu.SubmenuTrigger, {
|
|
1775
|
+
"data-slot": "dropdown-menu-sub-trigger",
|
|
1776
|
+
"data-inset": inset,
|
|
1777
|
+
className: cn("flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
1778
|
+
...props,
|
|
1779
|
+
children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })]
|
|
1780
|
+
});
|
|
1781
|
+
}
|
|
1782
|
+
function DropdownMenuSubContent({ align = "start", alignOffset = -3, side = "right", sideOffset = 0, className, ...props }) {
|
|
1783
|
+
return /* @__PURE__ */ jsx(DropdownMenuContent, {
|
|
1784
|
+
"data-slot": "dropdown-menu-sub-content",
|
|
1785
|
+
className: cn("w-auto min-w-[96px] rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 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 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),
|
|
1786
|
+
align,
|
|
1787
|
+
alignOffset,
|
|
1788
|
+
side,
|
|
1789
|
+
sideOffset,
|
|
1790
|
+
...props
|
|
1791
|
+
});
|
|
1792
|
+
}
|
|
1793
|
+
function DropdownMenuCheckboxItem({ className, children, checked, inset, ...props }) {
|
|
1794
|
+
return /* @__PURE__ */ jsxs(Menu.CheckboxItem, {
|
|
1795
|
+
"data-slot": "dropdown-menu-checkbox-item",
|
|
1796
|
+
"data-inset": inset,
|
|
1797
|
+
className: cn("relative flex 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 focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
1798
|
+
checked,
|
|
1799
|
+
...props,
|
|
1800
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
1801
|
+
className: "pointer-events-none absolute right-2 flex items-center justify-center",
|
|
1802
|
+
"data-slot": "dropdown-menu-checkbox-item-indicator",
|
|
1803
|
+
children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
|
|
1804
|
+
}), children]
|
|
1805
|
+
});
|
|
1806
|
+
}
|
|
1807
|
+
function DropdownMenuRadioGroup({ ...props }) {
|
|
1808
|
+
return /* @__PURE__ */ jsx(Menu.RadioGroup, {
|
|
1809
|
+
"data-slot": "dropdown-menu-radio-group",
|
|
1810
|
+
...props
|
|
1811
|
+
});
|
|
1812
|
+
}
|
|
1813
|
+
function DropdownMenuRadioItem({ className, children, inset, ...props }) {
|
|
1814
|
+
return /* @__PURE__ */ jsxs(Menu.RadioItem, {
|
|
1815
|
+
"data-slot": "dropdown-menu-radio-item",
|
|
1816
|
+
"data-inset": inset,
|
|
1817
|
+
className: cn("relative flex 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 focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
1818
|
+
...props,
|
|
1819
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
1820
|
+
className: "pointer-events-none absolute right-2 flex items-center justify-center",
|
|
1821
|
+
"data-slot": "dropdown-menu-radio-item-indicator",
|
|
1822
|
+
children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
|
|
1823
|
+
}), children]
|
|
1824
|
+
});
|
|
1825
|
+
}
|
|
1826
|
+
function DropdownMenuSeparator({ className, ...props }) {
|
|
1827
|
+
return /* @__PURE__ */ jsx(Menu.Separator, {
|
|
1828
|
+
"data-slot": "dropdown-menu-separator",
|
|
1829
|
+
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
1830
|
+
...props
|
|
1831
|
+
});
|
|
1832
|
+
}
|
|
1833
|
+
function DropdownMenuShortcut({ className, ...props }) {
|
|
1834
|
+
return /* @__PURE__ */ jsx("span", {
|
|
1835
|
+
"data-slot": "dropdown-menu-shortcut",
|
|
1836
|
+
className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground", className),
|
|
1837
|
+
...props
|
|
1838
|
+
});
|
|
1839
|
+
}
|
|
1840
|
+
//#endregion
|
|
1841
|
+
//#region src/components/ui/empty.tsx
|
|
1842
|
+
function Empty({ className, ...props }) {
|
|
1843
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1844
|
+
"data-slot": "empty",
|
|
1845
|
+
className: cn("flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance", className),
|
|
1846
|
+
...props
|
|
1847
|
+
});
|
|
1848
|
+
}
|
|
1849
|
+
function EmptyHeader({ className, ...props }) {
|
|
1850
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1851
|
+
"data-slot": "empty-header",
|
|
1852
|
+
className: cn("flex max-w-sm flex-col items-center gap-2", className),
|
|
1853
|
+
...props
|
|
1854
|
+
});
|
|
1855
|
+
}
|
|
1856
|
+
const emptyMediaVariants = cva("mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0", {
|
|
1857
|
+
variants: { variant: {
|
|
1858
|
+
default: "bg-transparent",
|
|
1859
|
+
icon: "flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4"
|
|
1860
|
+
} },
|
|
1861
|
+
defaultVariants: { variant: "default" }
|
|
1862
|
+
});
|
|
1863
|
+
function EmptyMedia({ className, variant = "default", ...props }) {
|
|
1864
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1865
|
+
"data-slot": "empty-icon",
|
|
1866
|
+
"data-variant": variant,
|
|
1867
|
+
className: cn(emptyMediaVariants({
|
|
1868
|
+
variant,
|
|
1869
|
+
className
|
|
1870
|
+
})),
|
|
1871
|
+
...props
|
|
1872
|
+
});
|
|
1873
|
+
}
|
|
1874
|
+
function EmptyTitle({ className, ...props }) {
|
|
1875
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1876
|
+
"data-slot": "empty-title",
|
|
1877
|
+
className: cn("font-heading text-sm font-medium tracking-tight", className),
|
|
1878
|
+
...props
|
|
1879
|
+
});
|
|
1880
|
+
}
|
|
1881
|
+
function EmptyDescription({ className, ...props }) {
|
|
1882
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1883
|
+
"data-slot": "empty-description",
|
|
1884
|
+
className: cn("text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className),
|
|
1885
|
+
...props
|
|
1886
|
+
});
|
|
1887
|
+
}
|
|
1888
|
+
function EmptyContent({ className, ...props }) {
|
|
1889
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1890
|
+
"data-slot": "empty-content",
|
|
1891
|
+
className: cn("flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance", className),
|
|
1892
|
+
...props
|
|
1893
|
+
});
|
|
1894
|
+
}
|
|
1895
|
+
//#endregion
|
|
1896
|
+
//#region src/components/ui/label.tsx
|
|
1897
|
+
function Label({ className, ...props }) {
|
|
1898
|
+
return /* @__PURE__ */ jsx("label", {
|
|
1899
|
+
"data-slot": "label",
|
|
1900
|
+
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),
|
|
1901
|
+
...props
|
|
1902
|
+
});
|
|
1903
|
+
}
|
|
1904
|
+
//#endregion
|
|
1905
|
+
//#region src/components/ui/field.tsx
|
|
1906
|
+
function FieldSet({ className, ...props }) {
|
|
1907
|
+
return /* @__PURE__ */ jsx("fieldset", {
|
|
1908
|
+
"data-slot": "field-set",
|
|
1909
|
+
className: cn("flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3", className),
|
|
1910
|
+
...props
|
|
1911
|
+
});
|
|
1912
|
+
}
|
|
1913
|
+
function FieldLegend({ className, variant = "legend", ...props }) {
|
|
1914
|
+
return /* @__PURE__ */ jsx("legend", {
|
|
1915
|
+
"data-slot": "field-legend",
|
|
1916
|
+
"data-variant": variant,
|
|
1917
|
+
className: cn("mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base", className),
|
|
1918
|
+
...props
|
|
1919
|
+
});
|
|
1920
|
+
}
|
|
1921
|
+
function FieldGroup({ className, ...props }) {
|
|
1922
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1923
|
+
"data-slot": "field-group",
|
|
1924
|
+
className: cn("group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4", className),
|
|
1925
|
+
...props
|
|
1926
|
+
});
|
|
1927
|
+
}
|
|
1928
|
+
const fieldVariants = cva("group/field flex w-full gap-2 data-[invalid=true]:text-destructive", {
|
|
1929
|
+
variants: { orientation: {
|
|
1930
|
+
vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
|
|
1931
|
+
horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
|
|
1932
|
+
responsive: "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
|
|
1933
|
+
} },
|
|
1934
|
+
defaultVariants: { orientation: "vertical" }
|
|
1935
|
+
});
|
|
1936
|
+
function Field({ className, orientation = "vertical", ...props }) {
|
|
1937
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1938
|
+
role: "group",
|
|
1939
|
+
"data-slot": "field",
|
|
1940
|
+
"data-orientation": orientation,
|
|
1941
|
+
className: cn(fieldVariants({ orientation }), className),
|
|
1942
|
+
...props
|
|
1943
|
+
});
|
|
1944
|
+
}
|
|
1945
|
+
function FieldContent({ className, ...props }) {
|
|
1946
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1947
|
+
"data-slot": "field-content",
|
|
1948
|
+
className: cn("group/field-content flex flex-1 flex-col gap-0.5 leading-snug", className),
|
|
1949
|
+
...props
|
|
1950
|
+
});
|
|
1951
|
+
}
|
|
1952
|
+
function FieldLabel({ className, ...props }) {
|
|
1953
|
+
return /* @__PURE__ */ jsx(Label, {
|
|
1954
|
+
"data-slot": "field-label",
|
|
1955
|
+
className: cn("group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border has-[>[data-slot=field]]:not-has-[:disabled,[data-disabled]]:hover:bg-muted/50 has-[>[data-slot=field]]:has-[:focus-visible]:border-ring has-[>[data-slot=field]]:has-[:focus-visible]:ring-3 has-[>[data-slot=field]]:has-[:focus-visible]:ring-ring/50 *:data-[slot=field]:p-2.5 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10", "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col", className),
|
|
1956
|
+
...props
|
|
1957
|
+
});
|
|
1958
|
+
}
|
|
1959
|
+
function FieldTitle({ className, ...props }) {
|
|
1960
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1961
|
+
"data-slot": "field-label",
|
|
1962
|
+
className: cn("flex w-fit items-center gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50", className),
|
|
1963
|
+
...props
|
|
1964
|
+
});
|
|
1965
|
+
}
|
|
1966
|
+
function FieldDescription({ className, ...props }) {
|
|
1967
|
+
return /* @__PURE__ */ jsx("p", {
|
|
1968
|
+
"data-slot": "field-description",
|
|
1969
|
+
className: cn("text-left text-sm leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5", "last:mt-0 nth-last-2:-mt-1", "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className),
|
|
1970
|
+
...props
|
|
1971
|
+
});
|
|
1972
|
+
}
|
|
1973
|
+
function FieldSeparator({ children, className, ...props }) {
|
|
1974
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
1975
|
+
"data-slot": "field-separator",
|
|
1976
|
+
"data-content": !!children,
|
|
1977
|
+
className: cn("relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2", className),
|
|
1978
|
+
...props,
|
|
1979
|
+
children: [/* @__PURE__ */ jsx(Separator, { className: "absolute inset-0 top-1/2" }), children && /* @__PURE__ */ jsx("span", {
|
|
1980
|
+
className: "relative mx-auto block w-fit bg-background px-2 text-muted-foreground",
|
|
1981
|
+
"data-slot": "field-separator-content",
|
|
1982
|
+
children
|
|
1983
|
+
})]
|
|
1984
|
+
});
|
|
1985
|
+
}
|
|
1986
|
+
function FieldError({ className, children, errors, ...props }) {
|
|
1987
|
+
const content = useMemo(() => {
|
|
1988
|
+
if (children) return children;
|
|
1989
|
+
if (!errors?.length) return null;
|
|
1990
|
+
const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()];
|
|
1991
|
+
if (uniqueErrors?.length == 1) return uniqueErrors[0]?.message;
|
|
1992
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
1993
|
+
className: "ml-4 flex list-disc flex-col gap-1",
|
|
1994
|
+
children: uniqueErrors.map((error, index) => error?.message && /* @__PURE__ */ jsx("li", { children: error.message }, index))
|
|
1995
|
+
});
|
|
1996
|
+
}, [children, errors]);
|
|
1997
|
+
if (!content) return null;
|
|
1998
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1999
|
+
role: "alert",
|
|
2000
|
+
"data-slot": "field-error",
|
|
2001
|
+
className: cn("text-sm font-normal text-destructive", className),
|
|
2002
|
+
...props,
|
|
2003
|
+
children: content
|
|
2004
|
+
});
|
|
2005
|
+
}
|
|
2006
|
+
//#endregion
|
|
2007
|
+
//#region src/components/ui/hover-card.tsx
|
|
2008
|
+
function HoverCard({ ...props }) {
|
|
2009
|
+
return /* @__PURE__ */ jsx(PreviewCard.Root, {
|
|
2010
|
+
"data-slot": "hover-card",
|
|
2011
|
+
...props
|
|
2012
|
+
});
|
|
2013
|
+
}
|
|
2014
|
+
function HoverCardTrigger({ ...props }) {
|
|
2015
|
+
return /* @__PURE__ */ jsx(PreviewCard.Trigger, {
|
|
2016
|
+
"data-slot": "hover-card-trigger",
|
|
2017
|
+
...props
|
|
2018
|
+
});
|
|
2019
|
+
}
|
|
2020
|
+
function HoverCardContent({ className, side = "bottom", sideOffset = 4, align = "center", alignOffset = 4, ...props }) {
|
|
2021
|
+
return /* @__PURE__ */ jsx(PreviewCard.Portal, {
|
|
2022
|
+
"data-slot": "hover-card-portal",
|
|
2023
|
+
children: /* @__PURE__ */ jsx(PreviewCard.Positioner, {
|
|
2024
|
+
align,
|
|
2025
|
+
alignOffset,
|
|
2026
|
+
side,
|
|
2027
|
+
sideOffset,
|
|
2028
|
+
className: "isolate z-50",
|
|
2029
|
+
children: /* @__PURE__ */ jsx(PreviewCard.Popup, {
|
|
2030
|
+
"data-slot": "hover-card-content",
|
|
2031
|
+
className: cn("z-50 w-64 origin-(--transform-origin) 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),
|
|
2032
|
+
...props
|
|
2033
|
+
})
|
|
2034
|
+
})
|
|
2035
|
+
});
|
|
2036
|
+
}
|
|
2037
|
+
//#endregion
|
|
2038
|
+
//#region src/components/ui/input-otp.tsx
|
|
2039
|
+
function InputOTP({ className, containerClassName, ...props }) {
|
|
2040
|
+
return /* @__PURE__ */ jsx(OTPInput, {
|
|
2041
|
+
"data-slot": "input-otp",
|
|
2042
|
+
containerClassName: cn("cn-input-otp flex items-center has-disabled:opacity-50", containerClassName),
|
|
2043
|
+
spellCheck: false,
|
|
2044
|
+
className: cn("disabled:cursor-not-allowed", className),
|
|
2045
|
+
...props
|
|
2046
|
+
});
|
|
2047
|
+
}
|
|
2048
|
+
function InputOTPGroup({ className, ...props }) {
|
|
2049
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2050
|
+
"data-slot": "input-otp-group",
|
|
2051
|
+
className: cn("flex items-center rounded-lg has-aria-invalid:border-destructive has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40", className),
|
|
2052
|
+
...props
|
|
2053
|
+
});
|
|
2054
|
+
}
|
|
2055
|
+
function InputOTPSlot({ index, className, ...props }) {
|
|
2056
|
+
const { char, hasFakeCaret, isActive } = React.useContext(OTPInputContext)?.slots[index] ?? {};
|
|
2057
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
2058
|
+
"data-slot": "input-otp-slot",
|
|
2059
|
+
"data-active": isActive,
|
|
2060
|
+
className: cn("relative flex size-8 items-center justify-center border-y border-r border-input text-sm transition-all outline-none first:rounded-l-lg first:border-l last:rounded-r-lg aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-3 data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40", className),
|
|
2061
|
+
...props,
|
|
2062
|
+
children: [char, hasFakeCaret && /* @__PURE__ */ jsx("div", {
|
|
2063
|
+
className: "pointer-events-none absolute inset-0 flex items-center justify-center",
|
|
2064
|
+
children: /* @__PURE__ */ jsx("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" })
|
|
2065
|
+
})]
|
|
2066
|
+
});
|
|
2067
|
+
}
|
|
2068
|
+
function InputOTPSeparator({ ...props }) {
|
|
2069
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2070
|
+
"data-slot": "input-otp-separator",
|
|
2071
|
+
className: "flex items-center [&_svg:not([class*='size-'])]:size-4",
|
|
2072
|
+
role: "separator",
|
|
2073
|
+
...props,
|
|
2074
|
+
children: /* @__PURE__ */ jsx(MinusIcon, {})
|
|
2075
|
+
});
|
|
2076
|
+
}
|
|
2077
|
+
//#endregion
|
|
2078
|
+
//#region src/components/ui/item.tsx
|
|
2079
|
+
function ItemGroup({ className, ...props }) {
|
|
2080
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2081
|
+
role: "list",
|
|
2082
|
+
"data-slot": "item-group",
|
|
2083
|
+
className: cn("group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2", className),
|
|
2084
|
+
...props
|
|
2085
|
+
});
|
|
2086
|
+
}
|
|
2087
|
+
function ItemSeparator({ className, ...props }) {
|
|
2088
|
+
return /* @__PURE__ */ jsx(Separator, {
|
|
2089
|
+
"data-slot": "item-separator",
|
|
2090
|
+
orientation: "horizontal",
|
|
2091
|
+
className: cn("my-2", className),
|
|
2092
|
+
...props
|
|
2093
|
+
});
|
|
2094
|
+
}
|
|
2095
|
+
const itemVariants = cva("group/item flex w-full flex-wrap items-center rounded-lg border text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-muted", {
|
|
2096
|
+
variants: {
|
|
2097
|
+
variant: {
|
|
2098
|
+
default: "border-transparent",
|
|
2099
|
+
outline: "border-border",
|
|
2100
|
+
muted: "border-transparent bg-muted/50"
|
|
2101
|
+
},
|
|
2102
|
+
size: {
|
|
2103
|
+
default: "gap-2.5 px-3 py-2.5",
|
|
2104
|
+
sm: "gap-2.5 px-3 py-2.5",
|
|
2105
|
+
xs: "gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0"
|
|
2106
|
+
}
|
|
2107
|
+
},
|
|
2108
|
+
defaultVariants: {
|
|
2109
|
+
variant: "default",
|
|
2110
|
+
size: "default"
|
|
2111
|
+
}
|
|
2112
|
+
});
|
|
2113
|
+
function Item({ className, variant = "default", size = "default", render, ...props }) {
|
|
2114
|
+
return useRender({
|
|
2115
|
+
defaultTagName: "div",
|
|
2116
|
+
props: mergeProps({ className: cn(itemVariants({
|
|
2117
|
+
variant,
|
|
2118
|
+
size,
|
|
2119
|
+
className
|
|
2120
|
+
})) }, props),
|
|
2121
|
+
render,
|
|
2122
|
+
state: {
|
|
2123
|
+
slot: "item",
|
|
2124
|
+
variant,
|
|
2125
|
+
size
|
|
2126
|
+
}
|
|
2127
|
+
});
|
|
2128
|
+
}
|
|
2129
|
+
const itemMediaVariants = cva("flex shrink-0 items-center justify-center gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start [&_svg]:pointer-events-none", {
|
|
2130
|
+
variants: { variant: {
|
|
2131
|
+
default: "bg-transparent",
|
|
2132
|
+
icon: "[&_svg:not([class*='size-'])]:size-4",
|
|
2133
|
+
image: "size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover"
|
|
2134
|
+
} },
|
|
2135
|
+
defaultVariants: { variant: "default" }
|
|
2136
|
+
});
|
|
2137
|
+
function ItemMedia({ className, variant = "default", ...props }) {
|
|
2138
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2139
|
+
"data-slot": "item-media",
|
|
2140
|
+
"data-variant": variant,
|
|
2141
|
+
className: cn(itemMediaVariants({
|
|
2142
|
+
variant,
|
|
2143
|
+
className
|
|
2144
|
+
})),
|
|
2145
|
+
...props
|
|
2146
|
+
});
|
|
2147
|
+
}
|
|
2148
|
+
function ItemContent({ className, ...props }) {
|
|
2149
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2150
|
+
"data-slot": "item-content",
|
|
2151
|
+
className: cn("flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none", className),
|
|
2152
|
+
...props
|
|
2153
|
+
});
|
|
2154
|
+
}
|
|
2155
|
+
function ItemTitle({ className, ...props }) {
|
|
2156
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2157
|
+
"data-slot": "item-title",
|
|
2158
|
+
className: cn("line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4", className),
|
|
2159
|
+
...props
|
|
2160
|
+
});
|
|
2161
|
+
}
|
|
2162
|
+
function ItemDescription({ className, ...props }) {
|
|
2163
|
+
return /* @__PURE__ */ jsx("p", {
|
|
2164
|
+
"data-slot": "item-description",
|
|
2165
|
+
className: cn("line-clamp-2 text-left text-sm leading-normal font-normal text-muted-foreground group-data-[size=xs]/item:text-xs [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className),
|
|
2166
|
+
...props
|
|
2167
|
+
});
|
|
2168
|
+
}
|
|
2169
|
+
function ItemActions({ className, ...props }) {
|
|
2170
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2171
|
+
"data-slot": "item-actions",
|
|
2172
|
+
className: cn("flex items-center gap-2", className),
|
|
2173
|
+
...props
|
|
2174
|
+
});
|
|
2175
|
+
}
|
|
2176
|
+
function ItemHeader({ className, ...props }) {
|
|
2177
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2178
|
+
"data-slot": "item-header",
|
|
2179
|
+
className: cn("flex basis-full items-center justify-between gap-2", className),
|
|
2180
|
+
...props
|
|
2181
|
+
});
|
|
2182
|
+
}
|
|
2183
|
+
function ItemFooter({ className, ...props }) {
|
|
2184
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2185
|
+
"data-slot": "item-footer",
|
|
2186
|
+
className: cn("flex basis-full items-center justify-between gap-2", className),
|
|
2187
|
+
...props
|
|
2188
|
+
});
|
|
2189
|
+
}
|
|
2190
|
+
//#endregion
|
|
2191
|
+
//#region src/components/ui/kbd.tsx
|
|
2192
|
+
function Kbd({ className, ...props }) {
|
|
2193
|
+
return /* @__PURE__ */ jsx("kbd", {
|
|
2194
|
+
"data-slot": "kbd",
|
|
2195
|
+
className: cn("pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 [&_svg:not([class*='size-'])]:size-3", className),
|
|
2196
|
+
...props
|
|
2197
|
+
});
|
|
2198
|
+
}
|
|
2199
|
+
function KbdGroup({ className, ...props }) {
|
|
2200
|
+
return /* @__PURE__ */ jsx("kbd", {
|
|
2201
|
+
"data-slot": "kbd-group",
|
|
2202
|
+
className: cn("inline-flex items-center gap-1", className),
|
|
2203
|
+
...props
|
|
2204
|
+
});
|
|
2205
|
+
}
|
|
2206
|
+
//#endregion
|
|
2207
|
+
//#region src/components/ui/marker.tsx
|
|
2208
|
+
const markerVariants = cva("group/marker relative flex min-h-4 w-full items-center gap-2 text-left text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [a]:underline [a]:underline-offset-3 [a]:hover:text-foreground", { variants: { variant: {
|
|
2209
|
+
default: "",
|
|
2210
|
+
separator: "before:mr-1 before:h-px before:min-w-0 before:flex-1 before:bg-border after:ml-1 after:h-px after:min-w-0 after:flex-1 after:bg-border",
|
|
2211
|
+
border: "border-b border-border pb-2"
|
|
2212
|
+
} } });
|
|
2213
|
+
function Marker({ className, variant = "default", render, ...props }) {
|
|
2214
|
+
return useRender({
|
|
2215
|
+
defaultTagName: "div",
|
|
2216
|
+
props: mergeProps({ className: cn(markerVariants({
|
|
2217
|
+
variant,
|
|
2218
|
+
className
|
|
2219
|
+
})) }, props),
|
|
2220
|
+
render,
|
|
2221
|
+
state: {
|
|
2222
|
+
slot: "marker",
|
|
2223
|
+
variant
|
|
2224
|
+
}
|
|
2225
|
+
});
|
|
2226
|
+
}
|
|
2227
|
+
function MarkerIcon({ className, ...props }) {
|
|
2228
|
+
return /* @__PURE__ */ jsx("span", {
|
|
2229
|
+
"data-slot": "marker-icon",
|
|
2230
|
+
"aria-hidden": "true",
|
|
2231
|
+
className: cn("size-4 shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
2232
|
+
...props
|
|
2233
|
+
});
|
|
2234
|
+
}
|
|
2235
|
+
function MarkerContent({ className, ...props }) {
|
|
2236
|
+
return /* @__PURE__ */ jsx("span", {
|
|
2237
|
+
"data-slot": "marker-content",
|
|
2238
|
+
className: cn("min-w-0 wrap-break-word group-data-[variant=separator]/marker:flex-none group-data-[variant=separator]/marker:text-center *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
|
|
2239
|
+
...props
|
|
2240
|
+
});
|
|
2241
|
+
}
|
|
2242
|
+
//#endregion
|
|
2243
|
+
//#region src/components/ui/menubar.tsx
|
|
2244
|
+
function Menubar({ className, ...props }) {
|
|
2245
|
+
return /* @__PURE__ */ jsx(Menubar$1, {
|
|
2246
|
+
"data-slot": "menubar",
|
|
2247
|
+
className: cn("flex h-8 items-center gap-0.5 rounded-lg border p-[3px]", className),
|
|
2248
|
+
...props
|
|
2249
|
+
});
|
|
2250
|
+
}
|
|
2251
|
+
function MenubarMenu({ ...props }) {
|
|
2252
|
+
return /* @__PURE__ */ jsx(DropdownMenu, {
|
|
2253
|
+
"data-slot": "menubar-menu",
|
|
2254
|
+
...props
|
|
2255
|
+
});
|
|
2256
|
+
}
|
|
2257
|
+
function MenubarGroup({ ...props }) {
|
|
2258
|
+
return /* @__PURE__ */ jsx(DropdownMenuGroup, {
|
|
2259
|
+
"data-slot": "menubar-group",
|
|
2260
|
+
...props
|
|
2261
|
+
});
|
|
2262
|
+
}
|
|
2263
|
+
function MenubarPortal({ ...props }) {
|
|
2264
|
+
return /* @__PURE__ */ jsx(DropdownMenuPortal, {
|
|
2265
|
+
"data-slot": "menubar-portal",
|
|
2266
|
+
...props
|
|
2267
|
+
});
|
|
2268
|
+
}
|
|
2269
|
+
function MenubarTrigger({ className, ...props }) {
|
|
2270
|
+
return /* @__PURE__ */ jsx(DropdownMenuTrigger, {
|
|
2271
|
+
"data-slot": "menubar-trigger",
|
|
2272
|
+
className: cn("flex items-center rounded-sm px-1.5 py-[2px] text-sm font-medium outline-hidden select-none hover:bg-muted aria-expanded:bg-muted", className),
|
|
2273
|
+
...props
|
|
2274
|
+
});
|
|
2275
|
+
}
|
|
2276
|
+
function MenubarContent({ className, align = "start", alignOffset = -4, sideOffset = 8, ...props }) {
|
|
2277
|
+
return /* @__PURE__ */ jsx(DropdownMenuContent, {
|
|
2278
|
+
"data-slot": "menubar-content",
|
|
2279
|
+
align,
|
|
2280
|
+
alignOffset,
|
|
2281
|
+
sideOffset,
|
|
2282
|
+
className: cn("min-w-36 rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 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", className),
|
|
2283
|
+
...props
|
|
2284
|
+
});
|
|
2285
|
+
}
|
|
2286
|
+
function MenubarItem({ className, inset, variant = "default", ...props }) {
|
|
2287
|
+
return /* @__PURE__ */ jsx(DropdownMenuItem, {
|
|
2288
|
+
"data-slot": "menubar-item",
|
|
2289
|
+
"data-inset": inset,
|
|
2290
|
+
"data-variant": variant,
|
|
2291
|
+
className: cn("group/menubar-item gap-1.5 rounded-md px-1.5 py-1 text-sm focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive!", className),
|
|
2292
|
+
...props
|
|
2293
|
+
});
|
|
2294
|
+
}
|
|
2295
|
+
function MenubarCheckboxItem({ className, children, checked, inset, ...props }) {
|
|
2296
|
+
return /* @__PURE__ */ jsxs(Menu.CheckboxItem, {
|
|
2297
|
+
"data-slot": "menubar-checkbox-item",
|
|
2298
|
+
"data-inset": inset,
|
|
2299
|
+
className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", className),
|
|
2300
|
+
checked,
|
|
2301
|
+
...props,
|
|
2302
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
2303
|
+
className: "pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4",
|
|
2304
|
+
children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
|
|
2305
|
+
}), children]
|
|
2306
|
+
});
|
|
2307
|
+
}
|
|
2308
|
+
function MenubarRadioGroup({ ...props }) {
|
|
2309
|
+
return /* @__PURE__ */ jsx(DropdownMenuRadioGroup, {
|
|
2310
|
+
"data-slot": "menubar-radio-group",
|
|
2311
|
+
...props
|
|
2312
|
+
});
|
|
2313
|
+
}
|
|
2314
|
+
function MenubarRadioItem({ className, children, inset, ...props }) {
|
|
2315
|
+
return /* @__PURE__ */ jsxs(Menu.RadioItem, {
|
|
2316
|
+
"data-slot": "menubar-radio-item",
|
|
2317
|
+
"data-inset": inset,
|
|
2318
|
+
className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
2319
|
+
...props,
|
|
2320
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
2321
|
+
className: "pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4",
|
|
2322
|
+
children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
|
|
2323
|
+
}), children]
|
|
2324
|
+
});
|
|
2325
|
+
}
|
|
2326
|
+
function MenubarLabel({ className, inset, ...props }) {
|
|
2327
|
+
return /* @__PURE__ */ jsx(DropdownMenuLabel, {
|
|
2328
|
+
"data-slot": "menubar-label",
|
|
2329
|
+
"data-inset": inset,
|
|
2330
|
+
className: cn("px-1.5 py-1 text-sm font-medium data-inset:pl-7", className),
|
|
2331
|
+
...props
|
|
2332
|
+
});
|
|
2333
|
+
}
|
|
2334
|
+
function MenubarSeparator({ className, ...props }) {
|
|
2335
|
+
return /* @__PURE__ */ jsx(DropdownMenuSeparator, {
|
|
2336
|
+
"data-slot": "menubar-separator",
|
|
2337
|
+
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
2338
|
+
...props
|
|
2339
|
+
});
|
|
2340
|
+
}
|
|
2341
|
+
function MenubarShortcut({ className, ...props }) {
|
|
2342
|
+
return /* @__PURE__ */ jsx(DropdownMenuShortcut, {
|
|
2343
|
+
"data-slot": "menubar-shortcut",
|
|
2344
|
+
className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/menubar-item:text-accent-foreground", className),
|
|
2345
|
+
...props
|
|
2346
|
+
});
|
|
2347
|
+
}
|
|
2348
|
+
function MenubarSub({ ...props }) {
|
|
2349
|
+
return /* @__PURE__ */ jsx(DropdownMenuSub, {
|
|
2350
|
+
"data-slot": "menubar-sub",
|
|
2351
|
+
...props
|
|
2352
|
+
});
|
|
2353
|
+
}
|
|
2354
|
+
function MenubarSubTrigger({ className, inset, ...props }) {
|
|
2355
|
+
return /* @__PURE__ */ jsx(DropdownMenuSubTrigger, {
|
|
2356
|
+
"data-slot": "menubar-sub-trigger",
|
|
2357
|
+
"data-inset": inset,
|
|
2358
|
+
className: cn("gap-1.5 rounded-md px-1.5 py-1 text-sm focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4", className),
|
|
2359
|
+
...props
|
|
2360
|
+
});
|
|
2361
|
+
}
|
|
2362
|
+
function MenubarSubContent({ className, ...props }) {
|
|
2363
|
+
return /* @__PURE__ */ jsx(DropdownMenuSubContent, {
|
|
2364
|
+
"data-slot": "menubar-sub-content",
|
|
2365
|
+
className: cn("min-w-32 rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 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 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),
|
|
2366
|
+
...props
|
|
2367
|
+
});
|
|
2368
|
+
}
|
|
2369
|
+
//#endregion
|
|
2370
|
+
//#region src/components/ui/message.tsx
|
|
2371
|
+
function MessageGroup({ className, ...props }) {
|
|
2372
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2373
|
+
"data-slot": "message-group",
|
|
2374
|
+
className: cn("flex min-w-0 flex-col gap-2", className),
|
|
2375
|
+
...props
|
|
2376
|
+
});
|
|
2377
|
+
}
|
|
2378
|
+
function Message({ className, align = "start", ...props }) {
|
|
2379
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2380
|
+
"data-slot": "message",
|
|
2381
|
+
"data-align": align,
|
|
2382
|
+
className: cn("group/message relative flex w-full min-w-0 gap-2 text-sm data-[align=end]:flex-row-reverse", className),
|
|
2383
|
+
...props
|
|
2384
|
+
});
|
|
2385
|
+
}
|
|
2386
|
+
function MessageAvatar({ className, ...props }) {
|
|
2387
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2388
|
+
"data-slot": "message-avatar",
|
|
2389
|
+
className: cn("flex w-fit min-w-8 shrink-0 items-center justify-center self-end overflow-hidden rounded-full bg-muted group-has-data-[slot=message-footer]/message:-translate-y-8", className),
|
|
2390
|
+
...props
|
|
2391
|
+
});
|
|
2392
|
+
}
|
|
2393
|
+
function MessageContent({ className, ...props }) {
|
|
2394
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2395
|
+
"data-slot": "message-content",
|
|
2396
|
+
className: cn("flex w-full min-w-0 flex-col gap-2.5 wrap-break-word group-data-[align=end]/message:*:data-slot:self-end", className),
|
|
2397
|
+
...props
|
|
2398
|
+
});
|
|
2399
|
+
}
|
|
2400
|
+
function MessageHeader({ className, ...props }) {
|
|
2401
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2402
|
+
"data-slot": "message-header",
|
|
2403
|
+
className: cn("flex max-w-full min-w-0 items-center px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0", className),
|
|
2404
|
+
...props
|
|
2405
|
+
});
|
|
2406
|
+
}
|
|
2407
|
+
function MessageFooter({ className, ...props }) {
|
|
2408
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2409
|
+
"data-slot": "message-footer",
|
|
2410
|
+
className: cn("flex max-w-full min-w-0 items-center px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0 group-data-[align=end]/message:justify-end", className),
|
|
2411
|
+
...props
|
|
2412
|
+
});
|
|
2413
|
+
}
|
|
2414
|
+
//#endregion
|
|
2415
|
+
//#region src/components/ui/message-scroller.tsx
|
|
2416
|
+
function MessageScrollerProvider(props) {
|
|
2417
|
+
return /* @__PURE__ */ jsx(MessageScroller$1.Provider, { ...props });
|
|
2418
|
+
}
|
|
2419
|
+
function MessageScroller({ className, ...props }) {
|
|
2420
|
+
return /* @__PURE__ */ jsx(MessageScroller$1.Root, {
|
|
2421
|
+
"data-slot": "message-scroller",
|
|
2422
|
+
className: cn("group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden", className),
|
|
2423
|
+
...props
|
|
2424
|
+
});
|
|
2425
|
+
}
|
|
2426
|
+
function MessageScrollerViewport({ className, ...props }) {
|
|
2427
|
+
return /* @__PURE__ */ jsx(MessageScroller$1.Viewport, {
|
|
2428
|
+
"data-slot": "message-scroller-viewport",
|
|
2429
|
+
className: cn("size-full min-h-0 min-w-0 scroll-fade-b scrollbar-thin scrollbar-gutter-stable overflow-y-auto overscroll-contain contain-content data-autoscrolling:scrollbar-thumb-transparent data-autoscrolling:scrollbar-track-transparent data-pending-scroll:invisible", className),
|
|
2430
|
+
...props
|
|
2431
|
+
});
|
|
2432
|
+
}
|
|
2433
|
+
function MessageScrollerContent({ className, ...props }) {
|
|
2434
|
+
return /* @__PURE__ */ jsx(MessageScroller$1.Content, {
|
|
2435
|
+
"data-slot": "message-scroller-content",
|
|
2436
|
+
className: cn("flex h-max min-h-full flex-col gap-6", className),
|
|
2437
|
+
...props
|
|
2438
|
+
});
|
|
2439
|
+
}
|
|
2440
|
+
function MessageScrollerItem({ className, scrollAnchor = false, ...props }) {
|
|
2441
|
+
return /* @__PURE__ */ jsx(MessageScroller$1.Item, {
|
|
2442
|
+
"data-slot": "message-scroller-item",
|
|
2443
|
+
scrollAnchor,
|
|
2444
|
+
className: cn("min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]", className),
|
|
2445
|
+
...props
|
|
2446
|
+
});
|
|
2447
|
+
}
|
|
2448
|
+
function MessageScrollerButton({ direction = "end", className, children, render, variant = "secondary", size = "icon-sm", ...props }) {
|
|
2449
|
+
return /* @__PURE__ */ jsx(MessageScroller$1.Button, {
|
|
2450
|
+
"data-slot": "message-scroller-button",
|
|
2451
|
+
"data-direction": direction,
|
|
2452
|
+
"data-variant": variant,
|
|
2453
|
+
"data-size": size,
|
|
2454
|
+
direction,
|
|
2455
|
+
className: cn("absolute inset-s-1/2 -translate-x-1/2 border-border bg-background text-foreground transition-[translate,scale,opacity] duration-200 hover:bg-muted hover:text-foreground data-[active=false]:pointer-events-none data-[active=false]:scale-95 data-[active=false]:opacity-0 data-[active=false]:duration-400 data-[active=false]:ease-[cubic-bezier(0.7,0,0.84,0)] data-[active=true]:translate-y-0 data-[active=true]:scale-100 data-[active=true]:opacity-100 data-[active=true]:ease-[cubic-bezier(0.23,1,0.32,1)] data-[direction=end]:bottom-4 data-[direction=end]:data-[active=false]:translate-y-full data-[direction=start]:top-4 data-[direction=start]:data-[active=false]:-translate-y-full rtl:translate-x-1/2 data-[direction=start]:[&_svg]:rotate-180", className),
|
|
2456
|
+
render: render ?? /* @__PURE__ */ jsx(Button, {
|
|
2457
|
+
variant,
|
|
2458
|
+
size
|
|
2459
|
+
}),
|
|
2460
|
+
...props,
|
|
2461
|
+
children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(ArrowDownIcon, {}), /* @__PURE__ */ jsx("span", {
|
|
2462
|
+
className: "sr-only",
|
|
2463
|
+
children: direction === "end" ? "Scroll to end" : "Scroll to start"
|
|
2464
|
+
})] })
|
|
2465
|
+
});
|
|
2466
|
+
}
|
|
2467
|
+
//#endregion
|
|
2468
|
+
//#region src/components/ui/native-select.tsx
|
|
2469
|
+
function NativeSelect({ className, size = "default", ...props }) {
|
|
2470
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
2471
|
+
className: cn("group/native-select relative w-fit has-[select:disabled]:opacity-50", className),
|
|
2472
|
+
"data-slot": "native-select-wrapper",
|
|
2473
|
+
"data-size": size,
|
|
2474
|
+
children: [/* @__PURE__ */ jsx("select", {
|
|
2475
|
+
"data-slot": "native-select",
|
|
2476
|
+
"data-size": size,
|
|
2477
|
+
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",
|
|
2478
|
+
...props
|
|
2479
|
+
}), /* @__PURE__ */ jsx(ChevronDownIcon, {
|
|
2480
|
+
className: "pointer-events-none absolute top-1/2 right-2.5 size-4 -translate-y-1/2 text-muted-foreground select-none",
|
|
2481
|
+
"aria-hidden": "true",
|
|
2482
|
+
"data-slot": "native-select-icon"
|
|
2483
|
+
})]
|
|
2484
|
+
});
|
|
2485
|
+
}
|
|
2486
|
+
function NativeSelectOption({ className, ...props }) {
|
|
2487
|
+
return /* @__PURE__ */ jsx("option", {
|
|
2488
|
+
"data-slot": "native-select-option",
|
|
2489
|
+
className: cn("bg-[Canvas] text-[CanvasText]", className),
|
|
2490
|
+
...props
|
|
2491
|
+
});
|
|
2492
|
+
}
|
|
2493
|
+
function NativeSelectOptGroup({ className, ...props }) {
|
|
2494
|
+
return /* @__PURE__ */ jsx("optgroup", {
|
|
2495
|
+
"data-slot": "native-select-optgroup",
|
|
2496
|
+
className: cn("bg-[Canvas] text-[CanvasText]", className),
|
|
2497
|
+
...props
|
|
2498
|
+
});
|
|
2499
|
+
}
|
|
2500
|
+
//#endregion
|
|
2501
|
+
//#region src/components/ui/navigation-menu.tsx
|
|
2502
|
+
function NavigationMenu({ align = "start", className, children, ...props }) {
|
|
2503
|
+
return /* @__PURE__ */ jsxs(NavigationMenu$1.Root, {
|
|
2504
|
+
"data-slot": "navigation-menu",
|
|
2505
|
+
className: cn("group/navigation-menu relative flex max-w-max flex-1 items-center justify-center", className),
|
|
2506
|
+
...props,
|
|
2507
|
+
children: [children, /* @__PURE__ */ jsx(NavigationMenuPositioner, { align })]
|
|
2508
|
+
});
|
|
2509
|
+
}
|
|
2510
|
+
function NavigationMenuList({ className, ...props }) {
|
|
2511
|
+
return /* @__PURE__ */ jsx(NavigationMenu$1.List, {
|
|
2512
|
+
"data-slot": "navigation-menu-list",
|
|
2513
|
+
className: cn("group flex flex-1 list-none items-center justify-center gap-0", className),
|
|
2514
|
+
...props
|
|
2515
|
+
});
|
|
2516
|
+
}
|
|
2517
|
+
function NavigationMenuItem({ className, ...props }) {
|
|
2518
|
+
return /* @__PURE__ */ jsx(NavigationMenu$1.Item, {
|
|
2519
|
+
"data-slot": "navigation-menu-item",
|
|
2520
|
+
className: cn("relative", className),
|
|
2521
|
+
...props
|
|
2522
|
+
});
|
|
2523
|
+
}
|
|
2524
|
+
const navigationMenuTriggerStyle = cva("group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-lg px-2.5 py-1.5 text-sm font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted");
|
|
2525
|
+
function NavigationMenuTrigger({ className, children, ...props }) {
|
|
2526
|
+
return /* @__PURE__ */ jsxs(NavigationMenu$1.Trigger, {
|
|
2527
|
+
"data-slot": "navigation-menu-trigger",
|
|
2528
|
+
className: cn(navigationMenuTriggerStyle(), "group", className),
|
|
2529
|
+
...props,
|
|
2530
|
+
children: [
|
|
2531
|
+
children,
|
|
2532
|
+
" ",
|
|
2533
|
+
/* @__PURE__ */ jsx(ChevronDownIcon, {
|
|
2534
|
+
className: "relative top-px ml-1 size-3 transition duration-300 group-data-popup-open/navigation-menu-trigger:rotate-180 group-data-open/navigation-menu-trigger:rotate-180",
|
|
2535
|
+
"aria-hidden": "true"
|
|
2536
|
+
})
|
|
2537
|
+
]
|
|
2538
|
+
});
|
|
2539
|
+
}
|
|
2540
|
+
function NavigationMenuContent({ className, ...props }) {
|
|
2541
|
+
return /* @__PURE__ */ jsx(NavigationMenu$1.Content, {
|
|
2542
|
+
"data-slot": "navigation-menu-content",
|
|
2543
|
+
className: cn("data-ending-style:data-activation-direction=left:translate-x-[50%] data-ending-style:data-activation-direction=right:translate-x-[-50%] data-starting-style:data-activation-direction=left:translate-x-[-50%] data-starting-style:data-activation-direction=right:translate-x-[50%] h-full w-auto p-1 transition-[opacity,transform,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:ring-foreground/10 group-data-[viewport=false]/navigation-menu:duration-300 data-ending-style:opacity-0 data-starting-style:opacity-0 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95", className),
|
|
2544
|
+
...props
|
|
2545
|
+
});
|
|
2546
|
+
}
|
|
2547
|
+
function NavigationMenuPositioner({ className, side = "bottom", sideOffset = 8, align = "start", alignOffset = 0, ...props }) {
|
|
2548
|
+
return /* @__PURE__ */ jsx(NavigationMenu$1.Portal, { children: /* @__PURE__ */ jsx(NavigationMenu$1.Positioner, {
|
|
2549
|
+
side,
|
|
2550
|
+
sideOffset,
|
|
2551
|
+
align,
|
|
2552
|
+
alignOffset,
|
|
2553
|
+
className: cn("isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] data-instant:transition-none data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0", className),
|
|
2554
|
+
...props,
|
|
2555
|
+
children: /* @__PURE__ */ jsx(NavigationMenu$1.Popup, {
|
|
2556
|
+
className: "data-[ending-style]:easing-[ease] xs:w-(--popup-width) relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) rounded-lg bg-popover text-popover-foreground shadow ring-1 ring-foreground/10 transition-[opacity,transform,width,height,scale,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0",
|
|
2557
|
+
children: /* @__PURE__ */ jsx(NavigationMenu$1.Viewport, { className: "relative size-full overflow-hidden" })
|
|
2558
|
+
})
|
|
2559
|
+
}) });
|
|
2560
|
+
}
|
|
2561
|
+
function NavigationMenuLink({ className, ...props }) {
|
|
2562
|
+
return /* @__PURE__ */ jsx(NavigationMenu$1.Link, {
|
|
2563
|
+
"data-slot": "navigation-menu-link",
|
|
2564
|
+
className: cn("flex items-center gap-2 rounded-lg p-2 text-sm transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-md data-active:bg-muted/50 data-active:hover:bg-muted data-active:focus:bg-muted [&_svg:not([class*='size-'])]:size-4", className),
|
|
2565
|
+
...props
|
|
2566
|
+
});
|
|
2567
|
+
}
|
|
2568
|
+
function NavigationMenuIndicator({ className, ...props }) {
|
|
2569
|
+
return /* @__PURE__ */ jsx(NavigationMenu$1.Icon, {
|
|
2570
|
+
"data-slot": "navigation-menu-indicator",
|
|
2571
|
+
className: cn("top-full z-1 flex h-1.5 items-end justify-center overflow-hidden data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in", className),
|
|
2572
|
+
...props,
|
|
2573
|
+
children: /* @__PURE__ */ jsx("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" })
|
|
2574
|
+
});
|
|
2575
|
+
}
|
|
2576
|
+
//#endregion
|
|
2577
|
+
//#region src/components/ui/pagination.tsx
|
|
2578
|
+
function Pagination({ className, ...props }) {
|
|
2579
|
+
return /* @__PURE__ */ jsx("nav", {
|
|
2580
|
+
role: "navigation",
|
|
2581
|
+
"aria-label": "pagination",
|
|
2582
|
+
"data-slot": "pagination",
|
|
2583
|
+
className: cn("mx-auto flex w-full justify-center", className),
|
|
2584
|
+
...props
|
|
2585
|
+
});
|
|
2586
|
+
}
|
|
2587
|
+
function PaginationContent({ className, ...props }) {
|
|
2588
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
2589
|
+
"data-slot": "pagination-content",
|
|
2590
|
+
className: cn("flex items-center gap-0.5", className),
|
|
2591
|
+
...props
|
|
2592
|
+
});
|
|
2593
|
+
}
|
|
2594
|
+
function PaginationItem({ ...props }) {
|
|
2595
|
+
return /* @__PURE__ */ jsx("li", {
|
|
2596
|
+
"data-slot": "pagination-item",
|
|
2597
|
+
...props
|
|
2598
|
+
});
|
|
2599
|
+
}
|
|
2600
|
+
function PaginationLink({ className, isActive, size = "icon", ...props }) {
|
|
2601
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
2602
|
+
variant: isActive ? "outline" : "ghost",
|
|
2603
|
+
size,
|
|
2604
|
+
className: cn(className),
|
|
2605
|
+
nativeButton: false,
|
|
2606
|
+
render: /* @__PURE__ */ jsx("a", {
|
|
2607
|
+
"aria-current": isActive ? "page" : void 0,
|
|
2608
|
+
"data-slot": "pagination-link",
|
|
2609
|
+
"data-active": isActive,
|
|
2610
|
+
...props
|
|
2611
|
+
})
|
|
2612
|
+
});
|
|
2613
|
+
}
|
|
2614
|
+
function PaginationPrevious({ className, text = "Previous", ...props }) {
|
|
2615
|
+
return /* @__PURE__ */ jsxs(PaginationLink, {
|
|
2616
|
+
"aria-label": "Go to previous page",
|
|
2617
|
+
size: "default",
|
|
2618
|
+
className: cn("pl-1.5!", className),
|
|
2619
|
+
...props,
|
|
2620
|
+
children: [/* @__PURE__ */ jsx(ChevronLeftIcon, { "data-icon": "inline-start" }), /* @__PURE__ */ jsx("span", {
|
|
2621
|
+
className: "hidden sm:block",
|
|
2622
|
+
children: text
|
|
2623
|
+
})]
|
|
2624
|
+
});
|
|
2625
|
+
}
|
|
2626
|
+
function PaginationNext({ className, text = "Next", ...props }) {
|
|
2627
|
+
return /* @__PURE__ */ jsxs(PaginationLink, {
|
|
2628
|
+
"aria-label": "Go to next page",
|
|
2629
|
+
size: "default",
|
|
2630
|
+
className: cn("pr-1.5!", className),
|
|
2631
|
+
...props,
|
|
2632
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
2633
|
+
className: "hidden sm:block",
|
|
2634
|
+
children: text
|
|
2635
|
+
}), /* @__PURE__ */ jsx(ChevronRightIcon, { "data-icon": "inline-end" })]
|
|
2636
|
+
});
|
|
2637
|
+
}
|
|
2638
|
+
function PaginationEllipsis({ className, ...props }) {
|
|
2639
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
2640
|
+
"aria-hidden": true,
|
|
2641
|
+
"data-slot": "pagination-ellipsis",
|
|
2642
|
+
className: cn("flex size-8 items-center justify-center [&_svg:not([class*='size-'])]:size-4", className),
|
|
2643
|
+
...props,
|
|
2644
|
+
children: [/* @__PURE__ */ jsx(MoreHorizontalIcon, {}), /* @__PURE__ */ jsx("span", {
|
|
2645
|
+
className: "sr-only",
|
|
2646
|
+
children: "More pages"
|
|
2647
|
+
})]
|
|
2648
|
+
});
|
|
2649
|
+
}
|
|
2650
|
+
//#endregion
|
|
2651
|
+
//#region src/components/ui/popover.tsx
|
|
2652
|
+
function Popover({ ...props }) {
|
|
2653
|
+
return /* @__PURE__ */ jsx(Popover$1.Root, {
|
|
2654
|
+
"data-slot": "popover",
|
|
2655
|
+
...props
|
|
2656
|
+
});
|
|
2657
|
+
}
|
|
2658
|
+
function PopoverTrigger({ ...props }) {
|
|
2659
|
+
return /* @__PURE__ */ jsx(Popover$1.Trigger, {
|
|
2660
|
+
"data-slot": "popover-trigger",
|
|
2661
|
+
...props
|
|
2662
|
+
});
|
|
2663
|
+
}
|
|
2664
|
+
function PopoverContent({ className, align = "center", alignOffset = 0, side = "bottom", sideOffset = 4, ...props }) {
|
|
2665
|
+
return /* @__PURE__ */ jsx(Popover$1.Portal, { children: /* @__PURE__ */ jsx(Popover$1.Positioner, {
|
|
2666
|
+
align,
|
|
2667
|
+
alignOffset,
|
|
2668
|
+
side,
|
|
2669
|
+
sideOffset,
|
|
2670
|
+
className: "isolate z-50",
|
|
2671
|
+
children: /* @__PURE__ */ jsx(Popover$1.Popup, {
|
|
2672
|
+
"data-slot": "popover-content",
|
|
2673
|
+
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),
|
|
2674
|
+
...props
|
|
2675
|
+
})
|
|
2676
|
+
}) });
|
|
2677
|
+
}
|
|
2678
|
+
function PopoverHeader({ className, ...props }) {
|
|
2679
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2680
|
+
"data-slot": "popover-header",
|
|
2681
|
+
className: cn("flex flex-col gap-0.5 text-sm", className),
|
|
2682
|
+
...props
|
|
2683
|
+
});
|
|
2684
|
+
}
|
|
2685
|
+
function PopoverTitle({ className, ...props }) {
|
|
2686
|
+
return /* @__PURE__ */ jsx(Popover$1.Title, {
|
|
2687
|
+
"data-slot": "popover-title",
|
|
2688
|
+
className: cn("font-medium", className),
|
|
2689
|
+
...props
|
|
2690
|
+
});
|
|
2691
|
+
}
|
|
2692
|
+
function PopoverDescription({ className, ...props }) {
|
|
2693
|
+
return /* @__PURE__ */ jsx(Popover$1.Description, {
|
|
2694
|
+
"data-slot": "popover-description",
|
|
2695
|
+
className: cn("text-muted-foreground", className),
|
|
2696
|
+
...props
|
|
2697
|
+
});
|
|
2698
|
+
}
|
|
2699
|
+
//#endregion
|
|
2700
|
+
//#region src/components/ui/progress.tsx
|
|
2701
|
+
function Progress({ className, children, value, ...props }) {
|
|
2702
|
+
return /* @__PURE__ */ jsxs(Progress$1.Root, {
|
|
2703
|
+
value,
|
|
2704
|
+
"data-slot": "progress",
|
|
2705
|
+
className: cn("flex flex-wrap gap-3", className),
|
|
2706
|
+
...props,
|
|
2707
|
+
children: [children, /* @__PURE__ */ jsx(ProgressTrack, { children: /* @__PURE__ */ jsx(ProgressIndicator, {}) })]
|
|
2708
|
+
});
|
|
2709
|
+
}
|
|
2710
|
+
function ProgressTrack({ className, ...props }) {
|
|
2711
|
+
return /* @__PURE__ */ jsx(Progress$1.Track, {
|
|
2712
|
+
className: cn("relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-muted", className),
|
|
2713
|
+
"data-slot": "progress-track",
|
|
2714
|
+
...props
|
|
2715
|
+
});
|
|
2716
|
+
}
|
|
2717
|
+
function ProgressIndicator({ className, ...props }) {
|
|
2718
|
+
return /* @__PURE__ */ jsx(Progress$1.Indicator, {
|
|
2719
|
+
"data-slot": "progress-indicator",
|
|
2720
|
+
className: cn("h-full bg-primary transition-all", className),
|
|
2721
|
+
...props
|
|
2722
|
+
});
|
|
2723
|
+
}
|
|
2724
|
+
function ProgressLabel({ className, ...props }) {
|
|
2725
|
+
return /* @__PURE__ */ jsx(Progress$1.Label, {
|
|
2726
|
+
className: cn("text-sm font-medium", className),
|
|
2727
|
+
"data-slot": "progress-label",
|
|
2728
|
+
...props
|
|
2729
|
+
});
|
|
2730
|
+
}
|
|
2731
|
+
function ProgressValue({ className, ...props }) {
|
|
2732
|
+
return /* @__PURE__ */ jsx(Progress$1.Value, {
|
|
2733
|
+
className: cn("ml-auto text-sm text-muted-foreground tabular-nums", className),
|
|
2734
|
+
"data-slot": "progress-value",
|
|
2735
|
+
...props
|
|
2736
|
+
});
|
|
2737
|
+
}
|
|
2738
|
+
//#endregion
|
|
2739
|
+
//#region src/components/ui/questionnaire.tsx
|
|
2740
|
+
function Questionnaire({ className, ...props }) {
|
|
2741
|
+
return /* @__PURE__ */ jsx(Questionnaire$1.Root, {
|
|
2742
|
+
"data-slot": "questionnaire",
|
|
2743
|
+
className: cn("flex w-full min-w-0 flex-col gap-4", className),
|
|
2744
|
+
...props
|
|
2745
|
+
});
|
|
2746
|
+
}
|
|
2747
|
+
function QuestionnaireProgress({ className, ...props }) {
|
|
2748
|
+
return /* @__PURE__ */ jsx(Questionnaire$1.Progress, {
|
|
2749
|
+
"data-slot": "questionnaire-progress",
|
|
2750
|
+
className: cn("min-h-[1lh] w-fit min-w-[14ch] text-xs font-medium text-muted-foreground tabular-nums", className),
|
|
2751
|
+
...props
|
|
2752
|
+
});
|
|
2753
|
+
}
|
|
2754
|
+
function QuestionnaireItem({ className, ...props }) {
|
|
2755
|
+
return /* @__PURE__ */ jsx(Questionnaire$1.Item, {
|
|
2756
|
+
"data-slot": "questionnaire-item",
|
|
2757
|
+
className: cn("flex min-w-0 flex-col gap-4 border-0 p-0 outline-none", className),
|
|
2758
|
+
...props
|
|
2759
|
+
});
|
|
2760
|
+
}
|
|
2761
|
+
function QuestionnaireTitle({ className, ...props }) {
|
|
2762
|
+
return /* @__PURE__ */ jsx(Questionnaire$1.Title, {
|
|
2763
|
+
"data-slot": "questionnaire-title",
|
|
2764
|
+
className: cn("font-heading text-base leading-snug font-medium text-pretty [&:not(:has(~[data-slot=questionnaire-description]))]:mb-4", className),
|
|
2765
|
+
...props
|
|
2766
|
+
});
|
|
2767
|
+
}
|
|
2768
|
+
function QuestionnaireDescription({ className, ...props }) {
|
|
2769
|
+
return /* @__PURE__ */ jsx(Questionnaire$1.Description, {
|
|
2770
|
+
"data-slot": "questionnaire-description",
|
|
2771
|
+
className: cn("text-sm text-pretty text-muted-foreground", className),
|
|
2772
|
+
...props
|
|
2773
|
+
});
|
|
2774
|
+
}
|
|
2775
|
+
function QuestionnaireChoices({ className, ...props }) {
|
|
2776
|
+
return /* @__PURE__ */ jsx(Questionnaire$1.Choices, {
|
|
2777
|
+
"data-slot": "questionnaire-choices",
|
|
2778
|
+
className: cn("group/questionnaire-choices grid min-w-0 gap-2", className),
|
|
2779
|
+
...props
|
|
2780
|
+
});
|
|
2781
|
+
}
|
|
2782
|
+
function QuestionnaireChoice({ children, className, ...props }) {
|
|
2783
|
+
return /* @__PURE__ */ jsxs(Questionnaire$1.Choice, {
|
|
2784
|
+
"data-slot": "questionnaire-choice",
|
|
2785
|
+
className: cn("group/questionnaire-choice relative flex min-h-11 cursor-pointer items-start gap-2.5 rounded-lg border border-input bg-transparent px-3 py-2.5 text-start text-sm transition-colors outline-none select-none hover:bg-muted/50 has-[>input:focus-visible]:border-ring has-[>input:focus-visible]:ring-3 has-[>input:focus-visible]:ring-ring/50 data-invalid:border-destructive dark:bg-input/20 data-checked:border-primary/40 data-checked:bg-muted dark:data-checked:bg-muted", "data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50", className),
|
|
2786
|
+
...props,
|
|
2787
|
+
children: [
|
|
2788
|
+
/* @__PURE__ */ jsx(Questionnaire$1.ChoiceInput, {
|
|
2789
|
+
"data-slot": "questionnaire-choice-input",
|
|
2790
|
+
className: "absolute inset-0 z-10 size-full cursor-pointer opacity-0"
|
|
2791
|
+
}),
|
|
2792
|
+
/* @__PURE__ */ jsxs("span", {
|
|
2793
|
+
"aria-hidden": "true",
|
|
2794
|
+
"data-slot": "questionnaire-choice-indicator",
|
|
2795
|
+
className: "pointer-events-none relative flex size-4 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-[4px] border border-input group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[type=radio]/questionnaire-choice:rounded-full group-data-checked/questionnaire-choice:border-primary group-data-checked/questionnaire-choice:bg-primary group-data-checked/questionnaire-choice:text-primary-foreground dark:bg-input/30 dark:group-data-checked/questionnaire-choice:bg-primary",
|
|
2796
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
2797
|
+
"data-slot": "questionnaire-choice-indicator-dot",
|
|
2798
|
+
className: "hidden size-2 rounded-full bg-primary-foreground group-data-[type=checkbox]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block"
|
|
2799
|
+
}), /* @__PURE__ */ jsx(CheckIcon, {
|
|
2800
|
+
"data-slot": "questionnaire-choice-indicator-check",
|
|
2801
|
+
className: "hidden size-3.5 group-data-[type=radio]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block"
|
|
2802
|
+
})]
|
|
2803
|
+
}),
|
|
2804
|
+
/* @__PURE__ */ jsx(Questionnaire$1.ChoiceLabel, {
|
|
2805
|
+
"data-slot": "questionnaire-choice-label",
|
|
2806
|
+
className: "flex min-w-0 flex-1 flex-col gap-0.5 leading-snug",
|
|
2807
|
+
children
|
|
2808
|
+
}),
|
|
2809
|
+
/* @__PURE__ */ jsx(Questionnaire$1.ChoiceShortcut, {
|
|
2810
|
+
"data-slot": "questionnaire-choice-shortcut",
|
|
2811
|
+
className: "pointer-events-none ms-auto hidden size-5 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-md border border-input bg-background font-mono text-[0.625rem] leading-none font-medium text-muted-foreground group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[shortcut]/questionnaire-choice:inline-flex"
|
|
2812
|
+
})
|
|
2813
|
+
]
|
|
2814
|
+
});
|
|
2815
|
+
}
|
|
2816
|
+
function QuestionnaireChoiceDescription({ className, ...props }) {
|
|
2817
|
+
return /* @__PURE__ */ jsx("span", {
|
|
2818
|
+
"data-slot": "questionnaire-choice-description",
|
|
2819
|
+
className: cn("text-muted-foreground", className),
|
|
2820
|
+
...props
|
|
2821
|
+
});
|
|
2822
|
+
}
|
|
2823
|
+
function QuestionnaireInput({ className, ...props }) {
|
|
2824
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2825
|
+
"data-slot": "questionnaire-input-wrapper",
|
|
2826
|
+
className: "group/questionnaire-input relative w-full min-w-0",
|
|
2827
|
+
children: /* @__PURE__ */ jsx(Questionnaire$1.Input, {
|
|
2828
|
+
"data-slot": "questionnaire-input",
|
|
2829
|
+
className: cn("h-8 min-h-11 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-[color,box-shadow,background-color] outline-none 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 sm:min-h-0 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", "selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground", className),
|
|
2830
|
+
...props
|
|
2831
|
+
})
|
|
2832
|
+
});
|
|
2833
|
+
}
|
|
2834
|
+
function QuestionnaireError({ className, ...props }) {
|
|
2835
|
+
return /* @__PURE__ */ jsx(Questionnaire$1.Error, {
|
|
2836
|
+
"data-slot": "questionnaire-error",
|
|
2837
|
+
className: cn("mt-2 text-sm text-destructive", className),
|
|
2838
|
+
...props
|
|
2839
|
+
});
|
|
2840
|
+
}
|
|
2841
|
+
function QuestionnaireActions({ className, ...props }) {
|
|
2842
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2843
|
+
"data-slot": "questionnaire-actions",
|
|
2844
|
+
className: cn("grid min-h-11 w-full grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-2 sm:min-h-8", className),
|
|
2845
|
+
...props
|
|
2846
|
+
});
|
|
2847
|
+
}
|
|
2848
|
+
function QuestionnairePrevious({ children, className, size = "default", variant = "outline", ...props }) {
|
|
2849
|
+
return /* @__PURE__ */ jsx(Questionnaire$1.Previous, {
|
|
2850
|
+
"data-slot": "questionnaire-previous",
|
|
2851
|
+
"data-size": size,
|
|
2852
|
+
"data-variant": variant,
|
|
2853
|
+
className: cn(buttonVariants({
|
|
2854
|
+
size,
|
|
2855
|
+
variant
|
|
2856
|
+
}), "col-start-1 row-start-1 min-h-11 justify-self-start sm:min-h-0", className),
|
|
2857
|
+
...props,
|
|
2858
|
+
children: children ?? "Previous"
|
|
2859
|
+
});
|
|
2860
|
+
}
|
|
2861
|
+
function QuestionnaireSkip({ children, className, size = "default", variant = "outline", ...props }) {
|
|
2862
|
+
return /* @__PURE__ */ jsx(Questionnaire$1.Skip, {
|
|
2863
|
+
"data-slot": "questionnaire-skip",
|
|
2864
|
+
"data-size": size,
|
|
2865
|
+
"data-variant": variant,
|
|
2866
|
+
className: cn(buttonVariants({
|
|
2867
|
+
size,
|
|
2868
|
+
variant
|
|
2869
|
+
}), "col-start-2 row-start-1 min-h-11 justify-self-end sm:min-h-0", className),
|
|
2870
|
+
...props,
|
|
2871
|
+
children: children ?? "Skip"
|
|
2872
|
+
});
|
|
2873
|
+
}
|
|
2874
|
+
function QuestionnaireNext({ children, className, size = "default", variant = "default", ...props }) {
|
|
2875
|
+
return /* @__PURE__ */ jsx(Questionnaire$1.Next, {
|
|
2876
|
+
"data-slot": "questionnaire-next",
|
|
2877
|
+
"data-size": size,
|
|
2878
|
+
"data-variant": variant,
|
|
2879
|
+
className: cn(buttonVariants({
|
|
2880
|
+
size,
|
|
2881
|
+
variant
|
|
2882
|
+
}), "col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0", className),
|
|
2883
|
+
...props,
|
|
2884
|
+
children: children ?? "Next"
|
|
2885
|
+
});
|
|
2886
|
+
}
|
|
2887
|
+
function QuestionnaireSubmit({ children, className, size = "default", variant = "default", ...props }) {
|
|
2888
|
+
return /* @__PURE__ */ jsx(Questionnaire$1.Submit, {
|
|
2889
|
+
"data-slot": "questionnaire-submit",
|
|
2890
|
+
"data-size": size,
|
|
2891
|
+
"data-variant": variant,
|
|
2892
|
+
className: cn(buttonVariants({
|
|
2893
|
+
size,
|
|
2894
|
+
variant
|
|
2895
|
+
}), "col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0", className),
|
|
2896
|
+
...props,
|
|
2897
|
+
children: children ?? "Submit"
|
|
2898
|
+
});
|
|
2899
|
+
}
|
|
2900
|
+
//#endregion
|
|
2901
|
+
//#region src/components/ui/radio-group.tsx
|
|
2902
|
+
function RadioGroup({ className, ...props }) {
|
|
2903
|
+
return /* @__PURE__ */ jsx(RadioGroup$1, {
|
|
2904
|
+
"data-slot": "radio-group",
|
|
2905
|
+
className: cn("grid w-full gap-2", className),
|
|
2906
|
+
...props
|
|
2907
|
+
});
|
|
2908
|
+
}
|
|
2909
|
+
function RadioGroupItem({ className, ...props }) {
|
|
2910
|
+
return /* @__PURE__ */ jsx(Radio.Root, {
|
|
2911
|
+
"data-slot": "radio-group-item",
|
|
2912
|
+
className: cn("group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none 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),
|
|
2913
|
+
...props,
|
|
2914
|
+
children: /* @__PURE__ */ jsx(Radio.Indicator, {
|
|
2915
|
+
"data-slot": "radio-group-indicator",
|
|
2916
|
+
className: "flex size-4 items-center justify-center",
|
|
2917
|
+
children: /* @__PURE__ */ jsx("span", { className: "absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground" })
|
|
2918
|
+
})
|
|
2919
|
+
});
|
|
2920
|
+
}
|
|
2921
|
+
//#endregion
|
|
2922
|
+
//#region src/components/ui/resizable.tsx
|
|
2923
|
+
function ResizablePanelGroup({ className, ...props }) {
|
|
2924
|
+
return /* @__PURE__ */ jsx(ResizablePrimitive.Group, {
|
|
2925
|
+
"data-slot": "resizable-panel-group",
|
|
2926
|
+
className: cn("flex h-full w-full aria-[orientation=vertical]:flex-col", className),
|
|
2927
|
+
...props
|
|
2928
|
+
});
|
|
2929
|
+
}
|
|
2930
|
+
function ResizablePanel({ ...props }) {
|
|
2931
|
+
return /* @__PURE__ */ jsx(ResizablePrimitive.Panel, {
|
|
2932
|
+
"data-slot": "resizable-panel",
|
|
2933
|
+
...props
|
|
2934
|
+
});
|
|
2935
|
+
}
|
|
2936
|
+
function ResizableHandle({ withHandle, className, ...props }) {
|
|
2937
|
+
return /* @__PURE__ */ jsx(ResizablePrimitive.Separator, {
|
|
2938
|
+
"data-slot": "resizable-handle",
|
|
2939
|
+
className: cn("relative flex w-px items-center justify-center bg-border ring-offset-background after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90", className),
|
|
2940
|
+
...props,
|
|
2941
|
+
children: withHandle && /* @__PURE__ */ jsx("div", { className: "z-10 flex h-6 w-1 shrink-0 rounded-lg bg-border" })
|
|
2942
|
+
});
|
|
2943
|
+
}
|
|
2944
|
+
//#endregion
|
|
2945
|
+
//#region src/components/ui/scroll-area.tsx
|
|
2946
|
+
function ScrollArea({ className, children, ...props }) {
|
|
2947
|
+
return /* @__PURE__ */ jsxs(ScrollArea$1.Root, {
|
|
2948
|
+
"data-slot": "scroll-area",
|
|
2949
|
+
className: cn("relative", className),
|
|
2950
|
+
...props,
|
|
2951
|
+
children: [
|
|
2952
|
+
/* @__PURE__ */ jsx(ScrollArea$1.Viewport, {
|
|
2953
|
+
"data-slot": "scroll-area-viewport",
|
|
2954
|
+
className: "size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1",
|
|
2955
|
+
children
|
|
2956
|
+
}),
|
|
2957
|
+
/* @__PURE__ */ jsx(ScrollBar, {}),
|
|
2958
|
+
/* @__PURE__ */ jsx(ScrollArea$1.Corner, {})
|
|
2959
|
+
]
|
|
2960
|
+
});
|
|
2961
|
+
}
|
|
2962
|
+
function ScrollBar({ className, orientation = "vertical", ...props }) {
|
|
2963
|
+
return /* @__PURE__ */ jsx(ScrollArea$1.Scrollbar, {
|
|
2964
|
+
"data-slot": "scroll-area-scrollbar",
|
|
2965
|
+
"data-orientation": orientation,
|
|
2966
|
+
orientation,
|
|
2967
|
+
className: cn("flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent", className),
|
|
2968
|
+
...props,
|
|
2969
|
+
children: /* @__PURE__ */ jsx(ScrollArea$1.Thumb, {
|
|
2970
|
+
"data-slot": "scroll-area-thumb",
|
|
2971
|
+
className: "relative flex-1 rounded-full bg-border"
|
|
2972
|
+
})
|
|
2973
|
+
});
|
|
2974
|
+
}
|
|
2975
|
+
//#endregion
|
|
2976
|
+
//#region src/components/ui/select.tsx
|
|
2977
|
+
const Select = Select$1.Root;
|
|
2978
|
+
function SelectGroup({ className, ...props }) {
|
|
2979
|
+
return /* @__PURE__ */ jsx(Select$1.Group, {
|
|
2980
|
+
"data-slot": "select-group",
|
|
2981
|
+
className: cn("scroll-my-1 p-1", className),
|
|
2982
|
+
...props
|
|
2983
|
+
});
|
|
2984
|
+
}
|
|
2985
|
+
function SelectValue({ className, ...props }) {
|
|
2986
|
+
return /* @__PURE__ */ jsx(Select$1.Value, {
|
|
2987
|
+
"data-slot": "select-value",
|
|
2988
|
+
className: cn("flex flex-1 text-left", className),
|
|
2989
|
+
...props
|
|
2990
|
+
});
|
|
2991
|
+
}
|
|
2992
|
+
function SelectTrigger({ className, size = "default", children, ...props }) {
|
|
2993
|
+
return /* @__PURE__ */ jsxs(Select$1.Trigger, {
|
|
2994
|
+
"data-slot": "select-trigger",
|
|
2995
|
+
"data-size": size,
|
|
2996
|
+
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),
|
|
2997
|
+
...props,
|
|
2998
|
+
children: [children, /* @__PURE__ */ jsx(Select$1.Icon, { render: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" }) })]
|
|
2999
|
+
});
|
|
3000
|
+
}
|
|
3001
|
+
function SelectContent({ className, children, side = "bottom", sideOffset = 4, align = "center", alignOffset = 0, alignItemWithTrigger = true, ...props }) {
|
|
3002
|
+
return /* @__PURE__ */ jsx(Select$1.Portal, { children: /* @__PURE__ */ jsx(Select$1.Positioner, {
|
|
3003
|
+
side,
|
|
3004
|
+
sideOffset,
|
|
3005
|
+
align,
|
|
3006
|
+
alignOffset,
|
|
3007
|
+
alignItemWithTrigger,
|
|
3008
|
+
className: "isolate z-50",
|
|
3009
|
+
children: /* @__PURE__ */ jsxs(Select$1.Popup, {
|
|
3010
|
+
"data-slot": "select-content",
|
|
3011
|
+
"data-align-trigger": alignItemWithTrigger,
|
|
3012
|
+
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),
|
|
3013
|
+
...props,
|
|
3014
|
+
children: [
|
|
3015
|
+
/* @__PURE__ */ jsx(SelectScrollUpButton, {}),
|
|
3016
|
+
/* @__PURE__ */ jsx(Select$1.List, { children }),
|
|
3017
|
+
/* @__PURE__ */ jsx(SelectScrollDownButton, {})
|
|
3018
|
+
]
|
|
3019
|
+
})
|
|
3020
|
+
}) });
|
|
3021
|
+
}
|
|
3022
|
+
function SelectLabel({ className, ...props }) {
|
|
3023
|
+
return /* @__PURE__ */ jsx(Select$1.GroupLabel, {
|
|
3024
|
+
"data-slot": "select-label",
|
|
3025
|
+
className: cn("px-1.5 py-1 text-xs text-muted-foreground", className),
|
|
3026
|
+
...props
|
|
3027
|
+
});
|
|
3028
|
+
}
|
|
3029
|
+
function SelectItem({ className, children, ...props }) {
|
|
3030
|
+
return /* @__PURE__ */ jsxs(Select$1.Item, {
|
|
3031
|
+
"data-slot": "select-item",
|
|
3032
|
+
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),
|
|
3033
|
+
...props,
|
|
3034
|
+
children: [/* @__PURE__ */ jsx(Select$1.ItemText, {
|
|
3035
|
+
className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap",
|
|
3036
|
+
children
|
|
3037
|
+
}), /* @__PURE__ */ jsx(Select$1.ItemIndicator, {
|
|
3038
|
+
render: /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
|
|
3039
|
+
children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" })
|
|
3040
|
+
})]
|
|
3041
|
+
});
|
|
3042
|
+
}
|
|
3043
|
+
function SelectSeparator({ className, ...props }) {
|
|
3044
|
+
return /* @__PURE__ */ jsx(Select$1.Separator, {
|
|
3045
|
+
"data-slot": "select-separator",
|
|
3046
|
+
className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
|
|
3047
|
+
...props
|
|
3048
|
+
});
|
|
3049
|
+
}
|
|
3050
|
+
function SelectScrollUpButton({ className, ...props }) {
|
|
3051
|
+
return /* @__PURE__ */ jsx(Select$1.ScrollUpArrow, {
|
|
3052
|
+
"data-slot": "select-scroll-up-button",
|
|
3053
|
+
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),
|
|
3054
|
+
...props,
|
|
3055
|
+
children: /* @__PURE__ */ jsx(ChevronUpIcon, {})
|
|
3056
|
+
});
|
|
3057
|
+
}
|
|
3058
|
+
function SelectScrollDownButton({ className, ...props }) {
|
|
3059
|
+
return /* @__PURE__ */ jsx(Select$1.ScrollDownArrow, {
|
|
3060
|
+
"data-slot": "select-scroll-down-button",
|
|
3061
|
+
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),
|
|
3062
|
+
...props,
|
|
3063
|
+
children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
|
|
3064
|
+
});
|
|
3065
|
+
}
|
|
3066
|
+
//#endregion
|
|
3067
|
+
//#region src/components/ui/sheet.tsx
|
|
3068
|
+
function Sheet({ ...props }) {
|
|
3069
|
+
return /* @__PURE__ */ jsx(Dialog$1.Root, {
|
|
3070
|
+
"data-slot": "sheet",
|
|
3071
|
+
...props
|
|
3072
|
+
});
|
|
3073
|
+
}
|
|
3074
|
+
function SheetTrigger({ ...props }) {
|
|
3075
|
+
return /* @__PURE__ */ jsx(Dialog$1.Trigger, {
|
|
3076
|
+
"data-slot": "sheet-trigger",
|
|
3077
|
+
...props
|
|
3078
|
+
});
|
|
3079
|
+
}
|
|
3080
|
+
function SheetClose({ ...props }) {
|
|
3081
|
+
return /* @__PURE__ */ jsx(Dialog$1.Close, {
|
|
3082
|
+
"data-slot": "sheet-close",
|
|
3083
|
+
...props
|
|
3084
|
+
});
|
|
3085
|
+
}
|
|
3086
|
+
function SheetPortal({ ...props }) {
|
|
3087
|
+
return /* @__PURE__ */ jsx(Dialog$1.Portal, {
|
|
3088
|
+
"data-slot": "sheet-portal",
|
|
3089
|
+
...props
|
|
3090
|
+
});
|
|
3091
|
+
}
|
|
3092
|
+
function SheetOverlay({ className, ...props }) {
|
|
3093
|
+
return /* @__PURE__ */ jsx(Dialog$1.Backdrop, {
|
|
3094
|
+
"data-slot": "sheet-overlay",
|
|
3095
|
+
className: cn("fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs", className),
|
|
3096
|
+
...props
|
|
3097
|
+
});
|
|
3098
|
+
}
|
|
3099
|
+
function SheetContent({ className, children, side = "right", showCloseButton = true, ...props }) {
|
|
3100
|
+
return /* @__PURE__ */ jsxs(SheetPortal, { children: [/* @__PURE__ */ jsx(SheetOverlay, {}), /* @__PURE__ */ jsxs(Dialog$1.Popup, {
|
|
3101
|
+
"data-slot": "sheet-content",
|
|
3102
|
+
"data-side": side,
|
|
3103
|
+
className: cn("fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm", className),
|
|
3104
|
+
...props,
|
|
3105
|
+
children: [children, showCloseButton && /* @__PURE__ */ jsxs(Dialog$1.Close, {
|
|
3106
|
+
"data-slot": "sheet-close",
|
|
3107
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
3108
|
+
variant: "ghost",
|
|
3109
|
+
className: "absolute top-3 right-3",
|
|
3110
|
+
size: "icon-sm"
|
|
3111
|
+
}),
|
|
3112
|
+
children: [/* @__PURE__ */ jsx(XIcon, {}), /* @__PURE__ */ jsx("span", {
|
|
3113
|
+
className: "sr-only",
|
|
3114
|
+
children: "Close"
|
|
3115
|
+
})]
|
|
3116
|
+
})]
|
|
3117
|
+
})] });
|
|
3118
|
+
}
|
|
3119
|
+
function SheetHeader({ className, ...props }) {
|
|
3120
|
+
return /* @__PURE__ */ jsx("div", {
|
|
3121
|
+
"data-slot": "sheet-header",
|
|
3122
|
+
className: cn("flex flex-col gap-0.5 p-4", className),
|
|
3123
|
+
...props
|
|
3124
|
+
});
|
|
3125
|
+
}
|
|
3126
|
+
function SheetFooter({ className, ...props }) {
|
|
3127
|
+
return /* @__PURE__ */ jsx("div", {
|
|
3128
|
+
"data-slot": "sheet-footer",
|
|
3129
|
+
className: cn("mt-auto flex flex-col gap-2 p-4", className),
|
|
3130
|
+
...props
|
|
3131
|
+
});
|
|
3132
|
+
}
|
|
3133
|
+
function SheetTitle({ className, ...props }) {
|
|
3134
|
+
return /* @__PURE__ */ jsx(Dialog$1.Title, {
|
|
3135
|
+
"data-slot": "sheet-title",
|
|
3136
|
+
className: cn("font-heading text-base font-medium text-foreground", className),
|
|
3137
|
+
...props
|
|
3138
|
+
});
|
|
3139
|
+
}
|
|
3140
|
+
function SheetDescription({ className, ...props }) {
|
|
3141
|
+
return /* @__PURE__ */ jsx(Dialog$1.Description, {
|
|
3142
|
+
"data-slot": "sheet-description",
|
|
3143
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
3144
|
+
...props
|
|
3145
|
+
});
|
|
3146
|
+
}
|
|
3147
|
+
//#endregion
|
|
3148
|
+
//#region src/hooks/use-mobile.ts
|
|
3149
|
+
const MOBILE_BREAKPOINT = 768;
|
|
3150
|
+
function useIsMobile() {
|
|
3151
|
+
const [isMobile, setIsMobile] = React.useState(void 0);
|
|
3152
|
+
React.useEffect(() => {
|
|
3153
|
+
const mql = window.matchMedia(`(max-width: 767px)`);
|
|
3154
|
+
const onChange = () => {
|
|
3155
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
3156
|
+
};
|
|
3157
|
+
mql.addEventListener("change", onChange);
|
|
3158
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
3159
|
+
return () => mql.removeEventListener("change", onChange);
|
|
3160
|
+
}, []);
|
|
3161
|
+
return !!isMobile;
|
|
3162
|
+
}
|
|
3163
|
+
//#endregion
|
|
3164
|
+
//#region src/components/ui/skeleton.tsx
|
|
3165
|
+
function Skeleton({ className, ...props }) {
|
|
3166
|
+
return /* @__PURE__ */ jsx("div", {
|
|
3167
|
+
"data-slot": "skeleton",
|
|
3168
|
+
className: cn("animate-pulse rounded-md bg-muted", className),
|
|
3169
|
+
...props
|
|
3170
|
+
});
|
|
3171
|
+
}
|
|
3172
|
+
//#endregion
|
|
3173
|
+
//#region src/components/ui/tooltip.tsx
|
|
3174
|
+
function TooltipProvider({ delay = 0, ...props }) {
|
|
3175
|
+
return /* @__PURE__ */ jsx(Tooltip$1.Provider, {
|
|
3176
|
+
"data-slot": "tooltip-provider",
|
|
3177
|
+
delay,
|
|
3178
|
+
...props
|
|
3179
|
+
});
|
|
3180
|
+
}
|
|
3181
|
+
function Tooltip({ ...props }) {
|
|
3182
|
+
return /* @__PURE__ */ jsx(Tooltip$1.Root, {
|
|
3183
|
+
"data-slot": "tooltip",
|
|
3184
|
+
...props
|
|
3185
|
+
});
|
|
3186
|
+
}
|
|
3187
|
+
function TooltipTrigger({ ...props }) {
|
|
3188
|
+
return /* @__PURE__ */ jsx(Tooltip$1.Trigger, {
|
|
3189
|
+
"data-slot": "tooltip-trigger",
|
|
3190
|
+
...props
|
|
3191
|
+
});
|
|
3192
|
+
}
|
|
3193
|
+
function TooltipContent({ className, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props }) {
|
|
3194
|
+
return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(Tooltip$1.Positioner, {
|
|
3195
|
+
align,
|
|
3196
|
+
alignOffset,
|
|
3197
|
+
side,
|
|
3198
|
+
sideOffset,
|
|
3199
|
+
className: "isolate z-50",
|
|
3200
|
+
children: /* @__PURE__ */ jsxs(Tooltip$1.Popup, {
|
|
3201
|
+
"data-slot": "tooltip-content",
|
|
3202
|
+
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),
|
|
3203
|
+
...props,
|
|
3204
|
+
children: [children, /* @__PURE__ */ jsx(Tooltip$1.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" })]
|
|
3205
|
+
})
|
|
3206
|
+
}) });
|
|
3207
|
+
}
|
|
3208
|
+
//#endregion
|
|
3209
|
+
//#region src/components/ui/sidebar.tsx
|
|
3210
|
+
const SIDEBAR_COOKIE_NAME = "sidebar_state";
|
|
3211
|
+
const SIDEBAR_COOKIE_MAX_AGE = 604800;
|
|
3212
|
+
const SIDEBAR_WIDTH = "16rem";
|
|
3213
|
+
const SIDEBAR_WIDTH_MOBILE = "18rem";
|
|
3214
|
+
const SIDEBAR_WIDTH_ICON = "3rem";
|
|
3215
|
+
const SIDEBAR_KEYBOARD_SHORTCUT = "b";
|
|
3216
|
+
const SidebarContext = React.createContext(null);
|
|
3217
|
+
function useSidebar() {
|
|
3218
|
+
const context = React.useContext(SidebarContext);
|
|
3219
|
+
if (!context) throw new Error("useSidebar must be used within a SidebarProvider.");
|
|
3220
|
+
return context;
|
|
3221
|
+
}
|
|
3222
|
+
function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }) {
|
|
3223
|
+
const isMobile = useIsMobile();
|
|
3224
|
+
const [openMobile, setOpenMobile] = React.useState(false);
|
|
3225
|
+
const [_open, _setOpen] = React.useState(defaultOpen);
|
|
3226
|
+
const open = openProp ?? _open;
|
|
3227
|
+
const setOpen = React.useCallback((value) => {
|
|
3228
|
+
const openState = typeof value === "function" ? value(open) : value;
|
|
3229
|
+
if (setOpenProp) setOpenProp(openState);
|
|
3230
|
+
else _setOpen(openState);
|
|
3231
|
+
document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
|
|
3232
|
+
}, [setOpenProp, open]);
|
|
3233
|
+
const toggleSidebar = React.useCallback(() => {
|
|
3234
|
+
return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);
|
|
3235
|
+
}, [
|
|
3236
|
+
isMobile,
|
|
3237
|
+
setOpen,
|
|
3238
|
+
setOpenMobile
|
|
3239
|
+
]);
|
|
3240
|
+
React.useEffect(() => {
|
|
3241
|
+
const handleKeyDown = (event) => {
|
|
3242
|
+
if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
|
|
3243
|
+
event.preventDefault();
|
|
3244
|
+
toggleSidebar();
|
|
3245
|
+
}
|
|
3246
|
+
};
|
|
3247
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
3248
|
+
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
3249
|
+
}, [toggleSidebar]);
|
|
3250
|
+
const state = open ? "expanded" : "collapsed";
|
|
3251
|
+
const contextValue = React.useMemo(() => ({
|
|
3252
|
+
state,
|
|
3253
|
+
open,
|
|
3254
|
+
setOpen,
|
|
3255
|
+
isMobile,
|
|
3256
|
+
openMobile,
|
|
3257
|
+
setOpenMobile,
|
|
3258
|
+
toggleSidebar
|
|
3259
|
+
}), [
|
|
3260
|
+
state,
|
|
3261
|
+
open,
|
|
3262
|
+
setOpen,
|
|
3263
|
+
isMobile,
|
|
3264
|
+
openMobile,
|
|
3265
|
+
setOpenMobile,
|
|
3266
|
+
toggleSidebar
|
|
3267
|
+
]);
|
|
3268
|
+
return /* @__PURE__ */ jsx(SidebarContext.Provider, {
|
|
3269
|
+
value: contextValue,
|
|
3270
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
3271
|
+
"data-slot": "sidebar-wrapper",
|
|
3272
|
+
style: {
|
|
3273
|
+
"--sidebar-width": SIDEBAR_WIDTH,
|
|
3274
|
+
"--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
|
|
3275
|
+
...style
|
|
3276
|
+
},
|
|
3277
|
+
className: cn("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar", className),
|
|
3278
|
+
...props,
|
|
3279
|
+
children
|
|
3280
|
+
})
|
|
3281
|
+
});
|
|
3282
|
+
}
|
|
3283
|
+
function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas", className, children, dir, ...props }) {
|
|
3284
|
+
const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
|
|
3285
|
+
if (collapsible === "none") return /* @__PURE__ */ jsx("div", {
|
|
3286
|
+
"data-slot": "sidebar",
|
|
3287
|
+
className: cn("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground", className),
|
|
3288
|
+
...props,
|
|
3289
|
+
children
|
|
3290
|
+
});
|
|
3291
|
+
if (isMobile) return /* @__PURE__ */ jsx(Sheet, {
|
|
3292
|
+
open: openMobile,
|
|
3293
|
+
onOpenChange: setOpenMobile,
|
|
3294
|
+
...props,
|
|
3295
|
+
children: /* @__PURE__ */ jsxs(SheetContent, {
|
|
3296
|
+
dir,
|
|
3297
|
+
"data-sidebar": "sidebar",
|
|
3298
|
+
"data-slot": "sidebar",
|
|
3299
|
+
"data-mobile": "true",
|
|
3300
|
+
className: "w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",
|
|
3301
|
+
style: { "--sidebar-width": SIDEBAR_WIDTH_MOBILE },
|
|
3302
|
+
side,
|
|
3303
|
+
children: [/* @__PURE__ */ jsxs(SheetHeader, {
|
|
3304
|
+
className: "sr-only",
|
|
3305
|
+
children: [/* @__PURE__ */ jsx(SheetTitle, { children: "Sidebar" }), /* @__PURE__ */ jsx(SheetDescription, { children: "Displays the mobile sidebar." })]
|
|
3306
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
3307
|
+
className: "flex h-full w-full flex-col",
|
|
3308
|
+
children
|
|
3309
|
+
})]
|
|
3310
|
+
})
|
|
3311
|
+
});
|
|
3312
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
3313
|
+
className: "group peer hidden text-sidebar-foreground md:block",
|
|
3314
|
+
"data-state": state,
|
|
3315
|
+
"data-collapsible": state === "collapsed" ? collapsible : "",
|
|
3316
|
+
"data-variant": variant,
|
|
3317
|
+
"data-side": side,
|
|
3318
|
+
"data-slot": "sidebar",
|
|
3319
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
3320
|
+
"data-slot": "sidebar-gap",
|
|
3321
|
+
className: cn("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear", "group-data-[collapsible=offcanvas]:w-0", "group-data-[side=right]:rotate-180", variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)")
|
|
3322
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
3323
|
+
"data-slot": "sidebar-container",
|
|
3324
|
+
"data-side": side,
|
|
3325
|
+
className: cn("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex", variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l", className),
|
|
3326
|
+
...props,
|
|
3327
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
3328
|
+
"data-sidebar": "sidebar",
|
|
3329
|
+
"data-slot": "sidebar-inner",
|
|
3330
|
+
className: "flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border",
|
|
3331
|
+
children
|
|
3332
|
+
})
|
|
3333
|
+
})]
|
|
3334
|
+
});
|
|
3335
|
+
}
|
|
3336
|
+
function SidebarTrigger({ className, onClick, ...props }) {
|
|
3337
|
+
const { toggleSidebar } = useSidebar();
|
|
3338
|
+
return /* @__PURE__ */ jsxs(Button, {
|
|
3339
|
+
"data-sidebar": "trigger",
|
|
3340
|
+
"data-slot": "sidebar-trigger",
|
|
3341
|
+
variant: "ghost",
|
|
3342
|
+
size: "icon-sm",
|
|
3343
|
+
className: cn(className),
|
|
3344
|
+
onClick: (event) => {
|
|
3345
|
+
onClick?.(event);
|
|
3346
|
+
toggleSidebar();
|
|
3347
|
+
},
|
|
3348
|
+
...props,
|
|
3349
|
+
children: [/* @__PURE__ */ jsx(PanelLeftIcon, {}), /* @__PURE__ */ jsx("span", {
|
|
3350
|
+
className: "sr-only",
|
|
3351
|
+
children: "Toggle Sidebar"
|
|
3352
|
+
})]
|
|
3353
|
+
});
|
|
3354
|
+
}
|
|
3355
|
+
function SidebarRail({ className, ...props }) {
|
|
3356
|
+
const { toggleSidebar } = useSidebar();
|
|
3357
|
+
return /* @__PURE__ */ jsx("button", {
|
|
3358
|
+
"data-sidebar": "rail",
|
|
3359
|
+
"data-slot": "sidebar-rail",
|
|
3360
|
+
"aria-label": "Toggle Sidebar",
|
|
3361
|
+
tabIndex: -1,
|
|
3362
|
+
onClick: toggleSidebar,
|
|
3363
|
+
title: "Toggle Sidebar",
|
|
3364
|
+
className: cn("absolute inset-y-0 z-20 hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2", "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize", "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize", "group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar", "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2", "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2", className),
|
|
3365
|
+
...props
|
|
3366
|
+
});
|
|
3367
|
+
}
|
|
3368
|
+
function SidebarInset({ className, ...props }) {
|
|
3369
|
+
return /* @__PURE__ */ jsx("main", {
|
|
3370
|
+
"data-slot": "sidebar-inset",
|
|
3371
|
+
className: cn("relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2", className),
|
|
3372
|
+
...props
|
|
3373
|
+
});
|
|
3374
|
+
}
|
|
3375
|
+
function SidebarInput({ className, ...props }) {
|
|
3376
|
+
return /* @__PURE__ */ jsx(Input, {
|
|
3377
|
+
"data-slot": "sidebar-input",
|
|
3378
|
+
"data-sidebar": "input",
|
|
3379
|
+
className: cn("h-8 w-full bg-background shadow-none", className),
|
|
3380
|
+
...props
|
|
3381
|
+
});
|
|
3382
|
+
}
|
|
3383
|
+
function SidebarHeader({ className, ...props }) {
|
|
3384
|
+
return /* @__PURE__ */ jsx("div", {
|
|
3385
|
+
"data-slot": "sidebar-header",
|
|
3386
|
+
"data-sidebar": "header",
|
|
3387
|
+
className: cn("flex flex-col gap-2 p-2", className),
|
|
3388
|
+
...props
|
|
3389
|
+
});
|
|
3390
|
+
}
|
|
3391
|
+
function SidebarFooter({ className, ...props }) {
|
|
3392
|
+
return /* @__PURE__ */ jsx("div", {
|
|
3393
|
+
"data-slot": "sidebar-footer",
|
|
3394
|
+
"data-sidebar": "footer",
|
|
3395
|
+
className: cn("flex flex-col gap-2 p-2", className),
|
|
3396
|
+
...props
|
|
3397
|
+
});
|
|
3398
|
+
}
|
|
3399
|
+
function SidebarSeparator({ className, ...props }) {
|
|
3400
|
+
return /* @__PURE__ */ jsx(Separator, {
|
|
3401
|
+
"data-slot": "sidebar-separator",
|
|
3402
|
+
"data-sidebar": "separator",
|
|
3403
|
+
className: cn("mx-2 w-auto bg-sidebar-border", className),
|
|
3404
|
+
...props
|
|
3405
|
+
});
|
|
3406
|
+
}
|
|
3407
|
+
function SidebarContent({ className, ...props }) {
|
|
3408
|
+
return /* @__PURE__ */ jsx("div", {
|
|
3409
|
+
"data-slot": "sidebar-content",
|
|
3410
|
+
"data-sidebar": "content",
|
|
3411
|
+
className: cn("no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-auto group-data-[collapsible=icon]:overflow-hidden", className),
|
|
3412
|
+
...props
|
|
3413
|
+
});
|
|
3414
|
+
}
|
|
3415
|
+
function SidebarGroup({ className, ...props }) {
|
|
3416
|
+
return /* @__PURE__ */ jsx("div", {
|
|
3417
|
+
"data-slot": "sidebar-group",
|
|
3418
|
+
"data-sidebar": "group",
|
|
3419
|
+
className: cn("relative flex w-full min-w-0 flex-col p-2", className),
|
|
3420
|
+
...props
|
|
3421
|
+
});
|
|
3422
|
+
}
|
|
3423
|
+
function SidebarGroupLabel({ className, render, ...props }) {
|
|
3424
|
+
return useRender({
|
|
3425
|
+
defaultTagName: "div",
|
|
3426
|
+
props: mergeProps({ className: cn("flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", className) }, props),
|
|
3427
|
+
render,
|
|
3428
|
+
state: {
|
|
3429
|
+
slot: "sidebar-group-label",
|
|
3430
|
+
sidebar: "group-label"
|
|
3431
|
+
}
|
|
3432
|
+
});
|
|
3433
|
+
}
|
|
3434
|
+
function SidebarGroupAction({ className, render, ...props }) {
|
|
3435
|
+
return useRender({
|
|
3436
|
+
defaultTagName: "button",
|
|
3437
|
+
props: mergeProps({ className: cn("absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0", className) }, props),
|
|
3438
|
+
render,
|
|
3439
|
+
state: {
|
|
3440
|
+
slot: "sidebar-group-action",
|
|
3441
|
+
sidebar: "group-action"
|
|
3442
|
+
}
|
|
3443
|
+
});
|
|
3444
|
+
}
|
|
3445
|
+
function SidebarGroupContent({ className, ...props }) {
|
|
3446
|
+
return /* @__PURE__ */ jsx("div", {
|
|
3447
|
+
"data-slot": "sidebar-group-content",
|
|
3448
|
+
"data-sidebar": "group-content",
|
|
3449
|
+
className: cn("w-full text-sm", className),
|
|
3450
|
+
...props
|
|
3451
|
+
});
|
|
3452
|
+
}
|
|
3453
|
+
function SidebarMenu({ className, ...props }) {
|
|
3454
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
3455
|
+
"data-slot": "sidebar-menu",
|
|
3456
|
+
"data-sidebar": "menu",
|
|
3457
|
+
className: cn("flex w-full min-w-0 flex-col gap-0", className),
|
|
3458
|
+
...props
|
|
3459
|
+
});
|
|
3460
|
+
}
|
|
3461
|
+
function SidebarMenuItem({ className, ...props }) {
|
|
3462
|
+
return /* @__PURE__ */ jsx("li", {
|
|
3463
|
+
"data-slot": "sidebar-menu-item",
|
|
3464
|
+
"data-sidebar": "menu-item",
|
|
3465
|
+
className: cn("group/menu-item relative", className),
|
|
3466
|
+
...props
|
|
3467
|
+
});
|
|
3468
|
+
}
|
|
3469
|
+
const sidebarMenuButtonVariants = cva("peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate", {
|
|
3470
|
+
variants: {
|
|
3471
|
+
variant: {
|
|
3472
|
+
default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
|
|
3473
|
+
outline: "bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"
|
|
3474
|
+
},
|
|
3475
|
+
size: {
|
|
3476
|
+
default: "h-8 text-sm",
|
|
3477
|
+
sm: "h-7 text-xs",
|
|
3478
|
+
lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!"
|
|
3479
|
+
}
|
|
3480
|
+
},
|
|
3481
|
+
defaultVariants: {
|
|
3482
|
+
variant: "default",
|
|
3483
|
+
size: "default"
|
|
3484
|
+
}
|
|
3485
|
+
});
|
|
3486
|
+
function SidebarMenuButton({ render, isActive = false, variant = "default", size = "default", tooltip, className, ...props }) {
|
|
3487
|
+
const { isMobile, state } = useSidebar();
|
|
3488
|
+
const comp = useRender({
|
|
3489
|
+
defaultTagName: "button",
|
|
3490
|
+
props: mergeProps({ className: cn(sidebarMenuButtonVariants({
|
|
3491
|
+
variant,
|
|
3492
|
+
size
|
|
3493
|
+
}), className) }, props),
|
|
3494
|
+
render: !tooltip ? render : /* @__PURE__ */ jsx(TooltipTrigger, { render }),
|
|
3495
|
+
state: {
|
|
3496
|
+
slot: "sidebar-menu-button",
|
|
3497
|
+
sidebar: "menu-button",
|
|
3498
|
+
size,
|
|
3499
|
+
active: isActive
|
|
3500
|
+
}
|
|
3501
|
+
});
|
|
3502
|
+
if (!tooltip) return comp;
|
|
3503
|
+
if (typeof tooltip === "string") tooltip = { children: tooltip };
|
|
3504
|
+
return /* @__PURE__ */ jsxs(Tooltip, { children: [comp, /* @__PURE__ */ jsx(TooltipContent, {
|
|
3505
|
+
side: "right",
|
|
3506
|
+
align: "center",
|
|
3507
|
+
hidden: state !== "collapsed" || isMobile,
|
|
3508
|
+
...tooltip
|
|
3509
|
+
})] });
|
|
3510
|
+
}
|
|
3511
|
+
function SidebarMenuAction({ className, render, showOnHover = false, ...props }) {
|
|
3512
|
+
return useRender({
|
|
3513
|
+
defaultTagName: "button",
|
|
3514
|
+
props: mergeProps({ className: cn("absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0", showOnHover && "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-active/menu-button:text-sidebar-accent-foreground aria-expanded:opacity-100 md:opacity-0", className) }, props),
|
|
3515
|
+
render,
|
|
3516
|
+
state: {
|
|
3517
|
+
slot: "sidebar-menu-action",
|
|
3518
|
+
sidebar: "menu-action"
|
|
3519
|
+
}
|
|
3520
|
+
});
|
|
3521
|
+
}
|
|
3522
|
+
function SidebarMenuBadge({ className, ...props }) {
|
|
3523
|
+
return /* @__PURE__ */ jsx("div", {
|
|
3524
|
+
"data-slot": "sidebar-menu-badge",
|
|
3525
|
+
"data-sidebar": "menu-badge",
|
|
3526
|
+
className: cn("pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 peer-data-active/menu-button:text-sidebar-accent-foreground", className),
|
|
3527
|
+
...props
|
|
3528
|
+
});
|
|
3529
|
+
}
|
|
3530
|
+
function SidebarMenuSkeleton({ className, showIcon = false, ...props }) {
|
|
3531
|
+
const [width] = React.useState(() => {
|
|
3532
|
+
return `${Math.floor(Math.random() * 40) + 50}%`;
|
|
3533
|
+
});
|
|
3534
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
3535
|
+
"data-slot": "sidebar-menu-skeleton",
|
|
3536
|
+
"data-sidebar": "menu-skeleton",
|
|
3537
|
+
className: cn("flex h-8 items-center gap-2 rounded-md px-2", className),
|
|
3538
|
+
...props,
|
|
3539
|
+
children: [showIcon && /* @__PURE__ */ jsx(Skeleton, {
|
|
3540
|
+
className: "size-4 rounded-md",
|
|
3541
|
+
"data-sidebar": "menu-skeleton-icon"
|
|
3542
|
+
}), /* @__PURE__ */ jsx(Skeleton, {
|
|
3543
|
+
className: "h-4 max-w-(--skeleton-width) flex-1",
|
|
3544
|
+
"data-sidebar": "menu-skeleton-text",
|
|
3545
|
+
style: { "--skeleton-width": width }
|
|
3546
|
+
})]
|
|
3547
|
+
});
|
|
3548
|
+
}
|
|
3549
|
+
function SidebarMenuSub({ className, ...props }) {
|
|
3550
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
3551
|
+
"data-slot": "sidebar-menu-sub",
|
|
3552
|
+
"data-sidebar": "menu-sub",
|
|
3553
|
+
className: cn("mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5 group-data-[collapsible=icon]:hidden", className),
|
|
3554
|
+
...props
|
|
3555
|
+
});
|
|
3556
|
+
}
|
|
3557
|
+
function SidebarMenuSubItem({ className, ...props }) {
|
|
3558
|
+
return /* @__PURE__ */ jsx("li", {
|
|
3559
|
+
"data-slot": "sidebar-menu-sub-item",
|
|
3560
|
+
"data-sidebar": "menu-sub-item",
|
|
3561
|
+
className: cn("group/menu-sub-item relative", className),
|
|
3562
|
+
...props
|
|
3563
|
+
});
|
|
3564
|
+
}
|
|
3565
|
+
function SidebarMenuSubButton({ render, size = "md", isActive = false, className, ...props }) {
|
|
3566
|
+
return useRender({
|
|
3567
|
+
defaultTagName: "a",
|
|
3568
|
+
props: mergeProps({ className: cn("flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden group-data-[collapsible=icon]:hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[size=md]:text-sm data-[size=sm]:text-xs data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground", className) }, props),
|
|
3569
|
+
render,
|
|
3570
|
+
state: {
|
|
3571
|
+
slot: "sidebar-menu-sub-button",
|
|
3572
|
+
sidebar: "menu-sub-button",
|
|
3573
|
+
size,
|
|
3574
|
+
active: isActive
|
|
3575
|
+
}
|
|
3576
|
+
});
|
|
3577
|
+
}
|
|
3578
|
+
//#endregion
|
|
3579
|
+
//#region src/components/ui/slider.tsx
|
|
3580
|
+
function Slider({ className, defaultValue, value, min = 0, max = 100, ...props }) {
|
|
3581
|
+
const _values = Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max];
|
|
3582
|
+
return /* @__PURE__ */ jsx(Slider$1.Root, {
|
|
3583
|
+
className: cn("data-horizontal:w-full data-vertical:h-full", className),
|
|
3584
|
+
"data-slot": "slider",
|
|
3585
|
+
defaultValue,
|
|
3586
|
+
value,
|
|
3587
|
+
min,
|
|
3588
|
+
max,
|
|
3589
|
+
thumbAlignment: "edge",
|
|
3590
|
+
...props,
|
|
3591
|
+
children: /* @__PURE__ */ jsxs(Slider$1.Control, {
|
|
3592
|
+
className: "relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:min-h-40 data-vertical:w-auto data-vertical:flex-col",
|
|
3593
|
+
children: [/* @__PURE__ */ jsx(Slider$1.Track, {
|
|
3594
|
+
"data-slot": "slider-track",
|
|
3595
|
+
className: "relative grow overflow-hidden rounded-full bg-muted select-none data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1",
|
|
3596
|
+
children: /* @__PURE__ */ jsx(Slider$1.Indicator, {
|
|
3597
|
+
"data-slot": "slider-range",
|
|
3598
|
+
className: "bg-primary select-none data-horizontal:h-full data-vertical:w-full"
|
|
3599
|
+
})
|
|
3600
|
+
}), Array.from({ length: _values.length }, (_, index) => /* @__PURE__ */ jsx(Slider$1.Thumb, {
|
|
3601
|
+
"data-slot": "slider-thumb",
|
|
3602
|
+
className: "relative block size-3 shrink-0 rounded-full border border-ring bg-white ring-ring/50 transition-[color,box-shadow] select-none after:absolute after:-inset-2 hover:ring-3 focus-visible:ring-3 focus-visible:outline-hidden active:ring-3 disabled:pointer-events-none disabled:opacity-50"
|
|
3603
|
+
}, index))]
|
|
3604
|
+
})
|
|
3605
|
+
});
|
|
3606
|
+
}
|
|
3607
|
+
//#endregion
|
|
3608
|
+
//#region src/components/ui/spinner.tsx
|
|
3609
|
+
function Spinner({ className, ...props }) {
|
|
3610
|
+
return /* @__PURE__ */ jsx(Loader2Icon, {
|
|
3611
|
+
"data-slot": "spinner",
|
|
3612
|
+
role: "status",
|
|
3613
|
+
"aria-label": "Loading",
|
|
3614
|
+
className: cn("size-4 animate-spin", className),
|
|
3615
|
+
...props
|
|
3616
|
+
});
|
|
3617
|
+
}
|
|
3618
|
+
//#endregion
|
|
3619
|
+
//#region src/components/ui/switch.tsx
|
|
3620
|
+
function Switch({ className, size = "default", ...props }) {
|
|
3621
|
+
return /* @__PURE__ */ jsx(Switch$1.Root, {
|
|
3622
|
+
"data-slot": "switch",
|
|
3623
|
+
"data-size": size,
|
|
3624
|
+
className: cn("peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none group-has-[:focus-visible]/field-label:border-transparent group-has-[:focus-visible]/field-label:ring-0 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50", className),
|
|
3625
|
+
...props,
|
|
3626
|
+
children: /* @__PURE__ */ jsx(Switch$1.Thumb, {
|
|
3627
|
+
"data-slot": "switch-thumb",
|
|
3628
|
+
className: "pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground"
|
|
3629
|
+
})
|
|
3630
|
+
});
|
|
3631
|
+
}
|
|
3632
|
+
//#endregion
|
|
3633
|
+
//#region src/components/ui/table.tsx
|
|
3634
|
+
function Table({ className, ...props }) {
|
|
3635
|
+
return /* @__PURE__ */ jsx("div", {
|
|
3636
|
+
"data-slot": "table-container",
|
|
3637
|
+
className: "relative w-full overflow-x-auto",
|
|
3638
|
+
children: /* @__PURE__ */ jsx("table", {
|
|
3639
|
+
"data-slot": "table",
|
|
3640
|
+
className: cn("w-full caption-bottom text-sm", className),
|
|
3641
|
+
...props
|
|
3642
|
+
})
|
|
3643
|
+
});
|
|
3644
|
+
}
|
|
3645
|
+
function TableHeader({ className, ...props }) {
|
|
3646
|
+
return /* @__PURE__ */ jsx("thead", {
|
|
3647
|
+
"data-slot": "table-header",
|
|
3648
|
+
className: cn("[&_tr]:border-b", className),
|
|
3649
|
+
...props
|
|
3650
|
+
});
|
|
3651
|
+
}
|
|
3652
|
+
function TableBody({ className, ...props }) {
|
|
3653
|
+
return /* @__PURE__ */ jsx("tbody", {
|
|
3654
|
+
"data-slot": "table-body",
|
|
3655
|
+
className: cn("[&_tr:last-child]:border-0", className),
|
|
3656
|
+
...props
|
|
3657
|
+
});
|
|
3658
|
+
}
|
|
3659
|
+
function TableFooter({ className, ...props }) {
|
|
3660
|
+
return /* @__PURE__ */ jsx("tfoot", {
|
|
3661
|
+
"data-slot": "table-footer",
|
|
3662
|
+
className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0", className),
|
|
3663
|
+
...props
|
|
3664
|
+
});
|
|
3665
|
+
}
|
|
3666
|
+
function TableRow({ className, ...props }) {
|
|
3667
|
+
return /* @__PURE__ */ jsx("tr", {
|
|
3668
|
+
"data-slot": "table-row",
|
|
3669
|
+
className: cn("border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted", className),
|
|
3670
|
+
...props
|
|
3671
|
+
});
|
|
3672
|
+
}
|
|
3673
|
+
function TableHead({ className, ...props }) {
|
|
3674
|
+
return /* @__PURE__ */ jsx("th", {
|
|
3675
|
+
"data-slot": "table-head",
|
|
3676
|
+
className: cn("h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0", className),
|
|
3677
|
+
...props
|
|
3678
|
+
});
|
|
3679
|
+
}
|
|
3680
|
+
function TableCell({ className, ...props }) {
|
|
3681
|
+
return /* @__PURE__ */ jsx("td", {
|
|
3682
|
+
"data-slot": "table-cell",
|
|
3683
|
+
className: cn("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0", className),
|
|
3684
|
+
...props
|
|
3685
|
+
});
|
|
3686
|
+
}
|
|
3687
|
+
function TableCaption({ className, ...props }) {
|
|
3688
|
+
return /* @__PURE__ */ jsx("caption", {
|
|
3689
|
+
"data-slot": "table-caption",
|
|
3690
|
+
className: cn("mt-4 text-sm text-muted-foreground", className),
|
|
3691
|
+
...props
|
|
3692
|
+
});
|
|
3693
|
+
}
|
|
3694
|
+
//#endregion
|
|
3695
|
+
//#region src/components/ui/tabs.tsx
|
|
3696
|
+
function Tabs({ className, orientation = "horizontal", ...props }) {
|
|
3697
|
+
return /* @__PURE__ */ jsx(Tabs$1.Root, {
|
|
3698
|
+
"data-slot": "tabs",
|
|
3699
|
+
"data-orientation": orientation,
|
|
3700
|
+
className: cn("group/tabs flex gap-2 data-horizontal:flex-col", className),
|
|
3701
|
+
...props
|
|
3702
|
+
});
|
|
3703
|
+
}
|
|
3704
|
+
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", {
|
|
3705
|
+
variants: { variant: {
|
|
3706
|
+
default: "bg-muted",
|
|
3707
|
+
line: "gap-1 bg-transparent"
|
|
3708
|
+
} },
|
|
3709
|
+
defaultVariants: { variant: "default" }
|
|
3710
|
+
});
|
|
3711
|
+
function TabsList({ className, variant = "default", ...props }) {
|
|
3712
|
+
return /* @__PURE__ */ jsx(Tabs$1.List, {
|
|
3713
|
+
"data-slot": "tabs-list",
|
|
3714
|
+
"data-variant": variant,
|
|
3715
|
+
className: cn(tabsListVariants({ variant }), className),
|
|
3716
|
+
...props
|
|
3717
|
+
});
|
|
3718
|
+
}
|
|
3719
|
+
function TabsTrigger({ className, ...props }) {
|
|
3720
|
+
return /* @__PURE__ */ jsx(Tabs$1.Tab, {
|
|
3721
|
+
"data-slot": "tabs-trigger",
|
|
3722
|
+
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),
|
|
3723
|
+
...props
|
|
3724
|
+
});
|
|
3725
|
+
}
|
|
3726
|
+
function TabsContent({ className, ...props }) {
|
|
3727
|
+
return /* @__PURE__ */ jsx(Tabs$1.Panel, {
|
|
3728
|
+
"data-slot": "tabs-content",
|
|
3729
|
+
className: cn("flex-1 text-sm outline-none", className),
|
|
3730
|
+
...props
|
|
3731
|
+
});
|
|
3732
|
+
}
|
|
3733
|
+
//#endregion
|
|
3734
|
+
//#region src/components/ui/toast.tsx
|
|
3735
|
+
const toast = Toast$1.createToastManager();
|
|
3736
|
+
function ToastProvider({ ...props }) {
|
|
3737
|
+
return /* @__PURE__ */ jsx(Toast$1.Provider, { ...props });
|
|
3738
|
+
}
|
|
3739
|
+
function ToastPortal({ ...props }) {
|
|
3740
|
+
return /* @__PURE__ */ jsx(Toast$1.Portal, {
|
|
3741
|
+
"data-slot": "toast-portal",
|
|
3742
|
+
...props
|
|
3743
|
+
});
|
|
3744
|
+
}
|
|
3745
|
+
function ToastViewport({ className, ...props }) {
|
|
3746
|
+
return /* @__PURE__ */ jsx(Toast$1.Viewport, {
|
|
3747
|
+
"data-slot": "toast-viewport",
|
|
3748
|
+
className: cn("pointer-events-none fixed inset-x-4 bottom-4 z-50 mx-auto w-auto max-w-sm outline-none sm:right-4 sm:left-auto sm:mx-0 sm:w-full", className),
|
|
3749
|
+
...props
|
|
3750
|
+
});
|
|
3751
|
+
}
|
|
3752
|
+
function Toast({ className, ...props }) {
|
|
3753
|
+
return /* @__PURE__ */ jsx(Toast$1.Root, {
|
|
3754
|
+
"data-slot": "toast",
|
|
3755
|
+
className: cn("group/toast pointer-events-auto absolute right-0 bottom-0 z-[calc(1000-var(--toast-index))] w-full origin-bottom rounded-2xl border bg-popover text-popover-foreground shadow-lg will-change-transform outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50", "[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]", "h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms]", "after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']", "data-expanded:h-(--toast-height) data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]", "data-limited:opacity-0 data-starting-style:[transform:translateY(150%)]", "[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]", "data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]", "data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]", "data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]", "data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]", "data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]", "data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]", "data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]", "data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]", className),
|
|
3756
|
+
...props
|
|
3757
|
+
});
|
|
3758
|
+
}
|
|
3759
|
+
function ToastContent({ className, ...props }) {
|
|
3760
|
+
return /* @__PURE__ */ jsx(Toast$1.Content, {
|
|
3761
|
+
"data-slot": "toast-content",
|
|
3762
|
+
className: cn("flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] data-behind:opacity-0 data-expanded:opacity-100", className),
|
|
3763
|
+
...props
|
|
3764
|
+
});
|
|
3765
|
+
}
|
|
3766
|
+
function ToastTitle({ className, ...props }) {
|
|
3767
|
+
return /* @__PURE__ */ jsx(Toast$1.Title, {
|
|
3768
|
+
"data-slot": "toast-title",
|
|
3769
|
+
className: cn("text-sm font-medium", className),
|
|
3770
|
+
...props
|
|
3771
|
+
});
|
|
3772
|
+
}
|
|
3773
|
+
function ToastDescription({ className, ...props }) {
|
|
3774
|
+
return /* @__PURE__ */ jsx(Toast$1.Description, {
|
|
3775
|
+
"data-slot": "toast-description",
|
|
3776
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
3777
|
+
...props
|
|
3778
|
+
});
|
|
3779
|
+
}
|
|
3780
|
+
function ToastAction({ className, render = /* @__PURE__ */ jsx(Button, {
|
|
3781
|
+
variant: "outline",
|
|
3782
|
+
size: "sm"
|
|
3783
|
+
}), ...props }) {
|
|
3784
|
+
return /* @__PURE__ */ jsx(Toast$1.Action, {
|
|
3785
|
+
"data-slot": "toast-action",
|
|
3786
|
+
render,
|
|
3787
|
+
className: cn("shrink-0", className),
|
|
3788
|
+
...props
|
|
3789
|
+
});
|
|
3790
|
+
}
|
|
3791
|
+
function ToastClose({ className, children, render = /* @__PURE__ */ jsx(Button, {
|
|
3792
|
+
variant: "ghost",
|
|
3793
|
+
size: "icon-sm"
|
|
3794
|
+
}), ...props }) {
|
|
3795
|
+
return /* @__PURE__ */ jsx(Toast$1.Close, {
|
|
3796
|
+
"data-slot": "toast-close",
|
|
3797
|
+
"aria-label": "Close toast",
|
|
3798
|
+
render,
|
|
3799
|
+
className: cn("relative shrink-0 text-muted-foreground after:absolute after:-inset-2 after:content-[''] hover:text-foreground", className),
|
|
3800
|
+
...props,
|
|
3801
|
+
children: children ?? /* @__PURE__ */ jsx(XIcon, { "aria-hidden": "true" })
|
|
3802
|
+
});
|
|
3803
|
+
}
|
|
3804
|
+
function ToastIcon({ type }) {
|
|
3805
|
+
let icon = null;
|
|
3806
|
+
if (type === "success") icon = /* @__PURE__ */ jsx(CircleCheckIcon, { "aria-hidden": "true" });
|
|
3807
|
+
if (type === "info") icon = /* @__PURE__ */ jsx(InfoIcon, { "aria-hidden": "true" });
|
|
3808
|
+
if (type === "warning") icon = /* @__PURE__ */ jsx(TriangleAlertIcon, { "aria-hidden": "true" });
|
|
3809
|
+
if (type === "error") icon = /* @__PURE__ */ jsx(OctagonXIcon, {
|
|
3810
|
+
className: "text-destructive",
|
|
3811
|
+
"aria-hidden": "true"
|
|
3812
|
+
});
|
|
3813
|
+
if (type === "loading") icon = /* @__PURE__ */ jsx(Loader2Icon, {
|
|
3814
|
+
className: "animate-spin",
|
|
3815
|
+
"aria-hidden": "true"
|
|
3816
|
+
});
|
|
3817
|
+
if (!icon) return null;
|
|
3818
|
+
return /* @__PURE__ */ jsx("span", {
|
|
3819
|
+
"data-slot": "toast-icon",
|
|
3820
|
+
className: "shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
|
|
3821
|
+
children: icon
|
|
3822
|
+
});
|
|
3823
|
+
}
|
|
3824
|
+
function ToastList() {
|
|
3825
|
+
const { toasts } = Toast$1.useToastManager();
|
|
3826
|
+
return toasts.map((toastItem) => /* @__PURE__ */ jsx(Toast, {
|
|
3827
|
+
toast: toastItem,
|
|
3828
|
+
children: /* @__PURE__ */ jsxs(ToastContent, { children: [
|
|
3829
|
+
/* @__PURE__ */ jsx(ToastIcon, { type: toastItem.type }),
|
|
3830
|
+
/* @__PURE__ */ jsxs("div", {
|
|
3831
|
+
className: "flex min-w-0 flex-1 flex-col gap-1",
|
|
3832
|
+
children: [/* @__PURE__ */ jsx(ToastTitle, {}), /* @__PURE__ */ jsx(ToastDescription, {})]
|
|
3833
|
+
}),
|
|
3834
|
+
/* @__PURE__ */ jsx(ToastAction, {}),
|
|
3835
|
+
/* @__PURE__ */ jsx(ToastClose, {})
|
|
3836
|
+
] })
|
|
3837
|
+
}, toastItem.id));
|
|
3838
|
+
}
|
|
3839
|
+
function Toaster({ children, toastManager = toast, ...props }) {
|
|
3840
|
+
return /* @__PURE__ */ jsxs(ToastProvider, {
|
|
3841
|
+
toastManager,
|
|
3842
|
+
...props,
|
|
3843
|
+
children: [children, /* @__PURE__ */ jsx(ToastPortal, { children: /* @__PURE__ */ jsx(ToastViewport, { children: /* @__PURE__ */ jsx(ToastList, {}) }) })]
|
|
3844
|
+
});
|
|
3845
|
+
}
|
|
3846
|
+
const createToastManager = Toast$1.createToastManager;
|
|
3847
|
+
const useToastManager = Toast$1.useToastManager;
|
|
3848
|
+
//#endregion
|
|
3849
|
+
//#region src/components/ui/toggle.tsx
|
|
3850
|
+
const toggleVariants = cva("group/toggle inline-flex items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
|
|
3851
|
+
variants: {
|
|
3852
|
+
variant: {
|
|
3853
|
+
default: "bg-transparent",
|
|
3854
|
+
outline: "border border-input bg-transparent hover:bg-muted"
|
|
3855
|
+
},
|
|
3856
|
+
size: {
|
|
3857
|
+
default: "h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
|
3858
|
+
sm: "h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
|
|
3859
|
+
lg: "h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2"
|
|
3860
|
+
}
|
|
3861
|
+
},
|
|
3862
|
+
defaultVariants: {
|
|
3863
|
+
variant: "default",
|
|
3864
|
+
size: "default"
|
|
3865
|
+
}
|
|
3866
|
+
});
|
|
3867
|
+
function Toggle({ className, variant = "default", size = "default", ...props }) {
|
|
3868
|
+
return /* @__PURE__ */ jsx(Toggle$1, {
|
|
3869
|
+
"data-slot": "toggle",
|
|
3870
|
+
className: cn(toggleVariants({
|
|
3871
|
+
variant,
|
|
3872
|
+
size,
|
|
3873
|
+
className
|
|
3874
|
+
})),
|
|
3875
|
+
...props
|
|
3876
|
+
});
|
|
3877
|
+
}
|
|
3878
|
+
//#endregion
|
|
3879
|
+
//#region src/components/ui/toggle-group.tsx
|
|
3880
|
+
const ToggleGroupContext = React.createContext({
|
|
3881
|
+
size: "default",
|
|
3882
|
+
variant: "default",
|
|
3883
|
+
spacing: 2,
|
|
3884
|
+
orientation: "horizontal"
|
|
3885
|
+
});
|
|
3886
|
+
function ToggleGroup({ className, variant, size, spacing = 2, orientation = "horizontal", children, ...props }) {
|
|
3887
|
+
return /* @__PURE__ */ jsx(ToggleGroup$1, {
|
|
3888
|
+
"data-slot": "toggle-group",
|
|
3889
|
+
"data-variant": variant,
|
|
3890
|
+
"data-size": size,
|
|
3891
|
+
"data-spacing": spacing,
|
|
3892
|
+
"data-orientation": orientation,
|
|
3893
|
+
style: { "--gap": spacing },
|
|
3894
|
+
className: cn("group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-vertical:flex-col data-vertical:items-stretch", className),
|
|
3895
|
+
...props,
|
|
3896
|
+
children: /* @__PURE__ */ jsx(ToggleGroupContext.Provider, {
|
|
3897
|
+
value: {
|
|
3898
|
+
variant,
|
|
3899
|
+
size,
|
|
3900
|
+
spacing,
|
|
3901
|
+
orientation
|
|
3902
|
+
},
|
|
3903
|
+
children
|
|
3904
|
+
})
|
|
3905
|
+
});
|
|
3906
|
+
}
|
|
3907
|
+
function ToggleGroupItem({ className, children, variant = "default", size = "default", ...props }) {
|
|
3908
|
+
const context = React.useContext(ToggleGroupContext);
|
|
3909
|
+
return /* @__PURE__ */ jsx(Toggle$1, {
|
|
3910
|
+
"data-slot": "toggle-group-item",
|
|
3911
|
+
"data-variant": context.variant || variant,
|
|
3912
|
+
"data-size": context.size || size,
|
|
3913
|
+
"data-spacing": context.spacing,
|
|
3914
|
+
className: cn("shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t", toggleVariants({
|
|
3915
|
+
variant: context.variant || variant,
|
|
3916
|
+
size: context.size || size
|
|
3917
|
+
}), className),
|
|
3918
|
+
...props,
|
|
3919
|
+
children
|
|
3920
|
+
});
|
|
3921
|
+
}
|
|
3922
|
+
//#endregion
|
|
3923
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Attachment, AttachmentAction, AttachmentActions, AttachmentContent, AttachmentDescription, AttachmentGroup, AttachmentMedia, AttachmentTitle, AttachmentTrigger, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Bubble, BubbleContent, BubbleGroup, BubbleReactions, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerSwipeHandle, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label, Marker, MarkerContent, MarkerIcon, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, Questionnaire, QuestionnaireActions, QuestionnaireChoice, QuestionnaireChoiceDescription, QuestionnaireChoices, QuestionnaireDescription, QuestionnaireError, QuestionnaireInput, QuestionnaireItem, QuestionnaireNext, QuestionnairePrevious, QuestionnaireProgress, QuestionnaireSkip, QuestionnaireSubmit, QuestionnaireTitle, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonGroupVariants, buttonVariants, createToastManager, markerVariants, navigationMenuTriggerStyle, tabsListVariants, toast, toggleVariants, useCarousel, useComboboxAnchor, useDirection, useIsMobile, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility, useSidebar, useToastManager };
|