@aircall/ds 0.2.6 → 0.6.0
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/README.md +95 -11
- package/dist/globals.css +1 -1
- package/dist/index.d.ts +808 -351
- package/dist/index.js +1793 -810
- package/package.json +31 -30
package/dist/index.js
CHANGED
|
@@ -1,39 +1,46 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Accordion as Accordion$1 } from "@base-ui/react/accordion";
|
|
2
2
|
import { clsx } from "clsx";
|
|
3
3
|
import { extendTailwindMerge } from "tailwind-merge";
|
|
4
|
+
import * as Icons from "@aircall/react-icons";
|
|
5
|
+
import { ArrowLeft, ArrowRight, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CircleAlertIcon, CircleCheck, Info, Loader2Icon, MinusIcon, MoreHorizontalIcon, PanelLeftIcon, Search, Smile, TriangleAlertIcon, XIcon } from "@aircall/react-icons";
|
|
4
6
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
7
|
import * as React$1 from "react";
|
|
6
|
-
import React, { useMemo } from "react";
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import
|
|
8
|
+
import React, { createContext, useContext, useMemo } from "react";
|
|
9
|
+
import { AlertDialog as AlertDialog$1 } from "@base-ui/react/alert-dialog";
|
|
10
|
+
import { Button as Button$1 } from "@base-ui/react/button";
|
|
11
|
+
import { cva } from "class-variance-authority";
|
|
12
|
+
import { Avatar as Avatar$1 } from "@base-ui/react/avatar";
|
|
13
|
+
import { mergeProps } from "@base-ui/react/merge-props";
|
|
14
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
15
|
+
import { Separator as Separator$1 } from "@base-ui/react/separator";
|
|
16
|
+
import { DayPicker, getDefaultClassNames } from "react-day-picker";
|
|
10
17
|
import useEmblaCarousel from "embla-carousel-react";
|
|
11
|
-
import
|
|
12
|
-
import {
|
|
13
|
-
import
|
|
14
|
-
import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
|
|
18
|
+
import { Checkbox as Checkbox$1 } from "@base-ui/react/checkbox";
|
|
19
|
+
import { Collapsible as Collapsible$1 } from "@base-ui/react/collapsible";
|
|
20
|
+
import { Combobox as Combobox$1 } from "@base-ui/react";
|
|
15
21
|
import { Command as Command$1 } from "cmdk";
|
|
16
|
-
import
|
|
22
|
+
import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
|
|
17
23
|
import { getCountryISO3 } from "@aircall/numbers";
|
|
18
|
-
import {
|
|
19
|
-
import
|
|
24
|
+
import { flexRender, getCoreRowModel, useReactTable } from "@tanstack/react-table";
|
|
25
|
+
import { Drawer as DrawerPrimitive } from "@base-ui/react/drawer";
|
|
26
|
+
import { Radio } from "@base-ui/react/radio";
|
|
27
|
+
import { RadioGroup as RadioGroup$1 } from "@base-ui/react/radio-group";
|
|
28
|
+
import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area";
|
|
29
|
+
import { Menu } from "@base-ui/react/menu";
|
|
20
30
|
import EmojiReactPicker, { Categories, EmojiStyle, SuggestionMode, Theme } from "emoji-picker-react";
|
|
21
|
-
import
|
|
31
|
+
import { Popover as Popover$1 } from "@base-ui/react/popover";
|
|
22
32
|
import { ThemeProvider as ThemeProvider$1, useTheme, useTheme as useTheme$1 } from "next-themes";
|
|
23
|
-
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
24
|
-
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
25
33
|
import { OTPInput, OTPInputContext } from "input-otp";
|
|
26
|
-
import {
|
|
27
|
-
import
|
|
28
|
-
import
|
|
29
|
-
import
|
|
30
|
-
import
|
|
31
|
-
import * as SliderPrimitive from "@radix-ui/react-slider";
|
|
34
|
+
import { Progress as Progress$1 } from "@base-ui/react/progress";
|
|
35
|
+
import { Select as Select$1 } from "@base-ui/react/select";
|
|
36
|
+
import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
|
|
37
|
+
import { Slider as Slider$1 } from "@base-ui/react/slider";
|
|
38
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
32
39
|
import { Toaster as Toaster$1, toast } from "sonner";
|
|
33
|
-
import
|
|
34
|
-
import
|
|
35
|
-
import
|
|
36
|
-
import
|
|
40
|
+
import { Switch as Switch$1 } from "@base-ui/react/switch";
|
|
41
|
+
import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
|
|
42
|
+
import { Toggle as Toggle$1 } from "@base-ui/react/toggle";
|
|
43
|
+
import { ToggleGroup as ToggleGroup$1 } from "@base-ui/react/toggle-group";
|
|
37
44
|
|
|
38
45
|
//#region src/lib/utils.ts
|
|
39
46
|
const twMerge = extendTailwindMerge({ extend: { theme: { text: ["tiny"] } } });
|
|
@@ -41,16 +48,198 @@ function cn(...inputs) {
|
|
|
41
48
|
return twMerge(clsx(inputs));
|
|
42
49
|
}
|
|
43
50
|
|
|
51
|
+
//#endregion
|
|
52
|
+
//#region src/components/accordion.tsx
|
|
53
|
+
function Accordion({ className, ...props }) {
|
|
54
|
+
return /* @__PURE__ */ jsx(Accordion$1.Root, {
|
|
55
|
+
"data-slot": "accordion",
|
|
56
|
+
className: cn("flex w-full flex-col", className),
|
|
57
|
+
...props
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function AccordionItem({ className, ...props }) {
|
|
61
|
+
return /* @__PURE__ */ jsx(Accordion$1.Item, {
|
|
62
|
+
"data-slot": "accordion-item",
|
|
63
|
+
className: cn("not-last:border-b", className),
|
|
64
|
+
...props
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function AccordionTrigger({ className, children, ...props }) {
|
|
68
|
+
return /* @__PURE__ */ jsx(Accordion$1.Header, {
|
|
69
|
+
className: "flex",
|
|
70
|
+
children: /* @__PURE__ */ jsxs(Accordion$1.Trigger, {
|
|
71
|
+
"data-slot": "accordion-trigger",
|
|
72
|
+
className: cn("group/accordion-trigger relative flex flex-1 items-start justify-between rounded-md border border-transparent py-4 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),
|
|
73
|
+
...props,
|
|
74
|
+
children: [
|
|
75
|
+
children,
|
|
76
|
+
/* @__PURE__ */ jsx(ChevronDownIcon, {
|
|
77
|
+
"data-slot": "accordion-trigger-icon",
|
|
78
|
+
className: "pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden"
|
|
79
|
+
}),
|
|
80
|
+
/* @__PURE__ */ jsx(ChevronUpIcon, {
|
|
81
|
+
"data-slot": "accordion-trigger-icon",
|
|
82
|
+
className: "pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline"
|
|
83
|
+
})
|
|
84
|
+
]
|
|
85
|
+
})
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function AccordionContent({ className, children, ...props }) {
|
|
89
|
+
return /* @__PURE__ */ jsx(Accordion$1.Panel, {
|
|
90
|
+
"data-slot": "accordion-content",
|
|
91
|
+
className: "overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up",
|
|
92
|
+
...props,
|
|
93
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
94
|
+
className: cn("h-(--accordion-panel-height) pt-0 pb-4 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),
|
|
95
|
+
children
|
|
96
|
+
})
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
//#endregion
|
|
101
|
+
//#region src/components/button.tsx
|
|
102
|
+
const buttonVariants = cva("group/button inline-flex shrink-0 items-center justify-center rounded-md 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", {
|
|
103
|
+
variants: {
|
|
104
|
+
variant: {
|
|
105
|
+
default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
|
|
106
|
+
outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
|
|
107
|
+
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
|
|
108
|
+
ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
|
|
109
|
+
destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
|
|
110
|
+
link: "text-primary underline underline-offset-4"
|
|
111
|
+
},
|
|
112
|
+
size: {
|
|
113
|
+
default: "h-8 gap-1.5 px-2 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",
|
|
114
|
+
sm: "h-6 gap-1.5 px-2 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",
|
|
115
|
+
lg: "h-10 gap-1.5 px-4 [&_svg:not([class*='size-'])]:size-6 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
|
|
116
|
+
icon: "size-8",
|
|
117
|
+
"icon-sm": "size-6",
|
|
118
|
+
"icon-lg": "size-10 [&_svg:not([class*='size-'])]:size-6"
|
|
119
|
+
},
|
|
120
|
+
block: { true: "w-full" }
|
|
121
|
+
},
|
|
122
|
+
defaultVariants: {
|
|
123
|
+
variant: "default",
|
|
124
|
+
size: "default",
|
|
125
|
+
block: false
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
const Button = React$1.forwardRef(({ className, variant = "default", size = "default", block = false, ...props }, ref) => {
|
|
129
|
+
return /* @__PURE__ */ jsx(Button$1, {
|
|
130
|
+
ref,
|
|
131
|
+
"data-slot": "button",
|
|
132
|
+
"data-variant": variant,
|
|
133
|
+
className: cn(buttonVariants({
|
|
134
|
+
variant,
|
|
135
|
+
size,
|
|
136
|
+
block,
|
|
137
|
+
className
|
|
138
|
+
})),
|
|
139
|
+
...props
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
Button.displayName = "Button";
|
|
143
|
+
|
|
144
|
+
//#endregion
|
|
145
|
+
//#region src/components/alert-dialog.tsx
|
|
146
|
+
function AlertDialog({ ...props }) {
|
|
147
|
+
return /* @__PURE__ */ jsx(AlertDialog$1.Root, {
|
|
148
|
+
"data-slot": "alert-dialog",
|
|
149
|
+
...props
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
function AlertDialogTrigger({ ...props }) {
|
|
153
|
+
return /* @__PURE__ */ jsx(AlertDialog$1.Trigger, {
|
|
154
|
+
"data-slot": "alert-dialog-trigger",
|
|
155
|
+
...props
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
function AlertDialogPortal({ ...props }) {
|
|
159
|
+
return /* @__PURE__ */ jsx(AlertDialog$1.Portal, {
|
|
160
|
+
"data-slot": "alert-dialog-portal",
|
|
161
|
+
...props
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
function AlertDialogOverlay({ className, ...props }) {
|
|
165
|
+
return /* @__PURE__ */ jsx(AlertDialog$1.Backdrop, {
|
|
166
|
+
"data-slot": "alert-dialog-overlay",
|
|
167
|
+
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),
|
|
168
|
+
...props
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
function AlertDialogContent({ className, size = "default", ...props }) {
|
|
172
|
+
return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [/* @__PURE__ */ jsx(AlertDialogOverlay, {}), /* @__PURE__ */ jsx(AlertDialog$1.Popup, {
|
|
173
|
+
"data-slot": "alert-dialog-content",
|
|
174
|
+
"data-size": size,
|
|
175
|
+
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),
|
|
176
|
+
...props
|
|
177
|
+
})] });
|
|
178
|
+
}
|
|
179
|
+
function AlertDialogHeader({ className, ...props }) {
|
|
180
|
+
return /* @__PURE__ */ jsx("div", {
|
|
181
|
+
"data-slot": "alert-dialog-header",
|
|
182
|
+
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),
|
|
183
|
+
...props
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
function AlertDialogFooter({ className, ...props }) {
|
|
187
|
+
return /* @__PURE__ */ jsx("div", {
|
|
188
|
+
"data-slot": "alert-dialog-footer",
|
|
189
|
+
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),
|
|
190
|
+
...props
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
function AlertDialogMedia({ className, ...props }) {
|
|
194
|
+
return /* @__PURE__ */ jsx("div", {
|
|
195
|
+
"data-slot": "alert-dialog-media",
|
|
196
|
+
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),
|
|
197
|
+
...props
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
function AlertDialogTitle({ className, ...props }) {
|
|
201
|
+
return /* @__PURE__ */ jsx(AlertDialog$1.Title, {
|
|
202
|
+
"data-slot": "alert-dialog-title",
|
|
203
|
+
className: cn("text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2", className),
|
|
204
|
+
...props
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
function AlertDialogDescription({ className, ...props }) {
|
|
208
|
+
return /* @__PURE__ */ jsx(AlertDialog$1.Description, {
|
|
209
|
+
"data-slot": "alert-dialog-description",
|
|
210
|
+
className: cn("text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
|
|
211
|
+
...props
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
function AlertDialogAction({ className, ...props }) {
|
|
215
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
216
|
+
"data-slot": "alert-dialog-action",
|
|
217
|
+
className: cn(className),
|
|
218
|
+
...props
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
function AlertDialogCancel({ className, variant = "outline", size = "default", ...props }) {
|
|
222
|
+
return /* @__PURE__ */ jsx(AlertDialog$1.Close, {
|
|
223
|
+
"data-slot": "alert-dialog-cancel",
|
|
224
|
+
className: cn(className),
|
|
225
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
226
|
+
variant,
|
|
227
|
+
size
|
|
228
|
+
}),
|
|
229
|
+
...props
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
|
|
44
233
|
//#endregion
|
|
45
234
|
//#region src/components/alert.tsx
|
|
46
|
-
const alertVariants = cva("relative grid w-full items-start gap-x-2 gap-y-0.5 rounded-
|
|
235
|
+
const alertVariants = cva("relative grid w-full items-start gap-x-2 gap-y-0.5 rounded-3xl border px-4 py-4 text-card-foreground text-sm has-[>svg]:has-data-[slot=alert-action]:grid-cols-[calc(var(--spacing)*6)_1fr_auto] has-[>svg]:grid-cols-[calc(var(--spacing)*6)_1fr] has-data-[slot=alert-action]:grid-cols-[1fr_auto] has-[>svg]:gap-x-4 [&>svg]:size-6", {
|
|
47
236
|
defaultVariants: { variant: "default" },
|
|
48
237
|
variants: { variant: {
|
|
49
|
-
default: "bg-
|
|
50
|
-
error: "
|
|
51
|
-
info: "
|
|
52
|
-
success: "
|
|
53
|
-
warning: "
|
|
238
|
+
default: "bg-card border-border [&>svg]:text-muted-foreground",
|
|
239
|
+
error: "bg-destructive-background border-destructive/35 [&>svg]:text-destructive",
|
|
240
|
+
info: "bg-info-background border-info/35 [&>svg]:text-info",
|
|
241
|
+
success: "bg-success-background border-success/35 [&>svg]:text-success",
|
|
242
|
+
warning: "bg-warning-background border-warning/35 [&>svg]:text-warning"
|
|
54
243
|
} }
|
|
55
244
|
});
|
|
56
245
|
function Alert({ className, variant, ...props }) {
|
|
@@ -63,7 +252,7 @@ function Alert({ className, variant, ...props }) {
|
|
|
63
252
|
}
|
|
64
253
|
function AlertTitle({ className, ...props }) {
|
|
65
254
|
return /* @__PURE__ */ jsx("div", {
|
|
66
|
-
className: cn("font-medium [svg~&]:col-start-2", className),
|
|
255
|
+
className: cn("font-medium leading-6 [svg~&]:col-start-2", className),
|
|
67
256
|
"data-slot": "alert-title",
|
|
68
257
|
...props
|
|
69
258
|
});
|
|
@@ -85,88 +274,180 @@ function AlertAction({ className, ...props }) {
|
|
|
85
274
|
|
|
86
275
|
//#endregion
|
|
87
276
|
//#region src/components/avatar.tsx
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
default: "rounded-full",
|
|
92
|
-
rounded: "rounded-md"
|
|
93
|
-
},
|
|
94
|
-
size: {
|
|
95
|
-
sm: "size-6 text-xs",
|
|
96
|
-
default: "size-8",
|
|
97
|
-
lg: "size-10"
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
defaultVariants: {
|
|
101
|
-
shape: "default",
|
|
102
|
-
size: "default"
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
const Avatar = React$1.forwardRef(({ className, shape = "default", size = "default", ...props }, ref) => {
|
|
106
|
-
return /* @__PURE__ */ jsx(AvatarPrimitive.Root, {
|
|
277
|
+
const Avatar = React$1.forwardRef(({ className, size = "default", ...props }, ref) => {
|
|
278
|
+
return /* @__PURE__ */ jsx(Avatar$1.Root, {
|
|
279
|
+
ref,
|
|
107
280
|
"data-slot": "avatar",
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}), className),
|
|
112
|
-
...props,
|
|
113
|
-
ref
|
|
281
|
+
"data-size": size,
|
|
282
|
+
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=xs]:size-5 data-[size=sm]:size-6 data-[size=lg]:size-10 data-[size=xl]:size-12 dark:after:mix-blend-lighten", className),
|
|
283
|
+
...props
|
|
114
284
|
});
|
|
115
285
|
});
|
|
286
|
+
Avatar.displayName = "Avatar";
|
|
116
287
|
function AvatarImage({ className, ...props }) {
|
|
117
|
-
return /* @__PURE__ */ jsx(
|
|
288
|
+
return /* @__PURE__ */ jsx(Avatar$1.Image, {
|
|
118
289
|
"data-slot": "avatar-image",
|
|
119
|
-
className: cn("aspect-square size-full", className),
|
|
290
|
+
className: cn("aspect-square size-full rounded-full object-cover", className),
|
|
120
291
|
...props
|
|
121
292
|
});
|
|
122
293
|
}
|
|
123
294
|
function AvatarFallback({ className, ...props }) {
|
|
124
|
-
return /* @__PURE__ */ jsx(
|
|
295
|
+
return /* @__PURE__ */ jsx(Avatar$1.Fallback, {
|
|
125
296
|
"data-slot": "avatar-fallback",
|
|
126
|
-
className: cn("
|
|
297
|
+
className: cn("flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=xs]/avatar:text-xs group-data-[size=sm]/avatar:text-xs group-data-[size=xl]/avatar:text-base", className),
|
|
298
|
+
...props
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
function AvatarBadge({ className, ...props }) {
|
|
302
|
+
return /* @__PURE__ */ jsx("span", {
|
|
303
|
+
"data-slot": "avatar-badge",
|
|
304
|
+
className: cn("absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-blend-color ring-2 ring-background select-none", "group-data-[size=xs]/avatar:size-2 group-data-[size=xs]/avatar:[&>svg]:hidden", "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", "group-data-[size=xl]/avatar:size-3 group-data-[size=xl]/avatar:[&>svg]:size-2", className),
|
|
305
|
+
...props
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
function AvatarGroup({ className, ...props }) {
|
|
309
|
+
return /* @__PURE__ */ jsx("div", {
|
|
310
|
+
"data-slot": "avatar-group",
|
|
311
|
+
className: cn("group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background", className),
|
|
312
|
+
...props
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
function AvatarGroupCount({ className, ...props }) {
|
|
316
|
+
return /* @__PURE__ */ jsx("div", {
|
|
317
|
+
"data-slot": "avatar-group-count",
|
|
318
|
+
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=xs]/avatar-group:size-5 group-has-data-[size=sm]/avatar-group:size-6 group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=xl]/avatar-group:size-12 [&>svg]:size-4 group-has-data-[size=xs]/avatar-group:[&>svg]:size-3 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=xl]/avatar-group:[&>svg]:size-6", className),
|
|
127
319
|
...props
|
|
128
320
|
});
|
|
129
321
|
}
|
|
130
322
|
|
|
131
323
|
//#endregion
|
|
132
|
-
//#region src/components/badge.tsx
|
|
133
|
-
const
|
|
324
|
+
//#region src/components/counter-badge.tsx
|
|
325
|
+
const counterBadgeVariants = cva("group/counter-badge inline-flex h-5 min-w-5 shrink-0 items-center justify-center rounded-full border border-transparent px-1 text-xs font-medium whitespace-nowrap transition-[color,box-shadow]", {
|
|
134
326
|
variants: { variant: {
|
|
135
|
-
default: "
|
|
136
|
-
secondary: "
|
|
137
|
-
|
|
138
|
-
outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
|
|
327
|
+
default: "bg-destructive text-primary-foreground hover:bg-destructive/80 focus-visible:border-ring focus-visible:outline-1 focus-visible:outline-offset-1 focus-visible:outline-ring/50",
|
|
328
|
+
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 focus-visible:border-ring focus-visible:outline-1 focus-visible:outline-offset-1 focus-visible:outline-ring/50",
|
|
329
|
+
ghost: "text-muted-foreground hover:bg-muted/80 focus-visible:outline-1 focus-visible:outline-offset-1 focus-visible:outline-ring/50"
|
|
139
330
|
} },
|
|
140
331
|
defaultVariants: { variant: "default" }
|
|
141
332
|
});
|
|
142
|
-
const
|
|
143
|
-
return
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
333
|
+
const CounterBadge = React$1.forwardRef(({ className, variant = "default", render, ...props }, ref) => {
|
|
334
|
+
return useRender({
|
|
335
|
+
defaultTagName: "span",
|
|
336
|
+
props: mergeProps({
|
|
337
|
+
className: cn(counterBadgeVariants({ variant }), className),
|
|
338
|
+
ref
|
|
339
|
+
}, props),
|
|
340
|
+
render,
|
|
341
|
+
state: {
|
|
342
|
+
slot: "counter-badge",
|
|
343
|
+
variant
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
CounterBadge.displayName = "CounterBadge";
|
|
348
|
+
|
|
349
|
+
//#endregion
|
|
350
|
+
//#region src/components/badge.tsx
|
|
351
|
+
const badgeVariants = cva("group/badge inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none", {
|
|
352
|
+
variants: {
|
|
353
|
+
variant: {
|
|
354
|
+
default: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
|
|
355
|
+
secondary: "bg-charcoal-500/30 text-foreground [a]:hover:bg-charcoal-500/20",
|
|
356
|
+
outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground"
|
|
357
|
+
},
|
|
358
|
+
size: {
|
|
359
|
+
sm: "h-5 px-2 py-0.5 text-xs [&>svg]:size-3!",
|
|
360
|
+
lg: "h-7 px-3 py-1 text-sm [&>svg]:size-4!"
|
|
361
|
+
}
|
|
362
|
+
},
|
|
363
|
+
defaultVariants: {
|
|
364
|
+
variant: "default",
|
|
365
|
+
size: "sm"
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
const Badge = React$1.forwardRef(({ className, variant = "default", size = "sm", render, ...props }, ref) => {
|
|
369
|
+
return useRender({
|
|
370
|
+
defaultTagName: "span",
|
|
371
|
+
props: mergeProps({
|
|
372
|
+
className: cn(badgeVariants({
|
|
373
|
+
variant,
|
|
374
|
+
size
|
|
375
|
+
}), className),
|
|
376
|
+
ref
|
|
377
|
+
}, props),
|
|
378
|
+
render,
|
|
379
|
+
state: {
|
|
380
|
+
slot: "badge",
|
|
381
|
+
variant,
|
|
382
|
+
size
|
|
383
|
+
}
|
|
148
384
|
});
|
|
149
385
|
});
|
|
150
386
|
Badge.displayName = "Badge";
|
|
387
|
+
function BadgeGroup({ className, ...props }) {
|
|
388
|
+
return /* @__PURE__ */ jsx("div", {
|
|
389
|
+
"data-slot": "badge-group",
|
|
390
|
+
className: cn("flex flex-wrap items-center gap-2", className),
|
|
391
|
+
...props
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
function BadgeGroupCount({ className, ...props }) {
|
|
395
|
+
return /* @__PURE__ */ jsx(CounterBadge, {
|
|
396
|
+
"data-slot": "badge-group-count",
|
|
397
|
+
variant: "ghost",
|
|
398
|
+
className,
|
|
399
|
+
...props
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
//#endregion
|
|
404
|
+
//#region src/components/banner.tsx
|
|
405
|
+
const bannerVariants = cva("relative grid w-full items-start gap-x-2 gap-y-0.5 px-4 py-4 text-card-foreground text-sm has-[>svg]:has-data-[slot=alert-action]:grid-cols-[calc(var(--spacing)*6)_1fr_auto] has-[>svg]:grid-cols-[calc(var(--spacing)*6)_1fr] has-data-[slot=alert-action]:grid-cols-[1fr_auto] has-[>svg]:gap-x-4 [&>svg]:size-6", {
|
|
406
|
+
defaultVariants: { variant: "default" },
|
|
407
|
+
variants: {
|
|
408
|
+
variant: {
|
|
409
|
+
default: "bg-card border-border [&>svg]:text-muted-foreground",
|
|
410
|
+
error: "bg-destructive-background border-destructive [&>svg]:text-destructive",
|
|
411
|
+
info: "bg-info-background border-info [&>svg]:text-info",
|
|
412
|
+
success: "bg-success-background border-success [&>svg]:text-success",
|
|
413
|
+
warning: "bg-warning-background border-warning [&>svg]:text-warning"
|
|
414
|
+
},
|
|
415
|
+
borderDirection: {
|
|
416
|
+
top: "border-t",
|
|
417
|
+
bottom: "border-b"
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
function Banner({ className, variant, borderDirection, ...props }) {
|
|
422
|
+
return /* @__PURE__ */ jsx("div", {
|
|
423
|
+
className: cn(bannerVariants({
|
|
424
|
+
variant,
|
|
425
|
+
borderDirection
|
|
426
|
+
}), className),
|
|
427
|
+
"data-slot": "banner",
|
|
428
|
+
role: "alert",
|
|
429
|
+
...props
|
|
430
|
+
});
|
|
431
|
+
}
|
|
151
432
|
|
|
152
433
|
//#endregion
|
|
153
434
|
//#region src/components/separator.tsx
|
|
154
|
-
function Separator({ className, orientation = "horizontal",
|
|
155
|
-
return /* @__PURE__ */ jsx(
|
|
435
|
+
function Separator({ className, orientation = "horizontal", ...props }) {
|
|
436
|
+
return /* @__PURE__ */ jsx(Separator$1, {
|
|
156
437
|
"data-slot": "separator",
|
|
157
|
-
|
|
438
|
+
"data-orientation": orientation,
|
|
158
439
|
orientation,
|
|
159
|
-
className: cn("bg-border
|
|
440
|
+
className: cn("shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch", className),
|
|
160
441
|
...props
|
|
161
442
|
});
|
|
162
443
|
}
|
|
163
444
|
|
|
164
445
|
//#endregion
|
|
165
446
|
//#region src/components/button-group.tsx
|
|
166
|
-
const buttonGroupVariants = cva("flex w-fit items-stretch
|
|
447
|
+
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-md [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1", {
|
|
167
448
|
variants: { orientation: {
|
|
168
|
-
horizontal: "[
|
|
169
|
-
vertical: "flex-col [
|
|
449
|
+
horizontal: "*:data-slot:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-md! [&>[data-slot]~[data-slot]]:rounded-l-none [&>[data-slot]~[data-slot]]:border-l-0",
|
|
450
|
+
vertical: "flex-col *:data-slot:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-md! [&>[data-slot]~[data-slot]]:rounded-t-none [&>[data-slot]~[data-slot]]:border-t-0"
|
|
170
451
|
} },
|
|
171
452
|
defaultVariants: { orientation: "horizontal" }
|
|
172
453
|
});
|
|
@@ -179,63 +460,124 @@ function ButtonGroup({ className, orientation, ...props }) {
|
|
|
179
460
|
...props
|
|
180
461
|
});
|
|
181
462
|
}
|
|
182
|
-
function ButtonGroupText({ className,
|
|
183
|
-
return
|
|
184
|
-
|
|
185
|
-
|
|
463
|
+
function ButtonGroupText({ className, render, ...props }) {
|
|
464
|
+
return useRender({
|
|
465
|
+
defaultTagName: "div",
|
|
466
|
+
props: mergeProps({ className: cn("flex items-center gap-2 rounded-md border bg-muted px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", className) }, props),
|
|
467
|
+
render,
|
|
468
|
+
state: { slot: "button-group-text" }
|
|
186
469
|
});
|
|
187
470
|
}
|
|
188
471
|
function ButtonGroupSeparator({ className, orientation = "vertical", ...props }) {
|
|
189
472
|
return /* @__PURE__ */ jsx(Separator, {
|
|
190
473
|
"data-slot": "button-group-separator",
|
|
191
474
|
orientation,
|
|
192
|
-
className: cn("bg-input
|
|
475
|
+
className: cn("relative self-stretch bg-input data-[orientation=horizontal]:mx-px data-[orientation=horizontal]:w-auto data-[orientation=vertical]:my-px data-[orientation=vertical]:h-auto", className),
|
|
193
476
|
...props
|
|
194
477
|
});
|
|
195
478
|
}
|
|
196
479
|
|
|
197
480
|
//#endregion
|
|
198
|
-
//#region src/components/
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
481
|
+
//#region src/components/calendar.tsx
|
|
482
|
+
function Calendar({ className, classNames, showOutsideDays = true, captionLayout = "label", buttonVariant = "ghost", locale, formatters, components, ...props }) {
|
|
483
|
+
const defaultClassNames = getDefaultClassNames();
|
|
484
|
+
return /* @__PURE__ */ jsx(DayPicker, {
|
|
485
|
+
showOutsideDays,
|
|
486
|
+
className: cn("group/calendar bg-background p-3 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(8)] 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),
|
|
487
|
+
captionLayout,
|
|
488
|
+
locale,
|
|
489
|
+
formatters: {
|
|
490
|
+
formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: "short" }),
|
|
491
|
+
...formatters
|
|
208
492
|
},
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
493
|
+
classNames: {
|
|
494
|
+
root: cn("w-fit", defaultClassNames.root),
|
|
495
|
+
months: cn("relative flex flex-col gap-4 md:flex-row", defaultClassNames.months),
|
|
496
|
+
month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
|
|
497
|
+
nav: cn("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1", defaultClassNames.nav),
|
|
498
|
+
button_previous: cn(buttonVariants({ variant: buttonVariant }), "size-(--cell-size) p-0 select-none aria-disabled:opacity-50", defaultClassNames.button_previous),
|
|
499
|
+
button_next: cn(buttonVariants({ variant: buttonVariant }), "size-(--cell-size) p-0 select-none aria-disabled:opacity-50", defaultClassNames.button_next),
|
|
500
|
+
month_caption: cn("flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)", defaultClassNames.month_caption),
|
|
501
|
+
dropdowns: cn("flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium", defaultClassNames.dropdowns),
|
|
502
|
+
dropdown_root: cn("relative rounded-(--cell-radius)", defaultClassNames.dropdown_root),
|
|
503
|
+
dropdown: cn("absolute inset-0 bg-popover opacity-0", defaultClassNames.dropdown),
|
|
504
|
+
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),
|
|
505
|
+
table: "w-full border-collapse",
|
|
506
|
+
weekdays: cn("flex", defaultClassNames.weekdays),
|
|
507
|
+
weekday: cn("flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none", defaultClassNames.weekday),
|
|
508
|
+
week: cn("mt-2 flex w-full", defaultClassNames.week),
|
|
509
|
+
week_number_header: cn("w-(--cell-size) select-none", defaultClassNames.week_number_header),
|
|
510
|
+
week_number: cn("text-[0.8rem] text-muted-foreground select-none", defaultClassNames.week_number),
|
|
511
|
+
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),
|
|
512
|
+
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),
|
|
513
|
+
range_middle: cn("rounded-none", defaultClassNames.range_middle),
|
|
514
|
+
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),
|
|
515
|
+
today: cn("rounded-(--cell-radius) text-foreground not-data-[selected=true]:bg-muted data-[selected=true]:rounded-none", defaultClassNames.today),
|
|
516
|
+
outside: cn("text-muted-foreground aria-selected:text-muted-foreground", defaultClassNames.outside),
|
|
517
|
+
disabled: cn("text-muted-foreground opacity-50", defaultClassNames.disabled),
|
|
518
|
+
hidden: cn("invisible", defaultClassNames.hidden),
|
|
519
|
+
...classNames
|
|
520
|
+
},
|
|
521
|
+
components: {
|
|
522
|
+
Root: ({ className: rootClassName, rootRef, ...rootProps }) => {
|
|
523
|
+
return /* @__PURE__ */ jsx("div", {
|
|
524
|
+
"data-slot": "calendar",
|
|
525
|
+
ref: rootRef,
|
|
526
|
+
className: cn(rootClassName),
|
|
527
|
+
...rootProps
|
|
528
|
+
});
|
|
529
|
+
},
|
|
530
|
+
Chevron: ({ className: chevronClassName, orientation, ...chevronProps }) => {
|
|
531
|
+
if (orientation === "left") return /* @__PURE__ */ jsx(ChevronLeftIcon, {
|
|
532
|
+
className: cn("size-4", chevronClassName),
|
|
533
|
+
...chevronProps
|
|
534
|
+
});
|
|
535
|
+
if (orientation === "right") return /* @__PURE__ */ jsx(ChevronRightIcon, {
|
|
536
|
+
className: cn("size-4", chevronClassName),
|
|
537
|
+
...chevronProps
|
|
538
|
+
});
|
|
539
|
+
return /* @__PURE__ */ jsx(ChevronDownIcon, {
|
|
540
|
+
className: cn("size-4", chevronClassName),
|
|
541
|
+
...chevronProps
|
|
542
|
+
});
|
|
543
|
+
},
|
|
544
|
+
DayButton: ({ ...dayButtonProps }) => /* @__PURE__ */ jsx(CalendarDayButton, {
|
|
545
|
+
locale,
|
|
546
|
+
...dayButtonProps
|
|
547
|
+
}),
|
|
548
|
+
WeekNumber: ({ children, ...weekNumberProps }) => {
|
|
549
|
+
return /* @__PURE__ */ jsx("td", {
|
|
550
|
+
...weekNumberProps,
|
|
551
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
552
|
+
className: "flex size-(--cell-size) items-center justify-center text-center",
|
|
553
|
+
children
|
|
554
|
+
})
|
|
555
|
+
});
|
|
556
|
+
},
|
|
557
|
+
...components
|
|
216
558
|
},
|
|
217
|
-
block: { true: "w-full" }
|
|
218
|
-
},
|
|
219
|
-
defaultVariants: {
|
|
220
|
-
variant: "default",
|
|
221
|
-
size: "default",
|
|
222
|
-
block: false
|
|
223
|
-
}
|
|
224
|
-
});
|
|
225
|
-
const Button = React$1.forwardRef(({ className, variant, size, asChild = false, block = false, ...props }, forwardedRef) => {
|
|
226
|
-
return /* @__PURE__ */ jsx(asChild ? Slot$1 : "button", {
|
|
227
|
-
"data-slot": "button",
|
|
228
|
-
className: cn(buttonVariants({
|
|
229
|
-
variant,
|
|
230
|
-
size,
|
|
231
|
-
block,
|
|
232
|
-
className
|
|
233
|
-
})),
|
|
234
|
-
ref: forwardedRef,
|
|
235
559
|
...props
|
|
236
560
|
});
|
|
237
|
-
}
|
|
238
|
-
|
|
561
|
+
}
|
|
562
|
+
function CalendarDayButton({ className: dayClassName, day, modifiers, locale, ...props }) {
|
|
563
|
+
const defaultClassNames = getDefaultClassNames();
|
|
564
|
+
const ref = React$1.useRef(null);
|
|
565
|
+
React$1.useEffect(() => {
|
|
566
|
+
if (modifiers.focused) ref.current?.focus();
|
|
567
|
+
}, [modifiers.focused]);
|
|
568
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
569
|
+
ref,
|
|
570
|
+
variant: "ghost",
|
|
571
|
+
size: "icon",
|
|
572
|
+
"data-day": day.date.toLocaleDateString(locale?.code),
|
|
573
|
+
"data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
|
|
574
|
+
"data-range-start": modifiers.range_start,
|
|
575
|
+
"data-range-end": modifiers.range_end,
|
|
576
|
+
"data-range-middle": modifiers.range_middle,
|
|
577
|
+
className: cn("relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 rounded-(--cell-radius) border-transparent bg-clip-border 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-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-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, dayClassName),
|
|
578
|
+
...props
|
|
579
|
+
});
|
|
580
|
+
}
|
|
239
581
|
|
|
240
582
|
//#endregion
|
|
241
583
|
//#region src/components/card.tsx
|
|
@@ -391,7 +733,7 @@ function CarouselPrevious({ className, variant = "outline", size = "sm", ...prop
|
|
|
391
733
|
disabled: !canScrollPrev,
|
|
392
734
|
onClick: scrollPrev,
|
|
393
735
|
...props,
|
|
394
|
-
children: [/* @__PURE__ */ jsx(
|
|
736
|
+
children: [/* @__PURE__ */ jsx(ArrowLeft, {}), /* @__PURE__ */ jsx("span", {
|
|
395
737
|
className: "sr-only",
|
|
396
738
|
children: "Previous slide"
|
|
397
739
|
})]
|
|
@@ -407,7 +749,7 @@ function CarouselNext({ className, variant = "outline", size = "sm", ...props })
|
|
|
407
749
|
disabled: !canScrollNext,
|
|
408
750
|
onClick: scrollNext,
|
|
409
751
|
...props,
|
|
410
|
-
children: [/* @__PURE__ */ jsx(
|
|
752
|
+
children: [/* @__PURE__ */ jsx(ArrowRight, {}), /* @__PURE__ */ jsx("span", {
|
|
411
753
|
className: "sr-only",
|
|
412
754
|
children: "Next slide"
|
|
413
755
|
})]
|
|
@@ -417,15 +759,16 @@ function CarouselNext({ className, variant = "outline", size = "sm", ...props })
|
|
|
417
759
|
//#endregion
|
|
418
760
|
//#region src/components/checkbox.tsx
|
|
419
761
|
const Checkbox = React$1.forwardRef(({ className, ...props }, ref) => {
|
|
420
|
-
return /* @__PURE__ */ jsx(
|
|
762
|
+
return /* @__PURE__ */ jsx(Checkbox$1.Root, {
|
|
421
763
|
ref,
|
|
422
764
|
"data-slot": "checkbox",
|
|
423
|
-
className: cn("peer
|
|
765
|
+
className: cn("peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input transition-[color,box-shadow,opacity] outline-none active:opacity-60 group-has-disabled/field:opacity-50 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:bg-input/50 disabled:opacity-50 dark:disabled:bg-input/80 aria-invalid:border-destructive focus-visible:aria-invalid:ring-3 focus-visible:aria-invalid:ring-destructive/20 hover:aria-invalid:data-unchecked:bg-destructive-background focus-visible:aria-invalid:data-unchecked:bg-destructive-background dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:focus-visible:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground data-indeterminate:border-primary data-indeterminate:bg-primary data-indeterminate:text-primary-foreground aria-invalid:data-checked:border-destructive aria-invalid:data-checked:bg-destructive aria-invalid:data-indeterminate:border-destructive aria-invalid:data-indeterminate:bg-destructive dark:data-checked:bg-primary dark:data-indeterminate:bg-primary", className),
|
|
424
766
|
...props,
|
|
425
|
-
children: /* @__PURE__ */
|
|
767
|
+
children: /* @__PURE__ */ jsxs(Checkbox$1.Indicator, {
|
|
426
768
|
"data-slot": "checkbox-indicator",
|
|
427
|
-
|
|
428
|
-
|
|
769
|
+
keepMounted: true,
|
|
770
|
+
className: "group/indicator grid place-content-center text-current transition-none [&>svg]:size-3.5",
|
|
771
|
+
children: [/* @__PURE__ */ jsx(CheckIcon, { className: "hidden group-data-[checked]/indicator:block" }), /* @__PURE__ */ jsx(MinusIcon, { className: "hidden group-data-[indeterminate]/indicator:block" })]
|
|
429
772
|
})
|
|
430
773
|
});
|
|
431
774
|
});
|
|
@@ -434,99 +777,357 @@ Checkbox.displayName = "Checkbox";
|
|
|
434
777
|
//#endregion
|
|
435
778
|
//#region src/components/collapsible.tsx
|
|
436
779
|
function Collapsible({ ...props }) {
|
|
437
|
-
return /* @__PURE__ */ jsx(
|
|
780
|
+
return /* @__PURE__ */ jsx(Collapsible$1.Root, {
|
|
438
781
|
"data-slot": "collapsible",
|
|
439
782
|
...props
|
|
440
783
|
});
|
|
441
784
|
}
|
|
442
785
|
function CollapsibleTrigger({ ...props }) {
|
|
443
|
-
return /* @__PURE__ */ jsx(
|
|
786
|
+
return /* @__PURE__ */ jsx(Collapsible$1.Trigger, {
|
|
444
787
|
"data-slot": "collapsible-trigger",
|
|
445
788
|
...props
|
|
446
789
|
});
|
|
447
790
|
}
|
|
448
791
|
function CollapsibleContent({ ...props }) {
|
|
449
|
-
return /* @__PURE__ */ jsx(
|
|
792
|
+
return /* @__PURE__ */ jsx(Collapsible$1.Panel, {
|
|
450
793
|
"data-slot": "collapsible-content",
|
|
451
794
|
...props
|
|
452
795
|
});
|
|
453
796
|
}
|
|
454
797
|
|
|
455
798
|
//#endregion
|
|
456
|
-
//#region src/components/
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
799
|
+
//#region src/components/input.tsx
|
|
800
|
+
const inputVariants = cva("text-foreground file:text-foreground placeholder:text-muted-foreground dark:bg-input/30 border-input flex h-10 w-full min-w-0 rounded-md border bg-transparent px-3 py-2 text-base transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium hover:border-ring hover:aria-invalid:border-destructive disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 dark:disabled:bg-input/80 md:text-sm focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3 aria-invalid:border-destructive focus-visible:aria-invalid:ring-destructive/20 focus-visible:aria-invalid:ring-3 dark:focus-visible:aria-invalid:ring-destructive/40", { variants: { block: { true: "w-full" } } });
|
|
801
|
+
const Input = React$1.forwardRef(({ className, type, block, ...props }, forwardedRef) => {
|
|
802
|
+
return /* @__PURE__ */ jsx("input", {
|
|
803
|
+
type,
|
|
804
|
+
"data-slot": "input",
|
|
805
|
+
className: cn(inputVariants({
|
|
806
|
+
block,
|
|
807
|
+
className
|
|
808
|
+
})),
|
|
809
|
+
...props,
|
|
810
|
+
ref: forwardedRef
|
|
811
|
+
});
|
|
812
|
+
});
|
|
813
|
+
|
|
814
|
+
//#endregion
|
|
815
|
+
//#region src/components/textarea.tsx
|
|
816
|
+
function Textarea({ className, ...props }) {
|
|
817
|
+
return /* @__PURE__ */ jsx("textarea", {
|
|
818
|
+
"data-slot": "textarea",
|
|
819
|
+
className: cn("border-input placeholder:text-muted-foreground hover:border-ring hover:aria-invalid:border-destructive focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3 aria-invalid:border-destructive focus-visible:aria-invalid:ring-destructive/20 focus-visible:aria-invalid:ring-3 dark:focus-visible:aria-invalid:ring-destructive/40 dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 dark:disabled:bg-input/80 md:text-sm", className),
|
|
460
820
|
...props
|
|
461
821
|
});
|
|
462
822
|
}
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
823
|
+
|
|
824
|
+
//#endregion
|
|
825
|
+
//#region src/components/input-group.tsx
|
|
826
|
+
const InputGroup = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
|
|
827
|
+
ref,
|
|
828
|
+
"data-slot": "input-group",
|
|
829
|
+
role: "group",
|
|
830
|
+
className: cn("group/input-group border-input dark:bg-input/30 relative flex h-10 w-full items-center rounded-md border transition-[color,box-shadow] outline-none has-[>textarea]:h-auto", "not-has-[input:disabled]:not-has-[textarea:disabled]:not-has-[[data-slot][aria-invalid=true]]:hover:border-ring", "has-[input:disabled]:bg-input/50 has-[textarea:disabled]:bg-input/50 has-[input:disabled]:opacity-50 has-[textarea:disabled]:opacity-50 dark:has-[input:disabled]:bg-input/80 dark:has-[textarea:disabled]:bg-input/80", "has-[>[data-align=inline-start]]:[&>input]:pl-2", "has-[>[data-align=inline-end]]:[&>input]:pr-2", "has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3", "has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3", "has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot=input-group-control]:focus-visible]:ring-3", "has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]:focus-visible]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]:focus-visible]:ring-destructive/40", className),
|
|
831
|
+
...props
|
|
832
|
+
}));
|
|
833
|
+
InputGroup.displayName = "InputGroup";
|
|
834
|
+
const inputGroupAddonVariants = cva("text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50", {
|
|
835
|
+
variants: { align: {
|
|
836
|
+
"inline-start": "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]",
|
|
837
|
+
"inline-end": "order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]",
|
|
838
|
+
"block-start": "order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5",
|
|
839
|
+
"block-end": "order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5"
|
|
840
|
+
} },
|
|
841
|
+
defaultVariants: { align: "inline-start" }
|
|
842
|
+
});
|
|
843
|
+
function InputGroupAddon({ className, align = "inline-start", ...props }) {
|
|
844
|
+
return /* @__PURE__ */ jsx("div", {
|
|
845
|
+
role: "group",
|
|
846
|
+
"data-slot": "input-group-addon",
|
|
847
|
+
"data-align": align,
|
|
848
|
+
className: cn(inputGroupAddonVariants({ align }), className),
|
|
849
|
+
onClick: (e) => {
|
|
850
|
+
if (e.target.closest("button")) return;
|
|
851
|
+
e.currentTarget.parentElement?.querySelector("input")?.focus();
|
|
852
|
+
},
|
|
466
853
|
...props
|
|
467
854
|
});
|
|
468
855
|
}
|
|
469
|
-
|
|
470
|
-
return /* @__PURE__ */ jsx(
|
|
856
|
+
const InputGroupButton = React$1.forwardRef(({ className, type = "button", variant = "ghost", size = "sm", ...props }, ref) => {
|
|
857
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
858
|
+
ref,
|
|
859
|
+
type,
|
|
860
|
+
variant,
|
|
861
|
+
size,
|
|
862
|
+
className,
|
|
863
|
+
...props
|
|
864
|
+
});
|
|
865
|
+
});
|
|
866
|
+
InputGroupButton.displayName = "InputGroupButton";
|
|
867
|
+
function InputGroupText({ className, ...props }) {
|
|
868
|
+
return /* @__PURE__ */ jsx("span", {
|
|
869
|
+
className: cn("text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", className),
|
|
870
|
+
...props
|
|
871
|
+
});
|
|
872
|
+
}
|
|
873
|
+
const InputGroupInput = React$1.forwardRef(({ className, ...props }, forwardedRef) => {
|
|
874
|
+
return /* @__PURE__ */ jsx(Input, {
|
|
875
|
+
"data-slot": "input-group-control",
|
|
876
|
+
className: cn("flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 aria-invalid:ring-0 focus-visible:aria-invalid:!ring-0 disabled:bg-transparent disabled:opacity-100 dark:bg-transparent dark:disabled:bg-transparent", className),
|
|
877
|
+
...props,
|
|
878
|
+
ref: forwardedRef
|
|
879
|
+
});
|
|
880
|
+
});
|
|
881
|
+
function InputGroupTextarea({ className, ...props }) {
|
|
882
|
+
return /* @__PURE__ */ jsx(Textarea, {
|
|
883
|
+
"data-slot": "input-group-control",
|
|
884
|
+
className: cn("flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent", className),
|
|
885
|
+
...props
|
|
886
|
+
});
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
//#endregion
|
|
890
|
+
//#region src/components/combobox.tsx
|
|
891
|
+
const Combobox = Combobox$1.Root;
|
|
892
|
+
function ComboboxValue({ ...props }) {
|
|
893
|
+
return /* @__PURE__ */ jsx(Combobox$1.Value, {
|
|
894
|
+
"data-slot": "combobox-value",
|
|
895
|
+
...props
|
|
896
|
+
});
|
|
897
|
+
}
|
|
898
|
+
const ComboboxTrigger = React$1.forwardRef(({ className, children, ...props }, ref) => {
|
|
899
|
+
return /* @__PURE__ */ jsxs(Combobox$1.Trigger, {
|
|
900
|
+
ref,
|
|
901
|
+
"data-slot": "combobox-trigger",
|
|
902
|
+
className: cn("[&_svg:not([class*='size-'])]:size-4", className),
|
|
903
|
+
...props,
|
|
904
|
+
children: [children, /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" })]
|
|
905
|
+
});
|
|
906
|
+
});
|
|
907
|
+
ComboboxTrigger.displayName = "ComboboxTrigger";
|
|
908
|
+
function ComboboxClear({ className, ...props }) {
|
|
909
|
+
return /* @__PURE__ */ jsx(Combobox$1.Clear, {
|
|
910
|
+
"data-slot": "combobox-clear",
|
|
911
|
+
render: /* @__PURE__ */ jsx(InputGroupButton, {
|
|
912
|
+
variant: "ghost",
|
|
913
|
+
size: "icon-sm"
|
|
914
|
+
}),
|
|
915
|
+
className: cn(className),
|
|
916
|
+
...props,
|
|
917
|
+
children: /* @__PURE__ */ jsx(XIcon, { className: "pointer-events-none" })
|
|
918
|
+
});
|
|
919
|
+
}
|
|
920
|
+
const ComboboxInput = React$1.forwardRef(({ className, children, disabled = false, showTrigger = true, showClear = false, ...props }, ref) => {
|
|
921
|
+
return /* @__PURE__ */ jsxs(InputGroup, {
|
|
922
|
+
ref,
|
|
923
|
+
className: cn("w-auto", className),
|
|
924
|
+
children: [
|
|
925
|
+
/* @__PURE__ */ jsx(Combobox$1.Input, {
|
|
926
|
+
render: /* @__PURE__ */ jsx(InputGroupInput, { disabled }),
|
|
927
|
+
...props
|
|
928
|
+
}),
|
|
929
|
+
/* @__PURE__ */ jsxs(InputGroupAddon, {
|
|
930
|
+
align: "inline-end",
|
|
931
|
+
children: [showTrigger && /* @__PURE__ */ jsx(InputGroupButton, {
|
|
932
|
+
size: "icon-sm",
|
|
933
|
+
variant: "ghost",
|
|
934
|
+
render: /* @__PURE__ */ jsx(ComboboxTrigger, {}),
|
|
935
|
+
"data-slot": "input-group-button",
|
|
936
|
+
className: "group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent",
|
|
937
|
+
disabled
|
|
938
|
+
}), showClear && /* @__PURE__ */ jsx(ComboboxClear, { disabled })]
|
|
939
|
+
}),
|
|
940
|
+
children
|
|
941
|
+
]
|
|
942
|
+
});
|
|
943
|
+
});
|
|
944
|
+
ComboboxInput.displayName = "ComboboxInput";
|
|
945
|
+
function ComboboxContent({ className, side = "bottom", sideOffset = 6, align = "start", alignOffset = 0, anchor, ...props }) {
|
|
946
|
+
return /* @__PURE__ */ jsx(Combobox$1.Portal, { children: /* @__PURE__ */ jsx(Combobox$1.Positioner, {
|
|
947
|
+
side,
|
|
948
|
+
sideOffset,
|
|
949
|
+
align,
|
|
950
|
+
alignOffset,
|
|
951
|
+
anchor,
|
|
952
|
+
className: "isolate z-50",
|
|
953
|
+
children: /* @__PURE__ */ jsx(Combobox$1.Popup, {
|
|
954
|
+
"data-slot": "combobox-content",
|
|
955
|
+
"data-chips": !!anchor,
|
|
956
|
+
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 outline-hidden 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]: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),
|
|
957
|
+
...props
|
|
958
|
+
})
|
|
959
|
+
}) });
|
|
960
|
+
}
|
|
961
|
+
function ComboboxList({ className, ...props }) {
|
|
962
|
+
return /* @__PURE__ */ jsx(Combobox$1.List, {
|
|
963
|
+
"data-slot": "combobox-list",
|
|
964
|
+
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 outline-hidden data-empty:p-0", className),
|
|
965
|
+
...props
|
|
966
|
+
});
|
|
967
|
+
}
|
|
968
|
+
function ComboboxItem({ className, children, ...props }) {
|
|
969
|
+
return /* @__PURE__ */ jsxs(Combobox$1.Item, {
|
|
970
|
+
"data-slot": "combobox-item",
|
|
971
|
+
className: cn("relative flex w-full cursor-default items-center gap-2 rounded-md p-2 pr-8 text-sm outline-hidden select-none data-highlighted:bg-accent 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),
|
|
972
|
+
...props,
|
|
973
|
+
children: [children, /* @__PURE__ */ jsx(Combobox$1.ItemIndicator, {
|
|
974
|
+
"data-slot": "combobox-item-indicator",
|
|
975
|
+
render: /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center text-primary" }),
|
|
976
|
+
children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" })
|
|
977
|
+
})]
|
|
978
|
+
});
|
|
979
|
+
}
|
|
980
|
+
function ComboboxGroup({ className, ...props }) {
|
|
981
|
+
return /* @__PURE__ */ jsx(Combobox$1.Group, {
|
|
982
|
+
"data-slot": "combobox-group",
|
|
983
|
+
className: cn(className),
|
|
984
|
+
...props
|
|
985
|
+
});
|
|
986
|
+
}
|
|
987
|
+
function ComboboxLabel({ className, ...props }) {
|
|
988
|
+
return /* @__PURE__ */ jsx(Combobox$1.GroupLabel, {
|
|
989
|
+
"data-slot": "combobox-label",
|
|
990
|
+
className: cn("p-2 text-xs text-muted-foreground", className),
|
|
991
|
+
...props
|
|
992
|
+
});
|
|
993
|
+
}
|
|
994
|
+
function ComboboxCollection({ ...props }) {
|
|
995
|
+
return /* @__PURE__ */ jsx(Combobox$1.Collection, {
|
|
996
|
+
"data-slot": "combobox-collection",
|
|
997
|
+
...props
|
|
998
|
+
});
|
|
999
|
+
}
|
|
1000
|
+
function ComboboxEmpty({ className, ...props }) {
|
|
1001
|
+
return /* @__PURE__ */ jsx(Combobox$1.Empty, {
|
|
1002
|
+
"data-slot": "combobox-empty",
|
|
1003
|
+
className: cn("hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/combobox-content:flex", className),
|
|
1004
|
+
...props
|
|
1005
|
+
});
|
|
1006
|
+
}
|
|
1007
|
+
function ComboboxSeparator({ className, ...props }) {
|
|
1008
|
+
return /* @__PURE__ */ jsx(Combobox$1.Separator, {
|
|
1009
|
+
"data-slot": "combobox-separator",
|
|
1010
|
+
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
1011
|
+
...props
|
|
1012
|
+
});
|
|
1013
|
+
}
|
|
1014
|
+
const ComboboxChips = React$1.forwardRef(({ className, ...props }, ref) => {
|
|
1015
|
+
return /* @__PURE__ */ jsx(Combobox$1.Chips, {
|
|
1016
|
+
ref,
|
|
1017
|
+
"data-slot": "combobox-chips",
|
|
1018
|
+
className: cn("flex min-h-10 flex-wrap items-center gap-1 rounded-md border border-input bg-transparent bg-clip-padding py-2 pl-3 pr-2 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 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40", className),
|
|
1019
|
+
...props
|
|
1020
|
+
});
|
|
1021
|
+
});
|
|
1022
|
+
ComboboxChips.displayName = "ComboboxChips";
|
|
1023
|
+
function ComboboxChip({ className, children, showRemove = true, ...props }) {
|
|
1024
|
+
return /* @__PURE__ */ jsxs(Combobox$1.Chip, {
|
|
1025
|
+
"data-slot": "combobox-chip",
|
|
1026
|
+
className: cn("flex h-6 w-fit items-center justify-center gap-1 rounded-md 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),
|
|
1027
|
+
...props,
|
|
1028
|
+
children: [children, showRemove && /* @__PURE__ */ jsx(Combobox$1.ChipRemove, {
|
|
1029
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
1030
|
+
variant: "ghost",
|
|
1031
|
+
size: "icon-sm"
|
|
1032
|
+
}),
|
|
1033
|
+
className: "-ml-1 opacity-50 hover:opacity-100",
|
|
1034
|
+
"data-slot": "combobox-chip-remove",
|
|
1035
|
+
children: /* @__PURE__ */ jsx(XIcon, { className: "pointer-events-none" })
|
|
1036
|
+
})]
|
|
1037
|
+
});
|
|
1038
|
+
}
|
|
1039
|
+
function ComboboxChipsInput({ className, ...props }) {
|
|
1040
|
+
return /* @__PURE__ */ jsx(Combobox$1.Input, {
|
|
1041
|
+
"data-slot": "combobox-chip-input",
|
|
1042
|
+
className: cn("min-w-16 flex-1 outline-none", className),
|
|
1043
|
+
...props
|
|
1044
|
+
});
|
|
1045
|
+
}
|
|
1046
|
+
function useComboboxAnchor() {
|
|
1047
|
+
return React$1.useRef(null);
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
//#endregion
|
|
1051
|
+
//#region src/components/dialog.tsx
|
|
1052
|
+
function Dialog({ ...props }) {
|
|
1053
|
+
return /* @__PURE__ */ jsx(Dialog$1.Root, {
|
|
1054
|
+
"data-slot": "dialog",
|
|
1055
|
+
...props
|
|
1056
|
+
});
|
|
1057
|
+
}
|
|
1058
|
+
function DialogTrigger({ ...props }) {
|
|
1059
|
+
return /* @__PURE__ */ jsx(Dialog$1.Trigger, {
|
|
1060
|
+
"data-slot": "dialog-trigger",
|
|
1061
|
+
...props
|
|
1062
|
+
});
|
|
1063
|
+
}
|
|
1064
|
+
function DialogPortal({ ...props }) {
|
|
1065
|
+
return /* @__PURE__ */ jsx(Dialog$1.Portal, {
|
|
471
1066
|
"data-slot": "dialog-portal",
|
|
472
1067
|
...props
|
|
473
1068
|
});
|
|
474
1069
|
}
|
|
475
1070
|
function DialogClose({ ...props }) {
|
|
476
|
-
return /* @__PURE__ */ jsx(
|
|
1071
|
+
return /* @__PURE__ */ jsx(Dialog$1.Close, {
|
|
477
1072
|
"data-slot": "dialog-close",
|
|
478
1073
|
...props
|
|
479
1074
|
});
|
|
480
1075
|
}
|
|
481
1076
|
function DialogOverlay({ className, ...props }) {
|
|
482
|
-
return /* @__PURE__ */ jsx(
|
|
1077
|
+
return /* @__PURE__ */ jsx(Dialog$1.Backdrop, {
|
|
483
1078
|
"data-slot": "dialog-overlay",
|
|
484
|
-
className: cn("data-
|
|
1079
|
+
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),
|
|
485
1080
|
...props
|
|
486
1081
|
});
|
|
487
1082
|
}
|
|
488
|
-
function DialogContent({ className, children, ...props }) {
|
|
489
|
-
return /* @__PURE__ */ jsxs(DialogPortal, {
|
|
490
|
-
"data-slot": "dialog-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
1083
|
+
function DialogContent({ className, children, showCloseButton = true, ...props }) {
|
|
1084
|
+
return /* @__PURE__ */ jsxs(DialogPortal, { children: [/* @__PURE__ */ jsx(DialogOverlay, {}), /* @__PURE__ */ jsxs(Dialog$1.Popup, {
|
|
1085
|
+
"data-slot": "dialog-content",
|
|
1086
|
+
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 ring-1 ring-foreground/10 bg-background px-6 py-4 text-sm duration-100 outline-none sm:max-w-md 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),
|
|
1087
|
+
...props,
|
|
1088
|
+
children: [children, showCloseButton && /* @__PURE__ */ jsxs(Dialog$1.Close, {
|
|
1089
|
+
"data-slot": "dialog-close",
|
|
1090
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
1091
|
+
variant: "ghost",
|
|
1092
|
+
className: "absolute top-3 right-4",
|
|
1093
|
+
size: "icon-sm"
|
|
1094
|
+
}),
|
|
1095
|
+
children: [/* @__PURE__ */ jsx(XIcon, {}), /* @__PURE__ */ jsx("span", {
|
|
1096
|
+
className: "sr-only",
|
|
1097
|
+
children: "Close"
|
|
501
1098
|
})]
|
|
502
1099
|
})]
|
|
503
|
-
});
|
|
1100
|
+
})] });
|
|
504
1101
|
}
|
|
505
1102
|
function DialogHeader({ className, ...props }) {
|
|
506
1103
|
return /* @__PURE__ */ jsx("div", {
|
|
507
1104
|
"data-slot": "dialog-header",
|
|
508
|
-
className: cn("flex flex-col gap-2
|
|
1105
|
+
className: cn("flex flex-col gap-2", className),
|
|
509
1106
|
...props
|
|
510
1107
|
});
|
|
511
1108
|
}
|
|
512
|
-
function DialogFooter({ className, ...props }) {
|
|
513
|
-
return /* @__PURE__ */
|
|
1109
|
+
function DialogFooter({ className, showCloseButton = false, children, ...props }) {
|
|
1110
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
514
1111
|
"data-slot": "dialog-footer",
|
|
515
1112
|
className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
|
|
516
|
-
...props
|
|
1113
|
+
...props,
|
|
1114
|
+
children: [children, showCloseButton && /* @__PURE__ */ jsx(Dialog$1.Close, {
|
|
1115
|
+
render: /* @__PURE__ */ jsx(Button, { variant: "outline" }),
|
|
1116
|
+
children: "Close"
|
|
1117
|
+
})]
|
|
517
1118
|
});
|
|
518
1119
|
}
|
|
519
1120
|
function DialogTitle({ className, ...props }) {
|
|
520
|
-
return /* @__PURE__ */ jsx(
|
|
1121
|
+
return /* @__PURE__ */ jsx(Dialog$1.Title, {
|
|
521
1122
|
"data-slot": "dialog-title",
|
|
522
|
-
className: cn("text-lg
|
|
1123
|
+
className: cn("text-lg font-bold leading-normal", className),
|
|
523
1124
|
...props
|
|
524
1125
|
});
|
|
525
1126
|
}
|
|
526
1127
|
function DialogDescription({ className, ...props }) {
|
|
527
|
-
return /* @__PURE__ */ jsx(
|
|
1128
|
+
return /* @__PURE__ */ jsx(Dialog$1.Description, {
|
|
528
1129
|
"data-slot": "dialog-description",
|
|
529
|
-
className: cn("text-muted-foreground text-
|
|
1130
|
+
className: cn("text-sm leading-normal text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
|
|
530
1131
|
...props
|
|
531
1132
|
});
|
|
532
1133
|
}
|
|
@@ -637,197 +1238,533 @@ function capitalizeFirstLetter(val) {
|
|
|
637
1238
|
}
|
|
638
1239
|
|
|
639
1240
|
//#endregion
|
|
640
|
-
//#region src/components/
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
1241
|
+
//#region src/components/table.tsx
|
|
1242
|
+
const Table = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", {
|
|
1243
|
+
"data-slot": "table-container",
|
|
1244
|
+
className: "relative w-full overflow-x-auto",
|
|
1245
|
+
children: /* @__PURE__ */ jsx("table", {
|
|
1246
|
+
ref,
|
|
1247
|
+
"data-slot": "table",
|
|
1248
|
+
className: cn("w-full caption-bottom text-sm", className),
|
|
644
1249
|
...props
|
|
1250
|
+
})
|
|
1251
|
+
}));
|
|
1252
|
+
Table.displayName = "Table";
|
|
1253
|
+
const TableHeader = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("thead", {
|
|
1254
|
+
ref,
|
|
1255
|
+
"data-slot": "table-header",
|
|
1256
|
+
className: cn("[&_tr]:border-b", className),
|
|
1257
|
+
...props
|
|
1258
|
+
}));
|
|
1259
|
+
TableHeader.displayName = "TableHeader";
|
|
1260
|
+
const TableBody = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("tbody", {
|
|
1261
|
+
ref,
|
|
1262
|
+
"data-slot": "table-body",
|
|
1263
|
+
className: cn("[&_tr:last-child]:border-0", className),
|
|
1264
|
+
...props
|
|
1265
|
+
}));
|
|
1266
|
+
TableBody.displayName = "TableBody";
|
|
1267
|
+
const TableFooter = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("tfoot", {
|
|
1268
|
+
ref,
|
|
1269
|
+
"data-slot": "table-footer",
|
|
1270
|
+
className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0", className),
|
|
1271
|
+
...props
|
|
1272
|
+
}));
|
|
1273
|
+
TableFooter.displayName = "TableFooter";
|
|
1274
|
+
const TableRow = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("tr", {
|
|
1275
|
+
ref,
|
|
1276
|
+
"data-slot": "table-row",
|
|
1277
|
+
className: cn("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted", className),
|
|
1278
|
+
...props
|
|
1279
|
+
}));
|
|
1280
|
+
TableRow.displayName = "TableRow";
|
|
1281
|
+
const TableHead = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("th", {
|
|
1282
|
+
ref,
|
|
1283
|
+
"data-slot": "table-head",
|
|
1284
|
+
className: cn("h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0", className),
|
|
1285
|
+
...props
|
|
1286
|
+
}));
|
|
1287
|
+
TableHead.displayName = "TableHead";
|
|
1288
|
+
const TableCell = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("td", {
|
|
1289
|
+
ref,
|
|
1290
|
+
"data-slot": "table-cell",
|
|
1291
|
+
className: cn("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0", className),
|
|
1292
|
+
...props
|
|
1293
|
+
}));
|
|
1294
|
+
TableCell.displayName = "TableCell";
|
|
1295
|
+
const TableCaption = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("caption", {
|
|
1296
|
+
ref,
|
|
1297
|
+
"data-slot": "table-caption",
|
|
1298
|
+
className: cn("mt-4 text-sm text-muted-foreground", className),
|
|
1299
|
+
...props
|
|
1300
|
+
}));
|
|
1301
|
+
TableCaption.displayName = "TableCaption";
|
|
1302
|
+
|
|
1303
|
+
//#endregion
|
|
1304
|
+
//#region src/components/data-table.tsx
|
|
1305
|
+
function DataTable({ columns, data, tableOptions, noResultsMessage = "No results." }) {
|
|
1306
|
+
const table = useReactTable({
|
|
1307
|
+
data,
|
|
1308
|
+
columns,
|
|
1309
|
+
getCoreRowModel: getCoreRowModel(),
|
|
1310
|
+
...tableOptions
|
|
1311
|
+
});
|
|
1312
|
+
return /* @__PURE__ */ jsxs(Table, { children: [/* @__PURE__ */ jsx(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx(TableRow, { children: headerGroup.headers.map((header) => /* @__PURE__ */ jsx(TableHead, { children: header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext()) }, header.id)) }, headerGroup.id)) }), /* @__PURE__ */ jsx(TableBody, { children: table.getRowModel().rows.length ? table.getRowModel().rows.map((row) => /* @__PURE__ */ jsx(TableRow, {
|
|
1313
|
+
"data-state": row.getIsSelected() && "selected",
|
|
1314
|
+
children: row.getVisibleCells().map((cell) => /* @__PURE__ */ jsx(TableCell, { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))
|
|
1315
|
+
}, row.id)) : /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, {
|
|
1316
|
+
colSpan: columns.length,
|
|
1317
|
+
className: "h-24 text-center",
|
|
1318
|
+
children: noResultsMessage
|
|
1319
|
+
}) }) })] });
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
//#endregion
|
|
1323
|
+
//#region src/components/scroll-area.tsx
|
|
1324
|
+
function ScrollArea({ className, children, scrollFade = false, scrollbarGutter = false, ...props }) {
|
|
1325
|
+
return /* @__PURE__ */ jsxs(ScrollAreaPrimitive.Root, {
|
|
1326
|
+
className: cn("size-full min-h-0", className),
|
|
1327
|
+
...props,
|
|
1328
|
+
children: [
|
|
1329
|
+
/* @__PURE__ */ jsx(ScrollAreaPrimitive.Viewport, {
|
|
1330
|
+
className: cn("h-full rounded-[inherit] outline-none transition-shadows focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background data-has-overflow-y:overscroll-y-contain data-has-overflow-x:overscroll-x-contain", scrollFade && "mask-t-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-y-start)))] mask-b-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-y-end)))] mask-l-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-x-start)))] mask-r-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-x-end)))] [--fade-size:1.5rem]", scrollbarGutter && "data-has-overflow-y:pe-2.5 data-has-overflow-x:pb-2.5"),
|
|
1331
|
+
"data-slot": "scroll-area-viewport",
|
|
1332
|
+
children
|
|
1333
|
+
}),
|
|
1334
|
+
/* @__PURE__ */ jsx(ScrollBar, { orientation: "vertical" }),
|
|
1335
|
+
/* @__PURE__ */ jsx(ScrollBar, { orientation: "horizontal" }),
|
|
1336
|
+
/* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, { "data-slot": "scroll-area-corner" })
|
|
1337
|
+
]
|
|
645
1338
|
});
|
|
646
1339
|
}
|
|
647
|
-
function
|
|
648
|
-
return /* @__PURE__ */ jsx(
|
|
1340
|
+
function ScrollBar({ className, orientation = "vertical", ...props }) {
|
|
1341
|
+
return /* @__PURE__ */ jsx(ScrollAreaPrimitive.Scrollbar, {
|
|
1342
|
+
className: cn("m-1 flex opacity-0 transition-opacity delay-300 data-[orientation=horizontal]:h-1.5 data-[orientation=vertical]:w-1.5 data-[orientation=horizontal]:flex-col data-hovering:opacity-100 data-scrolling:opacity-100 data-hovering:delay-0 data-scrolling:delay-0 data-hovering:duration-100 data-scrolling:duration-100", className),
|
|
1343
|
+
"data-slot": "scroll-area-scrollbar",
|
|
1344
|
+
orientation,
|
|
1345
|
+
...props,
|
|
1346
|
+
children: /* @__PURE__ */ jsx(ScrollAreaPrimitive.Thumb, {
|
|
1347
|
+
className: "relative flex-1 rounded-full bg-foreground/20",
|
|
1348
|
+
"data-slot": "scroll-area-thumb"
|
|
1349
|
+
})
|
|
1350
|
+
});
|
|
1351
|
+
}
|
|
1352
|
+
|
|
1353
|
+
//#endregion
|
|
1354
|
+
//#region src/components/drawer.tsx
|
|
1355
|
+
const DrawerContext = createContext({ position: "bottom" });
|
|
1356
|
+
const directionMap = {
|
|
1357
|
+
bottom: "down",
|
|
1358
|
+
left: "left",
|
|
1359
|
+
right: "right",
|
|
1360
|
+
top: "up"
|
|
1361
|
+
};
|
|
1362
|
+
const DrawerCreateHandle = DrawerPrimitive.createHandle;
|
|
1363
|
+
function Drawer({ swipeDirection, position = "bottom", ...props }) {
|
|
1364
|
+
return /* @__PURE__ */ jsx(DrawerContext.Provider, {
|
|
1365
|
+
value: { position },
|
|
1366
|
+
children: /* @__PURE__ */ jsx(DrawerPrimitive.Root, {
|
|
1367
|
+
swipeDirection: swipeDirection ?? directionMap[position],
|
|
1368
|
+
...props
|
|
1369
|
+
})
|
|
1370
|
+
});
|
|
1371
|
+
}
|
|
1372
|
+
const DrawerPortal = DrawerPrimitive.Portal;
|
|
1373
|
+
function DrawerTrigger(props) {
|
|
1374
|
+
return /* @__PURE__ */ jsx(DrawerPrimitive.Trigger, {
|
|
649
1375
|
"data-slot": "drawer-trigger",
|
|
650
1376
|
...props
|
|
651
1377
|
});
|
|
652
1378
|
}
|
|
653
|
-
function
|
|
654
|
-
return /* @__PURE__ */ jsx(
|
|
655
|
-
"data-slot": "drawer-
|
|
1379
|
+
function DrawerClose(props) {
|
|
1380
|
+
return /* @__PURE__ */ jsx(DrawerPrimitive.Close, {
|
|
1381
|
+
"data-slot": "drawer-close",
|
|
1382
|
+
...props
|
|
1383
|
+
});
|
|
1384
|
+
}
|
|
1385
|
+
function DrawerSwipeArea({ className, position: positionProp, ...props }) {
|
|
1386
|
+
const { position: contextPosition } = useContext(DrawerContext);
|
|
1387
|
+
const position = positionProp ?? contextPosition;
|
|
1388
|
+
return /* @__PURE__ */ jsx(DrawerPrimitive.SwipeArea, {
|
|
1389
|
+
className: cn("fixed z-50 touch-none", position === "bottom" && "inset-x-0 bottom-0 h-8", position === "top" && "inset-x-0 top-0 h-8", position === "left" && "inset-y-0 left-0 w-8", position === "right" && "inset-y-0 right-0 w-8", className),
|
|
1390
|
+
"data-slot": "drawer-swipe-area",
|
|
656
1391
|
...props
|
|
657
1392
|
});
|
|
658
1393
|
}
|
|
659
|
-
function
|
|
660
|
-
return /* @__PURE__ */ jsx(
|
|
661
|
-
"data-
|
|
1394
|
+
function DrawerBackdrop({ className, inContainer, ...props }) {
|
|
1395
|
+
return /* @__PURE__ */ jsx(DrawerPrimitive.Backdrop, {
|
|
1396
|
+
className: cn("inset-0 z-50 bg-black/10 opacity-[calc(1-var(--drawer-swipe-progress))] backdrop-blur-sm transition-opacity duration-450 ease-[cubic-bezier(0.32,0.72,0,1)] data-ending-style:opacity-0 data-starting-style:opacity-0 data-ending-style:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-swiping:duration-0 supports-[-webkit-touch-callout:none]:absolute", inContainer ? "absolute" : "fixed", className),
|
|
1397
|
+
"data-slot": "drawer-backdrop",
|
|
662
1398
|
...props
|
|
663
1399
|
});
|
|
664
1400
|
}
|
|
665
|
-
|
|
666
|
-
return /* @__PURE__ */ jsx(
|
|
667
|
-
"
|
|
668
|
-
|
|
669
|
-
...props
|
|
670
|
-
ref: forwardedRef
|
|
1401
|
+
function DrawerViewport({ className, position, variant = "default", inContainer, ...props }) {
|
|
1402
|
+
return /* @__PURE__ */ jsx(DrawerPrimitive.Viewport, {
|
|
1403
|
+
className: cn("inset-0 z-50 [--bleed:--spacing(12)] [--inset:--spacing(0)]", inContainer ? "absolute" : "fixed", "touch-none", position === "bottom" && "grid grid-rows-[1fr_auto] pt-12", position === "top" && "grid grid-rows-[auto_1fr] pb-12", position === "left" && "flex justify-start", position === "right" && "flex justify-end", variant === "inset" && "px-(--inset) sm:[--inset:--spacing(4)]", variant === "inset" && position !== "bottom" && "pt-(--inset)", variant === "inset" && position !== "top" && "pb-(--inset)", className),
|
|
1404
|
+
"data-slot": "drawer-viewport",
|
|
1405
|
+
...props
|
|
671
1406
|
});
|
|
672
|
-
}
|
|
673
|
-
function
|
|
1407
|
+
}
|
|
1408
|
+
function DrawerPopup({ className, children, showCloseButton = false, position: positionProp, variant = "default", showBar = false, container, ...props }) {
|
|
1409
|
+
const { position: contextPosition } = useContext(DrawerContext);
|
|
1410
|
+
const position = positionProp ?? contextPosition;
|
|
1411
|
+
const inContainer = !!container;
|
|
674
1412
|
return /* @__PURE__ */ jsxs(DrawerPortal, {
|
|
675
|
-
"data-slot": "drawer-portal",
|
|
676
1413
|
container,
|
|
677
|
-
children: [/* @__PURE__ */ jsx(
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
children:
|
|
1414
|
+
children: [/* @__PURE__ */ jsx(DrawerBackdrop, { inContainer }), /* @__PURE__ */ jsx(DrawerViewport, {
|
|
1415
|
+
position,
|
|
1416
|
+
variant,
|
|
1417
|
+
inContainer,
|
|
1418
|
+
children: /* @__PURE__ */ jsxs(DrawerPrimitive.Popup, {
|
|
1419
|
+
className: cn("relative flex max-h-full min-h-0 w-full min-w-0 flex-col bg-popover not-dark:bg-clip-padding text-popover-foreground shadow-lg/5 outline-none transition-[transform,box-shadow,height,background-color] duration-450 ease-[cubic-bezier(0.32,0.72,0,1)] will-change-transform [--peek:calc(--spacing(6)-1px)] [--scale-base:calc(max(0,1-(var(--nested-drawers)*var(--stack-step))))] [--scale:clamp(0,calc(var(--scale-base)+(var(--stack-step)*var(--stack-progress))),1)] [--shrink:calc(1-var(--scale))] [--stack-peek-offset:max(0px,calc((var(--nested-drawers)-var(--stack-progress))*var(--peek)))] [--stack-progress:clamp(0,var(--drawer-swipe-progress),1)] [--stack-step:0.05] before:pointer-events-none before:absolute before:inset-0 before:shadow-[0_1px_--theme(--color-black/4%)] after:pointer-events-none after:absolute after:bg-popover data-swiping:select-none data-nested-drawer-open:overflow-hidden data-nested-drawer-open:bg-[color-mix(in_srgb,var(--popover),var(--color-black)_calc(2%*(var(--nested-drawers)-var(--stack-progress))))] data-ending-style:shadow-transparent data-starting-style:shadow-transparent data-ending-style:duration-[calc(var(--drawer-swipe-strength)*400ms)] dark:data-nested-drawer-open:bg-[color-mix(in_srgb,var(--popover),var(--color-black)_calc(6%*(var(--nested-drawers)-var(--stack-progress))))] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]", "touch-none", position === "bottom" && "transform-[translateY(calc(var(--drawer-snap-point-offset)+var(--drawer-swipe-movement-y)))] data-ending-style:transform-[translateY(calc(100%+env(safe-area-inset-bottom,0px)+var(--inset)))] data-starting-style:transform-[translateY(calc(100%+env(safe-area-inset-bottom,0px)+var(--inset)))] row-start-2 -mb-[max(0px,calc(var(--drawer-snap-point-offset,0px)+clamp(0,1,var(--drawer-snap-point-offset,0px)/1px)*var(--drawer-swipe-movement-y,0px)))] border-t pb-[max(0px,calc(env(safe-area-inset-bottom,0px)+var(--drawer-snap-point-offset,0px)+clamp(0,1,var(--drawer-snap-point-offset,0px)/1px)*var(--drawer-swipe-movement-y,0px)))] not-data-starting-style:not-data-ending-style:transition-[transform,box-shadow,height,background-color,margin,padding] after:inset-x-0 after:top-full after:h-(--bleed) has-data-[slot=drawer-bar]:pt-2 data-ending-style:mb-0 data-starting-style:mb-0 data-ending-style:pb-0 data-starting-style:pb-0", position === "top" && "data-starting-style:transform-[translateY(calc(-100%-var(--inset)))] data-ending-style:transform-[translateY(calc(-100%-var(--inset)))] transform-[translateY(var(--drawer-swipe-movement-y))] border-b after:inset-x-0 after:bottom-full after:h-(--bleed) has-data-[slot=drawer-bar]:pb-2", position === "left" && "data-starting-style:transform-[translateX(calc(-100%-var(--inset)))] data-ending-style:transform-[translateX(calc(-100%-var(--inset)))] transform-[translateX(var(--drawer-swipe-movement-x))] w-[calc(100%-(--spacing(12)))] max-w-md border-e after:inset-y-0 after:end-full after:w-(--bleed) has-data-[slot=drawer-bar]:pe-2", position === "right" && "transform-[translateX(var(--drawer-swipe-movement-x))] data-ending-style:transform-[translateX(calc(100%+var(--inset)))] data-starting-style:transform-[translateX(calc(100%+var(--inset)))] col-start-2 w-[calc(100%-(--spacing(12)))] max-w-md border-s after:inset-y-0 after:start-full after:w-(--bleed) has-data-[slot=drawer-bar]:ps-2", variant !== "straight" && cn(position === "bottom" && "rounded-t-2xl", position === "top" && "rounded-b-2xl **:data-[slot=drawer-footer]:rounded-b-[calc(var(--radius-2xl)-1px)]", position === "left" && "rounded-e-2xl **:data-[slot=drawer-footer]:rounded-ee-[calc(var(--radius-2xl)-1px)]", position === "right" && "rounded-s-2xl **:data-[slot=drawer-footer]:rounded-es-[calc(var(--radius-2xl)-1px)]"), variant === "default" && cn(position === "bottom" && "before:rounded-t-[calc(var(--radius-2xl)-1px)]", position === "top" && "before:rounded-b-[calc(var(--radius-2xl)-1px)]", position === "left" && "before:rounded-e-[calc(var(--radius-2xl)-1px)]", position === "right" && "before:rounded-s-[calc(var(--radius-2xl)-1px)]"), variant === "inset" && "before:hidden sm:rounded-2xl sm:border sm:after:bg-transparent sm:before:rounded-[calc(var(--radius-2xl)-1px)] sm:**:data-[slot=drawer-footer]:rounded-b-[calc(var(--radius-2xl)-1px)]", variant === "straight" && "[--stack-step:0]", (position === "bottom" || position === "top") && "h-(--drawer-height,auto) [--height:max(0px,calc(var(--drawer-frontmost-height,var(--drawer-height))))] data-nested-drawer-open:h-(--height)", position === "bottom" && "data-nested-drawer-open:transform-[translateY(calc(var(--drawer-swipe-movement-y)-var(--stack-peek-offset)-(var(--shrink)*var(--height))))_scale(var(--scale))] origin-[50%_calc(100%-var(--inset))]", position === "top" && "data-nested-drawer-open:transform-[translateY(calc(var(--drawer-swipe-movement-y)+var(--stack-peek-offset)+(var(--shrink)*var(--height))))_scale(var(--scale))] origin-[50%_var(--inset)]", position === "left" && "data-nested-drawer-open:transform-[translateX(calc(var(--drawer-swipe-movement-x)+var(--stack-peek-offset)))_scale(var(--scale))] origin-right", position === "right" && "data-nested-drawer-open:transform-[translateX(calc(var(--drawer-swipe-movement-x)-var(--stack-peek-offset)))_scale(var(--scale))] origin-left", className),
|
|
1420
|
+
"data-slot": "drawer-popup",
|
|
1421
|
+
...props,
|
|
1422
|
+
children: [
|
|
1423
|
+
children,
|
|
1424
|
+
showCloseButton && /* @__PURE__ */ jsx(DrawerPrimitive.Close, {
|
|
1425
|
+
"aria-label": "Close",
|
|
1426
|
+
className: "absolute end-2 top-2",
|
|
1427
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
1428
|
+
size: "icon",
|
|
1429
|
+
variant: "ghost"
|
|
1430
|
+
}),
|
|
1431
|
+
children: /* @__PURE__ */ jsx(XIcon, {})
|
|
1432
|
+
}),
|
|
1433
|
+
showBar && /* @__PURE__ */ jsx(DrawerBar, {})
|
|
1434
|
+
]
|
|
1435
|
+
})
|
|
682
1436
|
})]
|
|
683
1437
|
});
|
|
684
1438
|
}
|
|
685
|
-
function DrawerHeader({ className, ...props }) {
|
|
686
|
-
return
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
1439
|
+
function DrawerHeader({ className, allowSelection = false, render, ...props }) {
|
|
1440
|
+
return useRender({
|
|
1441
|
+
defaultTagName: "div",
|
|
1442
|
+
props: mergeProps({
|
|
1443
|
+
className: cn("flex flex-col gap-2 p-6 in-[[data-slot=drawer-popup]:has([data-slot=drawer-panel])]:pb-3 max-sm:pb-4", !allowSelection && "cursor-default", className),
|
|
1444
|
+
"data-slot": "drawer-header"
|
|
1445
|
+
}, props),
|
|
1446
|
+
render: allowSelection ? /* @__PURE__ */ jsx(DrawerContent, { render }) : render
|
|
690
1447
|
});
|
|
691
1448
|
}
|
|
692
|
-
function DrawerFooter({ className, ...props }) {
|
|
693
|
-
return
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
1449
|
+
function DrawerFooter({ className, variant = "default", allowSelection = true, render, ...props }) {
|
|
1450
|
+
return useRender({
|
|
1451
|
+
defaultTagName: "div",
|
|
1452
|
+
props: mergeProps({
|
|
1453
|
+
className: cn("flex flex-col-reverse gap-2 px-6 pb-(--safe-area-inset-bottom,0px) sm:flex-row sm:justify-end", !allowSelection && "cursor-default", variant === "default" && "border-t bg-muted/72 pt-4 pb-[calc(env(safe-area-inset-bottom,0px)+--spacing(4))]", variant === "bare" && "in-[[data-slot=drawer-popup]:has([data-slot=drawer-panel])]:pt-3 pt-4 pb-[calc(env(safe-area-inset-bottom,0px)+--spacing(6))]", className),
|
|
1454
|
+
"data-slot": "drawer-footer"
|
|
1455
|
+
}, props),
|
|
1456
|
+
render: allowSelection ? /* @__PURE__ */ jsx(DrawerContent, { render }) : render
|
|
697
1457
|
});
|
|
698
1458
|
}
|
|
699
1459
|
function DrawerTitle({ className, ...props }) {
|
|
700
|
-
return /* @__PURE__ */ jsx(
|
|
1460
|
+
return /* @__PURE__ */ jsx(DrawerPrimitive.Title, {
|
|
1461
|
+
className: cn("font-heading font-semibold text-xl leading-none", className),
|
|
701
1462
|
"data-slot": "drawer-title",
|
|
702
|
-
className: cn("text-foreground font-semibold", className),
|
|
703
1463
|
...props
|
|
704
1464
|
});
|
|
705
1465
|
}
|
|
706
1466
|
function DrawerDescription({ className, ...props }) {
|
|
707
|
-
return /* @__PURE__ */ jsx(
|
|
708
|
-
"data-slot": "drawer-description",
|
|
1467
|
+
return /* @__PURE__ */ jsx(DrawerPrimitive.Description, {
|
|
709
1468
|
className: cn("text-muted-foreground text-sm", className),
|
|
1469
|
+
"data-slot": "drawer-description",
|
|
710
1470
|
...props
|
|
711
1471
|
});
|
|
712
1472
|
}
|
|
1473
|
+
function DrawerPanel({ className, scrollFade = true, scrollable = true, allowSelection = true, render, ...props }) {
|
|
1474
|
+
const content = useRender({
|
|
1475
|
+
defaultTagName: "div",
|
|
1476
|
+
props: mergeProps({
|
|
1477
|
+
className: cn("p-6 in-[[data-slot=drawer-popup]:has([data-slot=drawer-header])]:pt-1 in-[[data-slot=drawer-popup]:has([data-slot=drawer-footer]:not(.border-t))]:pb-1", !allowSelection && "cursor-default", className),
|
|
1478
|
+
"data-slot": "drawer-panel"
|
|
1479
|
+
}, props),
|
|
1480
|
+
render: allowSelection ? /* @__PURE__ */ jsx(DrawerContent, { render }) : render
|
|
1481
|
+
});
|
|
1482
|
+
if (scrollable) return /* @__PURE__ */ jsx(ScrollArea, {
|
|
1483
|
+
className: "touch-auto",
|
|
1484
|
+
scrollFade,
|
|
1485
|
+
children: content
|
|
1486
|
+
});
|
|
1487
|
+
return content;
|
|
1488
|
+
}
|
|
1489
|
+
function DrawerBar({ className, position: positionProp, render, ...props }) {
|
|
1490
|
+
const { position: contextPosition } = useContext(DrawerContext);
|
|
1491
|
+
const position = positionProp ?? contextPosition;
|
|
1492
|
+
const horizontal = position === "left" || position === "right";
|
|
1493
|
+
return useRender({
|
|
1494
|
+
defaultTagName: "div",
|
|
1495
|
+
props: mergeProps({
|
|
1496
|
+
"aria-hidden": true,
|
|
1497
|
+
className: cn("absolute flex touch-none items-center justify-center p-3 before:rounded-full before:bg-input", horizontal ? "inset-y-0 before:h-12 before:w-1" : "inset-x-0 before:h-1 before:w-12", position === "top" && "bottom-0", position === "bottom" && "top-0", position === "left" && "right-0", position === "right" && "left-0", className),
|
|
1498
|
+
"data-slot": "drawer-bar"
|
|
1499
|
+
}, props),
|
|
1500
|
+
render
|
|
1501
|
+
});
|
|
1502
|
+
}
|
|
1503
|
+
const DrawerContent = DrawerPrimitive.Content;
|
|
1504
|
+
function DrawerMenu({ className, render, ...props }) {
|
|
1505
|
+
return useRender({
|
|
1506
|
+
defaultTagName: "nav",
|
|
1507
|
+
props: mergeProps({
|
|
1508
|
+
className: cn("-m-2 flex flex-col", className),
|
|
1509
|
+
"data-slot": "drawer-menu"
|
|
1510
|
+
}, props),
|
|
1511
|
+
render
|
|
1512
|
+
});
|
|
1513
|
+
}
|
|
1514
|
+
function DrawerMenuItem({ className, variant = "default", render, disabled, ...props }) {
|
|
1515
|
+
return useRender({
|
|
1516
|
+
defaultTagName: "button",
|
|
1517
|
+
props: mergeProps({
|
|
1518
|
+
className: cn("flex min-h-9 w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none hover:bg-accent hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-64 data-[variant=destructive]:text-destructive-foreground sm:min-h-8 sm:text-sm [&>svg:not([class*='opacity-'])]:opacity-80 [&>svg:not([class*='size-'])]:size-4.5 sm:[&>svg:not([class*='size-'])]:size-4 [&>svg]:pointer-events-none [&>svg]:-mx-0.5 [&>svg]:shrink-0", className),
|
|
1519
|
+
"data-slot": "drawer-menu-item",
|
|
1520
|
+
"data-variant": variant,
|
|
1521
|
+
disabled,
|
|
1522
|
+
type: "button"
|
|
1523
|
+
}, props),
|
|
1524
|
+
render
|
|
1525
|
+
});
|
|
1526
|
+
}
|
|
1527
|
+
function DrawerMenuSeparator({ className, render, ...props }) {
|
|
1528
|
+
return useRender({
|
|
1529
|
+
defaultTagName: "div",
|
|
1530
|
+
props: mergeProps({
|
|
1531
|
+
className: cn("mx-2 my-1 h-px bg-border", className),
|
|
1532
|
+
"data-slot": "drawer-menu-separator"
|
|
1533
|
+
}, props),
|
|
1534
|
+
render
|
|
1535
|
+
});
|
|
1536
|
+
}
|
|
1537
|
+
function DrawerMenuGroup({ className, render, ...props }) {
|
|
1538
|
+
return useRender({
|
|
1539
|
+
defaultTagName: "div",
|
|
1540
|
+
props: mergeProps({
|
|
1541
|
+
className: cn("flex flex-col", className),
|
|
1542
|
+
"data-slot": "drawer-menu-group"
|
|
1543
|
+
}, props),
|
|
1544
|
+
render
|
|
1545
|
+
});
|
|
1546
|
+
}
|
|
1547
|
+
function DrawerMenuGroupLabel({ className, render, ...props }) {
|
|
1548
|
+
return useRender({
|
|
1549
|
+
defaultTagName: "div",
|
|
1550
|
+
props: mergeProps({
|
|
1551
|
+
className: cn("px-2 py-1.5 font-medium text-muted-foreground text-xs", className),
|
|
1552
|
+
"data-slot": "drawer-menu-group-label"
|
|
1553
|
+
}, props),
|
|
1554
|
+
render
|
|
1555
|
+
});
|
|
1556
|
+
}
|
|
1557
|
+
function DrawerMenuTrigger({ className, children, ...props }) {
|
|
1558
|
+
return /* @__PURE__ */ jsxs(DrawerTrigger, {
|
|
1559
|
+
className: cn("flex min-h-9 w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none hover:bg-accent hover:text-accent-foreground sm:min-h-8 sm:text-sm [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className),
|
|
1560
|
+
"data-slot": "drawer-menu-trigger",
|
|
1561
|
+
...props,
|
|
1562
|
+
children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ms-auto -me-0.5 opacity-80" })]
|
|
1563
|
+
});
|
|
1564
|
+
}
|
|
1565
|
+
function DrawerMenuCheckboxItem({ className, children, checked, defaultChecked, onCheckedChange, variant = "default", disabled, render, ...props }) {
|
|
1566
|
+
return /* @__PURE__ */ jsx(Checkbox$1.Root, {
|
|
1567
|
+
checked,
|
|
1568
|
+
className: cn("grid min-h-9 w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none hover:bg-accent hover:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-64 sm:min-h-8 sm:text-sm [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:-mx-0.5 [&_svg]:shrink-0", variant === "switch" ? "grid-cols-[1fr_auto] gap-4 pe-1.5" : "grid-cols-[1rem_1fr] pe-4", className),
|
|
1569
|
+
"data-slot": "drawer-menu-checkbox-item",
|
|
1570
|
+
defaultChecked,
|
|
1571
|
+
disabled,
|
|
1572
|
+
onCheckedChange,
|
|
1573
|
+
render,
|
|
1574
|
+
...props,
|
|
1575
|
+
children: variant === "switch" ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
|
|
1576
|
+
className: "col-start-1",
|
|
1577
|
+
children
|
|
1578
|
+
}), /* @__PURE__ */ jsx(Checkbox$1.Indicator, {
|
|
1579
|
+
className: "inset-shadow-[0_1px_--theme(--color-black/4%)] col-start-2 inline-flex h-[calc(var(--thumb-size)+2px)] w-[calc(var(--thumb-size)*2-2px)] shrink-0 items-center rounded-full p-px outline-none transition-[background-color,box-shadow] duration-200 [--thumb-size:--spacing(4)] focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background data-checked:bg-primary data-unchecked:bg-input data-disabled:opacity-64 sm:[--thumb-size:--spacing(3)]",
|
|
1580
|
+
keepMounted: true,
|
|
1581
|
+
children: /* @__PURE__ */ jsx("span", { className: "pointer-events-none block aspect-square h-full in-[[data-slot=drawer-menu-checkbox-item][data-checked]]:origin-[var(--thumb-size)_50%] origin-left in-[[data-slot=drawer-menu-checkbox-item][data-checked]]:translate-x-[calc(var(--thumb-size)-4px)] in-[[data-slot=drawer-menu-checkbox-item]:active]:not-data-disabled:scale-x-110 in-[[data-slot=drawer-menu-checkbox-item]:active]:rounded-[var(--thumb-size)/calc(var(--thumb-size)*1.10)] rounded-(--thumb-size) bg-background shadow-sm/5 will-change-transform [transition:translate_.15s,border-radius_.15s,scale_.1s_.1s,transform-origin_.15s]" })
|
|
1582
|
+
})] }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Checkbox$1.Indicator, {
|
|
1583
|
+
className: "col-start-1",
|
|
1584
|
+
children: /* @__PURE__ */ jsx("svg", {
|
|
1585
|
+
fill: "none",
|
|
1586
|
+
height: "24",
|
|
1587
|
+
stroke: "currentColor",
|
|
1588
|
+
strokeLinecap: "round",
|
|
1589
|
+
strokeLinejoin: "round",
|
|
1590
|
+
strokeWidth: "2",
|
|
1591
|
+
viewBox: "0 0 24 24",
|
|
1592
|
+
width: "24",
|
|
1593
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
1594
|
+
children: /* @__PURE__ */ jsx("path", { d: "M5.252 12.7 10.2 18.63 18.748 5.37" })
|
|
1595
|
+
})
|
|
1596
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
1597
|
+
className: "col-start-2",
|
|
1598
|
+
children
|
|
1599
|
+
})] })
|
|
1600
|
+
});
|
|
1601
|
+
}
|
|
1602
|
+
function DrawerMenuRadioGroup({ className, ...props }) {
|
|
1603
|
+
return /* @__PURE__ */ jsx(RadioGroup$1, {
|
|
1604
|
+
className: cn("flex flex-col", className),
|
|
1605
|
+
"data-slot": "drawer-menu-radio-group",
|
|
1606
|
+
...props
|
|
1607
|
+
});
|
|
1608
|
+
}
|
|
1609
|
+
function DrawerMenuRadioItem({ className, children, value, disabled, render, ...props }) {
|
|
1610
|
+
return /* @__PURE__ */ jsxs(Radio.Root, {
|
|
1611
|
+
className: cn("grid min-h-9 w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none hover:bg-accent hover:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-64 sm:min-h-8 sm:text-sm [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:-mx-0.5 [&_svg]:shrink-0", "grid-cols-[1rem_1fr] items-center pe-4", className),
|
|
1612
|
+
"data-slot": "drawer-menu-radio-item",
|
|
1613
|
+
disabled,
|
|
1614
|
+
render,
|
|
1615
|
+
value,
|
|
1616
|
+
...props,
|
|
1617
|
+
children: [/* @__PURE__ */ jsx(Radio.Indicator, {
|
|
1618
|
+
className: "col-start-1",
|
|
1619
|
+
children: /* @__PURE__ */ jsx("svg", {
|
|
1620
|
+
fill: "none",
|
|
1621
|
+
height: "24",
|
|
1622
|
+
stroke: "currentColor",
|
|
1623
|
+
strokeLinecap: "round",
|
|
1624
|
+
strokeLinejoin: "round",
|
|
1625
|
+
strokeWidth: "2",
|
|
1626
|
+
viewBox: "0 0 24 24",
|
|
1627
|
+
width: "24",
|
|
1628
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
1629
|
+
children: /* @__PURE__ */ jsx("path", { d: "M5.252 12.7 10.2 18.63 18.748 5.37" })
|
|
1630
|
+
})
|
|
1631
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
1632
|
+
className: "col-start-2",
|
|
1633
|
+
children
|
|
1634
|
+
})]
|
|
1635
|
+
});
|
|
1636
|
+
}
|
|
713
1637
|
|
|
714
1638
|
//#endregion
|
|
715
1639
|
//#region src/components/dropdown-menu.tsx
|
|
716
1640
|
function DropdownMenu({ ...props }) {
|
|
717
|
-
return /* @__PURE__ */ jsx(
|
|
1641
|
+
return /* @__PURE__ */ jsx(Menu.Root, {
|
|
718
1642
|
"data-slot": "dropdown-menu",
|
|
719
1643
|
...props
|
|
720
1644
|
});
|
|
721
1645
|
}
|
|
722
1646
|
function DropdownMenuPortal({ ...props }) {
|
|
723
|
-
return /* @__PURE__ */ jsx(
|
|
1647
|
+
return /* @__PURE__ */ jsx(Menu.Portal, {
|
|
724
1648
|
"data-slot": "dropdown-menu-portal",
|
|
725
1649
|
...props
|
|
726
1650
|
});
|
|
727
1651
|
}
|
|
728
1652
|
function DropdownMenuTrigger({ ...props }) {
|
|
729
|
-
return /* @__PURE__ */ jsx(
|
|
1653
|
+
return /* @__PURE__ */ jsx(Menu.Trigger, {
|
|
730
1654
|
"data-slot": "dropdown-menu-trigger",
|
|
731
1655
|
...props
|
|
732
1656
|
});
|
|
733
1657
|
}
|
|
734
|
-
function DropdownMenuContent({
|
|
735
|
-
return /* @__PURE__ */ jsx(
|
|
1658
|
+
function DropdownMenuContent({ align = "start", alignOffset = 0, side = "bottom", sideOffset = 4, className, container, ...props }) {
|
|
1659
|
+
return /* @__PURE__ */ jsx(Menu.Portal, {
|
|
736
1660
|
container,
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
1661
|
+
children: /* @__PURE__ */ jsx(Menu.Positioner, {
|
|
1662
|
+
className: "isolate z-50 outline-none",
|
|
1663
|
+
align,
|
|
1664
|
+
alignOffset,
|
|
1665
|
+
side,
|
|
740
1666
|
sideOffset,
|
|
741
|
-
|
|
742
|
-
|
|
1667
|
+
children: /* @__PURE__ */ jsx(Menu.Popup, {
|
|
1668
|
+
"data-slot": "dropdown-menu-content",
|
|
1669
|
+
className: cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md 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),
|
|
1670
|
+
...props
|
|
1671
|
+
})
|
|
743
1672
|
})
|
|
744
1673
|
});
|
|
745
1674
|
}
|
|
746
1675
|
function DropdownMenuGroup({ ...props }) {
|
|
747
|
-
return /* @__PURE__ */ jsx(
|
|
1676
|
+
return /* @__PURE__ */ jsx(Menu.Group, {
|
|
748
1677
|
"data-slot": "dropdown-menu-group",
|
|
749
1678
|
...props
|
|
750
1679
|
});
|
|
751
1680
|
}
|
|
1681
|
+
function DropdownMenuLabel({ className, inset, ...props }) {
|
|
1682
|
+
return /* @__PURE__ */ jsx(Menu.GroupLabel, {
|
|
1683
|
+
"data-slot": "dropdown-menu-label",
|
|
1684
|
+
"data-inset": inset,
|
|
1685
|
+
className: cn("px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:pl-8", className),
|
|
1686
|
+
...props
|
|
1687
|
+
});
|
|
1688
|
+
}
|
|
752
1689
|
function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
|
|
753
|
-
return /* @__PURE__ */ jsx(
|
|
1690
|
+
return /* @__PURE__ */ jsx(Menu.Item, {
|
|
754
1691
|
"data-slot": "dropdown-menu-item",
|
|
755
1692
|
"data-inset": inset,
|
|
756
1693
|
"data-variant": variant,
|
|
757
|
-
className: cn("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-
|
|
1694
|
+
className: cn("group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 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),
|
|
758
1695
|
...props
|
|
759
1696
|
});
|
|
760
1697
|
}
|
|
761
|
-
function
|
|
762
|
-
return /* @__PURE__ */
|
|
1698
|
+
function DropdownMenuSub({ ...props }) {
|
|
1699
|
+
return /* @__PURE__ */ jsx(Menu.SubmenuRoot, {
|
|
1700
|
+
"data-slot": "dropdown-menu-sub",
|
|
1701
|
+
...props
|
|
1702
|
+
});
|
|
1703
|
+
}
|
|
1704
|
+
function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
|
|
1705
|
+
return /* @__PURE__ */ jsxs(Menu.SubmenuTrigger, {
|
|
1706
|
+
"data-slot": "dropdown-menu-sub-trigger",
|
|
1707
|
+
"data-inset": inset,
|
|
1708
|
+
className: cn("flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 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),
|
|
1709
|
+
...props,
|
|
1710
|
+
children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })]
|
|
1711
|
+
});
|
|
1712
|
+
}
|
|
1713
|
+
function DropdownMenuSubContent({ align = "start", alignOffset = -3, side = "right", sideOffset = 0, className, ...props }) {
|
|
1714
|
+
return /* @__PURE__ */ jsx(DropdownMenuContent, {
|
|
1715
|
+
"data-slot": "dropdown-menu-sub-content",
|
|
1716
|
+
className: cn("w-auto min-w-[96px] rounded-md 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),
|
|
1717
|
+
align,
|
|
1718
|
+
alignOffset,
|
|
1719
|
+
side,
|
|
1720
|
+
sideOffset,
|
|
1721
|
+
...props
|
|
1722
|
+
});
|
|
1723
|
+
}
|
|
1724
|
+
function DropdownMenuCheckboxItem({ className, children, checked, inset, ...props }) {
|
|
1725
|
+
return /* @__PURE__ */ jsxs(Menu.CheckboxItem, {
|
|
763
1726
|
"data-slot": "dropdown-menu-checkbox-item",
|
|
764
|
-
|
|
1727
|
+
"data-inset": inset,
|
|
1728
|
+
className: cn("relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
765
1729
|
checked,
|
|
766
1730
|
...props,
|
|
767
1731
|
children: [/* @__PURE__ */ jsx("span", {
|
|
768
|
-
className: "pointer-events-none absolute
|
|
769
|
-
|
|
1732
|
+
className: "pointer-events-none absolute right-2 flex items-center justify-center",
|
|
1733
|
+
"data-slot": "dropdown-menu-checkbox-item-indicator",
|
|
1734
|
+
children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
|
|
770
1735
|
}), children]
|
|
771
1736
|
});
|
|
772
1737
|
}
|
|
773
1738
|
function DropdownMenuRadioGroup({ ...props }) {
|
|
774
|
-
return /* @__PURE__ */ jsx(
|
|
1739
|
+
return /* @__PURE__ */ jsx(Menu.RadioGroup, {
|
|
775
1740
|
"data-slot": "dropdown-menu-radio-group",
|
|
776
1741
|
...props
|
|
777
1742
|
});
|
|
778
1743
|
}
|
|
779
|
-
function DropdownMenuRadioItem({ className, children, ...props }) {
|
|
780
|
-
return /* @__PURE__ */ jsxs(
|
|
1744
|
+
function DropdownMenuRadioItem({ className, children, inset, ...props }) {
|
|
1745
|
+
return /* @__PURE__ */ jsxs(Menu.RadioItem, {
|
|
781
1746
|
"data-slot": "dropdown-menu-radio-item",
|
|
782
|
-
|
|
1747
|
+
"data-inset": inset,
|
|
1748
|
+
className: cn("relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
783
1749
|
...props,
|
|
784
1750
|
children: [/* @__PURE__ */ jsx("span", {
|
|
785
|
-
className: "pointer-events-none absolute
|
|
786
|
-
|
|
1751
|
+
className: "pointer-events-none absolute right-2 flex items-center justify-center",
|
|
1752
|
+
"data-slot": "dropdown-menu-radio-item-indicator",
|
|
1753
|
+
children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
|
|
787
1754
|
}), children]
|
|
788
1755
|
});
|
|
789
1756
|
}
|
|
790
|
-
function DropdownMenuLabel({ className, inset, ...props }) {
|
|
791
|
-
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Label, {
|
|
792
|
-
"data-slot": "dropdown-menu-label",
|
|
793
|
-
"data-inset": inset,
|
|
794
|
-
className: cn("px-2 py-1.5 text-sm font-medium data-[inset]:pl-8", className),
|
|
795
|
-
...props
|
|
796
|
-
});
|
|
797
|
-
}
|
|
798
1757
|
function DropdownMenuSeparator({ className, ...props }) {
|
|
799
|
-
return /* @__PURE__ */ jsx(
|
|
1758
|
+
return /* @__PURE__ */ jsx(Menu.Separator, {
|
|
800
1759
|
"data-slot": "dropdown-menu-separator",
|
|
801
|
-
className: cn("
|
|
1760
|
+
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
802
1761
|
...props
|
|
803
1762
|
});
|
|
804
1763
|
}
|
|
805
1764
|
function DropdownMenuShortcut({ className, ...props }) {
|
|
806
1765
|
return /* @__PURE__ */ jsx("span", {
|
|
807
1766
|
"data-slot": "dropdown-menu-shortcut",
|
|
808
|
-
className: cn("
|
|
809
|
-
...props
|
|
810
|
-
});
|
|
811
|
-
}
|
|
812
|
-
function DropdownMenuSub({ ...props }) {
|
|
813
|
-
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Sub, {
|
|
814
|
-
"data-slot": "dropdown-menu-sub",
|
|
815
|
-
...props
|
|
816
|
-
});
|
|
817
|
-
}
|
|
818
|
-
function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
|
|
819
|
-
return /* @__PURE__ */ jsxs(DropdownMenuPrimitive.SubTrigger, {
|
|
820
|
-
"data-slot": "dropdown-menu-sub-trigger",
|
|
821
|
-
"data-inset": inset,
|
|
822
|
-
className: cn("focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8", className),
|
|
823
|
-
...props,
|
|
824
|
-
children: [children, /* @__PURE__ */ jsx(ChevronRightOutline, { className: "ml-auto size-4" })]
|
|
825
|
-
});
|
|
826
|
-
}
|
|
827
|
-
function DropdownMenuSubContent({ className, ...props }) {
|
|
828
|
-
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.SubContent, {
|
|
829
|
-
"data-slot": "dropdown-menu-sub-content",
|
|
830
|
-
className: cn("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg", className),
|
|
1767
|
+
className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground", className),
|
|
831
1768
|
...props
|
|
832
1769
|
});
|
|
833
1770
|
}
|
|
@@ -835,29 +1772,51 @@ function DropdownMenuSubContent({ className, ...props }) {
|
|
|
835
1772
|
//#endregion
|
|
836
1773
|
//#region src/components/popover.tsx
|
|
837
1774
|
function Popover({ ...props }) {
|
|
838
|
-
return /* @__PURE__ */ jsx(
|
|
1775
|
+
return /* @__PURE__ */ jsx(Popover$1.Root, {
|
|
839
1776
|
"data-slot": "popover",
|
|
840
1777
|
...props
|
|
841
1778
|
});
|
|
842
1779
|
}
|
|
843
|
-
|
|
844
|
-
return /* @__PURE__ */ jsx(
|
|
1780
|
+
const PopoverTrigger = React$1.forwardRef((props, ref) => {
|
|
1781
|
+
return /* @__PURE__ */ jsx(Popover$1.Trigger, {
|
|
845
1782
|
"data-slot": "popover-trigger",
|
|
1783
|
+
ref,
|
|
846
1784
|
...props
|
|
847
1785
|
});
|
|
848
|
-
}
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
1786
|
+
});
|
|
1787
|
+
PopoverTrigger.displayName = "PopoverTrigger";
|
|
1788
|
+
function PopoverContent({ className, align = "center", alignOffset = 0, side = "bottom", sideOffset = 4, ...props }) {
|
|
1789
|
+
return /* @__PURE__ */ jsx(Popover$1.Portal, { children: /* @__PURE__ */ jsx(Popover$1.Positioner, {
|
|
852
1790
|
align,
|
|
1791
|
+
alignOffset,
|
|
1792
|
+
side,
|
|
853
1793
|
sideOffset,
|
|
854
|
-
className:
|
|
855
|
-
|
|
1794
|
+
className: "isolate z-50",
|
|
1795
|
+
children: /* @__PURE__ */ jsx(Popover$1.Popup, {
|
|
1796
|
+
"data-slot": "popover-content",
|
|
1797
|
+
className: cn("z-50 flex w-72 origin-(--transform-origin) flex-col gap-4 rounded-md bg-popover p-4 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),
|
|
1798
|
+
...props
|
|
1799
|
+
})
|
|
856
1800
|
}) });
|
|
857
1801
|
}
|
|
858
|
-
function
|
|
859
|
-
return /* @__PURE__ */ jsx(
|
|
860
|
-
"data-slot": "popover-
|
|
1802
|
+
function PopoverHeader({ className, ...props }) {
|
|
1803
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1804
|
+
"data-slot": "popover-header",
|
|
1805
|
+
className: cn("flex flex-col gap-0.5 text-sm", className),
|
|
1806
|
+
...props
|
|
1807
|
+
});
|
|
1808
|
+
}
|
|
1809
|
+
function PopoverTitle({ className, ...props }) {
|
|
1810
|
+
return /* @__PURE__ */ jsx(Popover$1.Title, {
|
|
1811
|
+
"data-slot": "popover-title",
|
|
1812
|
+
className: cn("font-bold", className),
|
|
1813
|
+
...props
|
|
1814
|
+
});
|
|
1815
|
+
}
|
|
1816
|
+
function PopoverDescription({ className, ...props }) {
|
|
1817
|
+
return /* @__PURE__ */ jsx(Popover$1.Description, {
|
|
1818
|
+
"data-slot": "popover-description",
|
|
1819
|
+
className: cn("text-muted-foreground", className),
|
|
861
1820
|
...props
|
|
862
1821
|
});
|
|
863
1822
|
}
|
|
@@ -875,25 +1834,6 @@ function ThemeProvider({ children, ...props }) {
|
|
|
875
1834
|
});
|
|
876
1835
|
}
|
|
877
1836
|
|
|
878
|
-
//#endregion
|
|
879
|
-
//#region src/components/tooltip.tsx
|
|
880
|
-
const TooltipProvider = TooltipPrimitive.Provider;
|
|
881
|
-
const Tooltip = TooltipPrimitive.Root;
|
|
882
|
-
const TooltipTrigger = TooltipPrimitive.Trigger;
|
|
883
|
-
const TooltipContent = React$1.forwardRef(({ className, sideOffset = 4, collisionPadding = 4, container, forceMount, ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Portal, {
|
|
884
|
-
container,
|
|
885
|
-
forceMount,
|
|
886
|
-
children: /* @__PURE__ */ jsx(TooltipPrimitive.Content, {
|
|
887
|
-
ref,
|
|
888
|
-
sideOffset,
|
|
889
|
-
collisionPadding,
|
|
890
|
-
sticky: "partial",
|
|
891
|
-
className: cn("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", className),
|
|
892
|
-
...props
|
|
893
|
-
})
|
|
894
|
-
}));
|
|
895
|
-
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
896
|
-
|
|
897
1837
|
//#endregion
|
|
898
1838
|
//#region src/components/emoji-picker.tsx
|
|
899
1839
|
const EmojiPickerCategories = {
|
|
@@ -907,55 +1847,63 @@ const EmojiPickerCategories = {
|
|
|
907
1847
|
SYMBOLS: Categories.SYMBOLS,
|
|
908
1848
|
FLAGS: Categories.FLAGS
|
|
909
1849
|
};
|
|
910
|
-
const
|
|
911
|
-
|
|
1850
|
+
const EmojiPickerContext = React$1.createContext(null);
|
|
1851
|
+
function useEmojiPickerContext() {
|
|
1852
|
+
const context = React$1.useContext(EmojiPickerContext);
|
|
1853
|
+
if (!context) throw new Error("EmojiPicker compound components must be used inside <EmojiPicker>");
|
|
1854
|
+
return context;
|
|
1855
|
+
}
|
|
1856
|
+
function EmojiPicker({ onEmojiSelect, children }) {
|
|
1857
|
+
const [open, setOpen] = React$1.useState(false);
|
|
1858
|
+
const onSelect = React$1.useCallback((emoji) => {
|
|
1859
|
+
onEmojiSelect?.(emoji);
|
|
1860
|
+
setOpen(false);
|
|
1861
|
+
}, [onEmojiSelect]);
|
|
1862
|
+
const contextValue = React$1.useMemo(() => ({ onSelect }), [onSelect]);
|
|
1863
|
+
return /* @__PURE__ */ jsx(EmojiPickerContext.Provider, {
|
|
1864
|
+
value: contextValue,
|
|
1865
|
+
children: /* @__PURE__ */ jsx(Popover, {
|
|
1866
|
+
open,
|
|
1867
|
+
onOpenChange: setOpen,
|
|
1868
|
+
children
|
|
1869
|
+
})
|
|
1870
|
+
});
|
|
1871
|
+
}
|
|
1872
|
+
const EmojiPickerTrigger = React$1.forwardRef(({ render, children, ...props }, ref) => /* @__PURE__ */ jsx(PopoverTrigger, {
|
|
912
1873
|
ref,
|
|
913
|
-
|
|
914
|
-
|
|
1874
|
+
"aria-label": "Emoji",
|
|
1875
|
+
render: render ?? /* @__PURE__ */ jsx(Button, {
|
|
1876
|
+
variant: "outline",
|
|
1877
|
+
size: "icon"
|
|
1878
|
+
}),
|
|
1879
|
+
...props,
|
|
1880
|
+
children: children ?? /* @__PURE__ */ jsx(Smile, { "aria-hidden": "true" })
|
|
915
1881
|
}));
|
|
916
|
-
|
|
917
|
-
function
|
|
918
|
-
const
|
|
1882
|
+
EmojiPickerTrigger.displayName = "EmojiPickerTrigger";
|
|
1883
|
+
function EmojiPickerContent({ className, align = "start", searchPlaceholder, categories, width = 300, suggestedEmojisMode = SuggestionMode.RECENT, ...props }) {
|
|
1884
|
+
const { onSelect } = useEmojiPickerContext();
|
|
919
1885
|
const { resolvedTheme } = useTheme();
|
|
920
1886
|
const pickerTheme = resolvedTheme === "dark" ? Theme.DARK : Theme.LIGHT;
|
|
921
|
-
const
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
})
|
|
940
|
-
}), /* @__PURE__ */ jsx(TooltipContent, { children: tooltip })] }) }), /* @__PURE__ */ jsx(PopoverContent, {
|
|
941
|
-
className: cn("p-0 w-64", className),
|
|
942
|
-
align: "start",
|
|
943
|
-
children: /* @__PURE__ */ jsx("div", {
|
|
944
|
-
className: cn("ds-emoji-picker", emojiClassName),
|
|
945
|
-
"data-emoji-class": true,
|
|
946
|
-
children: /* @__PURE__ */ jsx(EmojiReactPicker, {
|
|
947
|
-
lazyLoadEmojis: true,
|
|
948
|
-
emojiStyle: EmojiStyle.NATIVE,
|
|
949
|
-
suggestedEmojisMode: SuggestionMode.RECENT,
|
|
950
|
-
previewConfig: { showPreview: false },
|
|
951
|
-
onEmojiClick: handleSelect,
|
|
952
|
-
width: emojiListWidth,
|
|
953
|
-
searchPlaceHolder: searchPlaceholder,
|
|
954
|
-
categories,
|
|
955
|
-
theme: pickerTheme
|
|
956
|
-
})
|
|
1887
|
+
const handleClick = React$1.useCallback((emojiData) => onSelect(emojiData.emoji), [onSelect]);
|
|
1888
|
+
return /* @__PURE__ */ jsx(PopoverContent, {
|
|
1889
|
+
"aria-label": "Choose an emoji",
|
|
1890
|
+
className: cn("p-0 w-auto overflow-hidden ring-foreground/5", className),
|
|
1891
|
+
align,
|
|
1892
|
+
...props,
|
|
1893
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
1894
|
+
className: "ds-emoji-picker",
|
|
1895
|
+
children: /* @__PURE__ */ jsx(EmojiReactPicker, {
|
|
1896
|
+
lazyLoadEmojis: true,
|
|
1897
|
+
emojiStyle: EmojiStyle.NATIVE,
|
|
1898
|
+
suggestedEmojisMode,
|
|
1899
|
+
previewConfig: { showPreview: false },
|
|
1900
|
+
onEmojiClick: handleClick,
|
|
1901
|
+
width,
|
|
1902
|
+
searchPlaceHolder: searchPlaceholder,
|
|
1903
|
+
categories,
|
|
1904
|
+
theme: pickerTheme
|
|
957
1905
|
})
|
|
958
|
-
})
|
|
1906
|
+
})
|
|
959
1907
|
});
|
|
960
1908
|
}
|
|
961
1909
|
|
|
@@ -964,7 +1912,7 @@ function EmojiPicker({ disabled, tooltip = "Emoji", onEmojiSelect, className, tr
|
|
|
964
1912
|
function Empty({ className, ...props }) {
|
|
965
1913
|
return /* @__PURE__ */ jsx("div", {
|
|
966
1914
|
"data-slot": "empty",
|
|
967
|
-
className: cn("flex min-w-0 flex-1 flex-col items-center justify-center gap-
|
|
1915
|
+
className: cn("flex min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-lg border-dashed p-6 text-center text-balance md:p-12", className),
|
|
968
1916
|
...props
|
|
969
1917
|
});
|
|
970
1918
|
}
|
|
@@ -996,14 +1944,14 @@ function EmptyMedia({ className, variant = "default", ...props }) {
|
|
|
996
1944
|
function EmptyTitle({ className, ...props }) {
|
|
997
1945
|
return /* @__PURE__ */ jsx("div", {
|
|
998
1946
|
"data-slot": "empty-title",
|
|
999
|
-
className: cn("text-
|
|
1947
|
+
className: cn("text-sm font-medium tracking-tight", className),
|
|
1000
1948
|
...props
|
|
1001
1949
|
});
|
|
1002
1950
|
}
|
|
1003
1951
|
function EmptyDescription({ className, ...props }) {
|
|
1004
1952
|
return /* @__PURE__ */ jsx("div", {
|
|
1005
1953
|
"data-slot": "empty-description",
|
|
1006
|
-
className: cn("text-muted-foreground [&>a:hover]:text-primary text-sm
|
|
1954
|
+
className: cn("text-muted-foreground [&>a:hover]:text-primary text-sm [&>a]:underline [&>a]:underline-offset-4", className),
|
|
1007
1955
|
...props
|
|
1008
1956
|
});
|
|
1009
1957
|
}
|
|
@@ -1018,9 +1966,9 @@ function EmptyContent({ className, ...props }) {
|
|
|
1018
1966
|
//#endregion
|
|
1019
1967
|
//#region src/components/label.tsx
|
|
1020
1968
|
function Label({ className, ...props }) {
|
|
1021
|
-
return /* @__PURE__ */ jsx(
|
|
1969
|
+
return /* @__PURE__ */ jsx("label", {
|
|
1022
1970
|
"data-slot": "label",
|
|
1023
|
-
className: cn("flex items-center gap-2 text-sm leading-
|
|
1971
|
+
className: cn("flex items-center gap-2 text-sm leading-normal 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 peer-data-disabled:opacity-50", className),
|
|
1024
1972
|
...props
|
|
1025
1973
|
});
|
|
1026
1974
|
}
|
|
@@ -1030,7 +1978,7 @@ function Label({ className, ...props }) {
|
|
|
1030
1978
|
function FieldSet({ className, ...props }) {
|
|
1031
1979
|
return /* @__PURE__ */ jsx("fieldset", {
|
|
1032
1980
|
"data-slot": "field-set",
|
|
1033
|
-
className: cn("flex flex-col gap-
|
|
1981
|
+
className: cn("flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3", className),
|
|
1034
1982
|
...props
|
|
1035
1983
|
});
|
|
1036
1984
|
}
|
|
@@ -1038,30 +1986,22 @@ function FieldLegend({ className, variant = "legend", ...props }) {
|
|
|
1038
1986
|
return /* @__PURE__ */ jsx("legend", {
|
|
1039
1987
|
"data-slot": "field-legend",
|
|
1040
1988
|
"data-variant": variant,
|
|
1041
|
-
className: cn("mb-
|
|
1989
|
+
className: cn("mb-1.5 font-medium leading-normal data-[variant=label]:text-sm data-[variant=legend]:text-base", className),
|
|
1042
1990
|
...props
|
|
1043
1991
|
});
|
|
1044
1992
|
}
|
|
1045
1993
|
function FieldGroup({ className, ...props }) {
|
|
1046
1994
|
return /* @__PURE__ */ jsx("div", {
|
|
1047
1995
|
"data-slot": "field-group",
|
|
1048
|
-
className: cn("group/field-group @container/field-group flex w-full flex-col gap-
|
|
1996
|
+
className: cn("group/field-group @container/field-group flex w-full flex-col gap-6 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4", className),
|
|
1049
1997
|
...props
|
|
1050
1998
|
});
|
|
1051
1999
|
}
|
|
1052
|
-
const fieldVariants = cva("group/field flex w-full gap-
|
|
2000
|
+
const fieldVariants = cva("group/field flex w-full gap-2 data-[invalid=true]:text-destructive", {
|
|
1053
2001
|
variants: { orientation: {
|
|
1054
|
-
vertical:
|
|
1055
|
-
horizontal: [
|
|
1056
|
-
|
|
1057
|
-
"[&>[data-slot=field-label]]:flex-auto",
|
|
1058
|
-
"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
|
|
1059
|
-
],
|
|
1060
|
-
responsive: [
|
|
1061
|
-
"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto",
|
|
1062
|
-
"@md/field-group:[&>[data-slot=field-label]]:flex-auto",
|
|
1063
|
-
"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
|
|
1064
|
-
]
|
|
2002
|
+
vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
|
|
2003
|
+
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",
|
|
2004
|
+
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"
|
|
1065
2005
|
} },
|
|
1066
2006
|
defaultVariants: { orientation: "vertical" }
|
|
1067
2007
|
});
|
|
@@ -1077,198 +2017,71 @@ function Field({ className, orientation = "vertical", ...props }) {
|
|
|
1077
2017
|
function FieldContent({ className, ...props }) {
|
|
1078
2018
|
return /* @__PURE__ */ jsx("div", {
|
|
1079
2019
|
"data-slot": "field-content",
|
|
1080
|
-
className: cn("group/field-content flex flex-1 flex-col gap-
|
|
2020
|
+
className: cn("group/field-content flex flex-1 flex-col gap-2 leading-normal", className),
|
|
1081
2021
|
...props
|
|
1082
2022
|
});
|
|
1083
2023
|
}
|
|
1084
2024
|
function FieldLabel({ className, ...props }) {
|
|
1085
2025
|
return /* @__PURE__ */ jsx(Label, {
|
|
1086
|
-
"data-slot": "field-label",
|
|
1087
|
-
className: cn("group/field-label peer/field-label flex w-fit gap-2 leading-
|
|
1088
|
-
...props
|
|
1089
|
-
});
|
|
1090
|
-
}
|
|
1091
|
-
function FieldTitle({ className, ...props }) {
|
|
1092
|
-
return /* @__PURE__ */ jsx("div", {
|
|
1093
|
-
"data-slot": "field-label",
|
|
1094
|
-
className: cn("flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50", className),
|
|
1095
|
-
...props
|
|
1096
|
-
});
|
|
1097
|
-
}
|
|
1098
|
-
function FieldDescription({ className, ...props }) {
|
|
1099
|
-
return /* @__PURE__ */ jsx("p", {
|
|
1100
|
-
"data-slot": "field-description",
|
|
1101
|
-
className: cn("text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance", "last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5", "[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4", className),
|
|
1102
|
-
...props
|
|
1103
|
-
});
|
|
1104
|
-
}
|
|
1105
|
-
function FieldSeparator({ children, className, ...props }) {
|
|
1106
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
1107
|
-
"data-slot": "field-separator",
|
|
1108
|
-
"data-content": !!children,
|
|
1109
|
-
className: cn("relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2", className),
|
|
1110
|
-
...props,
|
|
1111
|
-
children: [/* @__PURE__ */ jsx(Separator, { className: "absolute inset-0 top-1/2" }), children && /* @__PURE__ */ jsx("span", {
|
|
1112
|
-
className: "bg-background text-muted-foreground relative mx-auto block w-fit px-2",
|
|
1113
|
-
"data-slot": "field-separator-content",
|
|
1114
|
-
children
|
|
1115
|
-
})]
|
|
1116
|
-
});
|
|
1117
|
-
}
|
|
1118
|
-
function FieldError({ className, children, errors, ...props }) {
|
|
1119
|
-
const content = useMemo(() => {
|
|
1120
|
-
if (children) return children;
|
|
1121
|
-
if (!errors?.length) return null;
|
|
1122
|
-
const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()];
|
|
1123
|
-
if (uniqueErrors?.length == 1) return uniqueErrors[0]?.message;
|
|
1124
|
-
return /* @__PURE__ */ jsx("ul", {
|
|
1125
|
-
className: "ml-4 flex list-disc flex-col gap-1",
|
|
1126
|
-
children: uniqueErrors.map((error, index) => error?.message && /* @__PURE__ */ jsx("li", { children: error.message }, index))
|
|
1127
|
-
});
|
|
1128
|
-
}, [children, errors]);
|
|
1129
|
-
if (!content) return null;
|
|
1130
|
-
return /* @__PURE__ */ jsx("div", {
|
|
1131
|
-
role: "alert",
|
|
1132
|
-
"data-slot": "field-error",
|
|
1133
|
-
className: cn("text-destructive text-sm font-normal", className),
|
|
1134
|
-
...props,
|
|
1135
|
-
children: content
|
|
1136
|
-
});
|
|
1137
|
-
}
|
|
1138
|
-
|
|
1139
|
-
//#endregion
|
|
1140
|
-
//#region src/components/input.tsx
|
|
1141
|
-
const inputVariants = cva("text-foreground file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", {
|
|
1142
|
-
variants: {
|
|
1143
|
-
sizing: {
|
|
1144
|
-
default: "h-9 px-4 py-2",
|
|
1145
|
-
sm: "h-8 rounded-md gap-1.5 px-3",
|
|
1146
|
-
lg: "h-11 rounded-lg px-6"
|
|
1147
|
-
},
|
|
1148
|
-
block: { true: "w-full" }
|
|
1149
|
-
},
|
|
1150
|
-
defaultVariants: { sizing: "default" }
|
|
1151
|
-
});
|
|
1152
|
-
const Input = React$1.forwardRef(({ className, type, sizing, block, ...props }, forwardedRef) => {
|
|
1153
|
-
return /* @__PURE__ */ jsx("input", {
|
|
1154
|
-
type,
|
|
1155
|
-
"data-slot": "input",
|
|
1156
|
-
className: cn(inputVariants({
|
|
1157
|
-
sizing,
|
|
1158
|
-
block,
|
|
1159
|
-
className
|
|
1160
|
-
})),
|
|
1161
|
-
...props,
|
|
1162
|
-
ref: forwardedRef
|
|
1163
|
-
});
|
|
1164
|
-
});
|
|
1165
|
-
|
|
1166
|
-
//#endregion
|
|
1167
|
-
//#region src/components/textarea.tsx
|
|
1168
|
-
function Textarea({ className, ...props }) {
|
|
1169
|
-
return /* @__PURE__ */ jsx("textarea", {
|
|
1170
|
-
"data-slot": "textarea",
|
|
1171
|
-
className: cn("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", className),
|
|
1172
|
-
...props
|
|
1173
|
-
});
|
|
1174
|
-
}
|
|
1175
|
-
|
|
1176
|
-
//#endregion
|
|
1177
|
-
//#region src/components/input-group.tsx
|
|
1178
|
-
const inputGroupVariants = cva("group/input-group border-input dark:bg-input/30 relative flex w-full items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none has-[>textarea]:h-auto", {
|
|
1179
|
-
variants: { sizing: {
|
|
1180
|
-
default: "h-9",
|
|
1181
|
-
sm: "h-8",
|
|
1182
|
-
lg: "h-11"
|
|
1183
|
-
} },
|
|
1184
|
-
defaultVariants: { sizing: "default" }
|
|
1185
|
-
});
|
|
1186
|
-
function InputGroup({ className, sizing, ...props }) {
|
|
1187
|
-
return /* @__PURE__ */ jsx("div", {
|
|
1188
|
-
"data-slot": "input-group",
|
|
1189
|
-
role: "group",
|
|
1190
|
-
className: cn(inputGroupVariants({ sizing }), "has-[>[data-align=inline-start]]:[&>input]:pl-2", "has-[>[data-align=inline-end]]:[&>input]:pr-2", "has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3", "has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3", "has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot=input-group-control]:focus-visible]:ring-[3px]", "has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40", className),
|
|
2026
|
+
"data-slot": "field-label",
|
|
2027
|
+
className: cn("group/field-label peer/field-label flex w-fit gap-2 leading-normal 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 *:data-[slot=field]:p-4 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),
|
|
1191
2028
|
...props
|
|
1192
2029
|
});
|
|
1193
2030
|
}
|
|
1194
|
-
|
|
1195
|
-
variants: { align: {
|
|
1196
|
-
"inline-start": "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]",
|
|
1197
|
-
"inline-end": "order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]",
|
|
1198
|
-
"block-start": "order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5",
|
|
1199
|
-
"block-end": "order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5"
|
|
1200
|
-
} },
|
|
1201
|
-
defaultVariants: { align: "inline-start" }
|
|
1202
|
-
});
|
|
1203
|
-
function InputGroupAddon({ className, align = "inline-start", ...props }) {
|
|
2031
|
+
function FieldTitle({ className, ...props }) {
|
|
1204
2032
|
return /* @__PURE__ */ jsx("div", {
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
"data-align": align,
|
|
1208
|
-
className: cn(inputGroupAddonVariants({ align }), className),
|
|
1209
|
-
onClick: (e) => {
|
|
1210
|
-
if (e.target.closest("button")) return;
|
|
1211
|
-
e.currentTarget.parentElement?.querySelector("input")?.focus();
|
|
1212
|
-
},
|
|
2033
|
+
"data-slot": "field-label",
|
|
2034
|
+
className: cn("flex w-fit items-center gap-2 text-sm leading-normal font-medium group-data-[disabled=true]/field:opacity-50", className),
|
|
1213
2035
|
...props
|
|
1214
2036
|
});
|
|
1215
2037
|
}
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
"icon-xs": "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0",
|
|
1221
|
-
"icon-sm": "size-7 p-0 has-[>svg]:p-0"
|
|
1222
|
-
} },
|
|
1223
|
-
defaultVariants: { size: "xs" }
|
|
1224
|
-
});
|
|
1225
|
-
const InputGroupButton = React$1.forwardRef(({ className, type = "button", variant = "ghost", size = "xs", ...props }, ref) => {
|
|
1226
|
-
return /* @__PURE__ */ jsx(Button, {
|
|
1227
|
-
ref,
|
|
1228
|
-
type,
|
|
1229
|
-
"data-size": size,
|
|
1230
|
-
variant,
|
|
1231
|
-
className: cn(inputGroupButtonVariants({ size }), className),
|
|
1232
|
-
...props
|
|
1233
|
-
});
|
|
1234
|
-
});
|
|
1235
|
-
InputGroupButton.displayName = "InputGroupButton";
|
|
1236
|
-
function InputGroupText({ className, ...props }) {
|
|
1237
|
-
return /* @__PURE__ */ jsx("span", {
|
|
1238
|
-
className: cn("text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", className),
|
|
2038
|
+
function FieldDescription({ className, ...props }) {
|
|
2039
|
+
return /* @__PURE__ */ jsx("p", {
|
|
2040
|
+
"data-slot": "field-description",
|
|
2041
|
+
className: cn("text-left text-sm leading-normal font-normal text-muted-foreground group-has-[[data-orientation=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),
|
|
1239
2042
|
...props
|
|
1240
2043
|
});
|
|
1241
2044
|
}
|
|
1242
|
-
|
|
1243
|
-
return /* @__PURE__ */
|
|
1244
|
-
"data-slot": "
|
|
1245
|
-
|
|
2045
|
+
function FieldSeparator({ children, className, ...props }) {
|
|
2046
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
2047
|
+
"data-slot": "field-separator",
|
|
2048
|
+
"data-content": !!children,
|
|
2049
|
+
className: cn("relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2", className),
|
|
1246
2050
|
...props,
|
|
1247
|
-
|
|
2051
|
+
children: [/* @__PURE__ */ jsx(Separator, { className: "absolute inset-0 top-1/2" }), children && /* @__PURE__ */ jsx("span", {
|
|
2052
|
+
className: "relative mx-auto block w-fit bg-background px-2 text-muted-foreground",
|
|
2053
|
+
"data-slot": "field-separator-content",
|
|
2054
|
+
children
|
|
2055
|
+
})]
|
|
1248
2056
|
});
|
|
1249
|
-
}
|
|
1250
|
-
function
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
...
|
|
2057
|
+
}
|
|
2058
|
+
function FieldError({ className, children, errors, ...props }) {
|
|
2059
|
+
const content = useMemo(() => {
|
|
2060
|
+
if (children) return children;
|
|
2061
|
+
if (!errors?.length) return null;
|
|
2062
|
+
const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()];
|
|
2063
|
+
if (uniqueErrors?.length == 1) return uniqueErrors[0]?.message;
|
|
2064
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
2065
|
+
className: "ml-4 flex list-disc flex-col gap-1",
|
|
2066
|
+
children: uniqueErrors.map((error, index) => error?.message && /* @__PURE__ */ jsx("li", { children: error.message }, index))
|
|
2067
|
+
});
|
|
2068
|
+
}, [children, errors]);
|
|
2069
|
+
if (!content) return null;
|
|
2070
|
+
return /* @__PURE__ */ jsx("div", {
|
|
2071
|
+
role: "alert",
|
|
2072
|
+
"data-slot": "field-error",
|
|
2073
|
+
className: cn("text-sm leading-normal font-normal text-destructive", className),
|
|
2074
|
+
...props,
|
|
2075
|
+
children: content
|
|
1255
2076
|
});
|
|
1256
2077
|
}
|
|
1257
2078
|
|
|
1258
2079
|
//#endregion
|
|
1259
2080
|
//#region src/components/input-otp.tsx
|
|
1260
|
-
|
|
1261
|
-
variants: { sizing: {
|
|
1262
|
-
default: "**:data-[slot=input-otp-slot]:h-9 **:data-[slot=input-otp-slot]:w-9",
|
|
1263
|
-
sm: "**:data-[slot=input-otp-slot]:h-8 **:data-[slot=input-otp-slot]:w-8",
|
|
1264
|
-
lg: "**:data-[slot=input-otp-slot]:h-12 **:data-[slot=input-otp-slot]:w-12"
|
|
1265
|
-
} },
|
|
1266
|
-
defaultVariants: { sizing: "default" }
|
|
1267
|
-
});
|
|
1268
|
-
function InputOTP({ className, containerClassName, sizing, ...props }) {
|
|
2081
|
+
function InputOTP({ className, containerClassName, ...props }) {
|
|
1269
2082
|
return /* @__PURE__ */ jsx(OTPInput, {
|
|
1270
2083
|
"data-slot": "input-otp",
|
|
1271
|
-
containerClassName: cn("flex items-center gap-2 has-disabled:opacity-50
|
|
2084
|
+
containerClassName: cn("flex items-center gap-2 has-disabled:opacity-50 **:data-[slot=input-otp-slot]:h-12 **:data-[slot=input-otp-slot]:w-12 has-[input[aria-invalid=true]]:**:data-[slot=input-otp-slot]:border-destructive has-[input[aria-invalid=true]]:**:data-[slot=input-otp-slot]:data-[active=true]:ring-destructive/20 dark:has-[input[aria-invalid=true]]:**:data-[slot=input-otp-slot]:data-[active=true]:ring-destructive/40", containerClassName),
|
|
1272
2085
|
className: cn("disabled:cursor-not-allowed", className),
|
|
1273
2086
|
...props
|
|
1274
2087
|
});
|
|
@@ -1285,7 +2098,7 @@ function InputOTPSlot({ index, className, ...props }) {
|
|
|
1285
2098
|
return /* @__PURE__ */ jsxs("div", {
|
|
1286
2099
|
"data-slot": "input-otp-slot",
|
|
1287
2100
|
"data-active": isActive,
|
|
1288
|
-
className: cn("data-[active=true]:border-ring data-[active=true]:ring-ring/50
|
|
2101
|
+
className: cn("data-[active=true]:border-ring data-[active=true]:ring-ring/50 dark:bg-input/30 border-input relative flex items-center justify-center border-y border-r text-sm transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-3", className),
|
|
1289
2102
|
...props,
|
|
1290
2103
|
children: [char, hasFakeCaret && /* @__PURE__ */ jsx("div", {
|
|
1291
2104
|
className: "pointer-events-none absolute inset-0 flex items-center justify-center",
|
|
@@ -1310,7 +2123,7 @@ const ItemGroup = React$1.forwardRef(({ className, stackedItems = false, ...prop
|
|
|
1310
2123
|
role: "list",
|
|
1311
2124
|
"data-slot": "item-group",
|
|
1312
2125
|
"data-stacked": stackedItems ? "" : void 0,
|
|
1313
|
-
className: cn("group/item-group flex flex-col", stackedItems ? "*:has-[+[data-slot=item]]:rounded-b-none *:[[data-slot=item]+[data-slot=item]]:rounded-t-none *:[[data-slot=item]+[data-slot=item]]:border-t-0" : "", className),
|
|
2126
|
+
className: cn("group/item-group flex w-full flex-col", stackedItems ? "*:has-[+[data-slot=item]]:rounded-b-none *:[[data-slot=item]+[data-slot=item]]:rounded-t-none *:[[data-slot=item]+[data-slot=item]]:border-t-0" : "gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2", className),
|
|
1314
2127
|
...props
|
|
1315
2128
|
});
|
|
1316
2129
|
});
|
|
@@ -1319,20 +2132,21 @@ function ItemSeparator({ className, ...props }) {
|
|
|
1319
2132
|
return /* @__PURE__ */ jsx(Separator, {
|
|
1320
2133
|
"data-slot": "item-separator",
|
|
1321
2134
|
orientation: "horizontal",
|
|
1322
|
-
className: cn("my-
|
|
2135
|
+
className: cn("my-2", className),
|
|
1323
2136
|
...props
|
|
1324
2137
|
});
|
|
1325
2138
|
}
|
|
1326
|
-
const itemVariants = cva("group/item flex items-center
|
|
2139
|
+
const itemVariants = cva("group/item flex w-full flex-wrap items-center rounded-md 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", {
|
|
1327
2140
|
variants: {
|
|
1328
2141
|
variant: {
|
|
1329
|
-
default: "
|
|
1330
|
-
outline: "border
|
|
1331
|
-
muted: "bg-muted/50
|
|
2142
|
+
default: "border-transparent",
|
|
2143
|
+
outline: "border-border",
|
|
2144
|
+
muted: "border-transparent bg-muted/50"
|
|
1332
2145
|
},
|
|
1333
2146
|
size: {
|
|
1334
|
-
default: "
|
|
1335
|
-
sm: "
|
|
2147
|
+
default: "gap-3.5 px-4 py-3.5",
|
|
2148
|
+
sm: "gap-2.5 px-3 py-2.5",
|
|
2149
|
+
xs: "gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0"
|
|
1336
2150
|
}
|
|
1337
2151
|
},
|
|
1338
2152
|
defaultVariants: {
|
|
@@ -1340,26 +2154,31 @@ const itemVariants = cva("group/item flex items-center text-sm transition-colors
|
|
|
1340
2154
|
size: "default"
|
|
1341
2155
|
}
|
|
1342
2156
|
});
|
|
1343
|
-
const Item = React$1.forwardRef(({ className, variant = "default", size = "default",
|
|
1344
|
-
return
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
2157
|
+
const Item = React$1.forwardRef(({ className, variant = "default", size = "default", render, ...props }, ref) => {
|
|
2158
|
+
return useRender({
|
|
2159
|
+
defaultTagName: "div",
|
|
2160
|
+
props: mergeProps({
|
|
2161
|
+
className: cn(itemVariants({
|
|
2162
|
+
variant,
|
|
2163
|
+
size,
|
|
2164
|
+
className
|
|
2165
|
+
})),
|
|
2166
|
+
ref
|
|
2167
|
+
}, props),
|
|
2168
|
+
render,
|
|
2169
|
+
state: {
|
|
2170
|
+
slot: "item",
|
|
1350
2171
|
variant,
|
|
1351
|
-
size
|
|
1352
|
-
|
|
1353
|
-
})),
|
|
1354
|
-
...props
|
|
2172
|
+
size
|
|
2173
|
+
}
|
|
1355
2174
|
});
|
|
1356
2175
|
});
|
|
1357
2176
|
Item.displayName = "Item";
|
|
1358
|
-
const itemMediaVariants = cva("flex shrink-0 items-center justify-center gap-2 group-has-
|
|
2177
|
+
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", {
|
|
1359
2178
|
variants: { variant: {
|
|
1360
2179
|
default: "bg-transparent",
|
|
1361
|
-
icon: "
|
|
1362
|
-
image: "size-10 rounded-sm
|
|
2180
|
+
icon: "[&_svg:not([class*='size-'])]:size-4",
|
|
2181
|
+
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"
|
|
1363
2182
|
} },
|
|
1364
2183
|
defaultVariants: { variant: "default" }
|
|
1365
2184
|
});
|
|
@@ -1380,7 +2199,7 @@ const ItemContent = React$1.forwardRef(({ className, ...props }, ref) => {
|
|
|
1380
2199
|
return /* @__PURE__ */ jsx("div", {
|
|
1381
2200
|
ref,
|
|
1382
2201
|
"data-slot": "item-content",
|
|
1383
|
-
className: cn("flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none", className),
|
|
2202
|
+
className: cn("flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none", className),
|
|
1384
2203
|
...props
|
|
1385
2204
|
});
|
|
1386
2205
|
});
|
|
@@ -1389,7 +2208,7 @@ const ItemTitle = React$1.forwardRef(({ className, ...props }, ref) => {
|
|
|
1389
2208
|
return /* @__PURE__ */ jsx("div", {
|
|
1390
2209
|
ref,
|
|
1391
2210
|
"data-slot": "item-title",
|
|
1392
|
-
className: cn("flex w-fit items-center gap-2 text-sm leading-snug font-medium", className),
|
|
2211
|
+
className: cn("line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4", className),
|
|
1393
2212
|
...props
|
|
1394
2213
|
});
|
|
1395
2214
|
});
|
|
@@ -1398,7 +2217,7 @@ const ItemDescription = React$1.forwardRef(({ className, ...props }, ref) => {
|
|
|
1398
2217
|
return /* @__PURE__ */ jsx("p", {
|
|
1399
2218
|
ref,
|
|
1400
2219
|
"data-slot": "item-description",
|
|
1401
|
-
className: cn("
|
|
2220
|
+
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),
|
|
1402
2221
|
...props
|
|
1403
2222
|
});
|
|
1404
2223
|
});
|
|
@@ -1456,208 +2275,294 @@ const ListCol = ({ grow, wrap, children, className, ...props }) => {
|
|
|
1456
2275
|
});
|
|
1457
2276
|
};
|
|
1458
2277
|
|
|
2278
|
+
//#endregion
|
|
2279
|
+
//#region src/components/pagination.tsx
|
|
2280
|
+
function Pagination({ className, ...props }) {
|
|
2281
|
+
return /* @__PURE__ */ jsx("nav", {
|
|
2282
|
+
role: "navigation",
|
|
2283
|
+
"aria-label": "pagination",
|
|
2284
|
+
"data-slot": "pagination",
|
|
2285
|
+
className: cn("mx-auto flex w-full justify-center", className),
|
|
2286
|
+
...props
|
|
2287
|
+
});
|
|
2288
|
+
}
|
|
2289
|
+
function PaginationContent({ className, ...props }) {
|
|
2290
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
2291
|
+
"data-slot": "pagination-content",
|
|
2292
|
+
className: cn("flex items-center gap-1", className),
|
|
2293
|
+
...props
|
|
2294
|
+
});
|
|
2295
|
+
}
|
|
2296
|
+
function PaginationItem({ ...props }) {
|
|
2297
|
+
return /* @__PURE__ */ jsx("li", {
|
|
2298
|
+
"data-slot": "pagination-item",
|
|
2299
|
+
...props
|
|
2300
|
+
});
|
|
2301
|
+
}
|
|
2302
|
+
function PaginationLink({ className, isActive, size = "icon", ...props }) {
|
|
2303
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
2304
|
+
variant: isActive ? "outline" : "ghost",
|
|
2305
|
+
size,
|
|
2306
|
+
className: cn(className),
|
|
2307
|
+
nativeButton: false,
|
|
2308
|
+
render: /* @__PURE__ */ jsx("a", {
|
|
2309
|
+
"aria-current": isActive ? "page" : void 0,
|
|
2310
|
+
"data-slot": "pagination-link",
|
|
2311
|
+
"data-active": isActive,
|
|
2312
|
+
...props
|
|
2313
|
+
})
|
|
2314
|
+
});
|
|
2315
|
+
}
|
|
2316
|
+
function PaginationPrevious({ className, text = "Previous", ...props }) {
|
|
2317
|
+
return /* @__PURE__ */ jsxs(PaginationLink, {
|
|
2318
|
+
"aria-label": "Go to previous page",
|
|
2319
|
+
size: "default",
|
|
2320
|
+
className: cn("pl-2!", className),
|
|
2321
|
+
...props,
|
|
2322
|
+
children: [/* @__PURE__ */ jsx(ChevronLeftIcon, { "data-icon": "inline-start" }), /* @__PURE__ */ jsx("span", {
|
|
2323
|
+
className: "hidden sm:block",
|
|
2324
|
+
children: text
|
|
2325
|
+
})]
|
|
2326
|
+
});
|
|
2327
|
+
}
|
|
2328
|
+
function PaginationNext({ className, text = "Next", ...props }) {
|
|
2329
|
+
return /* @__PURE__ */ jsxs(PaginationLink, {
|
|
2330
|
+
"aria-label": "Go to next page",
|
|
2331
|
+
size: "default",
|
|
2332
|
+
className: cn("pr-2!", className),
|
|
2333
|
+
...props,
|
|
2334
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
2335
|
+
className: "hidden sm:block",
|
|
2336
|
+
children: text
|
|
2337
|
+
}), /* @__PURE__ */ jsx(ChevronRightIcon, { "data-icon": "inline-end" })]
|
|
2338
|
+
});
|
|
2339
|
+
}
|
|
2340
|
+
function PaginationEllipsis({ className, ...props }) {
|
|
2341
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
2342
|
+
"aria-hidden": true,
|
|
2343
|
+
"data-slot": "pagination-ellipsis",
|
|
2344
|
+
className: cn("flex size-9 items-center justify-center [&_svg:not([class*='size-'])]:size-4", className),
|
|
2345
|
+
...props,
|
|
2346
|
+
children: [/* @__PURE__ */ jsx(MoreHorizontalIcon, {}), /* @__PURE__ */ jsx("span", {
|
|
2347
|
+
className: "sr-only",
|
|
2348
|
+
children: "More pages"
|
|
2349
|
+
})]
|
|
2350
|
+
});
|
|
2351
|
+
}
|
|
2352
|
+
|
|
1459
2353
|
//#endregion
|
|
1460
2354
|
//#region src/components/progress.tsx
|
|
1461
|
-
function Progress({ className, value, ...props }) {
|
|
1462
|
-
return /* @__PURE__ */
|
|
2355
|
+
function Progress({ className, children, value, ...props }) {
|
|
2356
|
+
return /* @__PURE__ */ jsxs(Progress$1.Root, {
|
|
2357
|
+
value,
|
|
1463
2358
|
"data-slot": "progress",
|
|
1464
|
-
className: cn("
|
|
2359
|
+
className: cn("flex flex-wrap gap-3", className),
|
|
1465
2360
|
...props,
|
|
1466
|
-
children: /* @__PURE__ */ jsx(
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
2361
|
+
children: [children, /* @__PURE__ */ jsx(ProgressTrack, { children: /* @__PURE__ */ jsx(ProgressIndicator, {}) })]
|
|
2362
|
+
});
|
|
2363
|
+
}
|
|
2364
|
+
function ProgressTrack({ className, ...props }) {
|
|
2365
|
+
return /* @__PURE__ */ jsx(Progress$1.Track, {
|
|
2366
|
+
className: cn("relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-muted", className),
|
|
2367
|
+
"data-slot": "progress-track",
|
|
2368
|
+
...props
|
|
2369
|
+
});
|
|
2370
|
+
}
|
|
2371
|
+
function ProgressIndicator({ className, ...props }) {
|
|
2372
|
+
return /* @__PURE__ */ jsx(Progress$1.Indicator, {
|
|
2373
|
+
"data-slot": "progress-indicator",
|
|
2374
|
+
className: cn("h-full bg-primary transition-all", className),
|
|
2375
|
+
...props
|
|
2376
|
+
});
|
|
2377
|
+
}
|
|
2378
|
+
function ProgressLabel({ className, ...props }) {
|
|
2379
|
+
return /* @__PURE__ */ jsx(Progress$1.Label, {
|
|
2380
|
+
className: cn("text-sm font-medium", className),
|
|
2381
|
+
"data-slot": "progress-label",
|
|
2382
|
+
...props
|
|
2383
|
+
});
|
|
2384
|
+
}
|
|
2385
|
+
function ProgressValue({ className, ...props }) {
|
|
2386
|
+
return /* @__PURE__ */ jsx(Progress$1.Value, {
|
|
2387
|
+
className: cn("ml-auto text-sm text-muted-foreground tabular-nums", className),
|
|
2388
|
+
"data-slot": "progress-value",
|
|
2389
|
+
...props
|
|
1471
2390
|
});
|
|
1472
2391
|
}
|
|
1473
2392
|
|
|
1474
2393
|
//#endregion
|
|
1475
2394
|
//#region src/components/radio-group.tsx
|
|
1476
2395
|
function RadioGroup({ className, ...props }) {
|
|
1477
|
-
return /* @__PURE__ */ jsx(
|
|
2396
|
+
return /* @__PURE__ */ jsx(RadioGroup$1, {
|
|
1478
2397
|
"data-slot": "radio-group",
|
|
1479
|
-
className: cn("grid gap-3", className),
|
|
2398
|
+
className: cn("grid w-full gap-3", className),
|
|
1480
2399
|
...props
|
|
1481
2400
|
});
|
|
1482
2401
|
}
|
|
1483
2402
|
function RadioGroupItem({ className, ...props }) {
|
|
1484
|
-
return /* @__PURE__ */ jsx(
|
|
2403
|
+
return /* @__PURE__ */ jsx(Radio.Root, {
|
|
1485
2404
|
"data-slot": "radio-group-item",
|
|
1486
|
-
className: cn("border-input
|
|
2405
|
+
className: cn("group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none transition-[color,box-shadow,opacity] active:opacity-60 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50 aria-invalid:border-destructive focus-visible:aria-invalid:ring-3 focus-visible:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:focus-visible:aria-invalid:ring-destructive/40 data-checked:border-primary aria-invalid:data-checked:border-destructive", className),
|
|
1487
2406
|
...props,
|
|
1488
|
-
children: /* @__PURE__ */ jsx(
|
|
2407
|
+
children: /* @__PURE__ */ jsx(Radio.Indicator, {
|
|
1489
2408
|
"data-slot": "radio-group-indicator",
|
|
1490
|
-
className: "
|
|
1491
|
-
children: /* @__PURE__ */ jsx(
|
|
1492
|
-
})
|
|
1493
|
-
});
|
|
1494
|
-
}
|
|
1495
|
-
|
|
1496
|
-
//#endregion
|
|
1497
|
-
//#region src/components/scroll-area.tsx
|
|
1498
|
-
function ScrollArea({ className, children, ...props }) {
|
|
1499
|
-
return /* @__PURE__ */ jsxs(ScrollAreaPrimitive.Root, {
|
|
1500
|
-
"data-slot": "scroll-area",
|
|
1501
|
-
className: cn("relative", className),
|
|
1502
|
-
...props,
|
|
1503
|
-
children: [
|
|
1504
|
-
/* @__PURE__ */ jsx(ScrollAreaPrimitive.Viewport, {
|
|
1505
|
-
"data-slot": "scroll-area-viewport",
|
|
1506
|
-
className: "focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",
|
|
1507
|
-
children
|
|
1508
|
-
}),
|
|
1509
|
-
/* @__PURE__ */ jsx(ScrollBar, {}),
|
|
1510
|
-
/* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
|
|
1511
|
-
]
|
|
1512
|
-
});
|
|
1513
|
-
}
|
|
1514
|
-
function ScrollBar({ className, orientation = "vertical", ...props }) {
|
|
1515
|
-
return /* @__PURE__ */ jsx(ScrollAreaPrimitive.ScrollAreaScrollbar, {
|
|
1516
|
-
"data-slot": "scroll-area-scrollbar",
|
|
1517
|
-
orientation,
|
|
1518
|
-
className: cn("flex touch-none p-px transition-colors select-none", orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent", orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent", className),
|
|
1519
|
-
...props,
|
|
1520
|
-
children: /* @__PURE__ */ jsx(ScrollAreaPrimitive.ScrollAreaThumb, {
|
|
1521
|
-
"data-slot": "scroll-area-thumb",
|
|
1522
|
-
className: "bg-border relative flex-1 rounded-full"
|
|
2409
|
+
className: "flex size-full items-center justify-center",
|
|
2410
|
+
children: /* @__PURE__ */ jsx("span", { className: "size-2 rounded-full bg-primary group-aria-invalid/radio-group-item:bg-destructive" })
|
|
1523
2411
|
})
|
|
1524
2412
|
});
|
|
1525
2413
|
}
|
|
1526
2414
|
|
|
1527
2415
|
//#endregion
|
|
1528
2416
|
//#region src/components/select.tsx
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
"
|
|
1532
|
-
|
|
1533
|
-
}
|
|
1534
|
-
}
|
|
1535
|
-
|
|
1536
|
-
|
|
2417
|
+
const selectTriggerVariants = cva("flex w-fit items-center justify-between rounded-md border border-input bg-transparent py-2 text-sm whitespace-nowrap transition-colors outline-none select-none hover:border-ring 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 focus-visible:aria-invalid:ring-3 focus-visible:aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground *: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:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:focus-visible:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
|
|
2418
|
+
variants: { size: {
|
|
2419
|
+
default: "h-10 gap-2 px-3",
|
|
2420
|
+
sm: "h-8 gap-1.5 px-2"
|
|
2421
|
+
} },
|
|
2422
|
+
defaultVariants: { size: "default" }
|
|
2423
|
+
});
|
|
2424
|
+
const Select = Select$1.Root;
|
|
2425
|
+
function SelectGroup({ className, ...props }) {
|
|
2426
|
+
return /* @__PURE__ */ jsx(Select$1.Group, {
|
|
1537
2427
|
"data-slot": "select-group",
|
|
2428
|
+
className: cn("scroll-my-1", className),
|
|
1538
2429
|
...props
|
|
1539
2430
|
});
|
|
1540
2431
|
}
|
|
1541
|
-
function SelectValue({ ...props }) {
|
|
1542
|
-
return /* @__PURE__ */ jsx(
|
|
2432
|
+
function SelectValue({ className, ...props }) {
|
|
2433
|
+
return /* @__PURE__ */ jsx(Select$1.Value, {
|
|
1543
2434
|
"data-slot": "select-value",
|
|
2435
|
+
className: cn("flex flex-1 text-left", className),
|
|
1544
2436
|
...props
|
|
1545
2437
|
});
|
|
1546
2438
|
}
|
|
1547
2439
|
function SelectTrigger({ className, size = "default", children, ...props }) {
|
|
1548
|
-
return /* @__PURE__ */ jsxs(
|
|
2440
|
+
return /* @__PURE__ */ jsxs(Select$1.Trigger, {
|
|
1549
2441
|
"data-slot": "select-trigger",
|
|
1550
2442
|
"data-size": size,
|
|
1551
|
-
className: cn(
|
|
2443
|
+
className: cn(selectTriggerVariants({ size }), className),
|
|
1552
2444
|
...props,
|
|
1553
|
-
children: [children, /* @__PURE__ */ jsx(
|
|
1554
|
-
asChild: true,
|
|
1555
|
-
children: /* @__PURE__ */ jsx(ChevronDownOutline, { className: "size-4 opacity-50" })
|
|
1556
|
-
})]
|
|
2445
|
+
children: [children, /* @__PURE__ */ jsx(Select$1.Icon, { render: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" }) })]
|
|
1557
2446
|
});
|
|
1558
2447
|
}
|
|
1559
|
-
function SelectContent({ className, children,
|
|
1560
|
-
return /* @__PURE__ */ jsx(
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
2448
|
+
function SelectContent({ className, children, side = "bottom", sideOffset = 4, align = "start", alignOffset = 0, alignItemWithTrigger = false, ...props }) {
|
|
2449
|
+
return /* @__PURE__ */ jsx(Select$1.Portal, { children: /* @__PURE__ */ jsx(Select$1.Positioner, {
|
|
2450
|
+
side,
|
|
2451
|
+
sideOffset,
|
|
2452
|
+
align,
|
|
2453
|
+
alignOffset,
|
|
2454
|
+
alignItemWithTrigger,
|
|
2455
|
+
className: "isolate z-50",
|
|
2456
|
+
children: /* @__PURE__ */ jsxs(Select$1.Popup, {
|
|
2457
|
+
"data-slot": "select-content",
|
|
2458
|
+
"data-align-trigger": alignItemWithTrigger,
|
|
2459
|
+
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-md p-1 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),
|
|
2460
|
+
...props,
|
|
2461
|
+
children: [
|
|
2462
|
+
/* @__PURE__ */ jsx(SelectScrollUpButton, {}),
|
|
2463
|
+
/* @__PURE__ */ jsx(Select$1.List, { children }),
|
|
2464
|
+
/* @__PURE__ */ jsx(SelectScrollDownButton, {})
|
|
2465
|
+
]
|
|
2466
|
+
})
|
|
1573
2467
|
}) });
|
|
1574
2468
|
}
|
|
1575
2469
|
function SelectLabel({ className, ...props }) {
|
|
1576
|
-
return /* @__PURE__ */ jsx(
|
|
2470
|
+
return /* @__PURE__ */ jsx(Select$1.GroupLabel, {
|
|
1577
2471
|
"data-slot": "select-label",
|
|
1578
|
-
className: cn("
|
|
2472
|
+
className: cn("p-2 text-xs text-muted-foreground", className),
|
|
1579
2473
|
...props
|
|
1580
2474
|
});
|
|
1581
2475
|
}
|
|
1582
2476
|
function SelectItem({ className, children, ...props }) {
|
|
1583
|
-
return /* @__PURE__ */ jsxs(
|
|
2477
|
+
return /* @__PURE__ */ jsxs(Select$1.Item, {
|
|
1584
2478
|
"data-slot": "select-item",
|
|
1585
|
-
className: cn("
|
|
2479
|
+
className: cn("relative flex w-full cursor-default items-center gap-2 rounded-md p-2 pr-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:cursor-not-allowed 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),
|
|
1586
2480
|
...props,
|
|
1587
|
-
children: [/* @__PURE__ */ jsx(
|
|
1588
|
-
className: "
|
|
1589
|
-
children
|
|
1590
|
-
}), /* @__PURE__ */ jsx(
|
|
2481
|
+
children: [/* @__PURE__ */ jsx(Select$1.ItemText, {
|
|
2482
|
+
className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap",
|
|
2483
|
+
children
|
|
2484
|
+
}), /* @__PURE__ */ jsx(Select$1.ItemIndicator, {
|
|
2485
|
+
"data-slot": "select-item-indicator",
|
|
2486
|
+
render: /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center text-primary" }),
|
|
2487
|
+
children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" })
|
|
2488
|
+
})]
|
|
1591
2489
|
});
|
|
1592
2490
|
}
|
|
1593
2491
|
function SelectSeparator({ className, ...props }) {
|
|
1594
|
-
return /* @__PURE__ */ jsx(
|
|
2492
|
+
return /* @__PURE__ */ jsx(Select$1.Separator, {
|
|
1595
2493
|
"data-slot": "select-separator",
|
|
1596
|
-
className: cn("
|
|
2494
|
+
className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
|
|
1597
2495
|
...props
|
|
1598
2496
|
});
|
|
1599
2497
|
}
|
|
1600
2498
|
function SelectScrollUpButton({ className, ...props }) {
|
|
1601
|
-
return /* @__PURE__ */ jsx(
|
|
2499
|
+
return /* @__PURE__ */ jsx(Select$1.ScrollUpArrow, {
|
|
1602
2500
|
"data-slot": "select-scroll-up-button",
|
|
1603
|
-
className: cn("flex cursor-default items-center justify-center py-1", className),
|
|
2501
|
+
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),
|
|
1604
2502
|
...props,
|
|
1605
|
-
children: /* @__PURE__ */ jsx(
|
|
2503
|
+
children: /* @__PURE__ */ jsx(ChevronUpIcon, {})
|
|
1606
2504
|
});
|
|
1607
2505
|
}
|
|
1608
2506
|
function SelectScrollDownButton({ className, ...props }) {
|
|
1609
|
-
return /* @__PURE__ */ jsx(
|
|
2507
|
+
return /* @__PURE__ */ jsx(Select$1.ScrollDownArrow, {
|
|
1610
2508
|
"data-slot": "select-scroll-down-button",
|
|
1611
|
-
className: cn("flex cursor-default items-center justify-center py-1", className),
|
|
2509
|
+
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),
|
|
1612
2510
|
...props,
|
|
1613
|
-
children: /* @__PURE__ */ jsx(
|
|
2511
|
+
children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
|
|
1614
2512
|
});
|
|
1615
2513
|
}
|
|
1616
2514
|
|
|
1617
2515
|
//#endregion
|
|
1618
2516
|
//#region src/components/sheet.tsx
|
|
1619
2517
|
function Sheet({ ...props }) {
|
|
1620
|
-
return /* @__PURE__ */ jsx(
|
|
2518
|
+
return /* @__PURE__ */ jsx(Dialog$1.Root, {
|
|
1621
2519
|
"data-slot": "sheet",
|
|
1622
2520
|
...props
|
|
1623
2521
|
});
|
|
1624
2522
|
}
|
|
1625
2523
|
function SheetTrigger({ ...props }) {
|
|
1626
|
-
return /* @__PURE__ */ jsx(
|
|
2524
|
+
return /* @__PURE__ */ jsx(Dialog$1.Trigger, {
|
|
1627
2525
|
"data-slot": "sheet-trigger",
|
|
1628
2526
|
...props
|
|
1629
2527
|
});
|
|
1630
2528
|
}
|
|
1631
2529
|
function SheetClose({ ...props }) {
|
|
1632
|
-
return /* @__PURE__ */ jsx(
|
|
2530
|
+
return /* @__PURE__ */ jsx(Dialog$1.Close, {
|
|
1633
2531
|
"data-slot": "sheet-close",
|
|
1634
2532
|
...props
|
|
1635
2533
|
});
|
|
1636
2534
|
}
|
|
1637
2535
|
function SheetPortal({ ...props }) {
|
|
1638
|
-
return /* @__PURE__ */ jsx(
|
|
2536
|
+
return /* @__PURE__ */ jsx(Dialog$1.Portal, {
|
|
1639
2537
|
"data-slot": "sheet-portal",
|
|
1640
2538
|
...props
|
|
1641
2539
|
});
|
|
1642
2540
|
}
|
|
1643
|
-
const SheetOverlay = React$1.forwardRef(({ className, ...props },
|
|
1644
|
-
return /* @__PURE__ */ jsx(
|
|
2541
|
+
const SheetOverlay = React$1.forwardRef(({ className, ...props }, ref) => {
|
|
2542
|
+
return /* @__PURE__ */ jsx(Dialog$1.Backdrop, {
|
|
1645
2543
|
"data-slot": "sheet-overlay",
|
|
1646
|
-
className: cn("
|
|
2544
|
+
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),
|
|
1647
2545
|
...props,
|
|
1648
|
-
ref
|
|
2546
|
+
ref
|
|
1649
2547
|
});
|
|
1650
2548
|
});
|
|
1651
|
-
|
|
2549
|
+
SheetOverlay.displayName = "SheetOverlay";
|
|
2550
|
+
function SheetContent({ className, children, side = "right", showCloseButton = true, container, ...props }) {
|
|
1652
2551
|
return /* @__PURE__ */ jsxs(SheetPortal, {
|
|
1653
2552
|
container,
|
|
1654
|
-
children: [/* @__PURE__ */ jsx(SheetOverlay, {}), /* @__PURE__ */ jsxs(
|
|
2553
|
+
children: [/* @__PURE__ */ jsx(SheetOverlay, {}), /* @__PURE__ */ jsxs(Dialog$1.Popup, {
|
|
1655
2554
|
"data-slot": "sheet-content",
|
|
1656
|
-
|
|
2555
|
+
"data-side": side,
|
|
2556
|
+
className: cn("fixed z-50 flex flex-col gap-4 bg-background bg-clip-padding text-sm 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),
|
|
1657
2557
|
...props,
|
|
1658
|
-
children: [children, /* @__PURE__ */ jsxs(
|
|
1659
|
-
|
|
1660
|
-
|
|
2558
|
+
children: [children, showCloseButton && /* @__PURE__ */ jsxs(Dialog$1.Close, {
|
|
2559
|
+
"data-slot": "sheet-close",
|
|
2560
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
2561
|
+
variant: "ghost",
|
|
2562
|
+
className: "absolute top-4 right-4",
|
|
2563
|
+
size: "icon"
|
|
2564
|
+
}),
|
|
2565
|
+
children: [/* @__PURE__ */ jsx(XIcon, {}), /* @__PURE__ */ jsx("span", {
|
|
1661
2566
|
className: "sr-only",
|
|
1662
2567
|
children: "Close"
|
|
1663
2568
|
})]
|
|
@@ -1680,16 +2585,16 @@ function SheetFooter({ className, ...props }) {
|
|
|
1680
2585
|
});
|
|
1681
2586
|
}
|
|
1682
2587
|
function SheetTitle({ className, ...props }) {
|
|
1683
|
-
return /* @__PURE__ */ jsx(
|
|
2588
|
+
return /* @__PURE__ */ jsx(Dialog$1.Title, {
|
|
1684
2589
|
"data-slot": "sheet-title",
|
|
1685
|
-
className: cn("text-foreground
|
|
2590
|
+
className: cn("font-medium text-foreground", className),
|
|
1686
2591
|
...props
|
|
1687
2592
|
});
|
|
1688
2593
|
}
|
|
1689
2594
|
function SheetDescription({ className, ...props }) {
|
|
1690
|
-
return /* @__PURE__ */ jsx(
|
|
2595
|
+
return /* @__PURE__ */ jsx(Dialog$1.Description, {
|
|
1691
2596
|
"data-slot": "sheet-description",
|
|
1692
|
-
className: cn("text-muted-foreground
|
|
2597
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
1693
2598
|
...props
|
|
1694
2599
|
});
|
|
1695
2600
|
}
|
|
@@ -1699,10 +2604,49 @@ function SheetDescription({ className, ...props }) {
|
|
|
1699
2604
|
function Skeleton({ className, ...props }) {
|
|
1700
2605
|
return /* @__PURE__ */ jsx("div", {
|
|
1701
2606
|
"data-slot": "skeleton",
|
|
1702
|
-
className: cn("
|
|
2607
|
+
className: cn("animate-pulse rounded-md bg-muted", className),
|
|
2608
|
+
...props
|
|
2609
|
+
});
|
|
2610
|
+
}
|
|
2611
|
+
|
|
2612
|
+
//#endregion
|
|
2613
|
+
//#region src/components/tooltip.tsx
|
|
2614
|
+
function TooltipProvider({ delay = 0, ...props }) {
|
|
2615
|
+
return /* @__PURE__ */ jsx(Tooltip$1.Provider, {
|
|
2616
|
+
"data-slot": "tooltip-provider",
|
|
2617
|
+
delay,
|
|
1703
2618
|
...props
|
|
1704
2619
|
});
|
|
1705
2620
|
}
|
|
2621
|
+
function Tooltip({ ...props }) {
|
|
2622
|
+
return /* @__PURE__ */ jsx(Tooltip$1.Root, {
|
|
2623
|
+
"data-slot": "tooltip",
|
|
2624
|
+
...props
|
|
2625
|
+
});
|
|
2626
|
+
}
|
|
2627
|
+
function TooltipTrigger({ ...props }) {
|
|
2628
|
+
return /* @__PURE__ */ jsx(Tooltip$1.Trigger, {
|
|
2629
|
+
"data-slot": "tooltip-trigger",
|
|
2630
|
+
...props
|
|
2631
|
+
});
|
|
2632
|
+
}
|
|
2633
|
+
const TooltipContent = React$1.forwardRef(({ className, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props }, ref) => {
|
|
2634
|
+
return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(Tooltip$1.Positioner, {
|
|
2635
|
+
align,
|
|
2636
|
+
alignOffset,
|
|
2637
|
+
side,
|
|
2638
|
+
sideOffset,
|
|
2639
|
+
className: "isolate z-50",
|
|
2640
|
+
children: /* @__PURE__ */ jsxs(Tooltip$1.Popup, {
|
|
2641
|
+
ref,
|
|
2642
|
+
"data-slot": "tooltip-content",
|
|
2643
|
+
className: cn("z-50 inline-flex w-fit max-w-sm origin-(--transform-origin) items-center gap-2 rounded-md bg-accent-foreground p-2 text-sm font-medium text-primary-foreground 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),
|
|
2644
|
+
...props,
|
|
2645
|
+
children: [children, /* @__PURE__ */ jsx(Tooltip$1.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-accent-foreground fill-accent-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" })]
|
|
2646
|
+
})
|
|
2647
|
+
}) });
|
|
2648
|
+
});
|
|
2649
|
+
TooltipContent.displayName = "TooltipContent";
|
|
1706
2650
|
|
|
1707
2651
|
//#endregion
|
|
1708
2652
|
//#region src/hooks/use-mobile.ts
|
|
@@ -1735,9 +2679,8 @@ function useSidebar() {
|
|
|
1735
2679
|
if (!context) throw new Error("useSidebar must be used within a SidebarProvider.");
|
|
1736
2680
|
return context;
|
|
1737
2681
|
}
|
|
1738
|
-
function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: setOpenProp,
|
|
1739
|
-
const
|
|
1740
|
-
const isMobile = disableMobile ? false : isMobileDevice;
|
|
2682
|
+
function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }) {
|
|
2683
|
+
const isMobile = useIsMobile();
|
|
1741
2684
|
const [openMobile, setOpenMobile] = React$1.useState(false);
|
|
1742
2685
|
const [_open, _setOpen] = React$1.useState(defaultOpen);
|
|
1743
2686
|
const open = openProp ?? _open;
|
|
@@ -1784,27 +2727,24 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
|
|
|
1784
2727
|
]);
|
|
1785
2728
|
return /* @__PURE__ */ jsx(SidebarContext.Provider, {
|
|
1786
2729
|
value: contextValue,
|
|
1787
|
-
children: /* @__PURE__ */ jsx(
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
"
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
...props,
|
|
1798
|
-
children
|
|
1799
|
-
})
|
|
2730
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
2731
|
+
"data-slot": "sidebar-wrapper",
|
|
2732
|
+
style: {
|
|
2733
|
+
"--sidebar-width": SIDEBAR_WIDTH,
|
|
2734
|
+
"--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
|
|
2735
|
+
...style
|
|
2736
|
+
},
|
|
2737
|
+
className: cn("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar", className),
|
|
2738
|
+
...props,
|
|
2739
|
+
children
|
|
1800
2740
|
})
|
|
1801
2741
|
});
|
|
1802
2742
|
}
|
|
1803
|
-
function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas", className, children, ...props }) {
|
|
2743
|
+
function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas", className, children, dir, ...props }) {
|
|
1804
2744
|
const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
|
|
1805
2745
|
if (collapsible === "none") return /* @__PURE__ */ jsx("div", {
|
|
1806
2746
|
"data-slot": "sidebar",
|
|
1807
|
-
className: cn("
|
|
2747
|
+
className: cn("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground", className),
|
|
1808
2748
|
...props,
|
|
1809
2749
|
children
|
|
1810
2750
|
});
|
|
@@ -1813,10 +2753,11 @@ function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas"
|
|
|
1813
2753
|
onOpenChange: setOpenMobile,
|
|
1814
2754
|
...props,
|
|
1815
2755
|
children: /* @__PURE__ */ jsxs(SheetContent, {
|
|
2756
|
+
dir,
|
|
1816
2757
|
"data-sidebar": "sidebar",
|
|
1817
2758
|
"data-slot": "sidebar",
|
|
1818
2759
|
"data-mobile": "true",
|
|
1819
|
-
className: "
|
|
2760
|
+
className: "w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",
|
|
1820
2761
|
style: { "--sidebar-width": SIDEBAR_WIDTH_MOBILE },
|
|
1821
2762
|
side,
|
|
1822
2763
|
children: [/* @__PURE__ */ jsxs(SheetHeader, {
|
|
@@ -1829,7 +2770,7 @@ function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas"
|
|
|
1829
2770
|
})
|
|
1830
2771
|
});
|
|
1831
2772
|
return /* @__PURE__ */ jsxs("div", {
|
|
1832
|
-
className:
|
|
2773
|
+
className: "group peer hidden text-sidebar-foreground md:block",
|
|
1833
2774
|
"data-state": state,
|
|
1834
2775
|
"data-collapsible": state === "collapsed" ? collapsible : "",
|
|
1835
2776
|
"data-variant": variant,
|
|
@@ -1840,12 +2781,13 @@ function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas"
|
|
|
1840
2781
|
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)")
|
|
1841
2782
|
}), /* @__PURE__ */ jsx("div", {
|
|
1842
2783
|
"data-slot": "sidebar-container",
|
|
1843
|
-
|
|
2784
|
+
"data-side": side,
|
|
2785
|
+
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),
|
|
1844
2786
|
...props,
|
|
1845
2787
|
children: /* @__PURE__ */ jsx("div", {
|
|
1846
2788
|
"data-sidebar": "sidebar",
|
|
1847
2789
|
"data-slot": "sidebar-inner",
|
|
1848
|
-
className: "bg-sidebar group-data-[variant=floating]:
|
|
2790
|
+
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",
|
|
1849
2791
|
children
|
|
1850
2792
|
})
|
|
1851
2793
|
})]
|
|
@@ -1856,9 +2798,9 @@ function SidebarTrigger({ className, onClick, ...props }) {
|
|
|
1856
2798
|
return /* @__PURE__ */ jsxs(Button, {
|
|
1857
2799
|
"data-sidebar": "trigger",
|
|
1858
2800
|
"data-slot": "sidebar-trigger",
|
|
1859
|
-
variant: "
|
|
1860
|
-
size: "icon
|
|
1861
|
-
className,
|
|
2801
|
+
variant: "ghost",
|
|
2802
|
+
size: "icon",
|
|
2803
|
+
className: cn(className),
|
|
1862
2804
|
onClick: (event) => {
|
|
1863
2805
|
onClick?.(event);
|
|
1864
2806
|
toggleSidebar();
|
|
@@ -1871,7 +2813,7 @@ function SidebarTrigger({ className, onClick, ...props }) {
|
|
|
1871
2813
|
});
|
|
1872
2814
|
}
|
|
1873
2815
|
function SidebarRail({ className, ...props }) {
|
|
1874
|
-
const {
|
|
2816
|
+
const { toggleSidebar } = useSidebar();
|
|
1875
2817
|
return /* @__PURE__ */ jsx("button", {
|
|
1876
2818
|
"data-sidebar": "rail",
|
|
1877
2819
|
"data-slot": "sidebar-rail",
|
|
@@ -1879,15 +2821,14 @@ function SidebarRail({ className, ...props }) {
|
|
|
1879
2821
|
tabIndex: -1,
|
|
1880
2822
|
onClick: toggleSidebar,
|
|
1881
2823
|
title: "Toggle Sidebar",
|
|
1882
|
-
className: cn("
|
|
2824
|
+
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),
|
|
1883
2825
|
...props
|
|
1884
2826
|
});
|
|
1885
2827
|
}
|
|
1886
2828
|
function SidebarInset({ className, ...props }) {
|
|
1887
|
-
const { isMobile } = useSidebar();
|
|
1888
2829
|
return /* @__PURE__ */ jsx("main", {
|
|
1889
2830
|
"data-slot": "sidebar-inset",
|
|
1890
|
-
className: cn("
|
|
2831
|
+
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),
|
|
1891
2832
|
...props
|
|
1892
2833
|
});
|
|
1893
2834
|
}
|
|
@@ -1895,7 +2836,7 @@ function SidebarInput({ className, ...props }) {
|
|
|
1895
2836
|
return /* @__PURE__ */ jsx(Input, {
|
|
1896
2837
|
"data-slot": "sidebar-input",
|
|
1897
2838
|
"data-sidebar": "input",
|
|
1898
|
-
className: cn("
|
|
2839
|
+
className: cn("h-8 w-full bg-background shadow-none", className),
|
|
1899
2840
|
...props
|
|
1900
2841
|
});
|
|
1901
2842
|
}
|
|
@@ -1919,7 +2860,7 @@ function SidebarSeparator({ className, ...props }) {
|
|
|
1919
2860
|
return /* @__PURE__ */ jsx(Separator, {
|
|
1920
2861
|
"data-slot": "sidebar-separator",
|
|
1921
2862
|
"data-sidebar": "separator",
|
|
1922
|
-
className: cn("
|
|
2863
|
+
className: cn("mx-2 w-auto bg-sidebar-border", className),
|
|
1923
2864
|
...props
|
|
1924
2865
|
});
|
|
1925
2866
|
}
|
|
@@ -1927,7 +2868,7 @@ function SidebarContent({ className, ...props }) {
|
|
|
1927
2868
|
return /* @__PURE__ */ jsx("div", {
|
|
1928
2869
|
"data-slot": "sidebar-content",
|
|
1929
2870
|
"data-sidebar": "content",
|
|
1930
|
-
className: cn("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden", className),
|
|
2871
|
+
className: cn("no-scrollbar flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden", className),
|
|
1931
2872
|
...props
|
|
1932
2873
|
});
|
|
1933
2874
|
}
|
|
@@ -1939,22 +2880,26 @@ function SidebarGroup({ className, ...props }) {
|
|
|
1939
2880
|
...props
|
|
1940
2881
|
});
|
|
1941
2882
|
}
|
|
1942
|
-
function SidebarGroupLabel({ className,
|
|
1943
|
-
return
|
|
1944
|
-
|
|
1945
|
-
"
|
|
1946
|
-
|
|
1947
|
-
|
|
2883
|
+
function SidebarGroupLabel({ className, render, ...props }) {
|
|
2884
|
+
return useRender({
|
|
2885
|
+
defaultTagName: "div",
|
|
2886
|
+
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),
|
|
2887
|
+
render,
|
|
2888
|
+
state: {
|
|
2889
|
+
slot: "sidebar-group-label",
|
|
2890
|
+
sidebar: "group-label"
|
|
2891
|
+
}
|
|
1948
2892
|
});
|
|
1949
2893
|
}
|
|
1950
|
-
function SidebarGroupAction({ className,
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
2894
|
+
function SidebarGroupAction({ className, render, ...props }) {
|
|
2895
|
+
return useRender({
|
|
2896
|
+
defaultTagName: "button",
|
|
2897
|
+
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),
|
|
2898
|
+
render,
|
|
2899
|
+
state: {
|
|
2900
|
+
slot: "sidebar-group-action",
|
|
2901
|
+
sidebar: "group-action"
|
|
2902
|
+
}
|
|
1958
2903
|
});
|
|
1959
2904
|
}
|
|
1960
2905
|
function SidebarGroupContent({ className, ...props }) {
|
|
@@ -1981,7 +2926,7 @@ function SidebarMenuItem({ className, ...props }) {
|
|
|
1981
2926
|
...props
|
|
1982
2927
|
});
|
|
1983
2928
|
}
|
|
1984
|
-
const sidebarMenuButtonVariants = cva("peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm
|
|
2929
|
+
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", {
|
|
1985
2930
|
variants: {
|
|
1986
2931
|
variant: {
|
|
1987
2932
|
default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
|
|
@@ -1998,44 +2943,47 @@ const sidebarMenuButtonVariants = cva("peer/menu-button flex w-full items-center
|
|
|
1998
2943
|
size: "default"
|
|
1999
2944
|
}
|
|
2000
2945
|
});
|
|
2001
|
-
const SidebarMenuButton = React$1.forwardRef(({
|
|
2002
|
-
const Comp = asChild ? Slot$1 : "button";
|
|
2946
|
+
const SidebarMenuButton = React$1.forwardRef(({ render, isActive = false, variant = "default", size = "default", tooltip, className, ...props }, ref) => {
|
|
2003
2947
|
const { isMobile, state } = useSidebar();
|
|
2004
|
-
const
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2948
|
+
const comp = useRender({
|
|
2949
|
+
defaultTagName: "button",
|
|
2950
|
+
props: mergeProps({
|
|
2951
|
+
className: cn(sidebarMenuButtonVariants({
|
|
2952
|
+
variant,
|
|
2953
|
+
size
|
|
2954
|
+
}), className),
|
|
2955
|
+
ref
|
|
2956
|
+
}, props),
|
|
2957
|
+
render: !tooltip ? render : /* @__PURE__ */ jsx(TooltipTrigger, { render }),
|
|
2958
|
+
state: {
|
|
2959
|
+
slot: "sidebar-menu-button",
|
|
2960
|
+
sidebar: "menu-button",
|
|
2961
|
+
size,
|
|
2962
|
+
active: isActive
|
|
2963
|
+
}
|
|
2015
2964
|
});
|
|
2016
|
-
if (!tooltip) return
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
return /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
|
|
2020
|
-
asChild: true,
|
|
2021
|
-
children: button
|
|
2022
|
-
}), /* @__PURE__ */ jsx(TooltipContent, {
|
|
2965
|
+
if (!tooltip) return comp;
|
|
2966
|
+
if (typeof tooltip === "string") tooltip = { children: tooltip };
|
|
2967
|
+
return /* @__PURE__ */ jsxs(Tooltip, { children: [comp, /* @__PURE__ */ jsx(TooltipContent, {
|
|
2023
2968
|
side: "right",
|
|
2024
2969
|
align: "center",
|
|
2025
2970
|
hidden: state !== "collapsed" || isMobile,
|
|
2026
|
-
...
|
|
2971
|
+
...tooltip
|
|
2027
2972
|
})] });
|
|
2028
2973
|
});
|
|
2029
2974
|
SidebarMenuButton.displayName = "SidebarMenuButton";
|
|
2030
|
-
const SidebarMenuAction = React$1.forwardRef(({ className,
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2975
|
+
const SidebarMenuAction = React$1.forwardRef(({ className, render, showOnHover = false, ...props }, ref) => {
|
|
2976
|
+
return useRender({
|
|
2977
|
+
defaultTagName: "button",
|
|
2978
|
+
props: mergeProps({
|
|
2979
|
+
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),
|
|
2980
|
+
ref
|
|
2981
|
+
}, props),
|
|
2982
|
+
render,
|
|
2983
|
+
state: {
|
|
2984
|
+
slot: "sidebar-menu-action",
|
|
2985
|
+
sidebar: "menu-action"
|
|
2986
|
+
}
|
|
2039
2987
|
});
|
|
2040
2988
|
});
|
|
2041
2989
|
SidebarMenuAction.displayName = "SidebarMenuAction";
|
|
@@ -2043,14 +2991,15 @@ function SidebarMenuBadge({ className, ...props }) {
|
|
|
2043
2991
|
return /* @__PURE__ */ jsx("div", {
|
|
2044
2992
|
"data-slot": "sidebar-menu-badge",
|
|
2045
2993
|
"data-sidebar": "menu-badge",
|
|
2046
|
-
className: cn("
|
|
2994
|
+
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),
|
|
2047
2995
|
...props
|
|
2048
2996
|
});
|
|
2049
2997
|
}
|
|
2050
|
-
function SidebarMenuSkeleton({ className, showIcon = false, ...props }) {
|
|
2051
|
-
const
|
|
2998
|
+
function SidebarMenuSkeleton({ className, showIcon = false, width: widthProp, ...props }) {
|
|
2999
|
+
const [fallbackWidth] = React$1.useState(() => {
|
|
2052
3000
|
return `${Math.floor(Math.random() * 40) + 50}%`;
|
|
2053
|
-
}
|
|
3001
|
+
});
|
|
3002
|
+
const width = widthProp ?? fallbackWidth;
|
|
2054
3003
|
return /* @__PURE__ */ jsxs("div", {
|
|
2055
3004
|
"data-slot": "sidebar-menu-skeleton",
|
|
2056
3005
|
"data-sidebar": "menu-skeleton",
|
|
@@ -2070,7 +3019,7 @@ function SidebarMenuSub({ className, ...props }) {
|
|
|
2070
3019
|
return /* @__PURE__ */ jsx("ul", {
|
|
2071
3020
|
"data-slot": "sidebar-menu-sub",
|
|
2072
3021
|
"data-sidebar": "menu-sub",
|
|
2073
|
-
className: cn("
|
|
3022
|
+
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),
|
|
2074
3023
|
...props
|
|
2075
3024
|
});
|
|
2076
3025
|
}
|
|
@@ -2082,45 +3031,57 @@ function SidebarMenuSubItem({ className, ...props }) {
|
|
|
2082
3031
|
...props
|
|
2083
3032
|
});
|
|
2084
3033
|
}
|
|
2085
|
-
function SidebarMenuSubButton({
|
|
2086
|
-
return
|
|
2087
|
-
|
|
2088
|
-
"data-sidebar
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
3034
|
+
function SidebarMenuSubButton({ render, size = "md", isActive = false, className, ...props }) {
|
|
3035
|
+
return useRender({
|
|
3036
|
+
defaultTagName: "a",
|
|
3037
|
+
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),
|
|
3038
|
+
render,
|
|
3039
|
+
state: {
|
|
3040
|
+
slot: "sidebar-menu-sub-button",
|
|
3041
|
+
sidebar: "menu-sub-button",
|
|
3042
|
+
size,
|
|
3043
|
+
active: isActive
|
|
3044
|
+
}
|
|
2093
3045
|
});
|
|
2094
3046
|
}
|
|
2095
3047
|
|
|
2096
3048
|
//#endregion
|
|
2097
3049
|
//#region src/components/slider.tsx
|
|
2098
|
-
function Slider({ className, defaultValue, value, min = 0, max = 100, ...props }) {
|
|
3050
|
+
function Slider({ className, defaultValue, value, min = 0, max = 100, orientation = "horizontal", ...props }) {
|
|
2099
3051
|
const _values = React$1.useMemo(() => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max], [
|
|
2100
3052
|
value,
|
|
2101
3053
|
defaultValue,
|
|
2102
3054
|
min,
|
|
2103
3055
|
max
|
|
2104
3056
|
]);
|
|
2105
|
-
return /* @__PURE__ */
|
|
3057
|
+
return /* @__PURE__ */ jsx(Slider$1.Root, {
|
|
3058
|
+
className: cn("data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full", className),
|
|
2106
3059
|
"data-slot": "slider",
|
|
3060
|
+
"data-orientation": orientation,
|
|
2107
3061
|
defaultValue,
|
|
2108
3062
|
value,
|
|
2109
3063
|
min,
|
|
2110
3064
|
max,
|
|
2111
|
-
|
|
3065
|
+
orientation,
|
|
3066
|
+
thumbAlignment: "edge",
|
|
2112
3067
|
...props,
|
|
2113
|
-
children:
|
|
2114
|
-
"data-
|
|
2115
|
-
className:
|
|
2116
|
-
children: /* @__PURE__ */ jsx(
|
|
2117
|
-
"data-slot": "slider-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
3068
|
+
children: /* @__PURE__ */ jsxs(Slider$1.Control, {
|
|
3069
|
+
"data-orientation": orientation,
|
|
3070
|
+
className: "relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",
|
|
3071
|
+
children: [/* @__PURE__ */ jsx(Slider$1.Track, {
|
|
3072
|
+
"data-slot": "slider-track",
|
|
3073
|
+
"data-orientation": orientation,
|
|
3074
|
+
className: "relative grow overflow-hidden rounded-full bg-muted select-none data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5",
|
|
3075
|
+
children: /* @__PURE__ */ jsx(Slider$1.Indicator, {
|
|
3076
|
+
"data-slot": "slider-range",
|
|
3077
|
+
"data-orientation": orientation,
|
|
3078
|
+
className: "bg-primary select-none data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full"
|
|
3079
|
+
})
|
|
3080
|
+
}), Array.from({ length: _values.length }, (_, index) => /* @__PURE__ */ jsx(Slider$1.Thumb, {
|
|
3081
|
+
"data-slot": "slider-thumb",
|
|
3082
|
+
className: "block size-4 shrink-0 rounded-full border border-ring bg-background shadow-sm ring-ring/50 transition-[color,box-shadow] select-none hover:ring-3 focus-visible:ring-3 focus-visible:outline-hidden data-disabled:pointer-events-none"
|
|
3083
|
+
}, index))]
|
|
3084
|
+
})
|
|
2124
3085
|
});
|
|
2125
3086
|
}
|
|
2126
3087
|
|
|
@@ -2132,12 +3093,22 @@ const Toaster = ({ ...props }) => {
|
|
|
2132
3093
|
theme,
|
|
2133
3094
|
className: "toaster group",
|
|
2134
3095
|
icons: {
|
|
2135
|
-
success: /* @__PURE__ */ jsx(
|
|
3096
|
+
success: /* @__PURE__ */ jsx(CircleCheck, { className: "size-4" }),
|
|
2136
3097
|
info: /* @__PURE__ */ jsx(Info, { className: "size-4" }),
|
|
2137
3098
|
warning: /* @__PURE__ */ jsx(TriangleAlertIcon, { className: "size-4" }),
|
|
2138
|
-
error: /* @__PURE__ */ jsx(
|
|
3099
|
+
error: /* @__PURE__ */ jsx(CircleAlertIcon, { className: "size-4" }),
|
|
2139
3100
|
loading: /* @__PURE__ */ jsx(Loader2Icon, { className: "size-4 animate-spin" })
|
|
2140
3101
|
},
|
|
3102
|
+
toastOptions: { classNames: {
|
|
3103
|
+
toast: "group toast !rounded-3xl !border !px-4 !py-4 !shadow-[0px_4px_12px_-1px_rgba(0,0,0,0.1)] !gap-2 !items-center",
|
|
3104
|
+
title: "!font-medium !text-sm",
|
|
3105
|
+
description: "!text-sm !text-muted-foreground",
|
|
3106
|
+
default: "",
|
|
3107
|
+
info: "!bg-info-background !border-info/35 [&_[data-icon]>svg]:!text-info",
|
|
3108
|
+
success: "!bg-success-background !border-success/35 [&_[data-icon]>svg]:!text-success",
|
|
3109
|
+
error: "!bg-destructive-background !border-destructive/35 [&_[data-icon]>svg]:!text-destructive",
|
|
3110
|
+
warning: "!bg-warning-background !border-warning/35 [&_[data-icon]>svg]:!text-warning"
|
|
3111
|
+
} },
|
|
2141
3112
|
style: {
|
|
2142
3113
|
"--normal-bg": "var(--popover)",
|
|
2143
3114
|
"--normal-text": "var(--popover-foreground)",
|
|
@@ -2184,44 +3155,45 @@ function Spinner({ className, size, ...props }) {
|
|
|
2184
3155
|
//#endregion
|
|
2185
3156
|
//#region src/components/switch.tsx
|
|
2186
3157
|
function Switch({ className, ...props }) {
|
|
2187
|
-
return /* @__PURE__ */ jsx(
|
|
3158
|
+
return /* @__PURE__ */ jsx(Switch$1.Root, {
|
|
2188
3159
|
"data-slot": "switch",
|
|
2189
|
-
className: cn("peer
|
|
3160
|
+
className: cn("peer relative inline-flex h-6 w-10 shrink-0 items-center rounded-full border border-transparent p-1 transition-all outline-none active:opacity-60 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 focus-visible:aria-invalid:ring-3 focus-visible:aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:focus-visible:aria-invalid:ring-destructive/40 data-checked:bg-primary aria-invalid:data-checked:bg-destructive data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50", className),
|
|
2190
3161
|
...props,
|
|
2191
|
-
children: /* @__PURE__ */ jsx(
|
|
3162
|
+
children: /* @__PURE__ */ jsx(Switch$1.Thumb, {
|
|
2192
3163
|
"data-slot": "switch-thumb",
|
|
2193
|
-
className:
|
|
3164
|
+
className: "pointer-events-none block size-4 rounded-full bg-background ring-0 transition-transform data-unchecked:translate-x-0 data-checked:translate-x-4 dark:data-checked:bg-primary-foreground dark:data-unchecked:bg-foreground"
|
|
2194
3165
|
})
|
|
2195
3166
|
});
|
|
2196
3167
|
}
|
|
2197
3168
|
|
|
2198
3169
|
//#endregion
|
|
2199
3170
|
//#region src/components/tabs.tsx
|
|
2200
|
-
function Tabs({ className, ...props }) {
|
|
2201
|
-
return /* @__PURE__ */ jsx(
|
|
3171
|
+
function Tabs({ className, orientation = "horizontal", ...props }) {
|
|
3172
|
+
return /* @__PURE__ */ jsx(Tabs$1.Root, {
|
|
2202
3173
|
"data-slot": "tabs",
|
|
2203
|
-
|
|
3174
|
+
"data-orientation": orientation,
|
|
3175
|
+
className: cn("group/tabs flex gap-2 data-[orientation=horizontal]:flex-col", className),
|
|
2204
3176
|
...props
|
|
2205
3177
|
});
|
|
2206
3178
|
}
|
|
2207
3179
|
function TabsList({ className, ...props }) {
|
|
2208
|
-
return /* @__PURE__ */ jsx(
|
|
3180
|
+
return /* @__PURE__ */ jsx(Tabs$1.List, {
|
|
2209
3181
|
"data-slot": "tabs-list",
|
|
2210
|
-
className: cn("
|
|
3182
|
+
className: cn("group/tabs-list inline-flex w-fit items-center justify-center gap-4 text-muted-foreground group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col", className),
|
|
2211
3183
|
...props
|
|
2212
3184
|
});
|
|
2213
3185
|
}
|
|
2214
3186
|
function TabsTrigger({ className, ...props }) {
|
|
2215
|
-
return /* @__PURE__ */ jsx(
|
|
3187
|
+
return /* @__PURE__ */ jsx(Tabs$1.Tab, {
|
|
2216
3188
|
"data-slot": "tabs-trigger",
|
|
2217
|
-
className: cn("
|
|
3189
|
+
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-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-3 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 data-active:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "after:absolute after:rounded-full after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-1.5 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0.5 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 data-active:after:opacity-100", className),
|
|
2218
3190
|
...props
|
|
2219
3191
|
});
|
|
2220
3192
|
}
|
|
2221
3193
|
function TabsContent({ className, ...props }) {
|
|
2222
|
-
return /* @__PURE__ */ jsx(
|
|
3194
|
+
return /* @__PURE__ */ jsx(Tabs$1.Panel, {
|
|
2223
3195
|
"data-slot": "tabs-content",
|
|
2224
|
-
className: cn("flex-1 outline-none", className),
|
|
3196
|
+
className: cn("flex-1 text-sm outline-none", className),
|
|
2225
3197
|
...props
|
|
2226
3198
|
});
|
|
2227
3199
|
}
|
|
@@ -2237,7 +3209,7 @@ function TabBar({ tabs, activeTab, onTabChange, renderTab, className }) {
|
|
|
2237
3209
|
className: "w-full h-auto flex border-t border-border bg-card p-0 rounded-none shadow-none",
|
|
2238
3210
|
children: tabs.map((tab) => /* @__PURE__ */ jsx(TabsTrigger, {
|
|
2239
3211
|
value: tab.value,
|
|
2240
|
-
className: ["flex flex-col items-center flex-1 py-2 px-0 transition-colors border-b-2 border-b-transparent rounded-none bg-transparent data-
|
|
3212
|
+
className: ["flex flex-col items-center flex-1 py-2 px-0 transition-colors border-b-2 border-b-transparent rounded-none bg-transparent data-active:shadow-none! dark:data-active:bg-transparent! dark:data-active:border-none!", activeTab === tab.value ? "text-foreground font-semibold border-b-primary" : "text-muted-foreground font-normal"].join(" "),
|
|
2241
3213
|
children: renderTab ? renderTab(tab, activeTab === tab.value) : /* @__PURE__ */ jsxs(Fragment, { children: [tab.renderIcon?.(), /* @__PURE__ */ jsx("span", {
|
|
2242
3214
|
className: "text-xs",
|
|
2243
3215
|
children: tab.label
|
|
@@ -2249,16 +3221,16 @@ function TabBar({ tabs, activeTab, onTabChange, renderTab, className }) {
|
|
|
2249
3221
|
|
|
2250
3222
|
//#endregion
|
|
2251
3223
|
//#region src/components/toggle.tsx
|
|
2252
|
-
const toggleVariants = cva("inline-flex items-center justify-center gap-
|
|
3224
|
+
const toggleVariants = cva("group/toggle inline-flex items-center justify-center gap-1 rounded-md bg-transparent text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 data-disabled:pointer-events-none data-disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
|
|
2253
3225
|
variants: {
|
|
2254
3226
|
variant: {
|
|
2255
|
-
default: "bg-
|
|
2256
|
-
outline: "border border-input
|
|
3227
|
+
default: "data-pressed:bg-secondary data-pressed:text-secondary-foreground data-pressed:hover:bg-secondary data-pressed:hover:text-secondary-foreground",
|
|
3228
|
+
outline: "border border-input data-pressed:bg-muted"
|
|
2257
3229
|
},
|
|
2258
3230
|
size: {
|
|
2259
|
-
default: "h-
|
|
2260
|
-
sm: "h-
|
|
2261
|
-
lg: "h-10 px-2.5
|
|
3231
|
+
default: "h-8 min-w-8 px-2 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",
|
|
3232
|
+
sm: "h-6 min-w-6 px-1.5 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 [&_svg:not([class*='size-'])]:size-3.5",
|
|
3233
|
+
lg: "h-10 min-w-10 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2"
|
|
2262
3234
|
}
|
|
2263
3235
|
},
|
|
2264
3236
|
defaultVariants: {
|
|
@@ -2266,54 +3238,65 @@ const toggleVariants = cva("inline-flex items-center justify-center gap-2 rounde
|
|
|
2266
3238
|
size: "default"
|
|
2267
3239
|
}
|
|
2268
3240
|
});
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
})
|
|
2279
|
-
|
|
3241
|
+
function Toggle({ className, variant = "default", size = "default", ...props }) {
|
|
3242
|
+
return /* @__PURE__ */ jsx(Toggle$1, {
|
|
3243
|
+
"data-slot": "toggle",
|
|
3244
|
+
className: cn(toggleVariants({
|
|
3245
|
+
variant,
|
|
3246
|
+
size,
|
|
3247
|
+
className
|
|
3248
|
+
})),
|
|
3249
|
+
...props
|
|
3250
|
+
});
|
|
3251
|
+
}
|
|
2280
3252
|
|
|
2281
3253
|
//#endregion
|
|
2282
3254
|
//#region src/components/toggle-group.tsx
|
|
2283
3255
|
const ToggleGroupContext = React$1.createContext({
|
|
2284
3256
|
size: "default",
|
|
2285
|
-
variant: "default"
|
|
3257
|
+
variant: "default",
|
|
3258
|
+
spacing: 0,
|
|
3259
|
+
orientation: "horizontal",
|
|
3260
|
+
block: false
|
|
2286
3261
|
});
|
|
2287
|
-
function ToggleGroup({ className, variant, size, children, ...props }) {
|
|
2288
|
-
return /* @__PURE__ */ jsx(
|
|
3262
|
+
function ToggleGroup({ className, variant, size, spacing = 0, orientation = "horizontal", block = false, children, ...props }) {
|
|
3263
|
+
return /* @__PURE__ */ jsx(ToggleGroup$1, {
|
|
2289
3264
|
"data-slot": "toggle-group",
|
|
2290
3265
|
"data-variant": variant,
|
|
2291
3266
|
"data-size": size,
|
|
2292
|
-
|
|
3267
|
+
"data-spacing": spacing,
|
|
3268
|
+
"data-orientation": orientation,
|
|
3269
|
+
"data-block": block,
|
|
3270
|
+
style: { "--gap": spacing },
|
|
3271
|
+
className: cn("group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-md data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch data-[block=true]:w-full", className),
|
|
2293
3272
|
...props,
|
|
2294
3273
|
children: /* @__PURE__ */ jsx(ToggleGroupContext.Provider, {
|
|
2295
3274
|
value: {
|
|
2296
3275
|
variant,
|
|
2297
|
-
size
|
|
3276
|
+
size,
|
|
3277
|
+
spacing,
|
|
3278
|
+
orientation,
|
|
3279
|
+
block
|
|
2298
3280
|
},
|
|
2299
3281
|
children
|
|
2300
3282
|
})
|
|
2301
3283
|
});
|
|
2302
3284
|
}
|
|
2303
|
-
function ToggleGroupItem({ className, children, variant, size, ...props }) {
|
|
3285
|
+
function ToggleGroupItem({ className, children, variant = "default", size = "default", ...props }) {
|
|
2304
3286
|
const context = React$1.useContext(ToggleGroupContext);
|
|
2305
|
-
return /* @__PURE__ */ jsx(
|
|
3287
|
+
return /* @__PURE__ */ jsx(Toggle$1, {
|
|
2306
3288
|
"data-slot": "toggle-group-item",
|
|
2307
3289
|
"data-variant": context.variant || variant,
|
|
2308
3290
|
"data-size": context.size || size,
|
|
2309
|
-
|
|
3291
|
+
"data-spacing": context.spacing,
|
|
3292
|
+
className: cn("shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 group-data-[spacing=0]/toggle-group:shadow-none 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-[orientation=horizontal]/toggle-group:data-[spacing=0]:first:rounded-l-md group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:last:rounded-r-md group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:last:rounded-b-md group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:border-l-0 group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:border-t-0 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:first:border-l group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:first:border-t group-data-[block=true]/toggle-group:flex-1", toggleVariants({
|
|
2310
3293
|
variant: context.variant || variant,
|
|
2311
3294
|
size: context.size || size
|
|
2312
|
-
}),
|
|
3295
|
+
}), className),
|
|
2313
3296
|
...props,
|
|
2314
3297
|
children
|
|
2315
3298
|
});
|
|
2316
3299
|
}
|
|
2317
3300
|
|
|
2318
3301
|
//#endregion
|
|
2319
|
-
export { Alert, AlertAction, AlertDescription, AlertTitle, Avatar, AvatarFallback, AvatarImage, Badge, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CountryFlag, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader,
|
|
3302
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertAction as BannerAction, AlertDescription, AlertDescription as BannerDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AlertTitle as BannerTitle, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, BadgeGroup, BadgeGroupCount, Banner, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, 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, CounterBadge, CountryFlag, DataTable, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerBackdrop, DrawerBar, DrawerClose, DrawerContent, DrawerCreateHandle, DrawerDescription, DrawerFooter, DrawerHeader, DrawerMenu, DrawerMenuCheckboxItem, DrawerMenuGroup, DrawerMenuGroupLabel, DrawerMenuItem, DrawerMenuRadioGroup, DrawerMenuRadioItem, DrawerMenuSeparator, DrawerMenuTrigger, DrawerPanel, DrawerPopup, DrawerPortal, DrawerPrimitive, DrawerSwipeArea, DrawerTitle, DrawerTrigger, DrawerViewport, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmojiPicker, EmojiPickerCategories, EmojiPickerContent, EmojiPickerTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Label, List, ListCol, ListRow, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, RadioGroup, RadioGroupItem, ScrollArea, ScrollAreaPrimitive, 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, Slot, Spinner, Switch, TabBar, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeProvider, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, alertVariants, badgeVariants, bannerVariants, buttonGroupVariants, buttonVariants, cn, counterBadgeVariants, selectTriggerVariants, spinnerVariants, toast, toggleVariants, useComboboxAnchor, useSidebar, useTheme };
|