@northslopetech/altitude-ui 3.0.0 → 3.2.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/dist/index.d.mts +450 -11
- package/dist/index.d.ts +450 -11
- package/dist/index.js +2528 -815
- package/dist/index.mjs +2476 -816
- package/package.json +5 -3
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/components/ui/alert.tsx
|
|
2
|
-
import * as
|
|
3
|
-
import { cva as
|
|
2
|
+
import * as React2 from "react";
|
|
3
|
+
import { cva as cva3 } from "class-variance-authority";
|
|
4
4
|
|
|
5
5
|
// src/lib/utils.ts
|
|
6
6
|
import { clsx } from "clsx";
|
|
@@ -70,124 +70,6 @@ function cn(...inputs) {
|
|
|
70
70
|
return twMerge(clsx(inputs));
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
// src/components/ui/alert.tsx
|
|
74
|
-
import { jsx } from "react/jsx-runtime";
|
|
75
|
-
var alertVariants = cva2(
|
|
76
|
-
"relative flex flex-wrap w-full items-center data-[multiline]:items-start gap-4 rounded-md border px-4 py-3 [&>[data-slot=alert-body]>svg]:size-4 [&>[data-slot=alert-body]>svg]:shrink-0",
|
|
77
|
-
{
|
|
78
|
-
variants: {
|
|
79
|
-
variant: {
|
|
80
|
-
default: "surface-default border-default [&>[data-slot=alert-body]>svg]:text-default",
|
|
81
|
-
info: "surface-info border-info [&>[data-slot=alert-body]>svg]:text-info",
|
|
82
|
-
success: "surface-success border-success [&>[data-slot=alert-body]>svg]:text-success",
|
|
83
|
-
warning: "surface-warning border-warning [&>[data-slot=alert-body]>svg]:text-warning",
|
|
84
|
-
error: "surface-error border-error [&>[data-slot=alert-body]>svg]:text-error"
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
defaultVariants: {
|
|
88
|
-
variant: "default"
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
);
|
|
92
|
-
function Alert({ className, variant, ref, ...props }) {
|
|
93
|
-
return /* @__PURE__ */ jsx(
|
|
94
|
-
"div",
|
|
95
|
-
{
|
|
96
|
-
ref,
|
|
97
|
-
"data-slot": "alert",
|
|
98
|
-
role: variant === "warning" || variant === "error" ? "alert" : "status",
|
|
99
|
-
className: cn(alertVariants({ variant }), className),
|
|
100
|
-
...props
|
|
101
|
-
}
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
function AlertBody({ className, ref, ...props }) {
|
|
105
|
-
return /* @__PURE__ */ jsx(
|
|
106
|
-
"div",
|
|
107
|
-
{
|
|
108
|
-
ref,
|
|
109
|
-
"data-slot": "alert-body",
|
|
110
|
-
className: cn(
|
|
111
|
-
"grid flex-1 min-w-0 grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 items-start [&>svg]:col-start-1 [&>svg]:row-start-1 [&>svg]:mt-0.5",
|
|
112
|
-
className
|
|
113
|
-
),
|
|
114
|
-
...props
|
|
115
|
-
}
|
|
116
|
-
);
|
|
117
|
-
}
|
|
118
|
-
function AlertTitle({ className, ref, ...props }) {
|
|
119
|
-
return /* @__PURE__ */ jsx(
|
|
120
|
-
"p",
|
|
121
|
-
{
|
|
122
|
-
ref,
|
|
123
|
-
"data-slot": "alert-title",
|
|
124
|
-
className: cn(
|
|
125
|
-
"col-start-2 row-start-1 type-body-sm-medium text-default",
|
|
126
|
-
className
|
|
127
|
-
),
|
|
128
|
-
...props
|
|
129
|
-
}
|
|
130
|
-
);
|
|
131
|
-
}
|
|
132
|
-
function AlertDescription({
|
|
133
|
-
className,
|
|
134
|
-
ref: externalRef,
|
|
135
|
-
...props
|
|
136
|
-
}) {
|
|
137
|
-
const localRef = React.useRef(null);
|
|
138
|
-
React.useLayoutEffect(() => {
|
|
139
|
-
const el = localRef.current;
|
|
140
|
-
if (!el) return;
|
|
141
|
-
const alert = el.closest("[data-slot=alert]");
|
|
142
|
-
if (!alert) return;
|
|
143
|
-
const update = () => {
|
|
144
|
-
const lineHeight = parseFloat(getComputedStyle(el).lineHeight);
|
|
145
|
-
alert.toggleAttribute(
|
|
146
|
-
"data-multiline",
|
|
147
|
-
el.clientHeight > lineHeight * 1.5
|
|
148
|
-
);
|
|
149
|
-
};
|
|
150
|
-
update();
|
|
151
|
-
const resizeObserver = new ResizeObserver(update);
|
|
152
|
-
resizeObserver.observe(el);
|
|
153
|
-
return () => {
|
|
154
|
-
resizeObserver.disconnect();
|
|
155
|
-
alert.removeAttribute("data-multiline");
|
|
156
|
-
};
|
|
157
|
-
}, []);
|
|
158
|
-
return /* @__PURE__ */ jsx(
|
|
159
|
-
"p",
|
|
160
|
-
{
|
|
161
|
-
ref: (node) => {
|
|
162
|
-
localRef.current = node;
|
|
163
|
-
if (typeof externalRef === "function") externalRef(node);
|
|
164
|
-
else if (externalRef)
|
|
165
|
-
externalRef.current = node;
|
|
166
|
-
},
|
|
167
|
-
"data-slot": "alert-description",
|
|
168
|
-
className: cn(
|
|
169
|
-
"col-start-2 type-body-sm-regular text-secondary",
|
|
170
|
-
className
|
|
171
|
-
),
|
|
172
|
-
...props
|
|
173
|
-
}
|
|
174
|
-
);
|
|
175
|
-
}
|
|
176
|
-
function AlertActions({ className, ref, ...props }) {
|
|
177
|
-
return /* @__PURE__ */ jsx(
|
|
178
|
-
"div",
|
|
179
|
-
{
|
|
180
|
-
ref,
|
|
181
|
-
"data-slot": "alert-actions",
|
|
182
|
-
className: cn("shrink-0 flex items-center gap-2", className),
|
|
183
|
-
...props
|
|
184
|
-
}
|
|
185
|
-
);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
// src/components/ui/accordion.tsx
|
|
189
|
-
import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion";
|
|
190
|
-
|
|
191
73
|
// src/components/ui/icons.tsx
|
|
192
74
|
import { LockIcon as PhosphorLock } from "@phosphor-icons/react/Lock";
|
|
193
75
|
import { CheckIcon as PhosphorCheck } from "@phosphor-icons/react/Check";
|
|
@@ -248,7 +130,7 @@ import { SquaresFourIcon as PhosphorSquaresFour } from "@phosphor-icons/react/Sq
|
|
|
248
130
|
import { MagnifyingGlassPlusIcon as PhosphorMagnifyingGlassPlus } from "@phosphor-icons/react/MagnifyingGlassPlus";
|
|
249
131
|
import { MagnifyingGlassMinusIcon as PhosphorMagnifyingGlassMinus } from "@phosphor-icons/react/MagnifyingGlassMinus";
|
|
250
132
|
import { SidebarSimpleIcon as PhosphorSidebarSimple } from "@phosphor-icons/react/SidebarSimple";
|
|
251
|
-
import { jsx
|
|
133
|
+
import { jsx } from "react/jsx-runtime";
|
|
252
134
|
function createIcon(PhosphorIcon) {
|
|
253
135
|
function Wrapped({
|
|
254
136
|
className,
|
|
@@ -257,7 +139,7 @@ function createIcon(PhosphorIcon) {
|
|
|
257
139
|
ref,
|
|
258
140
|
...props
|
|
259
141
|
}) {
|
|
260
|
-
return /* @__PURE__ */
|
|
142
|
+
return /* @__PURE__ */ jsx(
|
|
261
143
|
PhosphorIcon,
|
|
262
144
|
{
|
|
263
145
|
ref,
|
|
@@ -331,81 +213,12 @@ var PanelIcon = createIcon(PhosphorSidebarSimple);
|
|
|
331
213
|
var ZoomInIcon = createIcon(PhosphorMagnifyingGlassPlus);
|
|
332
214
|
var ZoomOutIcon = createIcon(PhosphorMagnifyingGlassMinus);
|
|
333
215
|
|
|
334
|
-
// src/components/ui/accordion.tsx
|
|
335
|
-
import { jsx as jsx3, jsxs } from "react/jsx-runtime";
|
|
336
|
-
function Accordion({ className, ref, ...props }) {
|
|
337
|
-
return /* @__PURE__ */ jsx3(
|
|
338
|
-
AccordionPrimitive.Root,
|
|
339
|
-
{
|
|
340
|
-
ref,
|
|
341
|
-
"data-slot": "accordion",
|
|
342
|
-
className: cn("flex w-full flex-col", className),
|
|
343
|
-
...props
|
|
344
|
-
}
|
|
345
|
-
);
|
|
346
|
-
}
|
|
347
|
-
function AccordionItem({ className, ref, ...props }) {
|
|
348
|
-
return /* @__PURE__ */ jsx3(
|
|
349
|
-
AccordionPrimitive.Item,
|
|
350
|
-
{
|
|
351
|
-
ref,
|
|
352
|
-
"data-slot": "accordion-item",
|
|
353
|
-
className: cn("border-b border-muted", className),
|
|
354
|
-
...props
|
|
355
|
-
}
|
|
356
|
-
);
|
|
357
|
-
}
|
|
358
|
-
function AccordionTrigger({
|
|
359
|
-
className,
|
|
360
|
-
children,
|
|
361
|
-
ref,
|
|
362
|
-
...props
|
|
363
|
-
}) {
|
|
364
|
-
return /* @__PURE__ */ jsx3(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
|
|
365
|
-
AccordionPrimitive.Trigger,
|
|
366
|
-
{
|
|
367
|
-
ref,
|
|
368
|
-
"data-slot": "accordion-trigger",
|
|
369
|
-
className: cn(
|
|
370
|
-
"group/accordion-trigger flex flex-1 items-center justify-between py-4 type-body-sm-medium text-default outline-none focus-visible:rounded-sm focus-visible:ring-2 focus-visible:ring-focus-default data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
371
|
-
className
|
|
372
|
-
),
|
|
373
|
-
...props,
|
|
374
|
-
children: [
|
|
375
|
-
children,
|
|
376
|
-
/* @__PURE__ */ jsx3(CaretDownIcon, { className: "shrink-0 text-secondary group-data-[panel-open]/accordion-trigger:hidden" }),
|
|
377
|
-
/* @__PURE__ */ jsx3(CaretUpIcon, { className: "hidden shrink-0 text-secondary group-data-[panel-open]/accordion-trigger:block" })
|
|
378
|
-
]
|
|
379
|
-
}
|
|
380
|
-
) });
|
|
381
|
-
}
|
|
382
|
-
function AccordionContent({
|
|
383
|
-
className,
|
|
384
|
-
children,
|
|
385
|
-
ref,
|
|
386
|
-
...props
|
|
387
|
-
}) {
|
|
388
|
-
return /* @__PURE__ */ jsx3(
|
|
389
|
-
AccordionPrimitive.Panel,
|
|
390
|
-
{
|
|
391
|
-
ref,
|
|
392
|
-
"data-slot": "accordion-content",
|
|
393
|
-
className: cn(
|
|
394
|
-
"h-(--accordion-panel-height) overflow-hidden transition-[height] duration-200 ease-out data-[ending-style]:h-0 data-[starting-style]:h-0",
|
|
395
|
-
className
|
|
396
|
-
),
|
|
397
|
-
...props,
|
|
398
|
-
children: /* @__PURE__ */ jsx3("div", { className: "pb-4 type-body-sm-regular text-default", children })
|
|
399
|
-
}
|
|
400
|
-
);
|
|
401
|
-
}
|
|
402
|
-
|
|
403
216
|
// src/components/ui/button.tsx
|
|
404
|
-
import * as
|
|
217
|
+
import * as React from "react";
|
|
405
218
|
import { Button as ButtonPrimitive } from "@base-ui/react/button";
|
|
406
|
-
import { cva as
|
|
407
|
-
import { jsx as
|
|
408
|
-
var buttonVariants =
|
|
219
|
+
import { cva as cva2 } from "class-variance-authority";
|
|
220
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
221
|
+
var buttonVariants = cva2(
|
|
409
222
|
[
|
|
410
223
|
// Base layout
|
|
411
224
|
"inline-flex items-center justify-center gap-2 whitespace-nowrap",
|
|
@@ -451,7 +264,7 @@ var buttonVariants = cva3(
|
|
|
451
264
|
],
|
|
452
265
|
"destructive-subtle": [
|
|
453
266
|
// Base
|
|
454
|
-
"interactive-
|
|
267
|
+
"interactive-destructive-subtle interactive-destructive-subtle-fg shadow-xs",
|
|
455
268
|
"border border-default",
|
|
456
269
|
// Hover & active
|
|
457
270
|
"hover:interactive-hover",
|
|
@@ -515,7 +328,7 @@ var buttonVariants = cva3(
|
|
|
515
328
|
}
|
|
516
329
|
}
|
|
517
330
|
);
|
|
518
|
-
var hasTextChildren = (children) =>
|
|
331
|
+
var hasTextChildren = (children) => React.Children.toArray(children).some(
|
|
519
332
|
(child) => typeof child === "string" && child.trim().length > 0
|
|
520
333
|
);
|
|
521
334
|
function Button({
|
|
@@ -529,7 +342,7 @@ function Button({
|
|
|
529
342
|
}) {
|
|
530
343
|
const isIconOnly = !hasTextChildren(children);
|
|
531
344
|
const iconOnlyClasses = isIconOnly ? "aspect-square px-0 py-0" : void 0;
|
|
532
|
-
return /* @__PURE__ */
|
|
345
|
+
return /* @__PURE__ */ jsx2(
|
|
533
346
|
ButtonPrimitive,
|
|
534
347
|
{
|
|
535
348
|
"data-slot": "button",
|
|
@@ -546,85 +359,285 @@ function Button({
|
|
|
546
359
|
);
|
|
547
360
|
}
|
|
548
361
|
|
|
549
|
-
// src/components/ui/
|
|
550
|
-
import
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
import { cva as cva4 } from "class-variance-authority";
|
|
554
|
-
|
|
555
|
-
// src/components/ui/separator.tsx
|
|
556
|
-
import { Separator as SeparatorPrimitive } from "@base-ui/react/separator";
|
|
557
|
-
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
558
|
-
function Separator({
|
|
559
|
-
className,
|
|
560
|
-
orientation = "horizontal",
|
|
561
|
-
ref,
|
|
562
|
-
...props
|
|
563
|
-
}) {
|
|
564
|
-
return /* @__PURE__ */ jsx5(
|
|
565
|
-
SeparatorPrimitive,
|
|
566
|
-
{
|
|
567
|
-
ref,
|
|
568
|
-
"data-slot": "separator",
|
|
569
|
-
orientation,
|
|
570
|
-
className: cn(
|
|
571
|
-
"shrink-0 border-0 border-default data-[orientation=horizontal]:border-t data-[orientation=horizontal]:h-0 data-[orientation=horizontal]:w-full data-[orientation=vertical]:border-l data-[orientation=vertical]:h-full data-[orientation=vertical]:w-0",
|
|
572
|
-
className
|
|
573
|
-
),
|
|
574
|
-
...props
|
|
575
|
-
}
|
|
576
|
-
);
|
|
577
|
-
}
|
|
578
|
-
|
|
579
|
-
// src/components/ui/button-group.tsx
|
|
580
|
-
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
581
|
-
var ButtonGroupContext = React3.createContext(
|
|
582
|
-
"horizontal"
|
|
583
|
-
);
|
|
584
|
-
var buttonGroupVariants = cva4(
|
|
585
|
-
"flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2",
|
|
362
|
+
// src/components/ui/alert.tsx
|
|
363
|
+
import { jsx as jsx3, jsxs } from "react/jsx-runtime";
|
|
364
|
+
var alertVariants = cva3(
|
|
365
|
+
"relative flex flex-wrap w-full items-center data-[multiline]:items-start gap-4 rounded-md px-4 py-3 [&>[data-slot=alert-body]>svg]:size-4 [&>[data-slot=alert-body]>svg]:shrink-0",
|
|
586
366
|
{
|
|
587
367
|
variants: {
|
|
588
368
|
variant: {
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
"[&>[data-slot]:not(:last-child)]:rounded-r-none",
|
|
595
|
-
"[&>[data-slot]:not(:first-child)]:rounded-l-none",
|
|
596
|
-
"[&>[data-slot]:not([data-slot='button-group-separator']):not(:first-child)]:border-l-0"
|
|
597
|
-
].join(" "),
|
|
598
|
-
vertical: [
|
|
599
|
-
"flex-col",
|
|
600
|
-
"[&>[data-slot]:not(:last-child)]:rounded-b-none",
|
|
601
|
-
"[&>[data-slot]:not(:first-child)]:rounded-t-none",
|
|
602
|
-
"[&>[data-slot]:not([data-slot='button-group-separator']):not(:first-child)]:border-t-0"
|
|
603
|
-
].join(" ")
|
|
369
|
+
default: "surface-secondary [&>[data-slot=alert-body]>svg]:text-default",
|
|
370
|
+
info: "surface-info border-info [&>[data-slot=alert-body]>svg]:text-info",
|
|
371
|
+
success: "surface-success border-success [&>[data-slot=alert-body]>svg]:text-success",
|
|
372
|
+
warning: "surface-warning border-warning [&>[data-slot=alert-body]>svg]:text-warning",
|
|
373
|
+
error: "surface-error border-error [&>[data-slot=alert-body]>svg]:text-error"
|
|
604
374
|
}
|
|
605
375
|
},
|
|
606
376
|
defaultVariants: {
|
|
607
|
-
variant: "
|
|
608
|
-
orientation: "horizontal"
|
|
377
|
+
variant: "default"
|
|
609
378
|
}
|
|
610
379
|
}
|
|
611
380
|
);
|
|
612
|
-
function
|
|
613
|
-
|
|
614
|
-
variant,
|
|
615
|
-
orientation,
|
|
616
|
-
children,
|
|
617
|
-
ref,
|
|
618
|
-
...props
|
|
619
|
-
}) {
|
|
620
|
-
return /* @__PURE__ */ jsx6(ButtonGroupContext, { value: orientation ?? "horizontal", children: /* @__PURE__ */ jsx6(
|
|
381
|
+
function Alert({ className, variant, onDismiss, ref, ...props }) {
|
|
382
|
+
return /* @__PURE__ */ jsxs(
|
|
621
383
|
"div",
|
|
622
384
|
{
|
|
623
|
-
|
|
624
|
-
"data-slot": "
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
385
|
+
ref,
|
|
386
|
+
"data-slot": "alert",
|
|
387
|
+
role: variant === "warning" || variant === "error" ? "alert" : "status",
|
|
388
|
+
className: cn(alertVariants({ variant }), className),
|
|
389
|
+
...props,
|
|
390
|
+
children: [
|
|
391
|
+
props.children,
|
|
392
|
+
onDismiss && /* @__PURE__ */ jsx3(
|
|
393
|
+
Button,
|
|
394
|
+
{
|
|
395
|
+
type: "button",
|
|
396
|
+
variant: "ghost",
|
|
397
|
+
size: "mini",
|
|
398
|
+
"aria-label": "Dismiss",
|
|
399
|
+
onClick: onDismiss,
|
|
400
|
+
className: "shrink-0 self-start",
|
|
401
|
+
children: /* @__PURE__ */ jsx3(CloseIcon, { size: 16 })
|
|
402
|
+
}
|
|
403
|
+
)
|
|
404
|
+
]
|
|
405
|
+
}
|
|
406
|
+
);
|
|
407
|
+
}
|
|
408
|
+
function AlertBody({ className, ref, ...props }) {
|
|
409
|
+
return /* @__PURE__ */ jsx3(
|
|
410
|
+
"div",
|
|
411
|
+
{
|
|
412
|
+
ref,
|
|
413
|
+
"data-slot": "alert-body",
|
|
414
|
+
className: cn(
|
|
415
|
+
"grid flex-1 min-w-0 grid-cols-1 gap-y-0.5 items-start [&:has(>svg)]:grid-cols-[auto_1fr] [&:has(>svg)]:gap-x-3 [&>svg]:col-start-1 [&>svg]:row-start-1 [&>svg]:mt-0.5",
|
|
416
|
+
className
|
|
417
|
+
),
|
|
418
|
+
...props
|
|
419
|
+
}
|
|
420
|
+
);
|
|
421
|
+
}
|
|
422
|
+
function AlertTitle({ className, ref, ...props }) {
|
|
423
|
+
return /* @__PURE__ */ jsx3(
|
|
424
|
+
"p",
|
|
425
|
+
{
|
|
426
|
+
ref,
|
|
427
|
+
"data-slot": "alert-title",
|
|
428
|
+
className: cn(
|
|
429
|
+
"row-start-1 type-body-sm-medium text-default [div:has(>svg)>&]:col-start-2",
|
|
430
|
+
className
|
|
431
|
+
),
|
|
432
|
+
...props
|
|
433
|
+
}
|
|
434
|
+
);
|
|
435
|
+
}
|
|
436
|
+
function AlertDescription({
|
|
437
|
+
className,
|
|
438
|
+
ref: externalRef,
|
|
439
|
+
...props
|
|
440
|
+
}) {
|
|
441
|
+
const localRef = React2.useRef(null);
|
|
442
|
+
React2.useLayoutEffect(() => {
|
|
443
|
+
const el = localRef.current;
|
|
444
|
+
if (!el) return;
|
|
445
|
+
const alert = el.closest("[data-slot=alert]");
|
|
446
|
+
if (!alert) return;
|
|
447
|
+
const update = () => {
|
|
448
|
+
const lineHeight = parseFloat(getComputedStyle(el).lineHeight);
|
|
449
|
+
alert.toggleAttribute(
|
|
450
|
+
"data-multiline",
|
|
451
|
+
el.clientHeight > lineHeight * 1.5
|
|
452
|
+
);
|
|
453
|
+
};
|
|
454
|
+
update();
|
|
455
|
+
const resizeObserver = new ResizeObserver(update);
|
|
456
|
+
resizeObserver.observe(el);
|
|
457
|
+
return () => {
|
|
458
|
+
resizeObserver.disconnect();
|
|
459
|
+
alert.removeAttribute("data-multiline");
|
|
460
|
+
};
|
|
461
|
+
}, []);
|
|
462
|
+
return /* @__PURE__ */ jsx3(
|
|
463
|
+
"p",
|
|
464
|
+
{
|
|
465
|
+
ref: (node) => {
|
|
466
|
+
localRef.current = node;
|
|
467
|
+
if (typeof externalRef === "function") externalRef(node);
|
|
468
|
+
else if (externalRef)
|
|
469
|
+
externalRef.current = node;
|
|
470
|
+
},
|
|
471
|
+
"data-slot": "alert-description",
|
|
472
|
+
className: cn(
|
|
473
|
+
"type-body-sm-regular text-secondary [div:has(>svg)>&]:col-start-2",
|
|
474
|
+
className
|
|
475
|
+
),
|
|
476
|
+
...props
|
|
477
|
+
}
|
|
478
|
+
);
|
|
479
|
+
}
|
|
480
|
+
function AlertActions({ className, ref, ...props }) {
|
|
481
|
+
return /* @__PURE__ */ jsx3(
|
|
482
|
+
"div",
|
|
483
|
+
{
|
|
484
|
+
ref,
|
|
485
|
+
"data-slot": "alert-actions",
|
|
486
|
+
className: cn("shrink-0 flex items-center gap-2", className),
|
|
487
|
+
...props
|
|
488
|
+
}
|
|
489
|
+
);
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
// src/components/ui/accordion.tsx
|
|
493
|
+
import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion";
|
|
494
|
+
import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
495
|
+
function Accordion({ className, ref, ...props }) {
|
|
496
|
+
return /* @__PURE__ */ jsx4(
|
|
497
|
+
AccordionPrimitive.Root,
|
|
498
|
+
{
|
|
499
|
+
ref,
|
|
500
|
+
"data-slot": "accordion",
|
|
501
|
+
className: cn("flex w-full flex-col", className),
|
|
502
|
+
...props
|
|
503
|
+
}
|
|
504
|
+
);
|
|
505
|
+
}
|
|
506
|
+
function AccordionItem({ className, ref, ...props }) {
|
|
507
|
+
return /* @__PURE__ */ jsx4(
|
|
508
|
+
AccordionPrimitive.Item,
|
|
509
|
+
{
|
|
510
|
+
ref,
|
|
511
|
+
"data-slot": "accordion-item",
|
|
512
|
+
className: cn("border-b border-muted", className),
|
|
513
|
+
...props
|
|
514
|
+
}
|
|
515
|
+
);
|
|
516
|
+
}
|
|
517
|
+
function AccordionTrigger({
|
|
518
|
+
className,
|
|
519
|
+
children,
|
|
520
|
+
ref,
|
|
521
|
+
...props
|
|
522
|
+
}) {
|
|
523
|
+
return /* @__PURE__ */ jsx4(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs2(
|
|
524
|
+
AccordionPrimitive.Trigger,
|
|
525
|
+
{
|
|
526
|
+
ref,
|
|
527
|
+
"data-slot": "accordion-trigger",
|
|
528
|
+
className: cn(
|
|
529
|
+
"group/accordion-trigger flex flex-1 items-center justify-between py-4 type-body-sm-medium text-default outline-none focus-visible:rounded-sm focus-visible:ring-2 focus-visible:ring-focus-default data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
530
|
+
className
|
|
531
|
+
),
|
|
532
|
+
...props,
|
|
533
|
+
children: [
|
|
534
|
+
children,
|
|
535
|
+
/* @__PURE__ */ jsx4(CaretDownIcon, { className: "shrink-0 text-secondary group-data-[panel-open]/accordion-trigger:hidden" }),
|
|
536
|
+
/* @__PURE__ */ jsx4(CaretUpIcon, { className: "hidden shrink-0 text-secondary group-data-[panel-open]/accordion-trigger:block" })
|
|
537
|
+
]
|
|
538
|
+
}
|
|
539
|
+
) });
|
|
540
|
+
}
|
|
541
|
+
function AccordionContent({
|
|
542
|
+
className,
|
|
543
|
+
children,
|
|
544
|
+
ref,
|
|
545
|
+
...props
|
|
546
|
+
}) {
|
|
547
|
+
return /* @__PURE__ */ jsx4(
|
|
548
|
+
AccordionPrimitive.Panel,
|
|
549
|
+
{
|
|
550
|
+
ref,
|
|
551
|
+
"data-slot": "accordion-content",
|
|
552
|
+
className: cn(
|
|
553
|
+
"h-(--accordion-panel-height) overflow-hidden transition-[height] duration-200 ease-out data-[ending-style]:h-0 data-[starting-style]:h-0",
|
|
554
|
+
className
|
|
555
|
+
),
|
|
556
|
+
...props,
|
|
557
|
+
children: /* @__PURE__ */ jsx4("div", { className: "pb-4 type-body-sm-regular text-default", children })
|
|
558
|
+
}
|
|
559
|
+
);
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
// src/components/ui/button-group.tsx
|
|
563
|
+
import * as React3 from "react";
|
|
564
|
+
import { mergeProps } from "@base-ui/react/merge-props";
|
|
565
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
566
|
+
import { cva as cva4 } from "class-variance-authority";
|
|
567
|
+
|
|
568
|
+
// src/components/ui/separator.tsx
|
|
569
|
+
import { Separator as SeparatorPrimitive } from "@base-ui/react/separator";
|
|
570
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
571
|
+
function Separator({
|
|
572
|
+
className,
|
|
573
|
+
orientation = "horizontal",
|
|
574
|
+
ref,
|
|
575
|
+
...props
|
|
576
|
+
}) {
|
|
577
|
+
return /* @__PURE__ */ jsx5(
|
|
578
|
+
SeparatorPrimitive,
|
|
579
|
+
{
|
|
580
|
+
ref,
|
|
581
|
+
"data-slot": "separator",
|
|
582
|
+
orientation,
|
|
583
|
+
className: cn(
|
|
584
|
+
"shrink-0 border-0 border-default data-[orientation=horizontal]:border-t data-[orientation=horizontal]:h-0 data-[orientation=horizontal]:w-full data-[orientation=vertical]:border-l data-[orientation=vertical]:h-full data-[orientation=vertical]:w-0",
|
|
585
|
+
className
|
|
586
|
+
),
|
|
587
|
+
...props
|
|
588
|
+
}
|
|
589
|
+
);
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
// src/components/ui/button-group.tsx
|
|
593
|
+
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
594
|
+
var ButtonGroupContext = React3.createContext(
|
|
595
|
+
"horizontal"
|
|
596
|
+
);
|
|
597
|
+
var buttonGroupVariants = cva4(
|
|
598
|
+
"flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2",
|
|
599
|
+
{
|
|
600
|
+
variants: {
|
|
601
|
+
variant: {
|
|
602
|
+
outlined: "",
|
|
603
|
+
ghost: "[&>[data-slot]:not([data-slot='button-group-separator'])]:border-0 [&>[data-slot]:not([data-slot='button-group-separator'])]:shadow-none"
|
|
604
|
+
},
|
|
605
|
+
orientation: {
|
|
606
|
+
horizontal: [
|
|
607
|
+
"[&>[data-slot]:not(:last-child)]:rounded-r-none",
|
|
608
|
+
"[&>[data-slot]:not(:first-child)]:rounded-l-none",
|
|
609
|
+
"[&>[data-slot]:not([data-slot='button-group-separator']):not(:first-child)]:border-l-0"
|
|
610
|
+
].join(" "),
|
|
611
|
+
vertical: [
|
|
612
|
+
"flex-col",
|
|
613
|
+
"[&>[data-slot]:not(:last-child)]:rounded-b-none",
|
|
614
|
+
"[&>[data-slot]:not(:first-child)]:rounded-t-none",
|
|
615
|
+
"[&>[data-slot]:not([data-slot='button-group-separator']):not(:first-child)]:border-t-0"
|
|
616
|
+
].join(" ")
|
|
617
|
+
}
|
|
618
|
+
},
|
|
619
|
+
defaultVariants: {
|
|
620
|
+
variant: "outlined",
|
|
621
|
+
orientation: "horizontal"
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
);
|
|
625
|
+
function ButtonGroup({
|
|
626
|
+
className,
|
|
627
|
+
variant,
|
|
628
|
+
orientation,
|
|
629
|
+
children,
|
|
630
|
+
ref,
|
|
631
|
+
...props
|
|
632
|
+
}) {
|
|
633
|
+
return /* @__PURE__ */ jsx6(ButtonGroupContext, { value: orientation ?? "horizontal", children: /* @__PURE__ */ jsx6(
|
|
634
|
+
"div",
|
|
635
|
+
{
|
|
636
|
+
role: "group",
|
|
637
|
+
"data-slot": "button-group",
|
|
638
|
+
"data-variant": variant ?? "outlined",
|
|
639
|
+
"data-orientation": orientation ?? "horizontal",
|
|
640
|
+
className: cn(buttonGroupVariants({ variant, orientation }), className),
|
|
628
641
|
ref,
|
|
629
642
|
...props,
|
|
630
643
|
children
|
|
@@ -690,10 +703,110 @@ function ButtonGroupSeparator({
|
|
|
690
703
|
);
|
|
691
704
|
}
|
|
692
705
|
|
|
693
|
-
// src/components/ui/
|
|
706
|
+
// src/components/ui/empty.tsx
|
|
694
707
|
import { cva as cva5 } from "class-variance-authority";
|
|
695
708
|
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
696
|
-
var
|
|
709
|
+
var emptyVariants = cva5("w-full rounded-md p-8 text-center", {
|
|
710
|
+
variants: {
|
|
711
|
+
variant: {
|
|
712
|
+
default: "",
|
|
713
|
+
outline: "border border-default",
|
|
714
|
+
background: "surface-muted",
|
|
715
|
+
"outline-dashed": "border border-dashed border-default"
|
|
716
|
+
}
|
|
717
|
+
},
|
|
718
|
+
defaultVariants: {
|
|
719
|
+
variant: "default"
|
|
720
|
+
}
|
|
721
|
+
});
|
|
722
|
+
var Empty = ({ className, variant, children, ref, ...props }) => /* @__PURE__ */ jsx7(
|
|
723
|
+
"div",
|
|
724
|
+
{
|
|
725
|
+
ref,
|
|
726
|
+
"data-slot": "empty",
|
|
727
|
+
className: cn(emptyVariants({ variant }), className),
|
|
728
|
+
...props,
|
|
729
|
+
children: /* @__PURE__ */ jsx7("div", { className: "flex w-full flex-col items-center gap-4", children })
|
|
730
|
+
}
|
|
731
|
+
);
|
|
732
|
+
Empty.displayName = "Empty";
|
|
733
|
+
var emptyMediaVariants = cva5("flex shrink-0 items-center justify-center", {
|
|
734
|
+
variants: {
|
|
735
|
+
variant: {
|
|
736
|
+
default: "",
|
|
737
|
+
icon: "size-10 rounded-lg surface-secondary p-2"
|
|
738
|
+
}
|
|
739
|
+
},
|
|
740
|
+
defaultVariants: {
|
|
741
|
+
variant: "default"
|
|
742
|
+
}
|
|
743
|
+
});
|
|
744
|
+
var EmptyMedia = ({ className, variant, ...props }) => /* @__PURE__ */ jsx7(
|
|
745
|
+
"div",
|
|
746
|
+
{
|
|
747
|
+
"data-slot": "empty-media",
|
|
748
|
+
className: cn(emptyMediaVariants({ variant }), className),
|
|
749
|
+
...props
|
|
750
|
+
}
|
|
751
|
+
);
|
|
752
|
+
EmptyMedia.displayName = "EmptyMedia";
|
|
753
|
+
var EmptyContent = ({ className, ref, ...props }) => /* @__PURE__ */ jsx7(
|
|
754
|
+
"div",
|
|
755
|
+
{
|
|
756
|
+
ref,
|
|
757
|
+
"data-slot": "empty-content",
|
|
758
|
+
className: cn("flex w-full flex-col gap-1", className),
|
|
759
|
+
...props
|
|
760
|
+
}
|
|
761
|
+
);
|
|
762
|
+
EmptyContent.displayName = "EmptyContent";
|
|
763
|
+
var EmptyTitle = ({
|
|
764
|
+
className,
|
|
765
|
+
as: Component = "p",
|
|
766
|
+
ref,
|
|
767
|
+
...props
|
|
768
|
+
}) => /* @__PURE__ */ jsx7(
|
|
769
|
+
Component,
|
|
770
|
+
{
|
|
771
|
+
ref,
|
|
772
|
+
"data-slot": "empty-title",
|
|
773
|
+
className: cn("type-body-md-medium text-default", className),
|
|
774
|
+
...props
|
|
775
|
+
}
|
|
776
|
+
);
|
|
777
|
+
EmptyTitle.displayName = "EmptyTitle";
|
|
778
|
+
var EmptyDescription = ({
|
|
779
|
+
className,
|
|
780
|
+
ref,
|
|
781
|
+
...props
|
|
782
|
+
}) => /* @__PURE__ */ jsx7(
|
|
783
|
+
"p",
|
|
784
|
+
{
|
|
785
|
+
ref,
|
|
786
|
+
"data-slot": "empty-description",
|
|
787
|
+
className: cn("type-body-sm text-secondary", className),
|
|
788
|
+
...props
|
|
789
|
+
}
|
|
790
|
+
);
|
|
791
|
+
EmptyDescription.displayName = "EmptyDescription";
|
|
792
|
+
var EmptyActions = ({ className, ref, ...props }) => /* @__PURE__ */ jsx7(
|
|
793
|
+
"div",
|
|
794
|
+
{
|
|
795
|
+
ref,
|
|
796
|
+
"data-slot": "empty-actions",
|
|
797
|
+
className: cn(
|
|
798
|
+
"flex flex-wrap items-center justify-center gap-2",
|
|
799
|
+
className
|
|
800
|
+
),
|
|
801
|
+
...props
|
|
802
|
+
}
|
|
803
|
+
);
|
|
804
|
+
EmptyActions.displayName = "EmptyActions";
|
|
805
|
+
|
|
806
|
+
// src/components/ui/text.tsx
|
|
807
|
+
import { cva as cva6 } from "class-variance-authority";
|
|
808
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
809
|
+
var textVariants = cva6("text-default", {
|
|
697
810
|
variants: {
|
|
698
811
|
variant: {
|
|
699
812
|
// Headings
|
|
@@ -746,7 +859,7 @@ function getDefaultElement(variant) {
|
|
|
746
859
|
}
|
|
747
860
|
function Text({ className, variant, as, style, ref, ...props }) {
|
|
748
861
|
const Component = as || getDefaultElement(variant);
|
|
749
|
-
return /* @__PURE__ */
|
|
862
|
+
return /* @__PURE__ */ jsx8(
|
|
750
863
|
Component,
|
|
751
864
|
{
|
|
752
865
|
className: cn(textVariants({ variant }), className),
|
|
@@ -758,9 +871,9 @@ function Text({ className, variant, as, style, ref, ...props }) {
|
|
|
758
871
|
}
|
|
759
872
|
|
|
760
873
|
// src/components/ui/card.tsx
|
|
761
|
-
import { jsx as
|
|
874
|
+
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
762
875
|
function Card({ className, size = "default", ref, ...props }) {
|
|
763
|
-
return /* @__PURE__ */
|
|
876
|
+
return /* @__PURE__ */ jsx9(
|
|
764
877
|
"div",
|
|
765
878
|
{
|
|
766
879
|
ref,
|
|
@@ -775,7 +888,7 @@ function Card({ className, size = "default", ref, ...props }) {
|
|
|
775
888
|
);
|
|
776
889
|
}
|
|
777
890
|
function CardHeader({ className, ref, ...props }) {
|
|
778
|
-
return /* @__PURE__ */
|
|
891
|
+
return /* @__PURE__ */ jsx9(
|
|
779
892
|
"div",
|
|
780
893
|
{
|
|
781
894
|
ref,
|
|
@@ -789,7 +902,7 @@ function CardHeader({ className, ref, ...props }) {
|
|
|
789
902
|
);
|
|
790
903
|
}
|
|
791
904
|
function CardTitle({ className, ref, ...props }) {
|
|
792
|
-
return /* @__PURE__ */
|
|
905
|
+
return /* @__PURE__ */ jsx9(
|
|
793
906
|
Text,
|
|
794
907
|
{
|
|
795
908
|
ref,
|
|
@@ -801,7 +914,7 @@ function CardTitle({ className, ref, ...props }) {
|
|
|
801
914
|
);
|
|
802
915
|
}
|
|
803
916
|
function CardDescription({ className, ref, ...props }) {
|
|
804
|
-
return /* @__PURE__ */
|
|
917
|
+
return /* @__PURE__ */ jsx9(
|
|
805
918
|
Text,
|
|
806
919
|
{
|
|
807
920
|
ref,
|
|
@@ -813,71 +926,380 @@ function CardDescription({ className, ref, ...props }) {
|
|
|
813
926
|
);
|
|
814
927
|
}
|
|
815
928
|
function CardAction({ className, ref, ...props }) {
|
|
816
|
-
return /* @__PURE__ */
|
|
929
|
+
return /* @__PURE__ */ jsx9(
|
|
930
|
+
"div",
|
|
931
|
+
{
|
|
932
|
+
ref,
|
|
933
|
+
"data-slot": "card-action",
|
|
934
|
+
className: cn(
|
|
935
|
+
"col-start-2 row-span-2 row-start-1 self-start justify-self-end",
|
|
936
|
+
className
|
|
937
|
+
),
|
|
938
|
+
...props
|
|
939
|
+
}
|
|
940
|
+
);
|
|
941
|
+
}
|
|
942
|
+
function CardContent({ className, bleed, ref, ...props }) {
|
|
943
|
+
return /* @__PURE__ */ jsx9(
|
|
944
|
+
"div",
|
|
945
|
+
{
|
|
946
|
+
ref,
|
|
947
|
+
"data-slot": "card-content",
|
|
948
|
+
className: cn(
|
|
949
|
+
bleed ? "px-0" : "px-6 group-data-[size=sm]/card:px-3",
|
|
950
|
+
className
|
|
951
|
+
),
|
|
952
|
+
...props
|
|
953
|
+
}
|
|
954
|
+
);
|
|
955
|
+
}
|
|
956
|
+
function CardFooter({ className, ref, ...props }) {
|
|
957
|
+
return /* @__PURE__ */ jsx9(
|
|
817
958
|
"div",
|
|
818
959
|
{
|
|
819
960
|
ref,
|
|
820
|
-
"data-slot": "card-
|
|
961
|
+
"data-slot": "card-footer",
|
|
962
|
+
className: cn(
|
|
963
|
+
"flex items-center px-6 py-6 group-data-[size=sm]/card:p-3",
|
|
964
|
+
className
|
|
965
|
+
),
|
|
966
|
+
...props
|
|
967
|
+
}
|
|
968
|
+
);
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
// src/components/ui/select.tsx
|
|
972
|
+
import { Select as SelectPrimitive } from "@base-ui/react/select";
|
|
973
|
+
import { cva as cva7 } from "class-variance-authority";
|
|
974
|
+
import { jsx as jsx10, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
975
|
+
var selectTriggerVariants = cva7(
|
|
976
|
+
[
|
|
977
|
+
// Layout
|
|
978
|
+
"flex w-full items-center justify-between",
|
|
979
|
+
// Appearance
|
|
980
|
+
"border border-default surface-default shadow-xs",
|
|
981
|
+
// Typography
|
|
982
|
+
"text-default type-body-sm-regular",
|
|
983
|
+
// Placeholder state (no value selected)
|
|
984
|
+
"data-[placeholder]:text-secondary",
|
|
985
|
+
// Transition
|
|
986
|
+
"transition-colors",
|
|
987
|
+
// Focus
|
|
988
|
+
"focus-visible:outline-none focus-visible:border-strong focus-visible:ring-2 focus-visible:ring-focus-default",
|
|
989
|
+
// Disabled
|
|
990
|
+
"disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed",
|
|
991
|
+
// Error
|
|
992
|
+
"aria-invalid:border-error",
|
|
993
|
+
"aria-invalid:focus-visible:ring-2 aria-invalid:focus-visible:ring-focus-error aria-invalid:focus-visible:border-error"
|
|
994
|
+
],
|
|
995
|
+
{
|
|
996
|
+
variants: {
|
|
997
|
+
size: {
|
|
998
|
+
default: "h-9 gap-2 pl-3 pr-2 rounded-md",
|
|
999
|
+
large: "h-10 gap-3 pl-4 pr-2 rounded-md",
|
|
1000
|
+
small: "h-8 gap-1.5 px-2 rounded-sm",
|
|
1001
|
+
mini: "h-6 gap-1 px-1.5 rounded-sm type-body-xs-regular"
|
|
1002
|
+
}
|
|
1003
|
+
},
|
|
1004
|
+
defaultVariants: {
|
|
1005
|
+
size: "default"
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
);
|
|
1009
|
+
var Select = SelectPrimitive.Root;
|
|
1010
|
+
var SelectGroup = SelectPrimitive.Group;
|
|
1011
|
+
var SelectValue = SelectPrimitive.Value;
|
|
1012
|
+
function SelectTrigger({
|
|
1013
|
+
className,
|
|
1014
|
+
size,
|
|
1015
|
+
children,
|
|
1016
|
+
ref,
|
|
1017
|
+
...props
|
|
1018
|
+
}) {
|
|
1019
|
+
return /* @__PURE__ */ jsxs3(
|
|
1020
|
+
SelectPrimitive.Trigger,
|
|
1021
|
+
{
|
|
1022
|
+
"data-slot": "select-trigger",
|
|
1023
|
+
ref,
|
|
1024
|
+
className: cn(selectTriggerVariants({ size }), className),
|
|
1025
|
+
...props,
|
|
1026
|
+
children: [
|
|
1027
|
+
/* @__PURE__ */ jsx10("span", { className: "flex-1 truncate text-left", children }),
|
|
1028
|
+
/* @__PURE__ */ jsx10(
|
|
1029
|
+
SelectPrimitive.Icon,
|
|
1030
|
+
{
|
|
1031
|
+
"data-slot": "select-icon",
|
|
1032
|
+
className: "shrink-0 transition-transform duration-200 data-[open]:rotate-180",
|
|
1033
|
+
children: /* @__PURE__ */ jsx10(CaretDownIcon, { size: 16, className: "text-secondary" })
|
|
1034
|
+
}
|
|
1035
|
+
)
|
|
1036
|
+
]
|
|
1037
|
+
}
|
|
1038
|
+
);
|
|
1039
|
+
}
|
|
1040
|
+
function SelectContent({
|
|
1041
|
+
className,
|
|
1042
|
+
positionerClassName,
|
|
1043
|
+
children,
|
|
1044
|
+
ref,
|
|
1045
|
+
...props
|
|
1046
|
+
}) {
|
|
1047
|
+
return /* @__PURE__ */ jsx10(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx10(
|
|
1048
|
+
SelectPrimitive.Positioner,
|
|
1049
|
+
{
|
|
1050
|
+
side: "bottom",
|
|
1051
|
+
align: "start",
|
|
1052
|
+
alignItemWithTrigger: false,
|
|
1053
|
+
sideOffset: 4,
|
|
1054
|
+
className: cn(
|
|
1055
|
+
"z-50 w-[var(--anchor-width)] outline-none",
|
|
1056
|
+
positionerClassName
|
|
1057
|
+
),
|
|
1058
|
+
...props,
|
|
1059
|
+
children: /* @__PURE__ */ jsxs3(
|
|
1060
|
+
SelectPrimitive.Popup,
|
|
1061
|
+
{
|
|
1062
|
+
ref,
|
|
1063
|
+
className: cn(
|
|
1064
|
+
"relative max-h-60 min-w-32 overflow-hidden",
|
|
1065
|
+
"rounded-lg border border-default surface-default shadow-md",
|
|
1066
|
+
"data-[open]:animate-in data-[open]:fade-in-0 data-[open]:zoom-in-95",
|
|
1067
|
+
"data-[closed]:animate-out data-[closed]:fade-out-0 data-[closed]:zoom-out-95",
|
|
1068
|
+
"duration-200",
|
|
1069
|
+
className
|
|
1070
|
+
),
|
|
1071
|
+
children: [
|
|
1072
|
+
/* @__PURE__ */ jsx10(SelectScrollUpButton, {}),
|
|
1073
|
+
/* @__PURE__ */ jsx10(SelectPrimitive.List, { className: "p-[var(--3xs,2px)] overflow-y-auto max-h-[inherit]", children }),
|
|
1074
|
+
/* @__PURE__ */ jsx10(SelectScrollDownButton, {})
|
|
1075
|
+
]
|
|
1076
|
+
}
|
|
1077
|
+
)
|
|
1078
|
+
}
|
|
1079
|
+
) });
|
|
1080
|
+
}
|
|
1081
|
+
function SelectLabel({ className, ref, ...props }) {
|
|
1082
|
+
return /* @__PURE__ */ jsx10(
|
|
1083
|
+
SelectPrimitive.GroupLabel,
|
|
1084
|
+
{
|
|
1085
|
+
ref,
|
|
1086
|
+
className: cn(
|
|
1087
|
+
"text-secondary type-label-xs-semibold py-[5.5px] px-2",
|
|
1088
|
+
className
|
|
1089
|
+
),
|
|
1090
|
+
...props
|
|
1091
|
+
}
|
|
1092
|
+
);
|
|
1093
|
+
}
|
|
1094
|
+
function SelectItem({
|
|
1095
|
+
className,
|
|
1096
|
+
children,
|
|
1097
|
+
label,
|
|
1098
|
+
ref,
|
|
1099
|
+
...props
|
|
1100
|
+
}) {
|
|
1101
|
+
return /* @__PURE__ */ jsx10(
|
|
1102
|
+
SelectPrimitive.Item,
|
|
1103
|
+
{
|
|
1104
|
+
ref,
|
|
1105
|
+
label: label ?? (typeof children === "string" ? children : void 0),
|
|
1106
|
+
className: cn(
|
|
1107
|
+
"relative flex w-full cursor-pointer select-none items-center",
|
|
1108
|
+
"min-h-8 px-2 py-[5.5px] rounded-md",
|
|
1109
|
+
"type-body-sm-regular outline-none transition-colors text-default",
|
|
1110
|
+
"data-[highlighted]:interactive-hover",
|
|
1111
|
+
"data-[selected]:surface-secondary",
|
|
1112
|
+
"data-[selected]:data-[highlighted]:interactive-hover",
|
|
1113
|
+
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
1114
|
+
className
|
|
1115
|
+
),
|
|
1116
|
+
...props,
|
|
1117
|
+
children: /* @__PURE__ */ jsx10(SelectPrimitive.ItemText, { className: "flex-1 min-w-0 truncate", children })
|
|
1118
|
+
}
|
|
1119
|
+
);
|
|
1120
|
+
}
|
|
1121
|
+
function SelectSeparator({
|
|
1122
|
+
className,
|
|
1123
|
+
ref,
|
|
1124
|
+
...props
|
|
1125
|
+
}) {
|
|
1126
|
+
return /* @__PURE__ */ jsx10(
|
|
1127
|
+
"div",
|
|
1128
|
+
{
|
|
1129
|
+
ref,
|
|
1130
|
+
role: "separator",
|
|
1131
|
+
className: cn(
|
|
1132
|
+
"-mx-[2px] my-1 h-px bg-[var(--color-border-default)]",
|
|
1133
|
+
className
|
|
1134
|
+
),
|
|
1135
|
+
...props
|
|
1136
|
+
}
|
|
1137
|
+
);
|
|
1138
|
+
}
|
|
1139
|
+
function SelectScrollUpButton({
|
|
1140
|
+
className,
|
|
1141
|
+
ref,
|
|
1142
|
+
...props
|
|
1143
|
+
}) {
|
|
1144
|
+
return /* @__PURE__ */ jsx10(
|
|
1145
|
+
SelectPrimitive.ScrollUpArrow,
|
|
1146
|
+
{
|
|
1147
|
+
ref,
|
|
821
1148
|
className: cn(
|
|
822
|
-
"
|
|
1149
|
+
"flex cursor-default items-center justify-center py-1 text-secondary",
|
|
823
1150
|
className
|
|
824
1151
|
),
|
|
825
|
-
...props
|
|
1152
|
+
...props,
|
|
1153
|
+
children: /* @__PURE__ */ jsx10(CaretUpIcon, { size: 14 })
|
|
826
1154
|
}
|
|
827
1155
|
);
|
|
828
1156
|
}
|
|
829
|
-
function
|
|
830
|
-
|
|
831
|
-
|
|
1157
|
+
function SelectScrollDownButton({
|
|
1158
|
+
className,
|
|
1159
|
+
ref,
|
|
1160
|
+
...props
|
|
1161
|
+
}) {
|
|
1162
|
+
return /* @__PURE__ */ jsx10(
|
|
1163
|
+
SelectPrimitive.ScrollDownArrow,
|
|
832
1164
|
{
|
|
833
1165
|
ref,
|
|
834
|
-
"data-slot": "card-content",
|
|
835
1166
|
className: cn(
|
|
836
|
-
|
|
1167
|
+
"flex cursor-default items-center justify-center py-1 text-secondary",
|
|
837
1168
|
className
|
|
838
1169
|
),
|
|
839
|
-
...props
|
|
1170
|
+
...props,
|
|
1171
|
+
children: /* @__PURE__ */ jsx10(CaretDownIcon, { size: 14 })
|
|
840
1172
|
}
|
|
841
1173
|
);
|
|
842
1174
|
}
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
1175
|
+
|
|
1176
|
+
// src/components/ui/combobox.tsx
|
|
1177
|
+
import * as React5 from "react";
|
|
1178
|
+
import { Combobox as ComboboxPrimitive } from "@base-ui/react";
|
|
1179
|
+
|
|
1180
|
+
// src/components/ui/badge.tsx
|
|
1181
|
+
import * as React4 from "react";
|
|
1182
|
+
import { cva as cva8 } from "class-variance-authority";
|
|
1183
|
+
import { jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1184
|
+
var badgeVariants = cva8(
|
|
1185
|
+
[
|
|
1186
|
+
// Layout
|
|
1187
|
+
"inline-flex items-center justify-center gap-1",
|
|
1188
|
+
// Size
|
|
1189
|
+
"h-6 px-2",
|
|
1190
|
+
// Text
|
|
1191
|
+
"whitespace-nowrap type-label-xs-medium",
|
|
1192
|
+
// Shape
|
|
1193
|
+
"rounded-md",
|
|
1194
|
+
// Transitions
|
|
1195
|
+
"transition-colors",
|
|
1196
|
+
// Focus — flush ring, no gap
|
|
1197
|
+
"focus-visible:outline-none",
|
|
1198
|
+
"focus-visible:ring-2 focus-visible:ring-focus-default",
|
|
1199
|
+
// Icons
|
|
1200
|
+
"[&_svg]:pointer-events-none [&_svg]:size-3 [&_svg]:shrink-0"
|
|
1201
|
+
],
|
|
1202
|
+
{
|
|
1203
|
+
variants: {
|
|
1204
|
+
variant: {
|
|
1205
|
+
primary: ["interactive-accent interactive-accent-fg"],
|
|
1206
|
+
secondary: ["interactive-secondary interactive-secondary-fg"],
|
|
1207
|
+
outline: [
|
|
1208
|
+
"interactive-default interactive-default-fg",
|
|
1209
|
+
"border border-default"
|
|
1210
|
+
],
|
|
1211
|
+
ghost: ["interactive-default interactive-default-fg"],
|
|
1212
|
+
urgent: [
|
|
1213
|
+
"interactive-destructive interactive-destructive-fg",
|
|
1214
|
+
// Focus
|
|
1215
|
+
"focus-visible:ring-3 focus-visible:ring-focus-error"
|
|
1216
|
+
]
|
|
1217
|
+
}
|
|
1218
|
+
},
|
|
1219
|
+
defaultVariants: {}
|
|
1220
|
+
}
|
|
1221
|
+
);
|
|
1222
|
+
function isSingleDisplayCharacter(node) {
|
|
1223
|
+
if (node == null || typeof node === "boolean") return false;
|
|
1224
|
+
if (typeof node === "string" || typeof node === "number") {
|
|
1225
|
+
const trimmed = String(node).trim();
|
|
1226
|
+
return trimmed.length === 1;
|
|
1227
|
+
}
|
|
1228
|
+
if (Array.isArray(node)) {
|
|
1229
|
+
const parts = node.filter((x) => x != null && typeof x !== "boolean");
|
|
1230
|
+
if (parts.length !== 1) return false;
|
|
1231
|
+
return isSingleDisplayCharacter(parts[0]);
|
|
1232
|
+
}
|
|
1233
|
+
if (React4.isValidElement(node)) {
|
|
1234
|
+
return isSingleDisplayCharacter(
|
|
1235
|
+
node.props.children
|
|
1236
|
+
);
|
|
1237
|
+
}
|
|
1238
|
+
return false;
|
|
1239
|
+
}
|
|
1240
|
+
function Badge({
|
|
1241
|
+
className,
|
|
1242
|
+
variant,
|
|
1243
|
+
iconLeft,
|
|
1244
|
+
iconRight,
|
|
1245
|
+
onKeyDown,
|
|
1246
|
+
style,
|
|
1247
|
+
children,
|
|
1248
|
+
ref,
|
|
1249
|
+
...props
|
|
1250
|
+
}) {
|
|
1251
|
+
if (!variant) {
|
|
1252
|
+
return null;
|
|
1253
|
+
}
|
|
1254
|
+
const circle = isSingleDisplayCharacter(children) && !iconLeft && !iconRight;
|
|
1255
|
+
return /* @__PURE__ */ jsxs4(
|
|
1256
|
+
"span",
|
|
846
1257
|
{
|
|
847
|
-
|
|
848
|
-
|
|
1258
|
+
...props,
|
|
1259
|
+
role: "button",
|
|
1260
|
+
tabIndex: 0,
|
|
1261
|
+
onKeyDown: (e) => {
|
|
1262
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
1263
|
+
e.preventDefault();
|
|
1264
|
+
e.currentTarget.click();
|
|
1265
|
+
}
|
|
1266
|
+
onKeyDown?.(e);
|
|
1267
|
+
},
|
|
849
1268
|
className: cn(
|
|
850
|
-
|
|
1269
|
+
badgeVariants({ variant }),
|
|
1270
|
+
circle ? "size-5 shrink-0 p-0" : "",
|
|
851
1271
|
className
|
|
852
1272
|
),
|
|
853
|
-
|
|
1273
|
+
style,
|
|
1274
|
+
ref,
|
|
1275
|
+
children: [
|
|
1276
|
+
iconLeft,
|
|
1277
|
+
children,
|
|
1278
|
+
iconRight
|
|
1279
|
+
]
|
|
854
1280
|
}
|
|
855
1281
|
);
|
|
856
1282
|
}
|
|
857
1283
|
|
|
858
|
-
// src/components/ui/
|
|
859
|
-
import {
|
|
860
|
-
|
|
861
|
-
import { jsx as jsx9, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
862
|
-
var selectTriggerVariants = cva6(
|
|
1284
|
+
// src/components/ui/combobox.tsx
|
|
1285
|
+
import { jsx as jsx11, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1286
|
+
var comboboxInputVariants = cva(
|
|
863
1287
|
[
|
|
864
1288
|
// Layout
|
|
865
|
-
"flex w-full items-center
|
|
1289
|
+
"flex w-full items-center",
|
|
866
1290
|
// Appearance
|
|
867
1291
|
"border border-default surface-default shadow-xs",
|
|
868
1292
|
// Typography
|
|
869
1293
|
"text-default type-body-sm-regular",
|
|
870
|
-
// Placeholder state (no value selected)
|
|
871
|
-
"data-[placeholder]:text-secondary",
|
|
872
1294
|
// Transition
|
|
873
1295
|
"transition-colors",
|
|
874
|
-
// Focus
|
|
875
|
-
"focus-
|
|
1296
|
+
// Focus (delegated from inner input)
|
|
1297
|
+
"focus-within:outline-none focus-within:border-strong focus-within:ring-2 focus-within:ring-focus-default",
|
|
876
1298
|
// Disabled
|
|
877
|
-
"disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed",
|
|
1299
|
+
"has-[:disabled]:pointer-events-none has-[:disabled]:opacity-50 has-[:disabled]:cursor-not-allowed",
|
|
878
1300
|
// Error
|
|
879
|
-
"aria-invalid:border-error",
|
|
880
|
-
"aria-invalid:focus-visible:ring-2 aria-invalid:focus-visible:ring-focus-error aria-invalid:focus-visible:border-error"
|
|
1301
|
+
"has-[[aria-invalid=true]]:border-error",
|
|
1302
|
+
"has-[[aria-invalid=true]:focus-visible]:ring-2 has-[[aria-invalid=true]:focus-visible]:ring-focus-error has-[[aria-invalid=true]:focus-visible]:border-error"
|
|
881
1303
|
],
|
|
882
1304
|
{
|
|
883
1305
|
variants: {
|
|
@@ -893,128 +1315,224 @@ var selectTriggerVariants = cva6(
|
|
|
893
1315
|
}
|
|
894
1316
|
}
|
|
895
1317
|
);
|
|
896
|
-
var
|
|
897
|
-
var
|
|
898
|
-
|
|
899
|
-
|
|
1318
|
+
var Combobox = ComboboxPrimitive.Root;
|
|
1319
|
+
var useComboboxFilter = ComboboxPrimitive.useFilter;
|
|
1320
|
+
function ComboboxTrigger({
|
|
1321
|
+
className,
|
|
1322
|
+
...props
|
|
1323
|
+
}) {
|
|
1324
|
+
return /* @__PURE__ */ jsx11(
|
|
1325
|
+
ComboboxPrimitive.Trigger,
|
|
1326
|
+
{
|
|
1327
|
+
"data-slot": "combobox-trigger",
|
|
1328
|
+
"aria-label": "Toggle suggestions",
|
|
1329
|
+
className: cn(
|
|
1330
|
+
"shrink-0 transition-transform duration-200 data-[open]:rotate-180",
|
|
1331
|
+
className
|
|
1332
|
+
),
|
|
1333
|
+
...props,
|
|
1334
|
+
children: /* @__PURE__ */ jsx11(CaretDownIcon, { size: 16, className: "text-secondary" })
|
|
1335
|
+
}
|
|
1336
|
+
);
|
|
1337
|
+
}
|
|
1338
|
+
function ComboboxClear({ className, ...props }) {
|
|
1339
|
+
return /* @__PURE__ */ jsx11(
|
|
1340
|
+
ComboboxPrimitive.Clear,
|
|
1341
|
+
{
|
|
1342
|
+
"data-slot": "combobox-clear",
|
|
1343
|
+
"aria-label": "Clear selection",
|
|
1344
|
+
className: cn("shrink-0", className),
|
|
1345
|
+
...props,
|
|
1346
|
+
children: /* @__PURE__ */ jsx11(CloseIcon, { size: 16, className: "text-secondary" })
|
|
1347
|
+
}
|
|
1348
|
+
);
|
|
1349
|
+
}
|
|
1350
|
+
function ComboboxInput({
|
|
900
1351
|
className,
|
|
901
|
-
size,
|
|
902
1352
|
children,
|
|
1353
|
+
size,
|
|
1354
|
+
disabled = false,
|
|
1355
|
+
showTrigger = true,
|
|
1356
|
+
showClear = false,
|
|
903
1357
|
ref,
|
|
904
1358
|
...props
|
|
905
1359
|
}) {
|
|
906
|
-
return /* @__PURE__ */
|
|
907
|
-
|
|
1360
|
+
return /* @__PURE__ */ jsxs5(
|
|
1361
|
+
"div",
|
|
908
1362
|
{
|
|
909
|
-
"data-slot": "select-trigger",
|
|
910
1363
|
ref,
|
|
911
|
-
|
|
912
|
-
|
|
1364
|
+
"data-slot": "combobox-input",
|
|
1365
|
+
className: cn(
|
|
1366
|
+
"group/combobox-input",
|
|
1367
|
+
comboboxInputVariants({ size }),
|
|
1368
|
+
className
|
|
1369
|
+
),
|
|
913
1370
|
children: [
|
|
914
|
-
/* @__PURE__ */
|
|
915
|
-
|
|
916
|
-
SelectPrimitive.Icon,
|
|
1371
|
+
/* @__PURE__ */ jsx11(
|
|
1372
|
+
ComboboxPrimitive.Input,
|
|
917
1373
|
{
|
|
918
|
-
|
|
919
|
-
className: "
|
|
920
|
-
|
|
1374
|
+
disabled,
|
|
1375
|
+
className: "flex-1 min-w-0 bg-transparent outline-none placeholder:text-secondary",
|
|
1376
|
+
...props
|
|
921
1377
|
}
|
|
922
|
-
)
|
|
1378
|
+
),
|
|
1379
|
+
showClear && /* @__PURE__ */ jsx11(ComboboxClear, { disabled }),
|
|
1380
|
+
showTrigger && /* @__PURE__ */ jsx11(
|
|
1381
|
+
ComboboxTrigger,
|
|
1382
|
+
{
|
|
1383
|
+
className: "group-has-[[data-slot=combobox-clear]]/combobox-input:hidden",
|
|
1384
|
+
disabled
|
|
1385
|
+
}
|
|
1386
|
+
),
|
|
1387
|
+
children
|
|
923
1388
|
]
|
|
924
1389
|
}
|
|
925
1390
|
);
|
|
926
1391
|
}
|
|
927
|
-
function
|
|
1392
|
+
function ComboboxContent({
|
|
928
1393
|
className,
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
1394
|
+
side = "bottom",
|
|
1395
|
+
sideOffset = 8,
|
|
1396
|
+
align = "start",
|
|
1397
|
+
alignOffset = 0,
|
|
1398
|
+
anchor,
|
|
932
1399
|
...props
|
|
933
1400
|
}) {
|
|
934
|
-
return /* @__PURE__ */
|
|
935
|
-
|
|
1401
|
+
return /* @__PURE__ */ jsx11(ComboboxPrimitive.Portal, { children: /* @__PURE__ */ jsx11(
|
|
1402
|
+
ComboboxPrimitive.Positioner,
|
|
936
1403
|
{
|
|
937
|
-
side
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
...props,
|
|
946
|
-
children: /* @__PURE__ */ jsxs2(
|
|
947
|
-
SelectPrimitive.Popup,
|
|
1404
|
+
side,
|
|
1405
|
+
sideOffset,
|
|
1406
|
+
align,
|
|
1407
|
+
alignOffset,
|
|
1408
|
+
anchor,
|
|
1409
|
+
className: "isolate z-50 w-[var(--anchor-width)] outline-none",
|
|
1410
|
+
children: /* @__PURE__ */ jsx11(
|
|
1411
|
+
ComboboxPrimitive.Popup,
|
|
948
1412
|
{
|
|
949
|
-
|
|
1413
|
+
"data-slot": "combobox-content",
|
|
950
1414
|
className: cn(
|
|
951
|
-
|
|
1415
|
+
// Layout — matches SelectContent
|
|
1416
|
+
"group/combobox-content relative max-h-60 min-w-32 overflow-hidden",
|
|
1417
|
+
// Appearance
|
|
952
1418
|
"rounded-lg border border-default surface-default shadow-md",
|
|
1419
|
+
// Open / close animation
|
|
953
1420
|
"data-[open]:animate-in data-[open]:fade-in-0 data-[open]:zoom-in-95",
|
|
954
1421
|
"data-[closed]:animate-out data-[closed]:fade-out-0 data-[closed]:zoom-out-95",
|
|
955
|
-
"duration-
|
|
1422
|
+
"duration-150",
|
|
956
1423
|
className
|
|
957
1424
|
),
|
|
958
|
-
|
|
959
|
-
/* @__PURE__ */ jsx9(SelectScrollUpButton, {}),
|
|
960
|
-
/* @__PURE__ */ jsx9(SelectPrimitive.List, { className: "p-[var(--3xs,2px)] overflow-y-auto max-h-[inherit]", children }),
|
|
961
|
-
/* @__PURE__ */ jsx9(SelectScrollDownButton, {})
|
|
962
|
-
]
|
|
1425
|
+
...props
|
|
963
1426
|
}
|
|
964
1427
|
)
|
|
965
1428
|
}
|
|
966
1429
|
) });
|
|
967
1430
|
}
|
|
968
|
-
function
|
|
969
|
-
return /* @__PURE__ */
|
|
970
|
-
|
|
1431
|
+
function ComboboxList({ className, ...props }) {
|
|
1432
|
+
return /* @__PURE__ */ jsx11(
|
|
1433
|
+
ComboboxPrimitive.List,
|
|
1434
|
+
{
|
|
1435
|
+
"data-slot": "combobox-list",
|
|
1436
|
+
className: cn(
|
|
1437
|
+
// Layout — matches SelectContent list
|
|
1438
|
+
"group/combobox-list p-[2px] overflow-y-auto max-h-[inherit]",
|
|
1439
|
+
className
|
|
1440
|
+
),
|
|
1441
|
+
...props
|
|
1442
|
+
}
|
|
1443
|
+
);
|
|
1444
|
+
}
|
|
1445
|
+
function ComboboxItem({
|
|
1446
|
+
className,
|
|
1447
|
+
children,
|
|
1448
|
+
...props
|
|
1449
|
+
}) {
|
|
1450
|
+
return /* @__PURE__ */ jsxs5(
|
|
1451
|
+
ComboboxPrimitive.Item,
|
|
1452
|
+
{
|
|
1453
|
+
"data-slot": "combobox-item",
|
|
1454
|
+
className: cn(
|
|
1455
|
+
// Layout
|
|
1456
|
+
"relative flex w-full cursor-default select-none items-center gap-2",
|
|
1457
|
+
"min-h-8 py-[5.5px] pr-8 pl-2 rounded-md",
|
|
1458
|
+
// Typography & appearance
|
|
1459
|
+
"text-default type-body-sm-regular",
|
|
1460
|
+
"outline-none transition-colors",
|
|
1461
|
+
// Highlighted
|
|
1462
|
+
"data-[highlighted]:interactive-hover data-[highlighted]:outline-none",
|
|
1463
|
+
// Disabled
|
|
1464
|
+
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
1465
|
+
// SVG
|
|
1466
|
+
"[&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
1467
|
+
className
|
|
1468
|
+
),
|
|
1469
|
+
...props,
|
|
1470
|
+
children: [
|
|
1471
|
+
children,
|
|
1472
|
+
/* @__PURE__ */ jsx11(
|
|
1473
|
+
ComboboxPrimitive.ItemIndicator,
|
|
1474
|
+
{
|
|
1475
|
+
render: /* @__PURE__ */ jsx11("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx11(CheckmarkIcon, { size: 16 }) })
|
|
1476
|
+
}
|
|
1477
|
+
)
|
|
1478
|
+
]
|
|
1479
|
+
}
|
|
1480
|
+
);
|
|
1481
|
+
}
|
|
1482
|
+
function ComboboxGroup({ className, ...props }) {
|
|
1483
|
+
return /* @__PURE__ */ jsx11(
|
|
1484
|
+
ComboboxPrimitive.Group,
|
|
1485
|
+
{
|
|
1486
|
+
"data-slot": "combobox-group",
|
|
1487
|
+
className: cn(className),
|
|
1488
|
+
...props
|
|
1489
|
+
}
|
|
1490
|
+
);
|
|
1491
|
+
}
|
|
1492
|
+
function ComboboxLabel({
|
|
1493
|
+
className,
|
|
1494
|
+
...props
|
|
1495
|
+
}) {
|
|
1496
|
+
return /* @__PURE__ */ jsx11(
|
|
1497
|
+
ComboboxPrimitive.GroupLabel,
|
|
971
1498
|
{
|
|
972
|
-
|
|
1499
|
+
"data-slot": "combobox-label",
|
|
973
1500
|
className: cn(
|
|
974
|
-
"text-secondary type-label-xs-semibold
|
|
1501
|
+
"px-2 py-1.5 text-secondary type-label-xs-semibold",
|
|
975
1502
|
className
|
|
976
1503
|
),
|
|
977
1504
|
...props
|
|
978
1505
|
}
|
|
979
1506
|
);
|
|
980
1507
|
}
|
|
981
|
-
function
|
|
1508
|
+
function ComboboxEmpty({
|
|
982
1509
|
className,
|
|
983
|
-
children,
|
|
984
|
-
label,
|
|
985
|
-
ref,
|
|
986
1510
|
...props
|
|
987
1511
|
}) {
|
|
988
|
-
return /* @__PURE__ */
|
|
989
|
-
|
|
1512
|
+
return /* @__PURE__ */ jsx11(
|
|
1513
|
+
"div",
|
|
990
1514
|
{
|
|
991
|
-
|
|
992
|
-
|
|
1515
|
+
"data-slot": "combobox-empty",
|
|
1516
|
+
role: "status",
|
|
993
1517
|
className: cn(
|
|
994
|
-
|
|
995
|
-
"
|
|
996
|
-
"
|
|
997
|
-
"
|
|
998
|
-
"data-[selected]:surface-secondary",
|
|
999
|
-
"data-[selected]:data-[highlighted]:interactive-hover",
|
|
1000
|
-
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
1518
|
+
// Visible by default, hidden when the list contains items
|
|
1519
|
+
"flex group-has-[[data-slot=combobox-item]]/combobox-list:hidden",
|
|
1520
|
+
"w-full justify-center py-2 text-center",
|
|
1521
|
+
"type-body-sm-regular text-secondary",
|
|
1001
1522
|
className
|
|
1002
1523
|
),
|
|
1003
|
-
...props
|
|
1004
|
-
children: /* @__PURE__ */ jsx9(SelectPrimitive.ItemText, { className: "flex-1 min-w-0 truncate", children })
|
|
1524
|
+
...props
|
|
1005
1525
|
}
|
|
1006
1526
|
);
|
|
1007
1527
|
}
|
|
1008
|
-
function
|
|
1528
|
+
function ComboboxSeparator({
|
|
1009
1529
|
className,
|
|
1010
|
-
ref,
|
|
1011
1530
|
...props
|
|
1012
1531
|
}) {
|
|
1013
|
-
return /* @__PURE__ */
|
|
1014
|
-
|
|
1532
|
+
return /* @__PURE__ */ jsx11(
|
|
1533
|
+
ComboboxPrimitive.Separator,
|
|
1015
1534
|
{
|
|
1016
|
-
|
|
1017
|
-
role: "separator",
|
|
1535
|
+
"data-slot": "combobox-separator",
|
|
1018
1536
|
className: cn(
|
|
1019
1537
|
"-mx-[2px] my-1 h-px bg-[var(--color-border-default)]",
|
|
1020
1538
|
className
|
|
@@ -1023,52 +1541,126 @@ function SelectSeparator({
|
|
|
1023
1541
|
}
|
|
1024
1542
|
);
|
|
1025
1543
|
}
|
|
1026
|
-
|
|
1544
|
+
var comboboxChipsVariants = cva(
|
|
1545
|
+
[
|
|
1546
|
+
// Layout
|
|
1547
|
+
"flex w-full flex-wrap items-center",
|
|
1548
|
+
"py-1",
|
|
1549
|
+
// Appearance
|
|
1550
|
+
"border border-default surface-default shadow-xs",
|
|
1551
|
+
// Typography
|
|
1552
|
+
"text-default type-body-sm-regular",
|
|
1553
|
+
// Transition
|
|
1554
|
+
"transition-colors",
|
|
1555
|
+
// Focus (delegated from inner input)
|
|
1556
|
+
"focus-within:outline-none focus-within:border-strong focus-within:ring-2 focus-within:ring-focus-default",
|
|
1557
|
+
// Disabled (uses data attribute since children are consumer-controlled)
|
|
1558
|
+
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed",
|
|
1559
|
+
// Error
|
|
1560
|
+
"has-[[aria-invalid=true]]:border-error",
|
|
1561
|
+
"has-[[aria-invalid=true]:focus-visible]:ring-2 has-[[aria-invalid=true]:focus-visible]:ring-focus-error has-[[aria-invalid=true]:focus-visible]:border-error",
|
|
1562
|
+
// When chips are present, tighten horizontal padding
|
|
1563
|
+
"has-data-[slot=combobox-chip]:px-1"
|
|
1564
|
+
],
|
|
1565
|
+
{
|
|
1566
|
+
variants: {
|
|
1567
|
+
size: {
|
|
1568
|
+
default: "min-h-9 gap-1 pl-3 pr-2 rounded-md",
|
|
1569
|
+
large: "min-h-10 gap-1.5 pl-4 pr-2 rounded-md",
|
|
1570
|
+
small: "min-h-8 gap-1 px-2 rounded-sm",
|
|
1571
|
+
mini: "min-h-6 gap-0.5 px-1.5 rounded-sm type-body-xs-regular"
|
|
1572
|
+
}
|
|
1573
|
+
},
|
|
1574
|
+
defaultVariants: {
|
|
1575
|
+
size: "default"
|
|
1576
|
+
}
|
|
1577
|
+
}
|
|
1578
|
+
);
|
|
1579
|
+
function ComboboxChips({
|
|
1027
1580
|
className,
|
|
1028
|
-
|
|
1581
|
+
children,
|
|
1582
|
+
size,
|
|
1583
|
+
showTrigger = true,
|
|
1584
|
+
disabled = false,
|
|
1029
1585
|
...props
|
|
1030
1586
|
}) {
|
|
1031
|
-
return /* @__PURE__ */
|
|
1032
|
-
|
|
1587
|
+
return /* @__PURE__ */ jsxs5(
|
|
1588
|
+
ComboboxPrimitive.Chips,
|
|
1033
1589
|
{
|
|
1034
|
-
|
|
1590
|
+
"data-slot": "combobox-chips",
|
|
1591
|
+
"data-disabled": disabled || void 0,
|
|
1592
|
+
className: cn(comboboxChipsVariants({ size }), className),
|
|
1593
|
+
...props,
|
|
1594
|
+
children: [
|
|
1595
|
+
children,
|
|
1596
|
+
showTrigger && /* @__PURE__ */ jsx11(ComboboxTrigger, { className: "ml-auto", disabled })
|
|
1597
|
+
]
|
|
1598
|
+
}
|
|
1599
|
+
);
|
|
1600
|
+
}
|
|
1601
|
+
function ComboboxChip({
|
|
1602
|
+
className,
|
|
1603
|
+
children,
|
|
1604
|
+
showRemove = true,
|
|
1605
|
+
removeLabel = "Remove",
|
|
1606
|
+
...props
|
|
1607
|
+
}) {
|
|
1608
|
+
return /* @__PURE__ */ jsxs5(
|
|
1609
|
+
ComboboxPrimitive.Chip,
|
|
1610
|
+
{
|
|
1611
|
+
"data-slot": "combobox-chip",
|
|
1035
1612
|
className: cn(
|
|
1036
|
-
|
|
1613
|
+
badgeVariants({ variant: "secondary" }),
|
|
1614
|
+
// Overrides for chip context
|
|
1615
|
+
"gap-1 whitespace-nowrap",
|
|
1616
|
+
// Disabled
|
|
1617
|
+
"has-[:disabled]:pointer-events-none has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50",
|
|
1037
1618
|
className
|
|
1038
1619
|
),
|
|
1039
1620
|
...props,
|
|
1040
|
-
children:
|
|
1621
|
+
children: [
|
|
1622
|
+
children,
|
|
1623
|
+
showRemove && /* @__PURE__ */ jsx11(
|
|
1624
|
+
ComboboxPrimitive.ChipRemove,
|
|
1625
|
+
{
|
|
1626
|
+
"data-slot": "combobox-chip-remove",
|
|
1627
|
+
"aria-label": removeLabel,
|
|
1628
|
+
render: /* @__PURE__ */ jsx11("span", { className: "inline-flex cursor-pointer opacity-50 hover:opacity-100", children: /* @__PURE__ */ jsx11(CloseIcon, { size: 12, className: "pointer-events-none" }) })
|
|
1629
|
+
}
|
|
1630
|
+
)
|
|
1631
|
+
]
|
|
1041
1632
|
}
|
|
1042
1633
|
);
|
|
1043
1634
|
}
|
|
1044
|
-
function
|
|
1635
|
+
function ComboboxChipsInput({
|
|
1045
1636
|
className,
|
|
1046
|
-
ref,
|
|
1047
1637
|
...props
|
|
1048
1638
|
}) {
|
|
1049
|
-
return /* @__PURE__ */
|
|
1050
|
-
|
|
1639
|
+
return /* @__PURE__ */ jsx11(
|
|
1640
|
+
ComboboxPrimitive.Input,
|
|
1051
1641
|
{
|
|
1052
|
-
|
|
1642
|
+
"data-slot": "combobox-chip-input",
|
|
1053
1643
|
className: cn(
|
|
1054
|
-
"flex
|
|
1644
|
+
"flex-1 min-w-16 bg-transparent outline-none placeholder:text-secondary",
|
|
1055
1645
|
className
|
|
1056
1646
|
),
|
|
1057
|
-
...props
|
|
1058
|
-
children: /* @__PURE__ */ jsx9(CaretDownIcon, { size: 14 })
|
|
1647
|
+
...props
|
|
1059
1648
|
}
|
|
1060
1649
|
);
|
|
1061
1650
|
}
|
|
1651
|
+
function useComboboxAnchor() {
|
|
1652
|
+
return React5.useRef(null);
|
|
1653
|
+
}
|
|
1062
1654
|
|
|
1063
1655
|
// src/components/ui/field.tsx
|
|
1064
1656
|
import { useMemo } from "react";
|
|
1065
|
-
import { cva as
|
|
1657
|
+
import { cva as cva9 } from "class-variance-authority";
|
|
1066
1658
|
|
|
1067
1659
|
// src/components/ui/label.tsx
|
|
1068
|
-
import { jsx as
|
|
1660
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
1069
1661
|
var labelClasses = "type-label-sm-medium flex flex-row items-center gap-2 text-default select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50";
|
|
1070
1662
|
function Label({ className, ref, ...props }) {
|
|
1071
|
-
return /* @__PURE__ */
|
|
1663
|
+
return /* @__PURE__ */ jsx12(
|
|
1072
1664
|
"label",
|
|
1073
1665
|
{
|
|
1074
1666
|
ref,
|
|
@@ -1080,9 +1672,9 @@ function Label({ className, ref, ...props }) {
|
|
|
1080
1672
|
}
|
|
1081
1673
|
|
|
1082
1674
|
// src/components/ui/field.tsx
|
|
1083
|
-
import { jsx as
|
|
1675
|
+
import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1084
1676
|
function FieldSet({ className, ...props }) {
|
|
1085
|
-
return /* @__PURE__ */
|
|
1677
|
+
return /* @__PURE__ */ jsx13(
|
|
1086
1678
|
"fieldset",
|
|
1087
1679
|
{
|
|
1088
1680
|
"data-slot": "field-set",
|
|
@@ -1100,7 +1692,7 @@ function FieldLegend({
|
|
|
1100
1692
|
variant = "legend",
|
|
1101
1693
|
...props
|
|
1102
1694
|
}) {
|
|
1103
|
-
return /* @__PURE__ */
|
|
1695
|
+
return /* @__PURE__ */ jsx13(
|
|
1104
1696
|
"legend",
|
|
1105
1697
|
{
|
|
1106
1698
|
"data-slot": "field-legend",
|
|
@@ -1116,7 +1708,7 @@ function FieldLegend({
|
|
|
1116
1708
|
);
|
|
1117
1709
|
}
|
|
1118
1710
|
function FieldGroup({ className, ...props }) {
|
|
1119
|
-
return /* @__PURE__ */
|
|
1711
|
+
return /* @__PURE__ */ jsx13(
|
|
1120
1712
|
"div",
|
|
1121
1713
|
{
|
|
1122
1714
|
"data-slot": "field-group",
|
|
@@ -1128,7 +1720,7 @@ function FieldGroup({ className, ...props }) {
|
|
|
1128
1720
|
}
|
|
1129
1721
|
);
|
|
1130
1722
|
}
|
|
1131
|
-
var fieldVariants =
|
|
1723
|
+
var fieldVariants = cva9(
|
|
1132
1724
|
"group/field data-[invalid=true]:text-error flex w-full gap-3",
|
|
1133
1725
|
{
|
|
1134
1726
|
variants: {
|
|
@@ -1156,7 +1748,7 @@ function Field({
|
|
|
1156
1748
|
orientation = "vertical",
|
|
1157
1749
|
...props
|
|
1158
1750
|
}) {
|
|
1159
|
-
return /* @__PURE__ */
|
|
1751
|
+
return /* @__PURE__ */ jsx13(
|
|
1160
1752
|
"div",
|
|
1161
1753
|
{
|
|
1162
1754
|
role: "group",
|
|
@@ -1168,7 +1760,7 @@ function Field({
|
|
|
1168
1760
|
);
|
|
1169
1761
|
}
|
|
1170
1762
|
function FieldContent({ className, ...props }) {
|
|
1171
|
-
return /* @__PURE__ */
|
|
1763
|
+
return /* @__PURE__ */ jsx13(
|
|
1172
1764
|
"div",
|
|
1173
1765
|
{
|
|
1174
1766
|
"data-slot": "field-content",
|
|
@@ -1184,7 +1776,7 @@ function FieldLabel({
|
|
|
1184
1776
|
className,
|
|
1185
1777
|
...props
|
|
1186
1778
|
}) {
|
|
1187
|
-
return /* @__PURE__ */
|
|
1779
|
+
return /* @__PURE__ */ jsx13(
|
|
1188
1780
|
Label,
|
|
1189
1781
|
{
|
|
1190
1782
|
"data-slot": "field-label",
|
|
@@ -1199,7 +1791,7 @@ function FieldLabel({
|
|
|
1199
1791
|
);
|
|
1200
1792
|
}
|
|
1201
1793
|
function FieldTitle({ className, ...props }) {
|
|
1202
|
-
return /* @__PURE__ */
|
|
1794
|
+
return /* @__PURE__ */ jsx13(
|
|
1203
1795
|
"div",
|
|
1204
1796
|
{
|
|
1205
1797
|
"data-slot": "field-label",
|
|
@@ -1212,7 +1804,7 @@ function FieldTitle({ className, ...props }) {
|
|
|
1212
1804
|
);
|
|
1213
1805
|
}
|
|
1214
1806
|
function FieldDescription({ className, ...props }) {
|
|
1215
|
-
return /* @__PURE__ */
|
|
1807
|
+
return /* @__PURE__ */ jsx13(
|
|
1216
1808
|
"p",
|
|
1217
1809
|
{
|
|
1218
1810
|
"data-slot": "field-description",
|
|
@@ -1231,7 +1823,7 @@ function FieldSeparator({
|
|
|
1231
1823
|
className,
|
|
1232
1824
|
...props
|
|
1233
1825
|
}) {
|
|
1234
|
-
return /* @__PURE__ */
|
|
1826
|
+
return /* @__PURE__ */ jsxs6(
|
|
1235
1827
|
"div",
|
|
1236
1828
|
{
|
|
1237
1829
|
"data-slot": "field-separator",
|
|
@@ -1242,8 +1834,8 @@ function FieldSeparator({
|
|
|
1242
1834
|
),
|
|
1243
1835
|
...props,
|
|
1244
1836
|
children: [
|
|
1245
|
-
/* @__PURE__ */
|
|
1246
|
-
children && /* @__PURE__ */
|
|
1837
|
+
/* @__PURE__ */ jsx13(Separator, { className: "absolute inset-0 top-1/2" }),
|
|
1838
|
+
children && /* @__PURE__ */ jsx13(
|
|
1247
1839
|
"span",
|
|
1248
1840
|
{
|
|
1249
1841
|
className: "surface-default text-secondary relative mx-auto block w-fit px-2",
|
|
@@ -1271,14 +1863,14 @@ function FieldError({
|
|
|
1271
1863
|
if (errors?.length === 1 && errors[0]?.message) {
|
|
1272
1864
|
return errors[0].message;
|
|
1273
1865
|
}
|
|
1274
|
-
return /* @__PURE__ */
|
|
1275
|
-
(error, index) => error?.message && /* @__PURE__ */
|
|
1866
|
+
return /* @__PURE__ */ jsx13("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: errors.map(
|
|
1867
|
+
(error, index) => error?.message && /* @__PURE__ */ jsx13("li", { children: error.message }, index)
|
|
1276
1868
|
) });
|
|
1277
1869
|
}, [children, errors]);
|
|
1278
1870
|
if (!content) {
|
|
1279
1871
|
return null;
|
|
1280
1872
|
}
|
|
1281
|
-
return /* @__PURE__ */
|
|
1873
|
+
return /* @__PURE__ */ jsx13(
|
|
1282
1874
|
"div",
|
|
1283
1875
|
{
|
|
1284
1876
|
role: "alert",
|
|
@@ -1291,19 +1883,19 @@ function FieldError({
|
|
|
1291
1883
|
}
|
|
1292
1884
|
|
|
1293
1885
|
// src/components/ui/dialog.tsx
|
|
1294
|
-
import * as
|
|
1886
|
+
import * as React6 from "react";
|
|
1295
1887
|
import { Dialog as DialogPrimitive } from "@base-ui/react/dialog";
|
|
1296
|
-
import { jsx as
|
|
1297
|
-
var DialogChromeContext =
|
|
1888
|
+
import { jsx as jsx14, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1889
|
+
var DialogChromeContext = React6.createContext(null);
|
|
1298
1890
|
function useDialogChrome() {
|
|
1299
|
-
return
|
|
1891
|
+
return React6.useContext(DialogChromeContext) ?? { showCloseButton: false };
|
|
1300
1892
|
}
|
|
1301
1893
|
function DialogCloseControl({
|
|
1302
1894
|
className,
|
|
1303
1895
|
ref,
|
|
1304
1896
|
...props
|
|
1305
1897
|
}) {
|
|
1306
|
-
return /* @__PURE__ */
|
|
1898
|
+
return /* @__PURE__ */ jsxs7(
|
|
1307
1899
|
DialogPrimitive.Close,
|
|
1308
1900
|
{
|
|
1309
1901
|
ref,
|
|
@@ -1315,8 +1907,8 @@ function DialogCloseControl({
|
|
|
1315
1907
|
),
|
|
1316
1908
|
...props,
|
|
1317
1909
|
children: [
|
|
1318
|
-
/* @__PURE__ */
|
|
1319
|
-
/* @__PURE__ */
|
|
1910
|
+
/* @__PURE__ */ jsx14(CloseIcon, { size: 16, "aria-hidden": "true" }),
|
|
1911
|
+
/* @__PURE__ */ jsx14("span", { className: "sr-only", children: "Close" })
|
|
1320
1912
|
]
|
|
1321
1913
|
}
|
|
1322
1914
|
);
|
|
@@ -1326,7 +1918,7 @@ var DIALOG_MOBILE_FRAME = "w-[320px] min-h-[240px] max-h-[min(640px,calc(100dvh-
|
|
|
1326
1918
|
var Dialog = DialogPrimitive.Root;
|
|
1327
1919
|
var DialogTrigger = DialogPrimitive.Trigger;
|
|
1328
1920
|
function DialogOverlay({ className, ref, ...props }) {
|
|
1329
|
-
return /* @__PURE__ */
|
|
1921
|
+
return /* @__PURE__ */ jsx14(
|
|
1330
1922
|
DialogPrimitive.Backdrop,
|
|
1331
1923
|
{
|
|
1332
1924
|
ref,
|
|
@@ -1346,9 +1938,9 @@ function DialogContent({
|
|
|
1346
1938
|
ref,
|
|
1347
1939
|
...props
|
|
1348
1940
|
}) {
|
|
1349
|
-
return /* @__PURE__ */
|
|
1350
|
-
/* @__PURE__ */
|
|
1351
|
-
/* @__PURE__ */
|
|
1941
|
+
return /* @__PURE__ */ jsxs7(DialogPrimitive.Portal, { children: [
|
|
1942
|
+
/* @__PURE__ */ jsx14(DialogOverlay, {}),
|
|
1943
|
+
/* @__PURE__ */ jsx14(DialogPrimitive.Viewport, { className: "fixed inset-0 z-50 flex items-start justify-center overflow-y-auto p-4 sm:items-center sm:p-6", children: /* @__PURE__ */ jsx14(
|
|
1352
1944
|
DialogPrimitive.Popup,
|
|
1353
1945
|
{
|
|
1354
1946
|
ref,
|
|
@@ -1360,13 +1952,13 @@ function DialogContent({
|
|
|
1360
1952
|
className
|
|
1361
1953
|
),
|
|
1362
1954
|
...props,
|
|
1363
|
-
children: /* @__PURE__ */
|
|
1955
|
+
children: /* @__PURE__ */ jsx14(DialogChromeContext, { value: { showCloseButton }, children })
|
|
1364
1956
|
}
|
|
1365
1957
|
) })
|
|
1366
1958
|
] });
|
|
1367
1959
|
}
|
|
1368
1960
|
function DialogBody({ className, ref, ...props }) {
|
|
1369
|
-
return /* @__PURE__ */
|
|
1961
|
+
return /* @__PURE__ */ jsx14(
|
|
1370
1962
|
"div",
|
|
1371
1963
|
{
|
|
1372
1964
|
ref,
|
|
@@ -1380,7 +1972,7 @@ function DialogBody({ className, ref, ...props }) {
|
|
|
1380
1972
|
);
|
|
1381
1973
|
}
|
|
1382
1974
|
function DialogFooter({ className, ref, ...props }) {
|
|
1383
|
-
return /* @__PURE__ */
|
|
1975
|
+
return /* @__PURE__ */ jsx14(
|
|
1384
1976
|
"div",
|
|
1385
1977
|
{
|
|
1386
1978
|
ref,
|
|
@@ -1399,7 +1991,7 @@ function DialogHeader({
|
|
|
1399
1991
|
...props
|
|
1400
1992
|
}) {
|
|
1401
1993
|
const { showCloseButton } = useDialogChrome();
|
|
1402
|
-
return /* @__PURE__ */
|
|
1994
|
+
return /* @__PURE__ */ jsxs7(
|
|
1403
1995
|
"div",
|
|
1404
1996
|
{
|
|
1405
1997
|
ref,
|
|
@@ -1409,14 +2001,14 @@ function DialogHeader({
|
|
|
1409
2001
|
),
|
|
1410
2002
|
...props,
|
|
1411
2003
|
children: [
|
|
1412
|
-
/* @__PURE__ */
|
|
1413
|
-
showCloseButton ? /* @__PURE__ */
|
|
2004
|
+
/* @__PURE__ */ jsx14("div", { className: "flex min-w-0 flex-col gap-1", children }),
|
|
2005
|
+
showCloseButton ? /* @__PURE__ */ jsx14(DialogCloseControl, {}) : null
|
|
1414
2006
|
]
|
|
1415
2007
|
}
|
|
1416
2008
|
);
|
|
1417
2009
|
}
|
|
1418
2010
|
function DialogTitle({ className, ref, ...props }) {
|
|
1419
|
-
return /* @__PURE__ */
|
|
2011
|
+
return /* @__PURE__ */ jsx14(
|
|
1420
2012
|
DialogPrimitive.Title,
|
|
1421
2013
|
{
|
|
1422
2014
|
ref,
|
|
@@ -1430,7 +2022,7 @@ function DialogDescription({
|
|
|
1430
2022
|
ref,
|
|
1431
2023
|
...props
|
|
1432
2024
|
}) {
|
|
1433
|
-
return /* @__PURE__ */
|
|
2025
|
+
return /* @__PURE__ */ jsx14(
|
|
1434
2026
|
DialogPrimitive.Description,
|
|
1435
2027
|
{
|
|
1436
2028
|
ref,
|
|
@@ -1442,15 +2034,18 @@ function DialogDescription({
|
|
|
1442
2034
|
var DialogClose = DialogPrimitive.Close;
|
|
1443
2035
|
|
|
1444
2036
|
// src/components/ui/drawer.tsx
|
|
1445
|
-
import * as
|
|
2037
|
+
import * as React7 from "react";
|
|
1446
2038
|
import { Drawer as DrawerPrimitive } from "vaul";
|
|
1447
|
-
import { jsx as
|
|
1448
|
-
var
|
|
2039
|
+
import { jsx as jsx15, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
2040
|
+
var DrawerContext = React7.createContext({
|
|
2041
|
+
direction: "bottom"
|
|
2042
|
+
});
|
|
2043
|
+
var Drawer = ({ direction = "bottom", ...props }) => /* @__PURE__ */ jsx15(DrawerContext.Provider, { value: { direction }, children: /* @__PURE__ */ jsx15(DrawerPrimitive.Root, { direction, ...props }) });
|
|
1449
2044
|
var DrawerTrigger = DrawerPrimitive.Trigger;
|
|
1450
2045
|
var DrawerPortal = DrawerPrimitive.Portal;
|
|
1451
2046
|
var DrawerClose = DrawerPrimitive.Close;
|
|
1452
|
-
var DrawerOverlay =
|
|
1453
|
-
({ className, ...props }, ref) => /* @__PURE__ */
|
|
2047
|
+
var DrawerOverlay = React7.forwardRef(
|
|
2048
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
|
|
1454
2049
|
DrawerPrimitive.Overlay,
|
|
1455
2050
|
{
|
|
1456
2051
|
ref,
|
|
@@ -1461,44 +2056,43 @@ var DrawerOverlay = React5.forwardRef(
|
|
|
1461
2056
|
)
|
|
1462
2057
|
);
|
|
1463
2058
|
DrawerOverlay.displayName = "DrawerOverlay";
|
|
1464
|
-
var DrawerContent =
|
|
1465
|
-
({ className, children, ...props }, ref) =>
|
|
1466
|
-
|
|
1467
|
-
/* @__PURE__ */
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
"
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:h-full data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:border-default data-[vaul-drawer-direction=right]:sm:max-w-sm",
|
|
1482
|
-
className
|
|
1483
|
-
),
|
|
1484
|
-
...props,
|
|
1485
|
-
children: [
|
|
1486
|
-
/* @__PURE__ */ jsx13(
|
|
1487
|
-
"div",
|
|
1488
|
-
{
|
|
1489
|
-
"aria-hidden": "true",
|
|
1490
|
-
className: "mx-auto mt-2 hidden h-[3px] w-[50px] shrink-0 rounded-[2px] surface-inverse group-data-[vaul-drawer-direction=bottom]/drawer-content:block"
|
|
1491
|
-
}
|
|
2059
|
+
var DrawerContent = React7.forwardRef(
|
|
2060
|
+
({ className, children, ...props }, ref) => {
|
|
2061
|
+
const { direction } = React7.useContext(DrawerContext);
|
|
2062
|
+
return /* @__PURE__ */ jsxs8(DrawerPortal, { children: [
|
|
2063
|
+
/* @__PURE__ */ jsx15(DrawerOverlay, {}),
|
|
2064
|
+
/* @__PURE__ */ jsxs8(
|
|
2065
|
+
DrawerPrimitive.Content,
|
|
2066
|
+
{
|
|
2067
|
+
ref,
|
|
2068
|
+
"data-slot": "drawer-content",
|
|
2069
|
+
className: cn(
|
|
2070
|
+
"group/drawer-content fixed z-50 flex h-auto flex-col surface-default shadow-lg outline-none",
|
|
2071
|
+
direction === "bottom" && "inset-x-0 bottom-0 mt-24 max-h-[80vh] rounded-t-xl border-t border-default",
|
|
2072
|
+
direction === "top" && "inset-x-0 top-0 mb-24 max-h-[80vh] rounded-b-xl border-b border-default",
|
|
2073
|
+
direction === "left" && "inset-y-0 left-0 h-full w-3/4 rounded-r-xl border-r border-default",
|
|
2074
|
+
direction === "right" && "inset-y-0 right-0 h-full w-3/4 rounded-l-xl border-l border-default",
|
|
2075
|
+
className
|
|
1492
2076
|
),
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
2077
|
+
...props,
|
|
2078
|
+
children: [
|
|
2079
|
+
direction === "bottom" && /* @__PURE__ */ jsx15(
|
|
2080
|
+
"div",
|
|
2081
|
+
{
|
|
2082
|
+
"aria-hidden": "true",
|
|
2083
|
+
className: "mx-auto mt-2 h-[3px] w-[50px] shrink-0 rounded-[2px] surface-inverse"
|
|
2084
|
+
}
|
|
2085
|
+
),
|
|
2086
|
+
children
|
|
2087
|
+
]
|
|
2088
|
+
}
|
|
2089
|
+
)
|
|
2090
|
+
] });
|
|
2091
|
+
}
|
|
1498
2092
|
);
|
|
1499
2093
|
DrawerContent.displayName = "DrawerContent";
|
|
1500
|
-
var DrawerTitle =
|
|
1501
|
-
({ className, children, ...props }, ref) => /* @__PURE__ */
|
|
2094
|
+
var DrawerTitle = React7.forwardRef(
|
|
2095
|
+
({ className, children, ...props }, ref) => /* @__PURE__ */ jsx15("div", { className: "shrink-0 p-4", children: /* @__PURE__ */ jsx15(
|
|
1502
2096
|
DrawerPrimitive.Title,
|
|
1503
2097
|
{
|
|
1504
2098
|
ref,
|
|
@@ -1510,8 +2104,8 @@ var DrawerTitle = React5.forwardRef(
|
|
|
1510
2104
|
) })
|
|
1511
2105
|
);
|
|
1512
2106
|
DrawerTitle.displayName = "DrawerTitle";
|
|
1513
|
-
var DrawerBody =
|
|
1514
|
-
({ className, ...props }, ref) => /* @__PURE__ */
|
|
2107
|
+
var DrawerBody = React7.forwardRef(
|
|
2108
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
|
|
1515
2109
|
"div",
|
|
1516
2110
|
{
|
|
1517
2111
|
ref,
|
|
@@ -1525,7 +2119,7 @@ var DrawerBody = React5.forwardRef(
|
|
|
1525
2119
|
)
|
|
1526
2120
|
);
|
|
1527
2121
|
DrawerBody.displayName = "DrawerBody";
|
|
1528
|
-
var DrawerDescription =
|
|
2122
|
+
var DrawerDescription = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
|
|
1529
2123
|
DrawerPrimitive.Description,
|
|
1530
2124
|
{
|
|
1531
2125
|
ref,
|
|
@@ -1535,8 +2129,8 @@ var DrawerDescription = React5.forwardRef(({ className, ...props }, ref) => /* @
|
|
|
1535
2129
|
}
|
|
1536
2130
|
));
|
|
1537
2131
|
DrawerDescription.displayName = "DrawerDescription";
|
|
1538
|
-
var DrawerFooter =
|
|
1539
|
-
({ className, ...props }, ref) => /* @__PURE__ */
|
|
2132
|
+
var DrawerFooter = React7.forwardRef(
|
|
2133
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
|
|
1540
2134
|
"div",
|
|
1541
2135
|
{
|
|
1542
2136
|
ref,
|
|
@@ -1554,9 +2148,9 @@ DrawerFooter.displayName = "DrawerFooter";
|
|
|
1554
2148
|
// src/components/ui/breadcrumb.tsx
|
|
1555
2149
|
import { mergeProps as mergeProps2 } from "@base-ui/react/merge-props";
|
|
1556
2150
|
import { useRender as useRender2 } from "@base-ui/react/use-render";
|
|
1557
|
-
import { jsx as
|
|
2151
|
+
import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
1558
2152
|
function Breadcrumb({ className, ref, ...props }) {
|
|
1559
|
-
return /* @__PURE__ */
|
|
2153
|
+
return /* @__PURE__ */ jsx16(
|
|
1560
2154
|
"nav",
|
|
1561
2155
|
{
|
|
1562
2156
|
"aria-label": "breadcrumb",
|
|
@@ -1568,7 +2162,7 @@ function Breadcrumb({ className, ref, ...props }) {
|
|
|
1568
2162
|
);
|
|
1569
2163
|
}
|
|
1570
2164
|
function BreadcrumbList({ className, ref, ...props }) {
|
|
1571
|
-
return /* @__PURE__ */
|
|
2165
|
+
return /* @__PURE__ */ jsx16(
|
|
1572
2166
|
"ol",
|
|
1573
2167
|
{
|
|
1574
2168
|
"data-slot": "breadcrumb-list",
|
|
@@ -1582,7 +2176,7 @@ function BreadcrumbList({ className, ref, ...props }) {
|
|
|
1582
2176
|
);
|
|
1583
2177
|
}
|
|
1584
2178
|
function BreadcrumbItem({ className, ref, ...props }) {
|
|
1585
|
-
return /* @__PURE__ */
|
|
2179
|
+
return /* @__PURE__ */ jsx16(
|
|
1586
2180
|
"li",
|
|
1587
2181
|
{
|
|
1588
2182
|
"data-slot": "breadcrumb-item",
|
|
@@ -1614,7 +2208,7 @@ function BreadcrumbLink({
|
|
|
1614
2208
|
});
|
|
1615
2209
|
}
|
|
1616
2210
|
function BreadcrumbPage({ className, ref, ...props }) {
|
|
1617
|
-
return /* @__PURE__ */
|
|
2211
|
+
return /* @__PURE__ */ jsx16(
|
|
1618
2212
|
"span",
|
|
1619
2213
|
{
|
|
1620
2214
|
"data-slot": "breadcrumb-page",
|
|
@@ -1633,7 +2227,7 @@ function BreadcrumbSeparator({
|
|
|
1633
2227
|
ref,
|
|
1634
2228
|
...props
|
|
1635
2229
|
}) {
|
|
1636
|
-
return /* @__PURE__ */
|
|
2230
|
+
return /* @__PURE__ */ jsx16(
|
|
1637
2231
|
"li",
|
|
1638
2232
|
{
|
|
1639
2233
|
"data-slot": "breadcrumb-separator",
|
|
@@ -1642,7 +2236,7 @@ function BreadcrumbSeparator({
|
|
|
1642
2236
|
className: cn("[&>svg]:size-3.5", className),
|
|
1643
2237
|
ref,
|
|
1644
2238
|
...props,
|
|
1645
|
-
children: children ?? /* @__PURE__ */
|
|
2239
|
+
children: children ?? /* @__PURE__ */ jsx16(CaretRightIcon, { className: "text-current cn-rtl-flip" })
|
|
1646
2240
|
}
|
|
1647
2241
|
);
|
|
1648
2242
|
}
|
|
@@ -1651,7 +2245,7 @@ function BreadcrumbEllipsis({
|
|
|
1651
2245
|
ref,
|
|
1652
2246
|
...props
|
|
1653
2247
|
}) {
|
|
1654
|
-
return /* @__PURE__ */
|
|
2248
|
+
return /* @__PURE__ */ jsxs9(
|
|
1655
2249
|
"span",
|
|
1656
2250
|
{
|
|
1657
2251
|
"data-slot": "breadcrumb-ellipsis",
|
|
@@ -1664,8 +2258,8 @@ function BreadcrumbEllipsis({
|
|
|
1664
2258
|
ref,
|
|
1665
2259
|
...props,
|
|
1666
2260
|
children: [
|
|
1667
|
-
/* @__PURE__ */
|
|
1668
|
-
/* @__PURE__ */
|
|
2261
|
+
/* @__PURE__ */ jsx16(MoreMenuIcon, { className: "text-current" }),
|
|
2262
|
+
/* @__PURE__ */ jsx16("span", { className: "sr-only", children: "More" })
|
|
1669
2263
|
]
|
|
1670
2264
|
}
|
|
1671
2265
|
);
|
|
@@ -1673,18 +2267,18 @@ function BreadcrumbEllipsis({
|
|
|
1673
2267
|
|
|
1674
2268
|
// src/components/ui/tooltip.tsx
|
|
1675
2269
|
import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
|
|
1676
|
-
import { jsx as
|
|
2270
|
+
import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1677
2271
|
function TooltipProvider({
|
|
1678
2272
|
delay = 0,
|
|
1679
2273
|
...props
|
|
1680
2274
|
}) {
|
|
1681
|
-
return /* @__PURE__ */
|
|
2275
|
+
return /* @__PURE__ */ jsx17(TooltipPrimitive.Provider, { delay, ...props });
|
|
1682
2276
|
}
|
|
1683
2277
|
function Tooltip({ ...props }) {
|
|
1684
|
-
return /* @__PURE__ */
|
|
2278
|
+
return /* @__PURE__ */ jsx17(TooltipPrimitive.Root, { ...props });
|
|
1685
2279
|
}
|
|
1686
2280
|
function TooltipTrigger({ ...props }) {
|
|
1687
|
-
return /* @__PURE__ */
|
|
2281
|
+
return /* @__PURE__ */ jsx17(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
|
|
1688
2282
|
}
|
|
1689
2283
|
function TooltipContent({
|
|
1690
2284
|
className,
|
|
@@ -1695,7 +2289,7 @@ function TooltipContent({
|
|
|
1695
2289
|
children,
|
|
1696
2290
|
...props
|
|
1697
2291
|
}) {
|
|
1698
|
-
return /* @__PURE__ */
|
|
2292
|
+
return /* @__PURE__ */ jsx17(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx17(
|
|
1699
2293
|
TooltipPrimitive.Positioner,
|
|
1700
2294
|
{
|
|
1701
2295
|
align,
|
|
@@ -1703,7 +2297,7 @@ function TooltipContent({
|
|
|
1703
2297
|
side,
|
|
1704
2298
|
sideOffset,
|
|
1705
2299
|
className: "isolate z-50",
|
|
1706
|
-
children: /* @__PURE__ */
|
|
2300
|
+
children: /* @__PURE__ */ jsxs10(
|
|
1707
2301
|
TooltipPrimitive.Popup,
|
|
1708
2302
|
{
|
|
1709
2303
|
"data-slot": "tooltip-content",
|
|
@@ -1727,7 +2321,7 @@ function TooltipContent({
|
|
|
1727
2321
|
...props,
|
|
1728
2322
|
children: [
|
|
1729
2323
|
children,
|
|
1730
|
-
/* @__PURE__ */
|
|
2324
|
+
/* @__PURE__ */ jsx17(
|
|
1731
2325
|
TooltipPrimitive.Arrow,
|
|
1732
2326
|
{
|
|
1733
2327
|
className: cn(
|
|
@@ -1752,14 +2346,277 @@ function TooltipContent({
|
|
|
1752
2346
|
) });
|
|
1753
2347
|
}
|
|
1754
2348
|
|
|
2349
|
+
// src/components/ui/toast.tsx
|
|
2350
|
+
import { Toast as ToastPrimitive } from "@base-ui/react/toast";
|
|
2351
|
+
import { jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
2352
|
+
var toastManager = ToastPrimitive.createToastManager();
|
|
2353
|
+
function emit(manager, type, title, options = {}) {
|
|
2354
|
+
const { description, duration, priority, action, id } = options;
|
|
2355
|
+
return manager.add({
|
|
2356
|
+
id,
|
|
2357
|
+
title,
|
|
2358
|
+
description,
|
|
2359
|
+
type,
|
|
2360
|
+
timeout: duration,
|
|
2361
|
+
priority: priority ?? (type === "error" ? "high" : "low"),
|
|
2362
|
+
actionProps: action ? { children: action.label, onClick: action.onClick } : void 0
|
|
2363
|
+
});
|
|
2364
|
+
}
|
|
2365
|
+
function makeToast(manager) {
|
|
2366
|
+
function base(title, options) {
|
|
2367
|
+
return emit(manager, "default", title, options);
|
|
2368
|
+
}
|
|
2369
|
+
return Object.assign(base, {
|
|
2370
|
+
success: (title, options) => emit(manager, "success", title, options),
|
|
2371
|
+
error: (title, options) => emit(manager, "error", title, options),
|
|
2372
|
+
info: (title, options) => emit(manager, "info", title, options),
|
|
2373
|
+
warning: (title, options) => emit(manager, "warning", title, options),
|
|
2374
|
+
/** Resolve/reject a promise into loading → success/error toasts. */
|
|
2375
|
+
promise: manager.promise,
|
|
2376
|
+
/** Dismiss a specific toast by id. */
|
|
2377
|
+
dismiss: (id) => manager.close(id),
|
|
2378
|
+
/** Imperatively update an existing toast. */
|
|
2379
|
+
update: manager.update
|
|
2380
|
+
});
|
|
2381
|
+
}
|
|
2382
|
+
var toast = makeToast(toastManager);
|
|
2383
|
+
var TYPE_ICON = {
|
|
2384
|
+
default: null,
|
|
2385
|
+
success: CheckmarkIcon,
|
|
2386
|
+
error: ExclamationIcon,
|
|
2387
|
+
info: InformationIcon,
|
|
2388
|
+
warning: WarningIcon
|
|
2389
|
+
};
|
|
2390
|
+
var TYPE_ICON_COLOR = {
|
|
2391
|
+
default: "",
|
|
2392
|
+
success: "text-success",
|
|
2393
|
+
error: "text-error",
|
|
2394
|
+
info: "text-info",
|
|
2395
|
+
warning: "text-warning"
|
|
2396
|
+
};
|
|
2397
|
+
var TYPE_SURFACE = {
|
|
2398
|
+
default: "surface-default border border-default",
|
|
2399
|
+
success: "surface-success",
|
|
2400
|
+
error: "surface-error",
|
|
2401
|
+
info: "surface-info",
|
|
2402
|
+
warning: "surface-warning"
|
|
2403
|
+
};
|
|
2404
|
+
var VIEWPORT_POSITION = {
|
|
2405
|
+
"top-center": "top-4 left-1/2 -translate-x-1/2 sm:top-8",
|
|
2406
|
+
"top-right": "top-4 right-4 sm:top-8 sm:right-8",
|
|
2407
|
+
"bottom-left": "bottom-4 left-4 sm:bottom-8 sm:left-8",
|
|
2408
|
+
"bottom-center": "bottom-4 left-1/2 -translate-x-1/2 sm:bottom-8",
|
|
2409
|
+
"bottom-right": "bottom-4 right-4 sm:bottom-8 sm:right-8"
|
|
2410
|
+
};
|
|
2411
|
+
function ToastList({ side }) {
|
|
2412
|
+
const { toasts } = ToastPrimitive.useToastManager();
|
|
2413
|
+
return toasts.map((item) => {
|
|
2414
|
+
const rawType = item.type;
|
|
2415
|
+
const type = rawType in TYPE_SURFACE ? rawType : "default";
|
|
2416
|
+
const Icon = TYPE_ICON[type] ?? null;
|
|
2417
|
+
return /* @__PURE__ */ jsx18(
|
|
2418
|
+
ToastPrimitive.Root,
|
|
2419
|
+
{
|
|
2420
|
+
toast: item,
|
|
2421
|
+
"data-slot": "toast",
|
|
2422
|
+
swipeDirection: side === "top" ? ["up", "right"] : ["down", "right"],
|
|
2423
|
+
style: { "--y-dir": side === "top" ? 1 : -1 },
|
|
2424
|
+
className: cn(
|
|
2425
|
+
// Stacking math (CSS variables provided by Base UI)
|
|
2426
|
+
"[--gap:0.75rem] [--peek:0.625rem]",
|
|
2427
|
+
"[--scale:calc(max(0,1-(var(--toast-index)*0.06)))] [--shrink:calc(1-var(--scale))]",
|
|
2428
|
+
"[--height:var(--toast-frontmost-height,var(--toast-height))]",
|
|
2429
|
+
"[--offset-y:calc((var(--toast-offset-y)*var(--y-dir))+(var(--toast-index)*var(--gap)*var(--y-dir))+var(--toast-swipe-movement-y))]",
|
|
2430
|
+
// Layout — anchored to the viewport edge, full width, stacked by z-index
|
|
2431
|
+
"absolute left-auto right-0 mr-0 w-full",
|
|
2432
|
+
"z-[calc(1000-var(--toast-index))] h-[var(--height)] data-expanded:h-[var(--toast-height)]",
|
|
2433
|
+
side === "top" ? "top-0 origin-top" : "bottom-0 origin-bottom",
|
|
2434
|
+
// Surface — variant-tinted to match the Alert component (default = neutral)
|
|
2435
|
+
TYPE_SURFACE[type],
|
|
2436
|
+
"rounded-lg bg-clip-padding shadow-lg select-none",
|
|
2437
|
+
// Collapsed transform: peek + shrink each toast behind the front one
|
|
2438
|
+
"[transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)+(var(--y-dir)*((var(--toast-index)*var(--peek))+(var(--shrink)*var(--height))))))_scale(var(--scale))]",
|
|
2439
|
+
// Expanded (hover/focus) transform: fan out by real heights + gap
|
|
2440
|
+
"data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]",
|
|
2441
|
+
// Enter / exit
|
|
2442
|
+
"data-starting-style:[transform:translateY(calc(var(--y-dir)*-150%))]",
|
|
2443
|
+
"data-ending-style:opacity-0 data-limited:opacity-0",
|
|
2444
|
+
"[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(calc(var(--y-dir)*-150%))]",
|
|
2445
|
+
// Swipe-to-dismiss exits
|
|
2446
|
+
"data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]",
|
|
2447
|
+
"data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]",
|
|
2448
|
+
"data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]",
|
|
2449
|
+
"data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]",
|
|
2450
|
+
// Invisible spacer keeps the hover target contiguous across the gap
|
|
2451
|
+
"after:absolute after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']",
|
|
2452
|
+
side === "top" ? "after:top-full" : "after:bottom-full",
|
|
2453
|
+
// Motion
|
|
2454
|
+
"[transition:transform_0.5s_cubic-bezier(0.22,1,0.36,1),opacity_0.4s,height_0.15s]"
|
|
2455
|
+
),
|
|
2456
|
+
children: /* @__PURE__ */ jsxs11(
|
|
2457
|
+
ToastPrimitive.Content,
|
|
2458
|
+
{
|
|
2459
|
+
"data-slot": "toast-content",
|
|
2460
|
+
className: cn(
|
|
2461
|
+
"flex h-full gap-3 px-4 py-3 overflow-hidden",
|
|
2462
|
+
item.description ? "items-start" : "items-center",
|
|
2463
|
+
"transition-opacity duration-[250ms] ease-[cubic-bezier(0.22,1,0.36,1)]",
|
|
2464
|
+
"data-behind:opacity-0 data-expanded:opacity-100"
|
|
2465
|
+
),
|
|
2466
|
+
children: [
|
|
2467
|
+
Icon ? /* @__PURE__ */ jsx18(
|
|
2468
|
+
Icon,
|
|
2469
|
+
{
|
|
2470
|
+
className: cn("mt-0.5 size-4 shrink-0", TYPE_ICON_COLOR[type])
|
|
2471
|
+
}
|
|
2472
|
+
) : null,
|
|
2473
|
+
/* @__PURE__ */ jsxs11("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
|
|
2474
|
+
/* @__PURE__ */ jsx18(
|
|
2475
|
+
ToastPrimitive.Title,
|
|
2476
|
+
{
|
|
2477
|
+
"data-slot": "toast-title",
|
|
2478
|
+
className: item.description ? "type-body-sm-medium text-default" : "type-label-sm-medium text-default"
|
|
2479
|
+
}
|
|
2480
|
+
),
|
|
2481
|
+
item.description && /* @__PURE__ */ jsx18(
|
|
2482
|
+
ToastPrimitive.Description,
|
|
2483
|
+
{
|
|
2484
|
+
"data-slot": "toast-description",
|
|
2485
|
+
className: "type-body-sm-regular text-secondary"
|
|
2486
|
+
}
|
|
2487
|
+
)
|
|
2488
|
+
] }),
|
|
2489
|
+
item.actionProps ? /* @__PURE__ */ jsx18(
|
|
2490
|
+
ToastPrimitive.Action,
|
|
2491
|
+
{
|
|
2492
|
+
"data-slot": "toast-action",
|
|
2493
|
+
render: /* @__PURE__ */ jsx18(Button, { variant: "default", size: "mini" }),
|
|
2494
|
+
...item.actionProps
|
|
2495
|
+
}
|
|
2496
|
+
) : null,
|
|
2497
|
+
/* @__PURE__ */ jsx18(
|
|
2498
|
+
ToastPrimitive.Close,
|
|
2499
|
+
{
|
|
2500
|
+
"data-slot": "toast-close",
|
|
2501
|
+
"aria-label": "Dismiss notification",
|
|
2502
|
+
className: cn(
|
|
2503
|
+
"shrink-0 rounded-md p-1 text-secondary",
|
|
2504
|
+
"transition-colors hover:surface-secondary hover:text-default",
|
|
2505
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-default"
|
|
2506
|
+
),
|
|
2507
|
+
children: /* @__PURE__ */ jsx18(CloseIcon, { className: "size-4" })
|
|
2508
|
+
}
|
|
2509
|
+
)
|
|
2510
|
+
]
|
|
2511
|
+
}
|
|
2512
|
+
)
|
|
2513
|
+
},
|
|
2514
|
+
item.id
|
|
2515
|
+
);
|
|
2516
|
+
});
|
|
2517
|
+
}
|
|
2518
|
+
function Toaster({
|
|
2519
|
+
position = "bottom-right",
|
|
2520
|
+
timeout,
|
|
2521
|
+
limit,
|
|
2522
|
+
className,
|
|
2523
|
+
toastManager: manager = toastManager
|
|
2524
|
+
}) {
|
|
2525
|
+
const side = position.startsWith("top") ? "top" : "bottom";
|
|
2526
|
+
return /* @__PURE__ */ jsx18(
|
|
2527
|
+
ToastPrimitive.Provider,
|
|
2528
|
+
{
|
|
2529
|
+
toastManager: manager,
|
|
2530
|
+
timeout,
|
|
2531
|
+
limit,
|
|
2532
|
+
children: /* @__PURE__ */ jsx18(ToastPrimitive.Portal, { children: /* @__PURE__ */ jsx18(
|
|
2533
|
+
ToastPrimitive.Viewport,
|
|
2534
|
+
{
|
|
2535
|
+
"data-slot": "toaster",
|
|
2536
|
+
className: cn(
|
|
2537
|
+
"fixed z-50 mx-auto flex w-[calc(100vw-2rem)] sm:w-[400px]",
|
|
2538
|
+
VIEWPORT_POSITION[position],
|
|
2539
|
+
className
|
|
2540
|
+
),
|
|
2541
|
+
children: /* @__PURE__ */ jsx18(ToastList, { side })
|
|
2542
|
+
}
|
|
2543
|
+
) })
|
|
2544
|
+
}
|
|
2545
|
+
);
|
|
2546
|
+
}
|
|
2547
|
+
function createToaster() {
|
|
2548
|
+
const manager = ToastPrimitive.createToastManager();
|
|
2549
|
+
const scopedToast = makeToast(manager);
|
|
2550
|
+
function ScopedToaster(props) {
|
|
2551
|
+
return /* @__PURE__ */ jsx18(Toaster, { ...props, toastManager: manager });
|
|
2552
|
+
}
|
|
2553
|
+
return { toast: scopedToast, Toaster: ScopedToaster };
|
|
2554
|
+
}
|
|
2555
|
+
|
|
2556
|
+
// src/components/ui/hover-card.tsx
|
|
2557
|
+
import { PreviewCard as PreviewCardPrimitive } from "@base-ui/react/preview-card";
|
|
2558
|
+
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
2559
|
+
function HoverCard({ ...props }) {
|
|
2560
|
+
return /* @__PURE__ */ jsx19(PreviewCardPrimitive.Root, { ...props });
|
|
2561
|
+
}
|
|
2562
|
+
HoverCard.displayName = "HoverCard";
|
|
2563
|
+
function HoverCardTrigger({ ...props }) {
|
|
2564
|
+
return /* @__PURE__ */ jsx19(PreviewCardPrimitive.Trigger, { "data-slot": "hover-card-trigger", ...props });
|
|
2565
|
+
}
|
|
2566
|
+
HoverCardTrigger.displayName = "HoverCardTrigger";
|
|
2567
|
+
function HoverCardContent({
|
|
2568
|
+
className,
|
|
2569
|
+
side = "bottom",
|
|
2570
|
+
sideOffset = 8,
|
|
2571
|
+
align = "center",
|
|
2572
|
+
alignOffset = 0,
|
|
2573
|
+
...props
|
|
2574
|
+
}) {
|
|
2575
|
+
return /* @__PURE__ */ jsx19(PreviewCardPrimitive.Portal, { children: /* @__PURE__ */ jsx19(
|
|
2576
|
+
PreviewCardPrimitive.Positioner,
|
|
2577
|
+
{
|
|
2578
|
+
align,
|
|
2579
|
+
alignOffset,
|
|
2580
|
+
side,
|
|
2581
|
+
sideOffset,
|
|
2582
|
+
className: "isolate z-50",
|
|
2583
|
+
children: /* @__PURE__ */ jsx19(
|
|
2584
|
+
PreviewCardPrimitive.Popup,
|
|
2585
|
+
{
|
|
2586
|
+
"data-slot": "hover-card-content",
|
|
2587
|
+
className: cn(
|
|
2588
|
+
// Tokens
|
|
2589
|
+
"surface-default border-default text-default",
|
|
2590
|
+
// Layout
|
|
2591
|
+
"flex flex-col items-start w-fit max-w-xs origin-(--transform-origin) rounded-lg border p-4 shadow-md",
|
|
2592
|
+
// Side-based slide-in
|
|
2593
|
+
"data-[side=top]:slide-in-from-bottom-2",
|
|
2594
|
+
"data-[side=bottom]:slide-in-from-top-2",
|
|
2595
|
+
"data-[side=left]:slide-in-from-right-2",
|
|
2596
|
+
"data-[side=right]:slide-in-from-left-2",
|
|
2597
|
+
"data-[side=inline-start]:slide-in-from-right-2",
|
|
2598
|
+
"data-[side=inline-end]:slide-in-from-left-2",
|
|
2599
|
+
// Open / close animations
|
|
2600
|
+
"data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95",
|
|
2601
|
+
"data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
2602
|
+
className
|
|
2603
|
+
),
|
|
2604
|
+
...props
|
|
2605
|
+
}
|
|
2606
|
+
)
|
|
2607
|
+
}
|
|
2608
|
+
) });
|
|
2609
|
+
}
|
|
2610
|
+
HoverCardContent.displayName = "HoverCardContent";
|
|
2611
|
+
|
|
1755
2612
|
// src/components/ui/popover.tsx
|
|
1756
2613
|
import { Popover as PopoverPrimitive } from "@base-ui/react/popover";
|
|
1757
|
-
import { jsx as
|
|
2614
|
+
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
1758
2615
|
function Popover({ ...props }) {
|
|
1759
|
-
return /* @__PURE__ */
|
|
2616
|
+
return /* @__PURE__ */ jsx20(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
|
|
1760
2617
|
}
|
|
1761
2618
|
function PopoverTrigger({ ...props }) {
|
|
1762
|
-
return /* @__PURE__ */
|
|
2619
|
+
return /* @__PURE__ */ jsx20(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
|
|
1763
2620
|
}
|
|
1764
2621
|
function PopoverContent({
|
|
1765
2622
|
className,
|
|
@@ -1769,7 +2626,7 @@ function PopoverContent({
|
|
|
1769
2626
|
sideOffset = 4,
|
|
1770
2627
|
...props
|
|
1771
2628
|
}) {
|
|
1772
|
-
return /* @__PURE__ */
|
|
2629
|
+
return /* @__PURE__ */ jsx20(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx20(
|
|
1773
2630
|
PopoverPrimitive.Positioner,
|
|
1774
2631
|
{
|
|
1775
2632
|
align,
|
|
@@ -1777,7 +2634,7 @@ function PopoverContent({
|
|
|
1777
2634
|
side,
|
|
1778
2635
|
sideOffset,
|
|
1779
2636
|
className: "isolate z-50",
|
|
1780
|
-
children: /* @__PURE__ */
|
|
2637
|
+
children: /* @__PURE__ */ jsx20(
|
|
1781
2638
|
PopoverPrimitive.Popup,
|
|
1782
2639
|
{
|
|
1783
2640
|
"data-slot": "popover-content",
|
|
@@ -1800,7 +2657,7 @@ function PopoverContent({
|
|
|
1800
2657
|
) });
|
|
1801
2658
|
}
|
|
1802
2659
|
function PopoverHeader({ className, ...props }) {
|
|
1803
|
-
return /* @__PURE__ */
|
|
2660
|
+
return /* @__PURE__ */ jsx20(
|
|
1804
2661
|
"div",
|
|
1805
2662
|
{
|
|
1806
2663
|
"data-slot": "popover-header",
|
|
@@ -1810,7 +2667,7 @@ function PopoverHeader({ className, ...props }) {
|
|
|
1810
2667
|
);
|
|
1811
2668
|
}
|
|
1812
2669
|
function PopoverTitle({ className, ...props }) {
|
|
1813
|
-
return /* @__PURE__ */
|
|
2670
|
+
return /* @__PURE__ */ jsx20(
|
|
1814
2671
|
PopoverPrimitive.Title,
|
|
1815
2672
|
{
|
|
1816
2673
|
"data-slot": "popover-title",
|
|
@@ -1823,7 +2680,7 @@ function PopoverDescription({
|
|
|
1823
2680
|
className,
|
|
1824
2681
|
...props
|
|
1825
2682
|
}) {
|
|
1826
|
-
return /* @__PURE__ */
|
|
2683
|
+
return /* @__PURE__ */ jsx20(
|
|
1827
2684
|
PopoverPrimitive.Description,
|
|
1828
2685
|
{
|
|
1829
2686
|
"data-slot": "popover-description",
|
|
@@ -1834,15 +2691,15 @@ function PopoverDescription({
|
|
|
1834
2691
|
}
|
|
1835
2692
|
|
|
1836
2693
|
// src/components/ui/sidebar.tsx
|
|
1837
|
-
import * as
|
|
1838
|
-
import { jsx as
|
|
2694
|
+
import * as React8 from "react";
|
|
2695
|
+
import { jsx as jsx21, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1839
2696
|
var SIDEBAR_CONSTANTS = {
|
|
1840
2697
|
WIDTH: "144px",
|
|
1841
2698
|
WIDTH_ICON: "48px"
|
|
1842
2699
|
};
|
|
1843
|
-
var SidebarContext =
|
|
2700
|
+
var SidebarContext = React8.createContext(null);
|
|
1844
2701
|
function useSidebar() {
|
|
1845
|
-
const context =
|
|
2702
|
+
const context = React8.useContext(SidebarContext);
|
|
1846
2703
|
if (!context) {
|
|
1847
2704
|
throw new Error("useSidebar must be used within a SidebarProvider.");
|
|
1848
2705
|
}
|
|
@@ -1858,9 +2715,9 @@ function SidebarProvider({
|
|
|
1858
2715
|
ref,
|
|
1859
2716
|
...props
|
|
1860
2717
|
}) {
|
|
1861
|
-
const [_open, _setOpen] =
|
|
2718
|
+
const [_open, _setOpen] = React8.useState(defaultOpen);
|
|
1862
2719
|
const open = openProp ?? _open;
|
|
1863
|
-
const setOpen =
|
|
2720
|
+
const setOpen = React8.useCallback(
|
|
1864
2721
|
(value) => {
|
|
1865
2722
|
const openState = typeof value === "function" ? value(open) : value;
|
|
1866
2723
|
if (setOpenProp) {
|
|
@@ -1871,11 +2728,11 @@ function SidebarProvider({
|
|
|
1871
2728
|
},
|
|
1872
2729
|
[setOpenProp, open]
|
|
1873
2730
|
);
|
|
1874
|
-
const toggleSidebar =
|
|
2731
|
+
const toggleSidebar = React8.useCallback(() => {
|
|
1875
2732
|
return setOpen((open2) => !open2);
|
|
1876
2733
|
}, [setOpen]);
|
|
1877
2734
|
const state = open ? "expanded" : "collapsed";
|
|
1878
|
-
const contextValue =
|
|
2735
|
+
const contextValue = React8.useMemo(
|
|
1879
2736
|
() => ({
|
|
1880
2737
|
state,
|
|
1881
2738
|
open,
|
|
@@ -1884,7 +2741,7 @@ function SidebarProvider({
|
|
|
1884
2741
|
}),
|
|
1885
2742
|
[state, open, setOpen, toggleSidebar]
|
|
1886
2743
|
);
|
|
1887
|
-
return /* @__PURE__ */
|
|
2744
|
+
return /* @__PURE__ */ jsx21(SidebarContext, { value: contextValue, children: /* @__PURE__ */ jsx21(
|
|
1888
2745
|
"div",
|
|
1889
2746
|
{
|
|
1890
2747
|
style: {
|
|
@@ -1910,7 +2767,7 @@ function Sidebar({
|
|
|
1910
2767
|
...props
|
|
1911
2768
|
}) {
|
|
1912
2769
|
const { state } = useSidebar();
|
|
1913
|
-
return /* @__PURE__ */
|
|
2770
|
+
return /* @__PURE__ */ jsxs12(
|
|
1914
2771
|
"aside",
|
|
1915
2772
|
{
|
|
1916
2773
|
ref,
|
|
@@ -1921,7 +2778,7 @@ function Sidebar({
|
|
|
1921
2778
|
"aria-expanded": state === "expanded",
|
|
1922
2779
|
role: "navigation",
|
|
1923
2780
|
children: [
|
|
1924
|
-
/* @__PURE__ */
|
|
2781
|
+
/* @__PURE__ */ jsx21(
|
|
1925
2782
|
"div",
|
|
1926
2783
|
{
|
|
1927
2784
|
className: cn(
|
|
@@ -1930,14 +2787,14 @@ function Sidebar({
|
|
|
1930
2787
|
)
|
|
1931
2788
|
}
|
|
1932
2789
|
),
|
|
1933
|
-
/* @__PURE__ */
|
|
2790
|
+
/* @__PURE__ */ jsx21(
|
|
1934
2791
|
"div",
|
|
1935
2792
|
{
|
|
1936
2793
|
className: cn(
|
|
1937
|
-
"fixed inset-y-0 z-10 h-svh w-[var(--sidebar-width)] transition-[left,right,width] duration-200 ease-linear flex left-0",
|
|
2794
|
+
"fixed inset-y-0 z-10 h-svh w-[var(--sidebar-width)] transition-[left,right,width] duration-200 ease-linear flex left-0 border-r border-[var(--color-sidebar-border)]",
|
|
1938
2795
|
"group-data-[collapsible=icon]:w-[var(--sidebar-width-icon)]"
|
|
1939
2796
|
),
|
|
1940
|
-
children: /* @__PURE__ */
|
|
2797
|
+
children: /* @__PURE__ */ jsx21(
|
|
1941
2798
|
"div",
|
|
1942
2799
|
{
|
|
1943
2800
|
"data-sidebar": "sidebar",
|
|
@@ -1956,7 +2813,7 @@ function Sidebar({
|
|
|
1956
2813
|
);
|
|
1957
2814
|
}
|
|
1958
2815
|
function SidebarInset({ className, ref, ...props }) {
|
|
1959
|
-
return /* @__PURE__ */
|
|
2816
|
+
return /* @__PURE__ */ jsx21(
|
|
1960
2817
|
"main",
|
|
1961
2818
|
{
|
|
1962
2819
|
ref,
|
|
@@ -1969,7 +2826,7 @@ function SidebarInset({ className, ref, ...props }) {
|
|
|
1969
2826
|
);
|
|
1970
2827
|
}
|
|
1971
2828
|
function SidebarHeader({ className, ref, ...props }) {
|
|
1972
|
-
return /* @__PURE__ */
|
|
2829
|
+
return /* @__PURE__ */ jsx21(
|
|
1973
2830
|
"div",
|
|
1974
2831
|
{
|
|
1975
2832
|
ref,
|
|
@@ -1984,7 +2841,7 @@ function SidebarHeader({ className, ref, ...props }) {
|
|
|
1984
2841
|
);
|
|
1985
2842
|
}
|
|
1986
2843
|
function SidebarFooter({ className, ref, ...props }) {
|
|
1987
|
-
return /* @__PURE__ */
|
|
2844
|
+
return /* @__PURE__ */ jsx21(
|
|
1988
2845
|
"div",
|
|
1989
2846
|
{
|
|
1990
2847
|
ref,
|
|
@@ -1995,7 +2852,7 @@ function SidebarFooter({ className, ref, ...props }) {
|
|
|
1995
2852
|
);
|
|
1996
2853
|
}
|
|
1997
2854
|
function SidebarContent({ className, ref, ...props }) {
|
|
1998
|
-
return /* @__PURE__ */
|
|
2855
|
+
return /* @__PURE__ */ jsx21(
|
|
1999
2856
|
"div",
|
|
2000
2857
|
{
|
|
2001
2858
|
ref,
|
|
@@ -2009,7 +2866,7 @@ function SidebarContent({ className, ref, ...props }) {
|
|
|
2009
2866
|
);
|
|
2010
2867
|
}
|
|
2011
2868
|
function SidebarGroup({ className, ref, ...props }) {
|
|
2012
|
-
return /* @__PURE__ */
|
|
2869
|
+
return /* @__PURE__ */ jsx21(
|
|
2013
2870
|
"div",
|
|
2014
2871
|
{
|
|
2015
2872
|
ref,
|
|
@@ -2024,7 +2881,7 @@ function SidebarGroupContent({
|
|
|
2024
2881
|
ref,
|
|
2025
2882
|
...props
|
|
2026
2883
|
}) {
|
|
2027
|
-
return /* @__PURE__ */
|
|
2884
|
+
return /* @__PURE__ */ jsx21(
|
|
2028
2885
|
"div",
|
|
2029
2886
|
{
|
|
2030
2887
|
ref,
|
|
@@ -2035,7 +2892,7 @@ function SidebarGroupContent({
|
|
|
2035
2892
|
);
|
|
2036
2893
|
}
|
|
2037
2894
|
function SidebarMenu({ className, ref, ...props }) {
|
|
2038
|
-
return /* @__PURE__ */
|
|
2895
|
+
return /* @__PURE__ */ jsx21(
|
|
2039
2896
|
"ul",
|
|
2040
2897
|
{
|
|
2041
2898
|
ref,
|
|
@@ -2046,7 +2903,7 @@ function SidebarMenu({ className, ref, ...props }) {
|
|
|
2046
2903
|
);
|
|
2047
2904
|
}
|
|
2048
2905
|
function SidebarMenuItem({ className, ref, ...props }) {
|
|
2049
|
-
return /* @__PURE__ */
|
|
2906
|
+
return /* @__PURE__ */ jsx21(
|
|
2050
2907
|
"li",
|
|
2051
2908
|
{
|
|
2052
2909
|
ref,
|
|
@@ -2065,7 +2922,7 @@ function SidebarMenuButton({
|
|
|
2065
2922
|
...props
|
|
2066
2923
|
}) {
|
|
2067
2924
|
const { state } = useSidebar();
|
|
2068
|
-
const button = /* @__PURE__ */
|
|
2925
|
+
const button = /* @__PURE__ */ jsx21(
|
|
2069
2926
|
"button",
|
|
2070
2927
|
{
|
|
2071
2928
|
ref,
|
|
@@ -2084,19 +2941,37 @@ function SidebarMenuButton({
|
|
|
2084
2941
|
return button;
|
|
2085
2942
|
}
|
|
2086
2943
|
const tooltipProps = typeof tooltip === "string" ? { children: tooltip } : tooltip;
|
|
2087
|
-
return /* @__PURE__ */
|
|
2088
|
-
/* @__PURE__ */
|
|
2089
|
-
/* @__PURE__ */
|
|
2944
|
+
return /* @__PURE__ */ jsx21(TooltipProvider, { delay: 0, children: /* @__PURE__ */ jsxs12(Tooltip, { children: [
|
|
2945
|
+
/* @__PURE__ */ jsx21(TooltipTrigger, { render: button }),
|
|
2946
|
+
/* @__PURE__ */ jsx21(TooltipContent, { side: "right", align: "center", ...tooltipProps })
|
|
2090
2947
|
] }) });
|
|
2091
2948
|
}
|
|
2949
|
+
function SidebarSeparator({
|
|
2950
|
+
className,
|
|
2951
|
+
ref,
|
|
2952
|
+
...props
|
|
2953
|
+
}) {
|
|
2954
|
+
return /* @__PURE__ */ jsx21(
|
|
2955
|
+
"div",
|
|
2956
|
+
{
|
|
2957
|
+
ref,
|
|
2958
|
+
"data-sidebar": "separator",
|
|
2959
|
+
className: cn(
|
|
2960
|
+
"border-t border-[var(--color-sidebar-border)] w-full",
|
|
2961
|
+
className
|
|
2962
|
+
),
|
|
2963
|
+
...props
|
|
2964
|
+
}
|
|
2965
|
+
);
|
|
2966
|
+
}
|
|
2092
2967
|
|
|
2093
2968
|
// src/components/ui/calendar.tsx
|
|
2094
|
-
import * as
|
|
2969
|
+
import * as React9 from "react";
|
|
2095
2970
|
import {
|
|
2096
2971
|
DayPicker,
|
|
2097
2972
|
getDefaultClassNames
|
|
2098
2973
|
} from "react-day-picker";
|
|
2099
|
-
import { jsx as
|
|
2974
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
2100
2975
|
function Calendar({
|
|
2101
2976
|
className,
|
|
2102
2977
|
classNames,
|
|
@@ -2109,7 +2984,7 @@ function Calendar({
|
|
|
2109
2984
|
...props
|
|
2110
2985
|
}) {
|
|
2111
2986
|
const defaultClassNames = getDefaultClassNames();
|
|
2112
|
-
return /* @__PURE__ */
|
|
2987
|
+
return /* @__PURE__ */ jsx22(
|
|
2113
2988
|
DayPicker,
|
|
2114
2989
|
{
|
|
2115
2990
|
showOutsideDays,
|
|
@@ -2212,7 +3087,7 @@ function Calendar({
|
|
|
2212
3087
|
...classNames
|
|
2213
3088
|
},
|
|
2214
3089
|
components: {
|
|
2215
|
-
Root: ({ className: rootClassName, rootRef, ...rootProps }) => /* @__PURE__ */
|
|
3090
|
+
Root: ({ className: rootClassName, rootRef, ...rootProps }) => /* @__PURE__ */ jsx22(
|
|
2216
3091
|
"div",
|
|
2217
3092
|
{
|
|
2218
3093
|
"data-slot": "calendar",
|
|
@@ -2227,7 +3102,7 @@ function Calendar({
|
|
|
2227
3102
|
...chevronProps
|
|
2228
3103
|
}) => {
|
|
2229
3104
|
if (orientation === "left") {
|
|
2230
|
-
return /* @__PURE__ */
|
|
3105
|
+
return /* @__PURE__ */ jsx22(
|
|
2231
3106
|
ArrowLeftIcon,
|
|
2232
3107
|
{
|
|
2233
3108
|
className: cn("size-4", chevronClassName),
|
|
@@ -2236,7 +3111,7 @@ function Calendar({
|
|
|
2236
3111
|
);
|
|
2237
3112
|
}
|
|
2238
3113
|
if (orientation === "right") {
|
|
2239
|
-
return /* @__PURE__ */
|
|
3114
|
+
return /* @__PURE__ */ jsx22(
|
|
2240
3115
|
ArrowRightIcon,
|
|
2241
3116
|
{
|
|
2242
3117
|
className: cn("size-4", chevronClassName),
|
|
@@ -2244,7 +3119,7 @@ function Calendar({
|
|
|
2244
3119
|
}
|
|
2245
3120
|
);
|
|
2246
3121
|
}
|
|
2247
|
-
return /* @__PURE__ */
|
|
3122
|
+
return /* @__PURE__ */ jsx22(
|
|
2248
3123
|
CaretDownIcon,
|
|
2249
3124
|
{
|
|
2250
3125
|
className: cn("size-4", chevronClassName),
|
|
@@ -2252,8 +3127,8 @@ function Calendar({
|
|
|
2252
3127
|
}
|
|
2253
3128
|
);
|
|
2254
3129
|
},
|
|
2255
|
-
DayButton: (dayButtonProps) => /* @__PURE__ */
|
|
2256
|
-
WeekNumber: ({ children, ...weekNumberProps }) => /* @__PURE__ */
|
|
3130
|
+
DayButton: (dayButtonProps) => /* @__PURE__ */ jsx22(CalendarDayButton, { locale, ...dayButtonProps }),
|
|
3131
|
+
WeekNumber: ({ children, ...weekNumberProps }) => /* @__PURE__ */ jsx22("td", { ...weekNumberProps, children: /* @__PURE__ */ jsx22("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) }),
|
|
2257
3132
|
...components
|
|
2258
3133
|
},
|
|
2259
3134
|
...props
|
|
@@ -2267,11 +3142,11 @@ function CalendarDayButton({
|
|
|
2267
3142
|
locale,
|
|
2268
3143
|
...props
|
|
2269
3144
|
}) {
|
|
2270
|
-
const ref =
|
|
2271
|
-
|
|
3145
|
+
const ref = React9.useRef(null);
|
|
3146
|
+
React9.useEffect(() => {
|
|
2272
3147
|
if (modifiers.focused) ref.current?.focus();
|
|
2273
3148
|
}, [modifiers.focused]);
|
|
2274
|
-
return /* @__PURE__ */
|
|
3149
|
+
return /* @__PURE__ */ jsx22(
|
|
2275
3150
|
Button,
|
|
2276
3151
|
{
|
|
2277
3152
|
ref,
|
|
@@ -2306,8 +3181,8 @@ Calendar.displayName = "Calendar";
|
|
|
2306
3181
|
CalendarDayButton.displayName = "CalendarDayButton";
|
|
2307
3182
|
|
|
2308
3183
|
// src/components/ui/date-picker.tsx
|
|
2309
|
-
import * as
|
|
2310
|
-
import { jsx as
|
|
3184
|
+
import * as React10 from "react";
|
|
3185
|
+
import { jsx as jsx23, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
2311
3186
|
function DatePickerTrigger({
|
|
2312
3187
|
label,
|
|
2313
3188
|
placeholder = "Pick a date",
|
|
@@ -2316,11 +3191,11 @@ function DatePickerTrigger({
|
|
|
2316
3191
|
ref,
|
|
2317
3192
|
...rest
|
|
2318
3193
|
}) {
|
|
2319
|
-
return /* @__PURE__ */
|
|
3194
|
+
return /* @__PURE__ */ jsxs13(
|
|
2320
3195
|
PopoverTrigger,
|
|
2321
3196
|
{
|
|
2322
3197
|
disabled,
|
|
2323
|
-
render: /* @__PURE__ */
|
|
3198
|
+
render: /* @__PURE__ */ jsx23(
|
|
2324
3199
|
"button",
|
|
2325
3200
|
{
|
|
2326
3201
|
ref,
|
|
@@ -2345,7 +3220,7 @@ function DatePickerTrigger({
|
|
|
2345
3220
|
}
|
|
2346
3221
|
),
|
|
2347
3222
|
children: [
|
|
2348
|
-
/* @__PURE__ */
|
|
3223
|
+
/* @__PURE__ */ jsx23(
|
|
2349
3224
|
CalendarIcon,
|
|
2350
3225
|
{
|
|
2351
3226
|
size: 16,
|
|
@@ -2353,7 +3228,7 @@ function DatePickerTrigger({
|
|
|
2353
3228
|
"aria-hidden": "true"
|
|
2354
3229
|
}
|
|
2355
3230
|
),
|
|
2356
|
-
/* @__PURE__ */
|
|
3231
|
+
/* @__PURE__ */ jsx23("span", { className: "truncate", children: label ?? placeholder })
|
|
2357
3232
|
]
|
|
2358
3233
|
}
|
|
2359
3234
|
);
|
|
@@ -2370,8 +3245,8 @@ function DatePicker(props) {
|
|
|
2370
3245
|
className,
|
|
2371
3246
|
ref
|
|
2372
3247
|
} = props;
|
|
2373
|
-
const [date, setDate] =
|
|
2374
|
-
const isControlled =
|
|
3248
|
+
const [date, setDate] = React10.useState(defaultValue);
|
|
3249
|
+
const isControlled = React10.useRef("value" in props).current;
|
|
2375
3250
|
const selected = isControlled ? value : date;
|
|
2376
3251
|
const handleSelect = (day) => {
|
|
2377
3252
|
if (!isControlled) setDate(day);
|
|
@@ -2382,8 +3257,8 @@ function DatePicker(props) {
|
|
|
2382
3257
|
month: "long",
|
|
2383
3258
|
day: "numeric"
|
|
2384
3259
|
}) : null;
|
|
2385
|
-
return /* @__PURE__ */
|
|
2386
|
-
/* @__PURE__ */
|
|
3260
|
+
return /* @__PURE__ */ jsxs13(Popover, { children: [
|
|
3261
|
+
/* @__PURE__ */ jsx23(
|
|
2387
3262
|
DatePickerTrigger,
|
|
2388
3263
|
{
|
|
2389
3264
|
ref,
|
|
@@ -2393,7 +3268,7 @@ function DatePicker(props) {
|
|
|
2393
3268
|
className
|
|
2394
3269
|
}
|
|
2395
3270
|
),
|
|
2396
|
-
/* @__PURE__ */
|
|
3271
|
+
/* @__PURE__ */ jsx23(PopoverContent, { className: "w-auto p-0", align: "center", children: /* @__PURE__ */ jsx23(
|
|
2397
3272
|
Calendar,
|
|
2398
3273
|
{
|
|
2399
3274
|
mode: "single",
|
|
@@ -2412,11 +3287,11 @@ function DatePicker(props) {
|
|
|
2412
3287
|
}
|
|
2413
3288
|
|
|
2414
3289
|
// src/components/ui/upload.tsx
|
|
2415
|
-
import * as
|
|
2416
|
-
import { cva as
|
|
2417
|
-
import { jsx as
|
|
3290
|
+
import * as React11 from "react";
|
|
3291
|
+
import { cva as cva10 } from "class-variance-authority";
|
|
3292
|
+
import { jsx as jsx24, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
2418
3293
|
var DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
2419
|
-
var uploadVariants =
|
|
3294
|
+
var uploadVariants = cva10(
|
|
2420
3295
|
"relative flex flex-col items-center justify-center rounded-lg transition-all duration-200 ease-in-out overflow-hidden w-full p-16 min-h-[200px]",
|
|
2421
3296
|
{
|
|
2422
3297
|
variants: {
|
|
@@ -2451,8 +3326,8 @@ function Upload({
|
|
|
2451
3326
|
ref,
|
|
2452
3327
|
...props
|
|
2453
3328
|
}) {
|
|
2454
|
-
const fileInputRef =
|
|
2455
|
-
const [isDragOver, setIsDragOver] =
|
|
3329
|
+
const fileInputRef = React11.useRef(null);
|
|
3330
|
+
const [isDragOver, setIsDragOver] = React11.useState(false);
|
|
2456
3331
|
const getFileTypeDisplay = () => {
|
|
2457
3332
|
const typeMap = {
|
|
2458
3333
|
"application/pdf": "PDF",
|
|
@@ -2516,17 +3391,17 @@ function Upload({
|
|
|
2516
3391
|
const renderContent = () => {
|
|
2517
3392
|
switch (effectiveState) {
|
|
2518
3393
|
case "error":
|
|
2519
|
-
return /* @__PURE__ */
|
|
3394
|
+
return /* @__PURE__ */ jsxs14(
|
|
2520
3395
|
"div",
|
|
2521
3396
|
{
|
|
2522
3397
|
className: "flex flex-col items-center text-center max-w-[289px]",
|
|
2523
3398
|
style: { gap: "32px" },
|
|
2524
3399
|
children: [
|
|
2525
|
-
/* @__PURE__ */
|
|
2526
|
-
/* @__PURE__ */
|
|
2527
|
-
/* @__PURE__ */
|
|
3400
|
+
/* @__PURE__ */ jsxs14("div", { className: "space-y-4", children: [
|
|
3401
|
+
/* @__PURE__ */ jsx24(Text, { variant: "h5", children: "Upload fail" }),
|
|
3402
|
+
/* @__PURE__ */ jsx24(Text, { variant: "body-md", className: "text-error", children: errorMessage })
|
|
2528
3403
|
] }),
|
|
2529
|
-
/* @__PURE__ */
|
|
3404
|
+
/* @__PURE__ */ jsx24(
|
|
2530
3405
|
Button,
|
|
2531
3406
|
{
|
|
2532
3407
|
variant: "destructive",
|
|
@@ -2540,22 +3415,22 @@ function Upload({
|
|
|
2540
3415
|
}
|
|
2541
3416
|
);
|
|
2542
3417
|
case "uploading":
|
|
2543
|
-
return /* @__PURE__ */
|
|
3418
|
+
return /* @__PURE__ */ jsxs14(
|
|
2544
3419
|
"div",
|
|
2545
3420
|
{
|
|
2546
3421
|
className: "flex flex-col items-center text-center max-w-[289px]",
|
|
2547
3422
|
style: { gap: "32px" },
|
|
2548
3423
|
children: [
|
|
2549
|
-
/* @__PURE__ */
|
|
2550
|
-
/* @__PURE__ */
|
|
2551
|
-
/* @__PURE__ */
|
|
3424
|
+
/* @__PURE__ */ jsx24(Text, { variant: "h5", className: "text-default", children: "Uploading files" }),
|
|
3425
|
+
/* @__PURE__ */ jsxs14("div", { className: "w-full max-w-[720px] space-y-2", children: [
|
|
3426
|
+
/* @__PURE__ */ jsx24("div", { className: "w-full surface-secondary rounded-full h-2", children: /* @__PURE__ */ jsx24(
|
|
2552
3427
|
"div",
|
|
2553
3428
|
{
|
|
2554
3429
|
className: "interactive-accent h-2 rounded-full transition-all duration-300 ease-in-out",
|
|
2555
3430
|
style: { width: `${progress}%` }
|
|
2556
3431
|
}
|
|
2557
3432
|
) }),
|
|
2558
|
-
/* @__PURE__ */
|
|
3433
|
+
/* @__PURE__ */ jsxs14(Text, { variant: "body-sm", className: "text-secondary text-center", children: [
|
|
2559
3434
|
Math.round(progress),
|
|
2560
3435
|
"% complete"
|
|
2561
3436
|
] })
|
|
@@ -2564,29 +3439,29 @@ function Upload({
|
|
|
2564
3439
|
}
|
|
2565
3440
|
);
|
|
2566
3441
|
case "success":
|
|
2567
|
-
return /* @__PURE__ */
|
|
3442
|
+
return /* @__PURE__ */ jsx24(
|
|
2568
3443
|
"div",
|
|
2569
3444
|
{
|
|
2570
3445
|
className: "flex flex-col items-center text-center max-w-[289px]",
|
|
2571
3446
|
style: { gap: "32px" },
|
|
2572
|
-
children: /* @__PURE__ */
|
|
2573
|
-
/* @__PURE__ */
|
|
2574
|
-
selectedFiles.length > 0 && /* @__PURE__ */
|
|
3447
|
+
children: /* @__PURE__ */ jsxs14("div", { className: "space-y-4", children: [
|
|
3448
|
+
/* @__PURE__ */ jsx24(Text, { variant: "h5", className: "text-success", children: "Upload successful!" }),
|
|
3449
|
+
selectedFiles.length > 0 && /* @__PURE__ */ jsx24("div", { className: "text-center", children: selectedFiles.map((file, index) => /* @__PURE__ */ jsx24(Text, { variant: "body-sm", children: file.name }, index)) })
|
|
2575
3450
|
] })
|
|
2576
3451
|
}
|
|
2577
3452
|
);
|
|
2578
3453
|
default:
|
|
2579
|
-
return /* @__PURE__ */
|
|
3454
|
+
return /* @__PURE__ */ jsxs14(
|
|
2580
3455
|
"div",
|
|
2581
3456
|
{
|
|
2582
3457
|
className: "flex flex-col items-center text-center max-w-[289px]",
|
|
2583
3458
|
style: { gap: "32px" },
|
|
2584
3459
|
children: [
|
|
2585
|
-
/* @__PURE__ */
|
|
2586
|
-
/* @__PURE__ */
|
|
2587
|
-
/* @__PURE__ */
|
|
3460
|
+
/* @__PURE__ */ jsxs14("div", { className: "space-y-4", children: [
|
|
3461
|
+
/* @__PURE__ */ jsx24(Text, { variant: "h5", className: "text-default", children: "Drag & drop files here" }),
|
|
3462
|
+
/* @__PURE__ */ jsx24(Text, { variant: "body-md", className: "text-secondary", children: "or click to browse from your computer" })
|
|
2588
3463
|
] }),
|
|
2589
|
-
/* @__PURE__ */
|
|
3464
|
+
/* @__PURE__ */ jsx24(
|
|
2590
3465
|
Button,
|
|
2591
3466
|
{
|
|
2592
3467
|
variant: "default",
|
|
@@ -2600,10 +3475,10 @@ function Upload({
|
|
|
2600
3475
|
children: "Choose files"
|
|
2601
3476
|
}
|
|
2602
3477
|
),
|
|
2603
|
-
/* @__PURE__ */
|
|
3478
|
+
/* @__PURE__ */ jsxs14(Text, { variant: "body-sm", className: "text-secondary", children: [
|
|
2604
3479
|
"Supported file: ",
|
|
2605
3480
|
getFileTypeDisplay(),
|
|
2606
|
-
/* @__PURE__ */
|
|
3481
|
+
/* @__PURE__ */ jsx24("br", {}),
|
|
2607
3482
|
"Max: ",
|
|
2608
3483
|
Math.round(maxFileSize / 1024 / 1024),
|
|
2609
3484
|
" MB each"
|
|
@@ -2613,7 +3488,7 @@ function Upload({
|
|
|
2613
3488
|
);
|
|
2614
3489
|
}
|
|
2615
3490
|
};
|
|
2616
|
-
return /* @__PURE__ */
|
|
3491
|
+
return /* @__PURE__ */ jsxs14(
|
|
2617
3492
|
"div",
|
|
2618
3493
|
{
|
|
2619
3494
|
ref,
|
|
@@ -2632,7 +3507,7 @@ function Upload({
|
|
|
2632
3507
|
"aria-disabled": disabled,
|
|
2633
3508
|
...props,
|
|
2634
3509
|
children: [
|
|
2635
|
-
/* @__PURE__ */
|
|
3510
|
+
/* @__PURE__ */ jsx24(
|
|
2636
3511
|
"input",
|
|
2637
3512
|
{
|
|
2638
3513
|
ref: fileInputRef,
|
|
@@ -2651,9 +3526,9 @@ function Upload({
|
|
|
2651
3526
|
|
|
2652
3527
|
// src/components/ui/avatar.tsx
|
|
2653
3528
|
import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar";
|
|
2654
|
-
import { cva as
|
|
2655
|
-
import { jsx as
|
|
2656
|
-
var avatarVariants =
|
|
3529
|
+
import { cva as cva11 } from "class-variance-authority";
|
|
3530
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
3531
|
+
var avatarVariants = cva11(
|
|
2657
3532
|
"relative flex shrink-0 overflow-hidden select-none",
|
|
2658
3533
|
{
|
|
2659
3534
|
variants: {
|
|
@@ -2681,7 +3556,7 @@ var avatarVariants = cva9(
|
|
|
2681
3556
|
}
|
|
2682
3557
|
);
|
|
2683
3558
|
function Avatar({ className, size, shape, ref, ...props }) {
|
|
2684
|
-
return /* @__PURE__ */
|
|
3559
|
+
return /* @__PURE__ */ jsx25(
|
|
2685
3560
|
AvatarPrimitive.Root,
|
|
2686
3561
|
{
|
|
2687
3562
|
ref,
|
|
@@ -2697,7 +3572,7 @@ function AvatarImage({
|
|
|
2697
3572
|
ref,
|
|
2698
3573
|
...props
|
|
2699
3574
|
}) {
|
|
2700
|
-
return /* @__PURE__ */
|
|
3575
|
+
return /* @__PURE__ */ jsx25(
|
|
2701
3576
|
AvatarPrimitive.Image,
|
|
2702
3577
|
{
|
|
2703
3578
|
ref,
|
|
@@ -2712,7 +3587,7 @@ function AvatarFallback({
|
|
|
2712
3587
|
ref,
|
|
2713
3588
|
...props
|
|
2714
3589
|
}) {
|
|
2715
|
-
return /* @__PURE__ */
|
|
3590
|
+
return /* @__PURE__ */ jsx25(
|
|
2716
3591
|
AvatarPrimitive.Fallback,
|
|
2717
3592
|
{
|
|
2718
3593
|
ref,
|
|
@@ -2737,7 +3612,7 @@ function AvatarGroup({
|
|
|
2737
3612
|
ref,
|
|
2738
3613
|
...props
|
|
2739
3614
|
}) {
|
|
2740
|
-
return /* @__PURE__ */
|
|
3615
|
+
return /* @__PURE__ */ jsx25(
|
|
2741
3616
|
"div",
|
|
2742
3617
|
{
|
|
2743
3618
|
ref,
|
|
@@ -2758,7 +3633,7 @@ function AvatarGroupCount({
|
|
|
2758
3633
|
ref,
|
|
2759
3634
|
...props
|
|
2760
3635
|
}) {
|
|
2761
|
-
return /* @__PURE__ */
|
|
3636
|
+
return /* @__PURE__ */ jsx25(
|
|
2762
3637
|
"div",
|
|
2763
3638
|
{
|
|
2764
3639
|
ref,
|
|
@@ -2780,9 +3655,9 @@ function AvatarGroupCount({
|
|
|
2780
3655
|
|
|
2781
3656
|
// src/components/ui/checkbox.tsx
|
|
2782
3657
|
import { Checkbox as CheckboxPrimitive } from "@base-ui/react/checkbox";
|
|
2783
|
-
import { cva as
|
|
2784
|
-
import { jsx as
|
|
2785
|
-
var checkboxVariants =
|
|
3658
|
+
import { cva as cva12 } from "class-variance-authority";
|
|
3659
|
+
import { jsx as jsx26, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
3660
|
+
var checkboxVariants = cva12([
|
|
2786
3661
|
// Base layout & appearance
|
|
2787
3662
|
"peer group relative size-4 shrink-0",
|
|
2788
3663
|
"rounded-xs border border-default surface-default shadow-xs",
|
|
@@ -2807,27 +3682,27 @@ var checkboxVariants = cva10([
|
|
|
2807
3682
|
"[&_svg]:pointer-events-none [&_svg]:shrink-0"
|
|
2808
3683
|
]);
|
|
2809
3684
|
function Checkbox({ className, ref, ...props }) {
|
|
2810
|
-
return /* @__PURE__ */
|
|
3685
|
+
return /* @__PURE__ */ jsx26(
|
|
2811
3686
|
CheckboxPrimitive.Root,
|
|
2812
3687
|
{
|
|
2813
3688
|
"data-slot": "checkbox",
|
|
2814
3689
|
ref,
|
|
2815
3690
|
className: cn(checkboxVariants(), className),
|
|
2816
3691
|
...props,
|
|
2817
|
-
children: /* @__PURE__ */
|
|
3692
|
+
children: /* @__PURE__ */ jsxs15(
|
|
2818
3693
|
CheckboxPrimitive.Indicator,
|
|
2819
3694
|
{
|
|
2820
3695
|
"data-slot": "checkbox-indicator",
|
|
2821
3696
|
className: "absolute inset-0 flex items-center justify-center text-current",
|
|
2822
3697
|
children: [
|
|
2823
|
-
/* @__PURE__ */
|
|
3698
|
+
/* @__PURE__ */ jsx26(
|
|
2824
3699
|
CheckmarkIcon,
|
|
2825
3700
|
{
|
|
2826
3701
|
size: 14,
|
|
2827
3702
|
className: "text-current hidden group-data-[checked]:block"
|
|
2828
3703
|
}
|
|
2829
3704
|
),
|
|
2830
|
-
/* @__PURE__ */
|
|
3705
|
+
/* @__PURE__ */ jsx26(
|
|
2831
3706
|
MinusIcon,
|
|
2832
3707
|
{
|
|
2833
3708
|
size: 14,
|
|
@@ -2841,11 +3716,143 @@ function Checkbox({ className, ref, ...props }) {
|
|
|
2841
3716
|
);
|
|
2842
3717
|
}
|
|
2843
3718
|
|
|
3719
|
+
// src/components/ui/radio-group.tsx
|
|
3720
|
+
import * as React12 from "react";
|
|
3721
|
+
import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group";
|
|
3722
|
+
import { Radio as RadioPrimitive } from "@base-ui/react/radio";
|
|
3723
|
+
import { cva as cva13 } from "class-variance-authority";
|
|
3724
|
+
import { jsx as jsx27, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
3725
|
+
var radioGroupVariants = cva13("flex", {
|
|
3726
|
+
variants: {
|
|
3727
|
+
orientation: {
|
|
3728
|
+
vertical: "flex-col gap-2",
|
|
3729
|
+
horizontal: "flex-row flex-wrap gap-4"
|
|
3730
|
+
},
|
|
3731
|
+
layout: {
|
|
3732
|
+
// Items shrink-wrap their content
|
|
3733
|
+
inline: "",
|
|
3734
|
+
// Items stretch to fill the container; labels take remaining space.
|
|
3735
|
+
// Requires each item to be wrapped in a single element:
|
|
3736
|
+
// RadioGroup > div > (RadioGroupItem + label)
|
|
3737
|
+
// Using RadioGroupCard satisfies this automatically.
|
|
3738
|
+
// Extra wrapper elements (Fragment, nested divs) will silently break this layout.
|
|
3739
|
+
block: "[&>*>label]:flex-1 [&>*>label]:min-w-0"
|
|
3740
|
+
}
|
|
3741
|
+
},
|
|
3742
|
+
compoundVariants: [
|
|
3743
|
+
// vertical + block: each item spans full container width
|
|
3744
|
+
{ orientation: "vertical", layout: "block", class: "[&>*]:w-full" },
|
|
3745
|
+
// horizontal + block: items share the row equally
|
|
3746
|
+
{ orientation: "horizontal", layout: "block", class: "[&>*]:flex-1" }
|
|
3747
|
+
],
|
|
3748
|
+
defaultVariants: {
|
|
3749
|
+
orientation: "vertical",
|
|
3750
|
+
layout: "inline"
|
|
3751
|
+
}
|
|
3752
|
+
});
|
|
3753
|
+
var radioItemVariants = cva13([
|
|
3754
|
+
// Base layout & appearance
|
|
3755
|
+
"peer group inline-flex relative size-4 shrink-0",
|
|
3756
|
+
"rounded-full border border-default surface-default shadow-xs",
|
|
3757
|
+
// Transitions & hover
|
|
3758
|
+
"transition-colors hover:interactive-hover",
|
|
3759
|
+
// Focus
|
|
3760
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-default",
|
|
3761
|
+
// Disabled — checked items are slightly more opaque per design
|
|
3762
|
+
"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50",
|
|
3763
|
+
"data-[disabled]:data-[checked]:opacity-30",
|
|
3764
|
+
// Error (aria-invalid)
|
|
3765
|
+
"aria-invalid:border-error",
|
|
3766
|
+
"aria-invalid:focus-visible:ring-3 aria-invalid:focus-visible:ring-focus-error"
|
|
3767
|
+
]);
|
|
3768
|
+
function RadioGroup({
|
|
3769
|
+
className,
|
|
3770
|
+
orientation,
|
|
3771
|
+
layout,
|
|
3772
|
+
...props
|
|
3773
|
+
}) {
|
|
3774
|
+
return /* @__PURE__ */ jsx27(
|
|
3775
|
+
RadioGroupPrimitive,
|
|
3776
|
+
{
|
|
3777
|
+
"data-slot": "radio-group",
|
|
3778
|
+
className: cn(radioGroupVariants({ orientation, layout }), className),
|
|
3779
|
+
...props
|
|
3780
|
+
}
|
|
3781
|
+
);
|
|
3782
|
+
}
|
|
3783
|
+
function RadioGroupItem({ className, ...props }) {
|
|
3784
|
+
return /* @__PURE__ */ jsx27(
|
|
3785
|
+
RadioPrimitive.Root,
|
|
3786
|
+
{
|
|
3787
|
+
"data-slot": "radio-group-item",
|
|
3788
|
+
className: cn(radioItemVariants(), className),
|
|
3789
|
+
...props,
|
|
3790
|
+
children: /* @__PURE__ */ jsx27(
|
|
3791
|
+
RadioPrimitive.Indicator,
|
|
3792
|
+
{
|
|
3793
|
+
"data-slot": "radio-group-indicator",
|
|
3794
|
+
className: "absolute inset-0 flex items-center justify-center",
|
|
3795
|
+
children: /* @__PURE__ */ jsx27("span", { className: "size-2 rounded-full interactive-accent group-aria-invalid:interactive-destructive" })
|
|
3796
|
+
}
|
|
3797
|
+
)
|
|
3798
|
+
}
|
|
3799
|
+
);
|
|
3800
|
+
}
|
|
3801
|
+
function RadioGroupCard({
|
|
3802
|
+
className,
|
|
3803
|
+
label,
|
|
3804
|
+
description,
|
|
3805
|
+
flipped = false,
|
|
3806
|
+
id,
|
|
3807
|
+
ref,
|
|
3808
|
+
...props
|
|
3809
|
+
}) {
|
|
3810
|
+
const generatedId = React12.useId();
|
|
3811
|
+
const itemId = id ?? generatedId;
|
|
3812
|
+
return /* @__PURE__ */ jsxs16(
|
|
3813
|
+
"label",
|
|
3814
|
+
{
|
|
3815
|
+
ref,
|
|
3816
|
+
"data-slot": "radio-group-card",
|
|
3817
|
+
"data-disabled": props.disabled ? "" : void 0,
|
|
3818
|
+
className: cn(
|
|
3819
|
+
"flex items-start gap-3 p-3 border border-default surface-default rounded-md cursor-pointer w-full",
|
|
3820
|
+
"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50",
|
|
3821
|
+
className
|
|
3822
|
+
),
|
|
3823
|
+
children: [
|
|
3824
|
+
!flipped && // data-[disabled]:opacity-100 cancels the item-level opacity since
|
|
3825
|
+
// the card wrapper already applies opacity-50 for the whole card.
|
|
3826
|
+
/* @__PURE__ */ jsx27(
|
|
3827
|
+
RadioGroupItem,
|
|
3828
|
+
{
|
|
3829
|
+
id: itemId,
|
|
3830
|
+
className: "mt-[2.5px] data-[disabled]:opacity-100",
|
|
3831
|
+
...props
|
|
3832
|
+
}
|
|
3833
|
+
),
|
|
3834
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex flex-col gap-1.5 min-w-0 flex-1", children: [
|
|
3835
|
+
/* @__PURE__ */ jsx27("span", { className: "type-body-sm-medium text-default", children: label }),
|
|
3836
|
+
description && /* @__PURE__ */ jsx27("span", { className: "type-body-xs-regular text-secondary", children: description })
|
|
3837
|
+
] }),
|
|
3838
|
+
flipped && /* @__PURE__ */ jsx27(
|
|
3839
|
+
RadioGroupItem,
|
|
3840
|
+
{
|
|
3841
|
+
id: itemId,
|
|
3842
|
+
className: "mt-[2.5px] data-[disabled]:opacity-100",
|
|
3843
|
+
...props
|
|
3844
|
+
}
|
|
3845
|
+
)
|
|
3846
|
+
]
|
|
3847
|
+
}
|
|
3848
|
+
);
|
|
3849
|
+
}
|
|
3850
|
+
|
|
2844
3851
|
// src/components/ui/switch.tsx
|
|
2845
3852
|
import { Switch as SwitchPrimitive } from "@base-ui/react/switch";
|
|
2846
|
-
import { cva as
|
|
2847
|
-
import { jsx as
|
|
2848
|
-
var switchVariants =
|
|
3853
|
+
import { cva as cva14 } from "class-variance-authority";
|
|
3854
|
+
import { jsx as jsx28 } from "react/jsx-runtime";
|
|
3855
|
+
var switchVariants = cva14(
|
|
2849
3856
|
"peer inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 relative focus-visible:ring-3 focus-visible:ring-focus-default aria-invalid:border-error aria-invalid:ring-3 aria-invalid:ring-focus-error data-checked:interactive-accent data-unchecked:interactive-secondary data-unchecked:border-default data-disabled:cursor-not-allowed data-disabled:opacity-50",
|
|
2850
3857
|
{
|
|
2851
3858
|
variants: {
|
|
@@ -2859,7 +3866,7 @@ var switchVariants = cva11(
|
|
|
2859
3866
|
}
|
|
2860
3867
|
}
|
|
2861
3868
|
);
|
|
2862
|
-
var switchThumbVariants =
|
|
3869
|
+
var switchThumbVariants = cva14(
|
|
2863
3870
|
"pointer-events-none block rounded-full surface-default shadow-sm ring-0 transition-transform",
|
|
2864
3871
|
{
|
|
2865
3872
|
variants: {
|
|
@@ -2874,14 +3881,14 @@ var switchThumbVariants = cva11(
|
|
|
2874
3881
|
}
|
|
2875
3882
|
);
|
|
2876
3883
|
function Switch({ className, size, ref, ...props }) {
|
|
2877
|
-
return /* @__PURE__ */
|
|
3884
|
+
return /* @__PURE__ */ jsx28(
|
|
2878
3885
|
SwitchPrimitive.Root,
|
|
2879
3886
|
{
|
|
2880
3887
|
ref,
|
|
2881
3888
|
"data-slot": "switch",
|
|
2882
3889
|
className: cn(switchVariants({ size }), className),
|
|
2883
3890
|
...props,
|
|
2884
|
-
children: /* @__PURE__ */
|
|
3891
|
+
children: /* @__PURE__ */ jsx28(
|
|
2885
3892
|
SwitchPrimitive.Thumb,
|
|
2886
3893
|
{
|
|
2887
3894
|
"data-slot": "switch-thumb",
|
|
@@ -2892,11 +3899,116 @@ function Switch({ className, size, ref, ...props }) {
|
|
|
2892
3899
|
);
|
|
2893
3900
|
}
|
|
2894
3901
|
|
|
3902
|
+
// src/components/ui/slider.tsx
|
|
3903
|
+
import { Slider as SliderPrimitive } from "@base-ui/react/slider";
|
|
3904
|
+
import { cva as cva15 } from "class-variance-authority";
|
|
3905
|
+
import { jsx as jsx29, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
3906
|
+
var sliderControlVariants = cva15([
|
|
3907
|
+
// Base layout
|
|
3908
|
+
"relative flex w-full touch-none select-none items-center",
|
|
3909
|
+
// Disabled
|
|
3910
|
+
"data-[disabled]:opacity-50",
|
|
3911
|
+
// Vertical orientation
|
|
3912
|
+
"data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40",
|
|
3913
|
+
"data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col"
|
|
3914
|
+
]);
|
|
3915
|
+
var sliderTrackVariants = cva15([
|
|
3916
|
+
// Base layout & appearance
|
|
3917
|
+
"relative grow overflow-hidden rounded-full",
|
|
3918
|
+
"interactive-secondary",
|
|
3919
|
+
// Horizontal orientation
|
|
3920
|
+
"data-[orientation=horizontal]:h-1 data-[orientation=horizontal]:w-full",
|
|
3921
|
+
// Vertical orientation
|
|
3922
|
+
"data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-1"
|
|
3923
|
+
]);
|
|
3924
|
+
var sliderIndicatorVariants = cva15([
|
|
3925
|
+
// Background
|
|
3926
|
+
"interactive-accent",
|
|
3927
|
+
// Horizontal orientation
|
|
3928
|
+
"data-[orientation=horizontal]:h-full",
|
|
3929
|
+
// Vertical orientation
|
|
3930
|
+
"data-[orientation=vertical]:w-full"
|
|
3931
|
+
]);
|
|
3932
|
+
var sliderThumbVariants = cva15([
|
|
3933
|
+
// Base layout & appearance
|
|
3934
|
+
"relative block size-3 shrink-0",
|
|
3935
|
+
"rounded-full border border-[var(--color-interactive-accent)] interactive-default shadow-xs",
|
|
3936
|
+
// Transitions
|
|
3937
|
+
"transition-[color,box-shadow]",
|
|
3938
|
+
// Extended hit area
|
|
3939
|
+
"after:absolute after:-inset-2",
|
|
3940
|
+
// Hover & active
|
|
3941
|
+
"hover:ring-2 hover:ring-focus-default active:ring-2 active:ring-focus-default",
|
|
3942
|
+
// Focus (targets inner hidden input via :has)
|
|
3943
|
+
"has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-focus-default has-[:focus-visible]:outline-hidden",
|
|
3944
|
+
// Disabled
|
|
3945
|
+
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50"
|
|
3946
|
+
]);
|
|
3947
|
+
function Slider({
|
|
3948
|
+
className,
|
|
3949
|
+
defaultValue,
|
|
3950
|
+
value,
|
|
3951
|
+
min = 0,
|
|
3952
|
+
max = 100,
|
|
3953
|
+
thumbLabels,
|
|
3954
|
+
...props
|
|
3955
|
+
}) {
|
|
3956
|
+
const values = Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : typeof value === "number" ? [value] : typeof defaultValue === "number" ? [defaultValue] : [min];
|
|
3957
|
+
return /* @__PURE__ */ jsx29(
|
|
3958
|
+
SliderPrimitive.Root,
|
|
3959
|
+
{
|
|
3960
|
+
"data-slot": "slider",
|
|
3961
|
+
className: cn(
|
|
3962
|
+
"data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full",
|
|
3963
|
+
className
|
|
3964
|
+
),
|
|
3965
|
+
defaultValue,
|
|
3966
|
+
value,
|
|
3967
|
+
min,
|
|
3968
|
+
max,
|
|
3969
|
+
thumbAlignment: "edge",
|
|
3970
|
+
...props,
|
|
3971
|
+
children: /* @__PURE__ */ jsxs17(
|
|
3972
|
+
SliderPrimitive.Control,
|
|
3973
|
+
{
|
|
3974
|
+
"data-slot": "slider-control",
|
|
3975
|
+
className: sliderControlVariants(),
|
|
3976
|
+
children: [
|
|
3977
|
+
/* @__PURE__ */ jsx29(
|
|
3978
|
+
SliderPrimitive.Track,
|
|
3979
|
+
{
|
|
3980
|
+
"data-slot": "slider-track",
|
|
3981
|
+
className: sliderTrackVariants(),
|
|
3982
|
+
children: /* @__PURE__ */ jsx29(
|
|
3983
|
+
SliderPrimitive.Indicator,
|
|
3984
|
+
{
|
|
3985
|
+
"data-slot": "slider-range",
|
|
3986
|
+
className: sliderIndicatorVariants()
|
|
3987
|
+
}
|
|
3988
|
+
)
|
|
3989
|
+
}
|
|
3990
|
+
),
|
|
3991
|
+
Array.from({ length: values.length }, (_, index) => /* @__PURE__ */ jsx29(
|
|
3992
|
+
SliderPrimitive.Thumb,
|
|
3993
|
+
{
|
|
3994
|
+
"data-slot": "slider-thumb",
|
|
3995
|
+
"aria-label": thumbLabels?.[index],
|
|
3996
|
+
className: sliderThumbVariants()
|
|
3997
|
+
},
|
|
3998
|
+
index
|
|
3999
|
+
))
|
|
4000
|
+
]
|
|
4001
|
+
}
|
|
4002
|
+
)
|
|
4003
|
+
}
|
|
4004
|
+
);
|
|
4005
|
+
}
|
|
4006
|
+
|
|
2895
4007
|
// src/components/ui/input.tsx
|
|
2896
4008
|
import { Input as InputPrimitive } from "@base-ui/react/input";
|
|
2897
|
-
import { cva as
|
|
2898
|
-
import { jsx as
|
|
2899
|
-
var inputVariants =
|
|
4009
|
+
import { cva as cva16 } from "class-variance-authority";
|
|
4010
|
+
import { jsx as jsx30 } from "react/jsx-runtime";
|
|
4011
|
+
var inputVariants = cva16(
|
|
2900
4012
|
cn(
|
|
2901
4013
|
// Layout
|
|
2902
4014
|
"w-full min-w-0",
|
|
@@ -2934,7 +4046,7 @@ var inputVariants = cva12(
|
|
|
2934
4046
|
}
|
|
2935
4047
|
);
|
|
2936
4048
|
function Input({ className, size, roundness, ref, ...props }) {
|
|
2937
|
-
return /* @__PURE__ */
|
|
4049
|
+
return /* @__PURE__ */ jsx30(
|
|
2938
4050
|
InputPrimitive,
|
|
2939
4051
|
{
|
|
2940
4052
|
"data-slot": "input",
|
|
@@ -2946,9 +4058,9 @@ function Input({ className, size, roundness, ref, ...props }) {
|
|
|
2946
4058
|
}
|
|
2947
4059
|
|
|
2948
4060
|
// src/components/ui/textarea.tsx
|
|
2949
|
-
import { jsx as
|
|
4061
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
2950
4062
|
function Textarea({ className, style, ref, ...props }) {
|
|
2951
|
-
return /* @__PURE__ */
|
|
4063
|
+
return /* @__PURE__ */ jsx31(
|
|
2952
4064
|
"textarea",
|
|
2953
4065
|
{
|
|
2954
4066
|
className: cn(
|
|
@@ -2963,9 +4075,9 @@ function Textarea({ className, style, ref, ...props }) {
|
|
|
2963
4075
|
}
|
|
2964
4076
|
|
|
2965
4077
|
// src/components/ui/input-group.tsx
|
|
2966
|
-
import { cva as
|
|
2967
|
-
import { jsx as
|
|
2968
|
-
var inputGroupVariants =
|
|
4078
|
+
import { cva as cva17 } from "class-variance-authority";
|
|
4079
|
+
import { jsx as jsx32 } from "react/jsx-runtime";
|
|
4080
|
+
var inputGroupVariants = cva17(
|
|
2969
4081
|
cn(
|
|
2970
4082
|
// Layout
|
|
2971
4083
|
"group/input-group relative flex w-full min-w-0 items-center overflow-hidden",
|
|
@@ -3012,7 +4124,7 @@ function InputGroup({
|
|
|
3012
4124
|
ref,
|
|
3013
4125
|
...props
|
|
3014
4126
|
}) {
|
|
3015
|
-
return /* @__PURE__ */
|
|
4127
|
+
return /* @__PURE__ */ jsx32(
|
|
3016
4128
|
"div",
|
|
3017
4129
|
{
|
|
3018
4130
|
ref,
|
|
@@ -3024,7 +4136,7 @@ function InputGroup({
|
|
|
3024
4136
|
}
|
|
3025
4137
|
);
|
|
3026
4138
|
}
|
|
3027
|
-
var inputGroupAddonVariants =
|
|
4139
|
+
var inputGroupAddonVariants = cva17(
|
|
3028
4140
|
"flex h-auto items-center justify-center gap-2 py-1.5 type-body-sm-regular group-data-[size=mini]/input-group:type-body-xs-regular text-secondary select-none [&>svg:not([class*='size-'])]:size-4",
|
|
3029
4141
|
{
|
|
3030
4142
|
variants: {
|
|
@@ -3046,7 +4158,7 @@ function InputGroupAddon({
|
|
|
3046
4158
|
ref,
|
|
3047
4159
|
...props
|
|
3048
4160
|
}) {
|
|
3049
|
-
return /* @__PURE__ */
|
|
4161
|
+
return /* @__PURE__ */ jsx32(
|
|
3050
4162
|
"div",
|
|
3051
4163
|
{
|
|
3052
4164
|
ref,
|
|
@@ -3061,7 +4173,7 @@ function InputGroupAddon({
|
|
|
3061
4173
|
}
|
|
3062
4174
|
);
|
|
3063
4175
|
}
|
|
3064
|
-
var inputGroupButtonVariants =
|
|
4176
|
+
var inputGroupButtonVariants = cva17("shadow-none py-0", {
|
|
3065
4177
|
variants: {
|
|
3066
4178
|
size: {
|
|
3067
4179
|
xs: "h-6 gap-1 rounded-sm px-1.5 type-label-xs-medium [&>svg:not([class*='size-'])]:size-3.5",
|
|
@@ -3082,7 +4194,7 @@ function InputGroupButton({
|
|
|
3082
4194
|
ref,
|
|
3083
4195
|
...props
|
|
3084
4196
|
}) {
|
|
3085
|
-
return /* @__PURE__ */
|
|
4197
|
+
return /* @__PURE__ */ jsx32(
|
|
3086
4198
|
Button,
|
|
3087
4199
|
{
|
|
3088
4200
|
ref,
|
|
@@ -3094,7 +4206,7 @@ function InputGroupButton({
|
|
|
3094
4206
|
);
|
|
3095
4207
|
}
|
|
3096
4208
|
function InputGroupText({ className, ref, ...props }) {
|
|
3097
|
-
return /* @__PURE__ */
|
|
4209
|
+
return /* @__PURE__ */ jsx32(
|
|
3098
4210
|
"span",
|
|
3099
4211
|
{
|
|
3100
4212
|
ref,
|
|
@@ -3111,7 +4223,7 @@ function InputGroupInput({ className, ref, ...props }) {
|
|
|
3111
4223
|
// Most of these classes override Input's default border, background, shadow,
|
|
3112
4224
|
// and focus/error/disabled styles so that InputGroup owns all visual states
|
|
3113
4225
|
// via its own has-[...] selectors.
|
|
3114
|
-
/* @__PURE__ */
|
|
4226
|
+
/* @__PURE__ */ jsx32(
|
|
3115
4227
|
Input,
|
|
3116
4228
|
{
|
|
3117
4229
|
ref,
|
|
@@ -3133,7 +4245,7 @@ function InputGroupTextarea({
|
|
|
3133
4245
|
return (
|
|
3134
4246
|
// Same overrides as InputGroupInput — strips Textarea's own border, background,
|
|
3135
4247
|
// shadow, and focus/error/disabled styles so InputGroup owns all visual states.
|
|
3136
|
-
/* @__PURE__ */
|
|
4248
|
+
/* @__PURE__ */ jsx32(
|
|
3137
4249
|
Textarea,
|
|
3138
4250
|
{
|
|
3139
4251
|
ref,
|
|
@@ -3148,121 +4260,59 @@ function InputGroupTextarea({
|
|
|
3148
4260
|
);
|
|
3149
4261
|
}
|
|
3150
4262
|
|
|
3151
|
-
// src/components/ui/
|
|
3152
|
-
import
|
|
3153
|
-
import {
|
|
3154
|
-
|
|
3155
|
-
var badgeVariants = cva14(
|
|
4263
|
+
// src/components/ui/tag.tsx
|
|
4264
|
+
import { cva as cva18 } from "class-variance-authority";
|
|
4265
|
+
import { jsx as jsx33 } from "react/jsx-runtime";
|
|
4266
|
+
var tagVariants = cva18(
|
|
3156
4267
|
[
|
|
3157
4268
|
// Layout
|
|
3158
|
-
"inline-flex items-center justify-center
|
|
4269
|
+
"inline-flex items-center justify-center",
|
|
3159
4270
|
// Size
|
|
3160
|
-
"h-6 px-2",
|
|
4271
|
+
"h-6 px-2.5",
|
|
3161
4272
|
// Text
|
|
3162
|
-
"whitespace-nowrap type-label-xs-medium",
|
|
3163
|
-
// Shape
|
|
3164
|
-
"rounded-
|
|
3165
|
-
|
|
3166
|
-
|
|
3167
|
-
|
|
3168
|
-
|
|
3169
|
-
|
|
3170
|
-
|
|
3171
|
-
|
|
3172
|
-
|
|
3173
|
-
|
|
3174
|
-
|
|
3175
|
-
|
|
3176
|
-
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
|
|
3182
|
-
|
|
3183
|
-
|
|
3184
|
-
|
|
3185
|
-
|
|
3186
|
-
|
|
3187
|
-
|
|
3188
|
-
}
|
|
3189
|
-
},
|
|
3190
|
-
defaultVariants: {}
|
|
3191
|
-
}
|
|
3192
|
-
);
|
|
3193
|
-
function isSingleDisplayCharacter(node) {
|
|
3194
|
-
if (node == null || typeof node === "boolean") return false;
|
|
3195
|
-
if (typeof node === "string" || typeof node === "number") {
|
|
3196
|
-
const trimmed = String(node).trim();
|
|
3197
|
-
return trimmed.length === 1;
|
|
3198
|
-
}
|
|
3199
|
-
if (Array.isArray(node)) {
|
|
3200
|
-
const parts = node.filter((x) => x != null && typeof x !== "boolean");
|
|
3201
|
-
if (parts.length !== 1) return false;
|
|
3202
|
-
return isSingleDisplayCharacter(parts[0]);
|
|
3203
|
-
}
|
|
3204
|
-
if (React10.isValidElement(node)) {
|
|
3205
|
-
return isSingleDisplayCharacter(
|
|
3206
|
-
node.props.children
|
|
3207
|
-
);
|
|
3208
|
-
}
|
|
3209
|
-
return false;
|
|
3210
|
-
}
|
|
3211
|
-
function Badge({
|
|
3212
|
-
className,
|
|
3213
|
-
variant,
|
|
3214
|
-
iconLeft,
|
|
3215
|
-
iconRight,
|
|
3216
|
-
onKeyDown,
|
|
3217
|
-
style,
|
|
3218
|
-
children,
|
|
3219
|
-
ref,
|
|
3220
|
-
...props
|
|
3221
|
-
}) {
|
|
3222
|
-
if (!variant) {
|
|
3223
|
-
return null;
|
|
3224
|
-
}
|
|
3225
|
-
const circle = isSingleDisplayCharacter(children) && !iconLeft && !iconRight;
|
|
3226
|
-
return /* @__PURE__ */ jsxs12(
|
|
3227
|
-
"span",
|
|
3228
|
-
{
|
|
3229
|
-
...props,
|
|
3230
|
-
role: "button",
|
|
3231
|
-
tabIndex: 0,
|
|
3232
|
-
onKeyDown: (e) => {
|
|
3233
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
3234
|
-
e.preventDefault();
|
|
3235
|
-
e.currentTarget.click();
|
|
3236
|
-
}
|
|
3237
|
-
onKeyDown?.(e);
|
|
3238
|
-
},
|
|
3239
|
-
className: cn(
|
|
3240
|
-
badgeVariants({ variant }),
|
|
3241
|
-
circle ? "size-5 shrink-0 p-0" : "",
|
|
3242
|
-
className
|
|
3243
|
-
),
|
|
3244
|
-
style,
|
|
4273
|
+
"whitespace-nowrap type-label-xs-medium",
|
|
4274
|
+
// Shape
|
|
4275
|
+
"rounded-full"
|
|
4276
|
+
],
|
|
4277
|
+
{
|
|
4278
|
+
variants: {
|
|
4279
|
+
color: {
|
|
4280
|
+
violet: "bg-violet-200 text-black",
|
|
4281
|
+
cyan: "bg-cyan-200 text-black",
|
|
4282
|
+
indigo: "bg-indigo-100 text-black",
|
|
4283
|
+
orange: "bg-orange-200 text-black",
|
|
4284
|
+
pink: "bg-pink-200 text-black",
|
|
4285
|
+
verdant: "bg-verdant-200 text-black",
|
|
4286
|
+
stone: "bg-stone-200 text-black"
|
|
4287
|
+
}
|
|
4288
|
+
},
|
|
4289
|
+
defaultVariants: {
|
|
4290
|
+
color: "stone"
|
|
4291
|
+
}
|
|
4292
|
+
}
|
|
4293
|
+
);
|
|
4294
|
+
function Tag({ className, color, ref, ...props }) {
|
|
4295
|
+
return /* @__PURE__ */ jsx33(
|
|
4296
|
+
"span",
|
|
4297
|
+
{
|
|
4298
|
+
className: cn(tagVariants({ color }), className),
|
|
3245
4299
|
ref,
|
|
3246
|
-
|
|
3247
|
-
iconLeft,
|
|
3248
|
-
children,
|
|
3249
|
-
iconRight
|
|
3250
|
-
]
|
|
4300
|
+
...props
|
|
3251
4301
|
}
|
|
3252
4302
|
);
|
|
3253
4303
|
}
|
|
3254
4304
|
|
|
3255
4305
|
// src/components/ui/alert-dialog.tsx
|
|
3256
4306
|
import { AlertDialog as AlertDialogPrimitive } from "@base-ui/react/alert-dialog";
|
|
3257
|
-
import { jsx as
|
|
4307
|
+
import { jsx as jsx34, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
3258
4308
|
function AlertDialog({ ...props }) {
|
|
3259
|
-
return /* @__PURE__ */
|
|
4309
|
+
return /* @__PURE__ */ jsx34(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
|
|
3260
4310
|
}
|
|
3261
4311
|
function AlertDialogTrigger({
|
|
3262
4312
|
ref,
|
|
3263
4313
|
...props
|
|
3264
4314
|
}) {
|
|
3265
|
-
return /* @__PURE__ */
|
|
4315
|
+
return /* @__PURE__ */ jsx34(
|
|
3266
4316
|
AlertDialogPrimitive.Trigger,
|
|
3267
4317
|
{
|
|
3268
4318
|
ref,
|
|
@@ -3276,7 +4326,7 @@ function AlertDialogOverlay({
|
|
|
3276
4326
|
ref,
|
|
3277
4327
|
...props
|
|
3278
4328
|
}) {
|
|
3279
|
-
return /* @__PURE__ */
|
|
4329
|
+
return /* @__PURE__ */ jsx34(
|
|
3280
4330
|
AlertDialogPrimitive.Backdrop,
|
|
3281
4331
|
{
|
|
3282
4332
|
ref,
|
|
@@ -3298,9 +4348,9 @@ function AlertDialogContent({
|
|
|
3298
4348
|
ref,
|
|
3299
4349
|
...props
|
|
3300
4350
|
}) {
|
|
3301
|
-
return /* @__PURE__ */
|
|
3302
|
-
/* @__PURE__ */
|
|
3303
|
-
/* @__PURE__ */
|
|
4351
|
+
return /* @__PURE__ */ jsxs18(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", children: [
|
|
4352
|
+
/* @__PURE__ */ jsx34(AlertDialogOverlay, {}),
|
|
4353
|
+
/* @__PURE__ */ jsx34(
|
|
3304
4354
|
AlertDialogPrimitive.Popup,
|
|
3305
4355
|
{
|
|
3306
4356
|
ref,
|
|
@@ -3333,7 +4383,7 @@ function AlertDialogHeader({
|
|
|
3333
4383
|
ref,
|
|
3334
4384
|
...props
|
|
3335
4385
|
}) {
|
|
3336
|
-
return /* @__PURE__ */
|
|
4386
|
+
return /* @__PURE__ */ jsx34(
|
|
3337
4387
|
"div",
|
|
3338
4388
|
{
|
|
3339
4389
|
ref,
|
|
@@ -3353,7 +4403,7 @@ function AlertDialogFooter({
|
|
|
3353
4403
|
ref,
|
|
3354
4404
|
...props
|
|
3355
4405
|
}) {
|
|
3356
|
-
return /* @__PURE__ */
|
|
4406
|
+
return /* @__PURE__ */ jsx34(
|
|
3357
4407
|
"div",
|
|
3358
4408
|
{
|
|
3359
4409
|
ref,
|
|
@@ -3375,7 +4425,7 @@ function AlertDialogTitle({
|
|
|
3375
4425
|
ref,
|
|
3376
4426
|
...props
|
|
3377
4427
|
}) {
|
|
3378
|
-
return /* @__PURE__ */
|
|
4428
|
+
return /* @__PURE__ */ jsx34(
|
|
3379
4429
|
AlertDialogPrimitive.Title,
|
|
3380
4430
|
{
|
|
3381
4431
|
ref,
|
|
@@ -3390,7 +4440,7 @@ function AlertDialogDescription({
|
|
|
3390
4440
|
ref,
|
|
3391
4441
|
...props
|
|
3392
4442
|
}) {
|
|
3393
|
-
return /* @__PURE__ */
|
|
4443
|
+
return /* @__PURE__ */ jsx34(
|
|
3394
4444
|
AlertDialogPrimitive.Description,
|
|
3395
4445
|
{
|
|
3396
4446
|
ref,
|
|
@@ -3407,12 +4457,12 @@ function AlertDialogAction({
|
|
|
3407
4457
|
ref,
|
|
3408
4458
|
...props
|
|
3409
4459
|
}) {
|
|
3410
|
-
return /* @__PURE__ */
|
|
4460
|
+
return /* @__PURE__ */ jsx34(
|
|
3411
4461
|
AlertDialogPrimitive.Close,
|
|
3412
4462
|
{
|
|
3413
4463
|
ref,
|
|
3414
4464
|
"data-slot": "alert-dialog-action",
|
|
3415
|
-
render: /* @__PURE__ */
|
|
4465
|
+
render: /* @__PURE__ */ jsx34(Button, { variant, size }),
|
|
3416
4466
|
className,
|
|
3417
4467
|
...props
|
|
3418
4468
|
}
|
|
@@ -3425,12 +4475,12 @@ function AlertDialogCancel({
|
|
|
3425
4475
|
ref,
|
|
3426
4476
|
...props
|
|
3427
4477
|
}) {
|
|
3428
|
-
return /* @__PURE__ */
|
|
4478
|
+
return /* @__PURE__ */ jsx34(
|
|
3429
4479
|
AlertDialogPrimitive.Close,
|
|
3430
4480
|
{
|
|
3431
4481
|
ref,
|
|
3432
4482
|
"data-slot": "alert-dialog-cancel",
|
|
3433
|
-
render: /* @__PURE__ */
|
|
4483
|
+
render: /* @__PURE__ */ jsx34(Button, { variant, size }),
|
|
3434
4484
|
className,
|
|
3435
4485
|
...props
|
|
3436
4486
|
}
|
|
@@ -3438,14 +4488,14 @@ function AlertDialogCancel({
|
|
|
3438
4488
|
}
|
|
3439
4489
|
|
|
3440
4490
|
// src/components/ui/item.tsx
|
|
3441
|
-
import * as
|
|
4491
|
+
import * as React13 from "react";
|
|
3442
4492
|
import { mergeProps as mergeProps3 } from "@base-ui/react/merge-props";
|
|
3443
4493
|
import { useRender as useRender3 } from "@base-ui/react/use-render";
|
|
3444
|
-
import { cva as
|
|
3445
|
-
import { jsx as
|
|
3446
|
-
var ItemGroupContext =
|
|
4494
|
+
import { cva as cva19 } from "class-variance-authority";
|
|
4495
|
+
import { jsx as jsx35 } from "react/jsx-runtime";
|
|
4496
|
+
var ItemGroupContext = React13.createContext(false);
|
|
3447
4497
|
function ItemGroup({ className, ref, ...props }) {
|
|
3448
|
-
return /* @__PURE__ */
|
|
4498
|
+
return /* @__PURE__ */ jsx35(ItemGroupContext, { value: true, children: /* @__PURE__ */ jsx35(
|
|
3449
4499
|
"div",
|
|
3450
4500
|
{
|
|
3451
4501
|
ref,
|
|
@@ -3464,7 +4514,7 @@ function ItemSeparator({
|
|
|
3464
4514
|
ref,
|
|
3465
4515
|
...props
|
|
3466
4516
|
}) {
|
|
3467
|
-
return /* @__PURE__ */
|
|
4517
|
+
return /* @__PURE__ */ jsx35(
|
|
3468
4518
|
Separator,
|
|
3469
4519
|
{
|
|
3470
4520
|
ref,
|
|
@@ -3475,7 +4525,7 @@ function ItemSeparator({
|
|
|
3475
4525
|
}
|
|
3476
4526
|
);
|
|
3477
4527
|
}
|
|
3478
|
-
var itemVariants =
|
|
4528
|
+
var itemVariants = cva19(
|
|
3479
4529
|
"surface-default rounded-md border group/item flex w-full flex-wrap transition-colors duration-100 outline-none [a]:relative [a]:isolate [a]:after:absolute [a]:after:inset-0 [a]:after:rounded-[inherit] [a]:after:-z-10 [a]:after:pointer-events-none [a]:after:transition-colors",
|
|
3480
4530
|
{
|
|
3481
4531
|
variants: {
|
|
@@ -3502,7 +4552,7 @@ var Item = ({
|
|
|
3502
4552
|
render,
|
|
3503
4553
|
...props
|
|
3504
4554
|
}) => {
|
|
3505
|
-
const insideGroup =
|
|
4555
|
+
const insideGroup = React13.useContext(ItemGroupContext);
|
|
3506
4556
|
return useRender3({
|
|
3507
4557
|
defaultTagName: "div",
|
|
3508
4558
|
props: mergeProps3(
|
|
@@ -3520,7 +4570,7 @@ var Item = ({
|
|
|
3520
4570
|
}
|
|
3521
4571
|
});
|
|
3522
4572
|
};
|
|
3523
|
-
var itemMediaVariants =
|
|
4573
|
+
var itemMediaVariants = cva19(
|
|
3524
4574
|
"gap-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none",
|
|
3525
4575
|
{
|
|
3526
4576
|
variants: {
|
|
@@ -3542,7 +4592,7 @@ function ItemMedia({
|
|
|
3542
4592
|
ref,
|
|
3543
4593
|
...props
|
|
3544
4594
|
}) {
|
|
3545
|
-
return /* @__PURE__ */
|
|
4595
|
+
return /* @__PURE__ */ jsx35(
|
|
3546
4596
|
"div",
|
|
3547
4597
|
{
|
|
3548
4598
|
ref,
|
|
@@ -3558,7 +4608,7 @@ function ItemContent({
|
|
|
3558
4608
|
ref,
|
|
3559
4609
|
...props
|
|
3560
4610
|
}) {
|
|
3561
|
-
return /* @__PURE__ */
|
|
4611
|
+
return /* @__PURE__ */ jsx35(
|
|
3562
4612
|
"div",
|
|
3563
4613
|
{
|
|
3564
4614
|
ref,
|
|
@@ -3572,7 +4622,7 @@ function ItemContent({
|
|
|
3572
4622
|
);
|
|
3573
4623
|
}
|
|
3574
4624
|
function ItemTitle({ className, ref, ...props }) {
|
|
3575
|
-
return /* @__PURE__ */
|
|
4625
|
+
return /* @__PURE__ */ jsx35(
|
|
3576
4626
|
"div",
|
|
3577
4627
|
{
|
|
3578
4628
|
ref,
|
|
@@ -3590,7 +4640,7 @@ function ItemDescription({
|
|
|
3590
4640
|
ref,
|
|
3591
4641
|
...props
|
|
3592
4642
|
}) {
|
|
3593
|
-
return /* @__PURE__ */
|
|
4643
|
+
return /* @__PURE__ */ jsx35(
|
|
3594
4644
|
"p",
|
|
3595
4645
|
{
|
|
3596
4646
|
ref,
|
|
@@ -3608,7 +4658,7 @@ function ItemActions({
|
|
|
3608
4658
|
ref,
|
|
3609
4659
|
...props
|
|
3610
4660
|
}) {
|
|
3611
|
-
return /* @__PURE__ */
|
|
4661
|
+
return /* @__PURE__ */ jsx35(
|
|
3612
4662
|
"div",
|
|
3613
4663
|
{
|
|
3614
4664
|
ref,
|
|
@@ -3619,7 +4669,7 @@ function ItemActions({
|
|
|
3619
4669
|
);
|
|
3620
4670
|
}
|
|
3621
4671
|
function ItemHeader({ className, ref, ...props }) {
|
|
3622
|
-
return /* @__PURE__ */
|
|
4672
|
+
return /* @__PURE__ */ jsx35(
|
|
3623
4673
|
"div",
|
|
3624
4674
|
{
|
|
3625
4675
|
ref,
|
|
@@ -3633,7 +4683,7 @@ function ItemHeader({ className, ref, ...props }) {
|
|
|
3633
4683
|
);
|
|
3634
4684
|
}
|
|
3635
4685
|
function ItemFooter({ className, ref, ...props }) {
|
|
3636
|
-
return /* @__PURE__ */
|
|
4686
|
+
return /* @__PURE__ */ jsx35(
|
|
3637
4687
|
"div",
|
|
3638
4688
|
{
|
|
3639
4689
|
ref,
|
|
@@ -3649,14 +4699,14 @@ function ItemFooter({ className, ref, ...props }) {
|
|
|
3649
4699
|
|
|
3650
4700
|
// src/components/ui/tabs.tsx
|
|
3651
4701
|
import { Tabs as TabsPrimitive } from "@base-ui/react/tabs";
|
|
3652
|
-
import { cva as
|
|
3653
|
-
import { jsx as
|
|
4702
|
+
import { cva as cva20 } from "class-variance-authority";
|
|
4703
|
+
import { jsx as jsx36 } from "react/jsx-runtime";
|
|
3654
4704
|
function Tabs({
|
|
3655
4705
|
className,
|
|
3656
4706
|
orientation = "horizontal",
|
|
3657
4707
|
...props
|
|
3658
4708
|
}) {
|
|
3659
|
-
return /* @__PURE__ */
|
|
4709
|
+
return /* @__PURE__ */ jsx36(
|
|
3660
4710
|
TabsPrimitive.Root,
|
|
3661
4711
|
{
|
|
3662
4712
|
"data-slot": "tabs",
|
|
@@ -3670,7 +4720,7 @@ function Tabs({
|
|
|
3670
4720
|
}
|
|
3671
4721
|
);
|
|
3672
4722
|
}
|
|
3673
|
-
var tabsListVariants =
|
|
4723
|
+
var tabsListVariants = cva20(
|
|
3674
4724
|
[
|
|
3675
4725
|
// base layout
|
|
3676
4726
|
"group/tabs-list inline-flex w-fit items-center p-1",
|
|
@@ -3698,7 +4748,7 @@ function TabsList({
|
|
|
3698
4748
|
variant = "default",
|
|
3699
4749
|
...props
|
|
3700
4750
|
}) {
|
|
3701
|
-
return /* @__PURE__ */
|
|
4751
|
+
return /* @__PURE__ */ jsx36(
|
|
3702
4752
|
TabsPrimitive.List,
|
|
3703
4753
|
{
|
|
3704
4754
|
"data-slot": "tabs-list",
|
|
@@ -3708,7 +4758,7 @@ function TabsList({
|
|
|
3708
4758
|
}
|
|
3709
4759
|
);
|
|
3710
4760
|
}
|
|
3711
|
-
var tabsTriggerVariants =
|
|
4761
|
+
var tabsTriggerVariants = cva20(
|
|
3712
4762
|
[
|
|
3713
4763
|
// base layout
|
|
3714
4764
|
"relative inline-flex shrink-0 items-center justify-center whitespace-nowrap",
|
|
@@ -3762,7 +4812,7 @@ function TabsTrigger({
|
|
|
3762
4812
|
size = "regular",
|
|
3763
4813
|
...props
|
|
3764
4814
|
}) {
|
|
3765
|
-
return /* @__PURE__ */
|
|
4815
|
+
return /* @__PURE__ */ jsx36(
|
|
3766
4816
|
TabsPrimitive.Tab,
|
|
3767
4817
|
{
|
|
3768
4818
|
"data-slot": "tabs-trigger",
|
|
@@ -3772,7 +4822,7 @@ function TabsTrigger({
|
|
|
3772
4822
|
);
|
|
3773
4823
|
}
|
|
3774
4824
|
function TabsContent({ className, ...props }) {
|
|
3775
|
-
return /* @__PURE__ */
|
|
4825
|
+
return /* @__PURE__ */ jsx36(
|
|
3776
4826
|
TabsPrimitive.Panel,
|
|
3777
4827
|
{
|
|
3778
4828
|
"data-slot": "tabs-content",
|
|
@@ -3785,8 +4835,8 @@ function TabsContent({ className, ...props }) {
|
|
|
3785
4835
|
// src/components/ui/dropdown-menu.tsx
|
|
3786
4836
|
import { Menu as MenuPrimitive } from "@base-ui/react/menu";
|
|
3787
4837
|
import { Separator as SeparatorPrimitive2 } from "@base-ui/react/separator";
|
|
3788
|
-
import { cva as
|
|
3789
|
-
import { jsx as
|
|
4838
|
+
import { cva as cva21 } from "class-variance-authority";
|
|
4839
|
+
import { jsx as jsx37, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
3790
4840
|
var DropdownMenu = MenuPrimitive.Root;
|
|
3791
4841
|
var DropdownMenuGroup = MenuPrimitive.Group;
|
|
3792
4842
|
var DropdownMenuSub = MenuPrimitive.SubmenuRoot;
|
|
@@ -3796,7 +4846,7 @@ function DropdownMenuTrigger({
|
|
|
3796
4846
|
ref,
|
|
3797
4847
|
...props
|
|
3798
4848
|
}) {
|
|
3799
|
-
return /* @__PURE__ */
|
|
4849
|
+
return /* @__PURE__ */ jsx37(
|
|
3800
4850
|
MenuPrimitive.Trigger,
|
|
3801
4851
|
{
|
|
3802
4852
|
"data-slot": "dropdown-trigger",
|
|
@@ -3815,7 +4865,7 @@ function DropdownMenuContent({
|
|
|
3815
4865
|
ref,
|
|
3816
4866
|
...props
|
|
3817
4867
|
}) {
|
|
3818
|
-
return /* @__PURE__ */
|
|
4868
|
+
return /* @__PURE__ */ jsx37(MenuPrimitive.Portal, { children: /* @__PURE__ */ jsx37(
|
|
3819
4869
|
MenuPrimitive.Positioner,
|
|
3820
4870
|
{
|
|
3821
4871
|
className: "isolate z-50 outline-none",
|
|
@@ -3823,7 +4873,7 @@ function DropdownMenuContent({
|
|
|
3823
4873
|
alignOffset,
|
|
3824
4874
|
side,
|
|
3825
4875
|
sideOffset,
|
|
3826
|
-
children: /* @__PURE__ */
|
|
4876
|
+
children: /* @__PURE__ */ jsx37(
|
|
3827
4877
|
MenuPrimitive.Popup,
|
|
3828
4878
|
{
|
|
3829
4879
|
"data-slot": "dropdown-content",
|
|
@@ -3850,7 +4900,7 @@ function DropdownMenuSubTrigger({
|
|
|
3850
4900
|
ref,
|
|
3851
4901
|
...props
|
|
3852
4902
|
}) {
|
|
3853
|
-
return /* @__PURE__ */
|
|
4903
|
+
return /* @__PURE__ */ jsxs19(
|
|
3854
4904
|
MenuPrimitive.SubmenuTrigger,
|
|
3855
4905
|
{
|
|
3856
4906
|
"data-slot": "dropdown-sub-trigger",
|
|
@@ -3869,7 +4919,7 @@ function DropdownMenuSubTrigger({
|
|
|
3869
4919
|
...props,
|
|
3870
4920
|
children: [
|
|
3871
4921
|
children,
|
|
3872
|
-
/* @__PURE__ */
|
|
4922
|
+
/* @__PURE__ */ jsx37(ArrowRightIcon, { size: 16, className: "ml-auto text-secondary" })
|
|
3873
4923
|
]
|
|
3874
4924
|
}
|
|
3875
4925
|
);
|
|
@@ -3883,7 +4933,7 @@ function DropdownMenuSubContent({
|
|
|
3883
4933
|
ref,
|
|
3884
4934
|
...props
|
|
3885
4935
|
}) {
|
|
3886
|
-
return /* @__PURE__ */
|
|
4936
|
+
return /* @__PURE__ */ jsx37(
|
|
3887
4937
|
DropdownMenuContent,
|
|
3888
4938
|
{
|
|
3889
4939
|
"data-slot": "dropdown-sub-content",
|
|
@@ -3897,7 +4947,7 @@ function DropdownMenuSubContent({
|
|
|
3897
4947
|
}
|
|
3898
4948
|
);
|
|
3899
4949
|
}
|
|
3900
|
-
var dropdownMenuItemVariants =
|
|
4950
|
+
var dropdownMenuItemVariants = cva21(
|
|
3901
4951
|
[
|
|
3902
4952
|
"relative flex w-full cursor-default select-none items-center gap-2",
|
|
3903
4953
|
"min-h-8 px-2 py-[5.5px] rounded-md",
|
|
@@ -3926,7 +4976,7 @@ function DropdownMenuItem({
|
|
|
3926
4976
|
ref,
|
|
3927
4977
|
...props
|
|
3928
4978
|
}) {
|
|
3929
|
-
return /* @__PURE__ */
|
|
4979
|
+
return /* @__PURE__ */ jsx37(
|
|
3930
4980
|
MenuPrimitive.Item,
|
|
3931
4981
|
{
|
|
3932
4982
|
"data-slot": "dropdown-item",
|
|
@@ -3948,7 +4998,7 @@ function DropdownMenuCheckboxItem({
|
|
|
3948
4998
|
ref,
|
|
3949
4999
|
...props
|
|
3950
5000
|
}) {
|
|
3951
|
-
return /* @__PURE__ */
|
|
5001
|
+
return /* @__PURE__ */ jsxs19(
|
|
3952
5002
|
MenuPrimitive.CheckboxItem,
|
|
3953
5003
|
{
|
|
3954
5004
|
"data-slot": "dropdown-checkbox-item",
|
|
@@ -3966,7 +5016,7 @@ function DropdownMenuCheckboxItem({
|
|
|
3966
5016
|
checked,
|
|
3967
5017
|
...props,
|
|
3968
5018
|
children: [
|
|
3969
|
-
/* @__PURE__ */
|
|
5019
|
+
/* @__PURE__ */ jsx37("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx37(MenuPrimitive.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx37(CheckmarkIcon, { size: 16 }) }) }),
|
|
3970
5020
|
children
|
|
3971
5021
|
]
|
|
3972
5022
|
}
|
|
@@ -3979,7 +5029,7 @@ function DropdownMenuRadioItem({
|
|
|
3979
5029
|
ref,
|
|
3980
5030
|
...props
|
|
3981
5031
|
}) {
|
|
3982
|
-
return /* @__PURE__ */
|
|
5032
|
+
return /* @__PURE__ */ jsxs19(
|
|
3983
5033
|
MenuPrimitive.RadioItem,
|
|
3984
5034
|
{
|
|
3985
5035
|
"data-slot": "dropdown-radio-item",
|
|
@@ -3997,7 +5047,7 @@ function DropdownMenuRadioItem({
|
|
|
3997
5047
|
...props,
|
|
3998
5048
|
children: [
|
|
3999
5049
|
children,
|
|
4000
|
-
/* @__PURE__ */
|
|
5050
|
+
/* @__PURE__ */ jsx37("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx37("span", { className: "hidden size-2 rounded-full bg-[var(--color-interactive-accent)] group-data-[checked]:block" }) })
|
|
4001
5051
|
]
|
|
4002
5052
|
}
|
|
4003
5053
|
);
|
|
@@ -4007,7 +5057,7 @@ function DropdownMenuLabel({
|
|
|
4007
5057
|
ref,
|
|
4008
5058
|
...props
|
|
4009
5059
|
}) {
|
|
4010
|
-
return /* @__PURE__ */
|
|
5060
|
+
return /* @__PURE__ */ jsx37(
|
|
4011
5061
|
MenuPrimitive.GroupLabel,
|
|
4012
5062
|
{
|
|
4013
5063
|
"data-slot": "dropdown-label",
|
|
@@ -4025,7 +5075,7 @@ function DropdownMenuSeparator({
|
|
|
4025
5075
|
ref,
|
|
4026
5076
|
...props
|
|
4027
5077
|
}) {
|
|
4028
|
-
return /* @__PURE__ */
|
|
5078
|
+
return /* @__PURE__ */ jsx37(
|
|
4029
5079
|
SeparatorPrimitive2,
|
|
4030
5080
|
{
|
|
4031
5081
|
"data-slot": "dropdown-separator",
|
|
@@ -4042,7 +5092,7 @@ function DropdownMenuShortcut({
|
|
|
4042
5092
|
className,
|
|
4043
5093
|
...props
|
|
4044
5094
|
}) {
|
|
4045
|
-
return /* @__PURE__ */
|
|
5095
|
+
return /* @__PURE__ */ jsx37(
|
|
4046
5096
|
"span",
|
|
4047
5097
|
{
|
|
4048
5098
|
"data-slot": "dropdown-shortcut",
|
|
@@ -4056,15 +5106,462 @@ function DropdownMenuShortcut({
|
|
|
4056
5106
|
);
|
|
4057
5107
|
}
|
|
4058
5108
|
|
|
5109
|
+
// src/components/ui/chart.tsx
|
|
5110
|
+
import * as React14 from "react";
|
|
5111
|
+
import * as RechartsPrimitive from "recharts";
|
|
5112
|
+
import { Fragment, jsx as jsx38, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
5113
|
+
var THEMES = { light: "", dark: ".dark" };
|
|
5114
|
+
var INITIAL_DIMENSION = { width: 320, height: 200 };
|
|
5115
|
+
var ChartContext = React14.createContext(null);
|
|
5116
|
+
function useChart() {
|
|
5117
|
+
const context = React14.useContext(ChartContext);
|
|
5118
|
+
if (!context) {
|
|
5119
|
+
throw new Error("useChart must be used within a <ChartContainer />");
|
|
5120
|
+
}
|
|
5121
|
+
return context;
|
|
5122
|
+
}
|
|
5123
|
+
function ChartContainer({
|
|
5124
|
+
id,
|
|
5125
|
+
className,
|
|
5126
|
+
children,
|
|
5127
|
+
config,
|
|
5128
|
+
initialDimension = INITIAL_DIMENSION,
|
|
5129
|
+
...props
|
|
5130
|
+
}) {
|
|
5131
|
+
const uniqueId = React14.useId();
|
|
5132
|
+
const chartId = `chart-${id ?? uniqueId.replace(/:/g, "")}`;
|
|
5133
|
+
return /* @__PURE__ */ jsx38(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs20(
|
|
5134
|
+
"div",
|
|
5135
|
+
{
|
|
5136
|
+
"data-slot": "chart",
|
|
5137
|
+
"data-chart": chartId,
|
|
5138
|
+
className: cn(
|
|
5139
|
+
// Layout
|
|
5140
|
+
"flex aspect-video justify-center text-xs",
|
|
5141
|
+
// Axis
|
|
5142
|
+
"[&_.recharts-cartesian-axis-tick_text]:fill-(--color-text-secondary)",
|
|
5143
|
+
// Grid
|
|
5144
|
+
"[&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-(--color-border-default)/50",
|
|
5145
|
+
"[&_.recharts-polar-grid_[stroke='#ccc']]:stroke-(--color-border-default)",
|
|
5146
|
+
"[&_.recharts-reference-line_[stroke='#ccc']]:stroke-(--color-border-default)",
|
|
5147
|
+
// Tooltip cursor
|
|
5148
|
+
"[&_.recharts-curve.recharts-tooltip-cursor]:stroke-(--color-border-default)",
|
|
5149
|
+
"[&_.recharts-rectangle.recharts-tooltip-cursor]:fill-(--color-surface-muted)",
|
|
5150
|
+
// Dots & sectors
|
|
5151
|
+
"[&_.recharts-dot[stroke='#fff']]:stroke-transparent",
|
|
5152
|
+
"[&_.recharts-sector]:outline-hidden",
|
|
5153
|
+
// Separate pie/donut slices with a stroke matching the surface behind the chart
|
|
5154
|
+
"[&_.recharts-sector[stroke='#fff']]:stroke-(--color-surface-default)",
|
|
5155
|
+
"[&_.recharts-sector[stroke='#fff']]:[stroke-width:2px]",
|
|
5156
|
+
"[&_.recharts-radial-bar-background-sector]:fill-(--color-surface-muted)",
|
|
5157
|
+
// Misc
|
|
5158
|
+
"[&_.recharts-layer]:outline-hidden",
|
|
5159
|
+
"[&_.recharts-surface]:outline-hidden",
|
|
5160
|
+
className
|
|
5161
|
+
),
|
|
5162
|
+
...props,
|
|
5163
|
+
children: [
|
|
5164
|
+
/* @__PURE__ */ jsx38(ChartStyle, { id: chartId, config }),
|
|
5165
|
+
/* @__PURE__ */ jsx38(
|
|
5166
|
+
RechartsPrimitive.ResponsiveContainer,
|
|
5167
|
+
{
|
|
5168
|
+
initialDimension,
|
|
5169
|
+
children
|
|
5170
|
+
}
|
|
5171
|
+
)
|
|
5172
|
+
]
|
|
5173
|
+
}
|
|
5174
|
+
) });
|
|
5175
|
+
}
|
|
5176
|
+
var ChartStyle = ({ id, config }) => {
|
|
5177
|
+
const colorConfig = Object.entries(config).filter(
|
|
5178
|
+
([, item]) => item.theme ?? item.color
|
|
5179
|
+
);
|
|
5180
|
+
if (!colorConfig.length) {
|
|
5181
|
+
return null;
|
|
5182
|
+
}
|
|
5183
|
+
return /* @__PURE__ */ jsx38(
|
|
5184
|
+
"style",
|
|
5185
|
+
{
|
|
5186
|
+
dangerouslySetInnerHTML: {
|
|
5187
|
+
__html: Object.entries(THEMES).map(
|
|
5188
|
+
([theme, prefix]) => `
|
|
5189
|
+
${prefix} [data-chart=${id}] {
|
|
5190
|
+
${colorConfig.map(([key, itemConfig]) => {
|
|
5191
|
+
const color = itemConfig.theme?.[theme] ?? itemConfig.color;
|
|
5192
|
+
return color ? ` --color-${key}: ${color};` : null;
|
|
5193
|
+
}).filter(Boolean).join("\n")}
|
|
5194
|
+
}
|
|
5195
|
+
`
|
|
5196
|
+
).join("\n")
|
|
5197
|
+
}
|
|
5198
|
+
}
|
|
5199
|
+
);
|
|
5200
|
+
};
|
|
5201
|
+
var ChartTooltip = RechartsPrimitive.Tooltip;
|
|
5202
|
+
function ChartTooltipContent({
|
|
5203
|
+
active,
|
|
5204
|
+
payload,
|
|
5205
|
+
className,
|
|
5206
|
+
indicator = "dot",
|
|
5207
|
+
hideLabel = false,
|
|
5208
|
+
hideIndicator = false,
|
|
5209
|
+
label,
|
|
5210
|
+
labelFormatter,
|
|
5211
|
+
labelClassName,
|
|
5212
|
+
formatter,
|
|
5213
|
+
color,
|
|
5214
|
+
nameKey,
|
|
5215
|
+
labelKey
|
|
5216
|
+
}) {
|
|
5217
|
+
const { config } = useChart();
|
|
5218
|
+
const tooltipLabel = React14.useMemo(() => {
|
|
5219
|
+
if (hideLabel || !payload?.length) {
|
|
5220
|
+
return null;
|
|
5221
|
+
}
|
|
5222
|
+
const [item] = payload;
|
|
5223
|
+
const key = `${labelKey ?? item?.dataKey ?? item?.name ?? "value"}`;
|
|
5224
|
+
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
5225
|
+
const value = !labelKey && typeof label === "string" ? config[label]?.label ?? label : itemConfig?.label;
|
|
5226
|
+
if (labelFormatter) {
|
|
5227
|
+
return /* @__PURE__ */ jsx38("div", { className: cn("font-semibold text-default", labelClassName), children: labelFormatter(value, payload) });
|
|
5228
|
+
}
|
|
5229
|
+
if (!value) {
|
|
5230
|
+
return null;
|
|
5231
|
+
}
|
|
5232
|
+
return /* @__PURE__ */ jsx38("div", { className: cn("font-semibold text-default", labelClassName), children: value });
|
|
5233
|
+
}, [
|
|
5234
|
+
label,
|
|
5235
|
+
labelFormatter,
|
|
5236
|
+
payload,
|
|
5237
|
+
hideLabel,
|
|
5238
|
+
labelClassName,
|
|
5239
|
+
config,
|
|
5240
|
+
labelKey
|
|
5241
|
+
]);
|
|
5242
|
+
if (!active || !payload?.length) {
|
|
5243
|
+
return null;
|
|
5244
|
+
}
|
|
5245
|
+
const nestLabel = payload.length === 1 && indicator !== "dot";
|
|
5246
|
+
return /* @__PURE__ */ jsxs20(
|
|
5247
|
+
"div",
|
|
5248
|
+
{
|
|
5249
|
+
className: cn(
|
|
5250
|
+
"grid min-w-[8rem] items-start gap-1.5 rounded-xl border border-muted surface-default px-3 py-2.5 text-xs text-secondary shadow-lg",
|
|
5251
|
+
className
|
|
5252
|
+
),
|
|
5253
|
+
children: [
|
|
5254
|
+
!nestLabel ? tooltipLabel : null,
|
|
5255
|
+
/* @__PURE__ */ jsx38("div", { className: "grid gap-1.5", children: payload.filter((item) => item.type !== "none").map((item, index) => {
|
|
5256
|
+
const key = `${nameKey ?? item.name ?? item.dataKey ?? "value"}`;
|
|
5257
|
+
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
5258
|
+
const indicatorColor = color ?? item.payload?.fill ?? item.color ?? (itemConfig && "color" in itemConfig ? itemConfig.color : void 0);
|
|
5259
|
+
return /* @__PURE__ */ jsx38(
|
|
5260
|
+
"div",
|
|
5261
|
+
{
|
|
5262
|
+
className: cn(
|
|
5263
|
+
"flex w-full flex-wrap items-stretch gap-1.5 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-secondary",
|
|
5264
|
+
indicator === "dot" && "items-center"
|
|
5265
|
+
),
|
|
5266
|
+
children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs20(Fragment, { children: [
|
|
5267
|
+
itemConfig?.icon ? /* @__PURE__ */ jsx38(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx38(
|
|
5268
|
+
"div",
|
|
5269
|
+
{
|
|
5270
|
+
className: cn(
|
|
5271
|
+
"shrink-0 border-(--color-border) bg-(--color-bg)",
|
|
5272
|
+
{
|
|
5273
|
+
"h-3.5 w-3.5 rounded-[4px]": indicator === "dot",
|
|
5274
|
+
"w-1 rounded-full": indicator === "line",
|
|
5275
|
+
"w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
|
|
5276
|
+
"my-0.5": nestLabel && indicator === "dashed"
|
|
5277
|
+
}
|
|
5278
|
+
),
|
|
5279
|
+
style: {
|
|
5280
|
+
"--color-bg": indicatorColor,
|
|
5281
|
+
"--color-border": indicatorColor
|
|
5282
|
+
}
|
|
5283
|
+
}
|
|
5284
|
+
),
|
|
5285
|
+
/* @__PURE__ */ jsxs20(
|
|
5286
|
+
"div",
|
|
5287
|
+
{
|
|
5288
|
+
className: cn(
|
|
5289
|
+
"flex flex-1 justify-between leading-none",
|
|
5290
|
+
nestLabel ? "items-end" : "items-center"
|
|
5291
|
+
),
|
|
5292
|
+
children: [
|
|
5293
|
+
/* @__PURE__ */ jsxs20("div", { className: "grid gap-1.5", children: [
|
|
5294
|
+
nestLabel ? tooltipLabel : null,
|
|
5295
|
+
/* @__PURE__ */ jsx38("span", { className: "text-secondary", children: itemConfig?.label ?? item.name })
|
|
5296
|
+
] }),
|
|
5297
|
+
item.value != null && /* @__PURE__ */ jsx38("span", { className: "ml-3 font-semibold text-default tabular-nums", children: typeof item.value === "number" ? item.value.toLocaleString() : String(item.value) })
|
|
5298
|
+
]
|
|
5299
|
+
}
|
|
5300
|
+
)
|
|
5301
|
+
] })
|
|
5302
|
+
},
|
|
5303
|
+
index
|
|
5304
|
+
);
|
|
5305
|
+
}) })
|
|
5306
|
+
]
|
|
5307
|
+
}
|
|
5308
|
+
);
|
|
5309
|
+
}
|
|
5310
|
+
var ChartLegend = RechartsPrimitive.Legend;
|
|
5311
|
+
function ChartLegendContent({
|
|
5312
|
+
className,
|
|
5313
|
+
hideIcon = false,
|
|
5314
|
+
payload,
|
|
5315
|
+
verticalAlign = "bottom",
|
|
5316
|
+
nameKey
|
|
5317
|
+
}) {
|
|
5318
|
+
const { config } = useChart();
|
|
5319
|
+
if (!payload?.length) {
|
|
5320
|
+
return null;
|
|
5321
|
+
}
|
|
5322
|
+
return /* @__PURE__ */ jsx38(
|
|
5323
|
+
"div",
|
|
5324
|
+
{
|
|
5325
|
+
className: cn(
|
|
5326
|
+
"flex items-center justify-center gap-4",
|
|
5327
|
+
verticalAlign === "top" ? "pb-3" : "pt-3",
|
|
5328
|
+
className
|
|
5329
|
+
),
|
|
5330
|
+
children: payload.filter((item) => item.type !== "none").map((item, index) => {
|
|
5331
|
+
const key = `${nameKey ?? item.dataKey ?? "value"}`;
|
|
5332
|
+
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
5333
|
+
const indicatorColor = item.color ?? (itemConfig && "color" in itemConfig ? itemConfig.color : void 0);
|
|
5334
|
+
return /* @__PURE__ */ jsxs20(
|
|
5335
|
+
"div",
|
|
5336
|
+
{
|
|
5337
|
+
className: cn(
|
|
5338
|
+
"flex items-center gap-1.5 text-secondary [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-secondary"
|
|
5339
|
+
),
|
|
5340
|
+
children: [
|
|
5341
|
+
itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx38(itemConfig.icon, {}) : /* @__PURE__ */ jsx38(
|
|
5342
|
+
"div",
|
|
5343
|
+
{
|
|
5344
|
+
className: "h-2 w-2 shrink-0 rounded-[2px]",
|
|
5345
|
+
style: {
|
|
5346
|
+
backgroundColor: indicatorColor
|
|
5347
|
+
}
|
|
5348
|
+
}
|
|
5349
|
+
),
|
|
5350
|
+
itemConfig?.label
|
|
5351
|
+
]
|
|
5352
|
+
},
|
|
5353
|
+
index
|
|
5354
|
+
);
|
|
5355
|
+
})
|
|
5356
|
+
}
|
|
5357
|
+
);
|
|
5358
|
+
}
|
|
5359
|
+
function getPayloadConfigFromPayload(config, payload, key) {
|
|
5360
|
+
if (typeof payload !== "object" || payload === null) {
|
|
5361
|
+
return void 0;
|
|
5362
|
+
}
|
|
5363
|
+
const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
|
|
5364
|
+
let configLabelKey = key;
|
|
5365
|
+
if (key in payload && typeof payload[key] === "string") {
|
|
5366
|
+
configLabelKey = payload[key];
|
|
5367
|
+
} else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
|
|
5368
|
+
configLabelKey = payloadPayload[key];
|
|
5369
|
+
}
|
|
5370
|
+
return configLabelKey in config ? config[configLabelKey] : config[key];
|
|
5371
|
+
}
|
|
5372
|
+
|
|
5373
|
+
// src/components/ui/carousel.tsx
|
|
5374
|
+
import * as React15 from "react";
|
|
5375
|
+
import useEmblaCarousel from "embla-carousel-react";
|
|
5376
|
+
import { jsx as jsx39 } from "react/jsx-runtime";
|
|
5377
|
+
var CarouselContext = React15.createContext(null);
|
|
5378
|
+
function useCarousel() {
|
|
5379
|
+
const context = React15.useContext(CarouselContext);
|
|
5380
|
+
if (!context) {
|
|
5381
|
+
throw new Error("useCarousel must be used within a <Carousel />");
|
|
5382
|
+
}
|
|
5383
|
+
return context;
|
|
5384
|
+
}
|
|
5385
|
+
function Carousel({
|
|
5386
|
+
opts,
|
|
5387
|
+
plugins,
|
|
5388
|
+
setApi,
|
|
5389
|
+
className,
|
|
5390
|
+
children,
|
|
5391
|
+
ref,
|
|
5392
|
+
...props
|
|
5393
|
+
}) {
|
|
5394
|
+
const [carouselRef, api] = useEmblaCarousel({ ...opts }, plugins);
|
|
5395
|
+
const [canScrollPrev, setCanScrollPrev] = React15.useState(false);
|
|
5396
|
+
const [canScrollNext, setCanScrollNext] = React15.useState(false);
|
|
5397
|
+
const onSelect = React15.useCallback((emblaApi) => {
|
|
5398
|
+
if (!emblaApi) return;
|
|
5399
|
+
setCanScrollPrev(emblaApi.canScrollPrev());
|
|
5400
|
+
setCanScrollNext(emblaApi.canScrollNext());
|
|
5401
|
+
}, []);
|
|
5402
|
+
const scrollPrev = React15.useCallback(() => {
|
|
5403
|
+
api?.scrollPrev();
|
|
5404
|
+
}, [api]);
|
|
5405
|
+
const scrollNext = React15.useCallback(() => {
|
|
5406
|
+
api?.scrollNext();
|
|
5407
|
+
}, [api]);
|
|
5408
|
+
const handleKeyDown = React15.useCallback(
|
|
5409
|
+
(event) => {
|
|
5410
|
+
if (event.key === "ArrowLeft") {
|
|
5411
|
+
event.preventDefault();
|
|
5412
|
+
scrollPrev();
|
|
5413
|
+
} else if (event.key === "ArrowRight") {
|
|
5414
|
+
event.preventDefault();
|
|
5415
|
+
scrollNext();
|
|
5416
|
+
}
|
|
5417
|
+
},
|
|
5418
|
+
[scrollPrev, scrollNext]
|
|
5419
|
+
);
|
|
5420
|
+
React15.useEffect(() => {
|
|
5421
|
+
if (!api || !setApi) return;
|
|
5422
|
+
setApi(api);
|
|
5423
|
+
}, [api, setApi]);
|
|
5424
|
+
React15.useEffect(() => {
|
|
5425
|
+
if (!api) return;
|
|
5426
|
+
onSelect(api);
|
|
5427
|
+
api.on("reInit", onSelect);
|
|
5428
|
+
api.on("select", onSelect);
|
|
5429
|
+
return () => {
|
|
5430
|
+
api.off("reInit", onSelect);
|
|
5431
|
+
api.off("select", onSelect);
|
|
5432
|
+
};
|
|
5433
|
+
}, [api, onSelect]);
|
|
5434
|
+
return /* @__PURE__ */ jsx39(
|
|
5435
|
+
CarouselContext.Provider,
|
|
5436
|
+
{
|
|
5437
|
+
value: {
|
|
5438
|
+
carouselRef,
|
|
5439
|
+
api,
|
|
5440
|
+
scrollPrev,
|
|
5441
|
+
scrollNext,
|
|
5442
|
+
canScrollPrev,
|
|
5443
|
+
canScrollNext
|
|
5444
|
+
},
|
|
5445
|
+
children: /* @__PURE__ */ jsx39(
|
|
5446
|
+
"div",
|
|
5447
|
+
{
|
|
5448
|
+
...props,
|
|
5449
|
+
ref,
|
|
5450
|
+
className: cn("flex items-center gap-4", className),
|
|
5451
|
+
role: "region",
|
|
5452
|
+
"aria-roledescription": "carousel",
|
|
5453
|
+
"data-slot": "carousel",
|
|
5454
|
+
tabIndex: 0,
|
|
5455
|
+
onKeyDownCapture: (event) => {
|
|
5456
|
+
props.onKeyDownCapture?.(event);
|
|
5457
|
+
handleKeyDown(event);
|
|
5458
|
+
},
|
|
5459
|
+
children
|
|
5460
|
+
}
|
|
5461
|
+
)
|
|
5462
|
+
}
|
|
5463
|
+
);
|
|
5464
|
+
}
|
|
5465
|
+
function CarouselContent({ className, ref, ...props }) {
|
|
5466
|
+
const { carouselRef } = useCarousel();
|
|
5467
|
+
return /* @__PURE__ */ jsx39(
|
|
5468
|
+
"div",
|
|
5469
|
+
{
|
|
5470
|
+
ref: carouselRef,
|
|
5471
|
+
className: "overflow-hidden flex-1 min-w-0",
|
|
5472
|
+
"data-slot": "carousel-viewport",
|
|
5473
|
+
children: /* @__PURE__ */ jsx39(
|
|
5474
|
+
"div",
|
|
5475
|
+
{
|
|
5476
|
+
ref,
|
|
5477
|
+
"data-slot": "carousel-content",
|
|
5478
|
+
className: cn("flex -ml-4", className),
|
|
5479
|
+
...props
|
|
5480
|
+
}
|
|
5481
|
+
)
|
|
5482
|
+
}
|
|
5483
|
+
);
|
|
5484
|
+
}
|
|
5485
|
+
function CarouselItem({
|
|
5486
|
+
className,
|
|
5487
|
+
index,
|
|
5488
|
+
total,
|
|
5489
|
+
"aria-label": ariaLabel,
|
|
5490
|
+
ref,
|
|
5491
|
+
...props
|
|
5492
|
+
}) {
|
|
5493
|
+
const label = ariaLabel ?? (index !== void 0 && total !== void 0 ? `Slide ${index + 1} of ${total}` : void 0);
|
|
5494
|
+
return /* @__PURE__ */ jsx39(
|
|
5495
|
+
"div",
|
|
5496
|
+
{
|
|
5497
|
+
ref,
|
|
5498
|
+
role: "group",
|
|
5499
|
+
"aria-roledescription": "slide",
|
|
5500
|
+
"aria-label": label,
|
|
5501
|
+
"data-slot": "carousel-item",
|
|
5502
|
+
className: cn("min-w-0 shrink-0 grow-0 basis-full pl-4", className),
|
|
5503
|
+
...props
|
|
5504
|
+
}
|
|
5505
|
+
);
|
|
5506
|
+
}
|
|
5507
|
+
function CarouselPrevious({
|
|
5508
|
+
className,
|
|
5509
|
+
variant = "default",
|
|
5510
|
+
size = "default",
|
|
5511
|
+
ref,
|
|
5512
|
+
...props
|
|
5513
|
+
}) {
|
|
5514
|
+
const { scrollPrev, canScrollPrev } = useCarousel();
|
|
5515
|
+
return /* @__PURE__ */ jsx39(
|
|
5516
|
+
Button,
|
|
5517
|
+
{
|
|
5518
|
+
ref,
|
|
5519
|
+
"data-slot": "carousel-previous",
|
|
5520
|
+
variant,
|
|
5521
|
+
size,
|
|
5522
|
+
className: cn("size-9 shrink-0 rounded-md", className),
|
|
5523
|
+
disabled: !canScrollPrev,
|
|
5524
|
+
onClick: scrollPrev,
|
|
5525
|
+
"aria-label": "Previous slide",
|
|
5526
|
+
...props,
|
|
5527
|
+
children: /* @__PURE__ */ jsx39(ArrowLeftIcon, { className: "size-4" })
|
|
5528
|
+
}
|
|
5529
|
+
);
|
|
5530
|
+
}
|
|
5531
|
+
function CarouselNext({
|
|
5532
|
+
className,
|
|
5533
|
+
variant = "default",
|
|
5534
|
+
size = "default",
|
|
5535
|
+
ref,
|
|
5536
|
+
...props
|
|
5537
|
+
}) {
|
|
5538
|
+
const { scrollNext, canScrollNext } = useCarousel();
|
|
5539
|
+
return /* @__PURE__ */ jsx39(
|
|
5540
|
+
Button,
|
|
5541
|
+
{
|
|
5542
|
+
ref,
|
|
5543
|
+
"data-slot": "carousel-next",
|
|
5544
|
+
variant,
|
|
5545
|
+
size,
|
|
5546
|
+
className: cn("size-9 shrink-0 rounded-md", className),
|
|
5547
|
+
disabled: !canScrollNext,
|
|
5548
|
+
onClick: scrollNext,
|
|
5549
|
+
"aria-label": "Next slide",
|
|
5550
|
+
...props,
|
|
5551
|
+
children: /* @__PURE__ */ jsx39(ArrowRightIcon, { className: "size-4" })
|
|
5552
|
+
}
|
|
5553
|
+
);
|
|
5554
|
+
}
|
|
5555
|
+
|
|
4059
5556
|
// src/components/ui/table.tsx
|
|
4060
|
-
import { jsx as
|
|
5557
|
+
import { jsx as jsx40 } from "react/jsx-runtime";
|
|
4061
5558
|
function Table({ className, ref, ...props }) {
|
|
4062
|
-
return /* @__PURE__ */
|
|
5559
|
+
return /* @__PURE__ */ jsx40(
|
|
4063
5560
|
"div",
|
|
4064
5561
|
{
|
|
4065
5562
|
"data-slot": "table-container",
|
|
4066
5563
|
className: "relative w-full overflow-x-auto",
|
|
4067
|
-
children: /* @__PURE__ */
|
|
5564
|
+
children: /* @__PURE__ */ jsx40(
|
|
4068
5565
|
"table",
|
|
4069
5566
|
{
|
|
4070
5567
|
ref,
|
|
@@ -4085,7 +5582,7 @@ function TableHeader({
|
|
|
4085
5582
|
ref,
|
|
4086
5583
|
...props
|
|
4087
5584
|
}) {
|
|
4088
|
-
return /* @__PURE__ */
|
|
5585
|
+
return /* @__PURE__ */ jsx40(
|
|
4089
5586
|
"thead",
|
|
4090
5587
|
{
|
|
4091
5588
|
ref,
|
|
@@ -4106,14 +5603,14 @@ function TableBody({
|
|
|
4106
5603
|
ref,
|
|
4107
5604
|
...props
|
|
4108
5605
|
}) {
|
|
4109
|
-
return /* @__PURE__ */
|
|
5606
|
+
return /* @__PURE__ */ jsx40("tbody", { ref, "data-slot": "table-body", className, ...props });
|
|
4110
5607
|
}
|
|
4111
5608
|
function TableFooter({
|
|
4112
5609
|
className,
|
|
4113
5610
|
ref,
|
|
4114
5611
|
...props
|
|
4115
5612
|
}) {
|
|
4116
|
-
return /* @__PURE__ */
|
|
5613
|
+
return /* @__PURE__ */ jsx40(
|
|
4117
5614
|
"tfoot",
|
|
4118
5615
|
{
|
|
4119
5616
|
ref,
|
|
@@ -4132,7 +5629,7 @@ function TableFooter({
|
|
|
4132
5629
|
);
|
|
4133
5630
|
}
|
|
4134
5631
|
function TableRow({ className, ref, ...props }) {
|
|
4135
|
-
return /* @__PURE__ */
|
|
5632
|
+
return /* @__PURE__ */ jsx40(
|
|
4136
5633
|
"tr",
|
|
4137
5634
|
{
|
|
4138
5635
|
ref,
|
|
@@ -4156,7 +5653,7 @@ function TableHead({
|
|
|
4156
5653
|
align = "left",
|
|
4157
5654
|
...props
|
|
4158
5655
|
}) {
|
|
4159
|
-
return /* @__PURE__ */
|
|
5656
|
+
return /* @__PURE__ */ jsx40(
|
|
4160
5657
|
"th",
|
|
4161
5658
|
{
|
|
4162
5659
|
ref,
|
|
@@ -4184,7 +5681,7 @@ function TableCell({
|
|
|
4184
5681
|
align = "left",
|
|
4185
5682
|
...props
|
|
4186
5683
|
}) {
|
|
4187
|
-
return /* @__PURE__ */
|
|
5684
|
+
return /* @__PURE__ */ jsx40(
|
|
4188
5685
|
"td",
|
|
4189
5686
|
{
|
|
4190
5687
|
ref,
|
|
@@ -4210,7 +5707,7 @@ function TableCaption({
|
|
|
4210
5707
|
ref,
|
|
4211
5708
|
...props
|
|
4212
5709
|
}) {
|
|
4213
|
-
return /* @__PURE__ */
|
|
5710
|
+
return /* @__PURE__ */ jsx40(
|
|
4214
5711
|
"caption",
|
|
4215
5712
|
{
|
|
4216
5713
|
ref,
|
|
@@ -4227,11 +5724,20 @@ function TableCaption({
|
|
|
4227
5724
|
);
|
|
4228
5725
|
}
|
|
4229
5726
|
|
|
5727
|
+
// src/components/ui/data-table/data-table.tsx
|
|
5728
|
+
import * as React16 from "react";
|
|
5729
|
+
import {
|
|
5730
|
+
useReactTable,
|
|
5731
|
+
getCoreRowModel,
|
|
5732
|
+
getSortedRowModel,
|
|
5733
|
+
getPaginationRowModel
|
|
5734
|
+
} from "@tanstack/react-table";
|
|
5735
|
+
|
|
4230
5736
|
// src/components/ui/data-table/data-table-view.tsx
|
|
4231
5737
|
import {
|
|
4232
5738
|
flexRender
|
|
4233
5739
|
} from "@tanstack/react-table";
|
|
4234
|
-
import { jsx as
|
|
5740
|
+
import { jsx as jsx41, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
4235
5741
|
function DataTableView({
|
|
4236
5742
|
table,
|
|
4237
5743
|
emptyState = "No results.",
|
|
@@ -4240,15 +5746,15 @@ function DataTableView({
|
|
|
4240
5746
|
className,
|
|
4241
5747
|
...props
|
|
4242
5748
|
}) {
|
|
4243
|
-
return /* @__PURE__ */
|
|
5749
|
+
return /* @__PURE__ */ jsx41(
|
|
4244
5750
|
"div",
|
|
4245
5751
|
{
|
|
4246
5752
|
className: cn("relative", loading && "opacity-50 pointer-events-none"),
|
|
4247
5753
|
"aria-busy": loading || void 0,
|
|
4248
|
-
children: /* @__PURE__ */
|
|
4249
|
-
/* @__PURE__ */
|
|
5754
|
+
children: /* @__PURE__ */ jsxs21(Table, { className, ...props, children: [
|
|
5755
|
+
/* @__PURE__ */ jsx41(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx41(TableRow, { children: headerGroup.headers.map((header) => {
|
|
4250
5756
|
const sorted = header.column.getIsSorted();
|
|
4251
|
-
return /* @__PURE__ */
|
|
5757
|
+
return /* @__PURE__ */ jsx41(
|
|
4252
5758
|
TableHead,
|
|
4253
5759
|
{
|
|
4254
5760
|
colSpan: header.colSpan,
|
|
@@ -4261,21 +5767,21 @@ function DataTableView({
|
|
|
4261
5767
|
header.id
|
|
4262
5768
|
);
|
|
4263
5769
|
}) }, headerGroup.id)) }),
|
|
4264
|
-
/* @__PURE__ */
|
|
5770
|
+
/* @__PURE__ */ jsx41(TableBody, { children: table.getRowModel().rows.length > 0 ? table.getRowModel().rows.map((row) => {
|
|
4265
5771
|
const rowProps = getRowProps?.(row);
|
|
4266
|
-
return /* @__PURE__ */
|
|
5772
|
+
return /* @__PURE__ */ jsx41(
|
|
4267
5773
|
TableRow,
|
|
4268
5774
|
{
|
|
4269
5775
|
"data-state": row.getIsSelected() ? "selected" : void 0,
|
|
4270
5776
|
...rowProps,
|
|
4271
|
-
children: row.getVisibleCells().map((cell) => /* @__PURE__ */
|
|
5777
|
+
children: row.getVisibleCells().map((cell) => /* @__PURE__ */ jsx41(TableCell, { children: flexRender(
|
|
4272
5778
|
cell.column.columnDef.cell,
|
|
4273
5779
|
cell.getContext()
|
|
4274
5780
|
) }, cell.id))
|
|
4275
5781
|
},
|
|
4276
5782
|
row.id
|
|
4277
5783
|
);
|
|
4278
|
-
}) : /* @__PURE__ */
|
|
5784
|
+
}) : /* @__PURE__ */ jsx41(TableRow, { children: /* @__PURE__ */ jsx41(
|
|
4279
5785
|
TableCell,
|
|
4280
5786
|
{
|
|
4281
5787
|
colSpan: table.getVisibleLeafColumns().length,
|
|
@@ -4289,7 +5795,7 @@ function DataTableView({
|
|
|
4289
5795
|
}
|
|
4290
5796
|
|
|
4291
5797
|
// src/components/ui/data-table/data-table-pagination.tsx
|
|
4292
|
-
import { jsx as
|
|
5798
|
+
import { jsx as jsx42, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
4293
5799
|
function DataTablePagination({
|
|
4294
5800
|
table,
|
|
4295
5801
|
pageSizeOptions = [10, 20, 50, 100],
|
|
@@ -4301,7 +5807,7 @@ function DataTablePagination({
|
|
|
4301
5807
|
const from = totalRows > 0 ? pageIndex * pageSize + 1 : 0;
|
|
4302
5808
|
const to = Math.min((pageIndex + 1) * pageSize, totalRows);
|
|
4303
5809
|
const resolvedPageSizeOptions = pageSizeOptions.includes(pageSize) ? pageSizeOptions : [...pageSizeOptions, pageSize].sort((a, b) => a - b);
|
|
4304
|
-
return /* @__PURE__ */
|
|
5810
|
+
return /* @__PURE__ */ jsxs22(
|
|
4305
5811
|
"div",
|
|
4306
5812
|
{
|
|
4307
5813
|
className: cn(
|
|
@@ -4310,7 +5816,7 @@ function DataTablePagination({
|
|
|
4310
5816
|
),
|
|
4311
5817
|
...props,
|
|
4312
5818
|
children: [
|
|
4313
|
-
/* @__PURE__ */
|
|
5819
|
+
/* @__PURE__ */ jsx42(
|
|
4314
5820
|
Text,
|
|
4315
5821
|
{
|
|
4316
5822
|
variant: "body-sm",
|
|
@@ -4319,8 +5825,8 @@ function DataTablePagination({
|
|
|
4319
5825
|
children: totalRows > 0 ? `Showing ${from}\u2013${to} of ${totalRows}` : "No results"
|
|
4320
5826
|
}
|
|
4321
5827
|
),
|
|
4322
|
-
/* @__PURE__ */
|
|
4323
|
-
/* @__PURE__ */
|
|
5828
|
+
/* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-1", children: [
|
|
5829
|
+
/* @__PURE__ */ jsx42(
|
|
4324
5830
|
Button,
|
|
4325
5831
|
{
|
|
4326
5832
|
variant: "ghost",
|
|
@@ -4328,10 +5834,10 @@ function DataTablePagination({
|
|
|
4328
5834
|
onClick: () => table.firstPage(),
|
|
4329
5835
|
disabled: !table.getCanPreviousPage(),
|
|
4330
5836
|
"aria-label": "Go to first page",
|
|
4331
|
-
children: /* @__PURE__ */
|
|
5837
|
+
children: /* @__PURE__ */ jsx42(ArrowLeftIcon, { "aria-hidden": "true" })
|
|
4332
5838
|
}
|
|
4333
5839
|
),
|
|
4334
|
-
/* @__PURE__ */
|
|
5840
|
+
/* @__PURE__ */ jsx42(
|
|
4335
5841
|
Button,
|
|
4336
5842
|
{
|
|
4337
5843
|
variant: "ghost",
|
|
@@ -4339,11 +5845,11 @@ function DataTablePagination({
|
|
|
4339
5845
|
onClick: () => table.previousPage(),
|
|
4340
5846
|
disabled: !table.getCanPreviousPage(),
|
|
4341
5847
|
"aria-label": "Go to previous page",
|
|
4342
|
-
children: /* @__PURE__ */
|
|
5848
|
+
children: /* @__PURE__ */ jsx42(CaretLeftIcon, { "aria-hidden": "true" })
|
|
4343
5849
|
}
|
|
4344
5850
|
),
|
|
4345
|
-
/* @__PURE__ */
|
|
4346
|
-
/* @__PURE__ */
|
|
5851
|
+
/* @__PURE__ */ jsx42(Text, { as: "span", variant: "body-sm", className: "px-2 whitespace-nowrap", children: table.getPageCount() > 0 ? `Page ${pageIndex + 1} of ${table.getPageCount()}` : "No pages" }),
|
|
5852
|
+
/* @__PURE__ */ jsx42(
|
|
4347
5853
|
Button,
|
|
4348
5854
|
{
|
|
4349
5855
|
variant: "ghost",
|
|
@@ -4351,10 +5857,10 @@ function DataTablePagination({
|
|
|
4351
5857
|
onClick: () => table.nextPage(),
|
|
4352
5858
|
disabled: !table.getCanNextPage(),
|
|
4353
5859
|
"aria-label": "Go to next page",
|
|
4354
|
-
children: /* @__PURE__ */
|
|
5860
|
+
children: /* @__PURE__ */ jsx42(CaretRightIcon, { "aria-hidden": "true" })
|
|
4355
5861
|
}
|
|
4356
5862
|
),
|
|
4357
|
-
/* @__PURE__ */
|
|
5863
|
+
/* @__PURE__ */ jsx42(
|
|
4358
5864
|
Button,
|
|
4359
5865
|
{
|
|
4360
5866
|
variant: "ghost",
|
|
@@ -4362,12 +5868,12 @@ function DataTablePagination({
|
|
|
4362
5868
|
onClick: () => table.lastPage(),
|
|
4363
5869
|
disabled: !table.getCanNextPage(),
|
|
4364
5870
|
"aria-label": "Go to last page",
|
|
4365
|
-
children: /* @__PURE__ */
|
|
5871
|
+
children: /* @__PURE__ */ jsx42(ArrowRightIcon, { "aria-hidden": "true" })
|
|
4366
5872
|
}
|
|
4367
5873
|
)
|
|
4368
5874
|
] }),
|
|
4369
|
-
/* @__PURE__ */
|
|
4370
|
-
/* @__PURE__ */
|
|
5875
|
+
/* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2", children: [
|
|
5876
|
+
/* @__PURE__ */ jsx42(
|
|
4371
5877
|
Text,
|
|
4372
5878
|
{
|
|
4373
5879
|
as: "span",
|
|
@@ -4376,14 +5882,14 @@ function DataTablePagination({
|
|
|
4376
5882
|
children: "Rows per page"
|
|
4377
5883
|
}
|
|
4378
5884
|
),
|
|
4379
|
-
/* @__PURE__ */
|
|
5885
|
+
/* @__PURE__ */ jsxs22(
|
|
4380
5886
|
Select,
|
|
4381
5887
|
{
|
|
4382
5888
|
value: pageSize.toString(),
|
|
4383
5889
|
onValueChange: (value) => table.setPageSize(Number(value)),
|
|
4384
5890
|
children: [
|
|
4385
|
-
/* @__PURE__ */
|
|
4386
|
-
/* @__PURE__ */
|
|
5891
|
+
/* @__PURE__ */ jsx42(SelectTrigger, { className: "h-8 w-[70px]", children: /* @__PURE__ */ jsx42(SelectValue, {}) }),
|
|
5892
|
+
/* @__PURE__ */ jsx42(SelectContent, { children: resolvedPageSizeOptions.map((size) => /* @__PURE__ */ jsx42(SelectItem, { value: size.toString(), children: size }, size)) })
|
|
4387
5893
|
]
|
|
4388
5894
|
}
|
|
4389
5895
|
)
|
|
@@ -4394,7 +5900,7 @@ function DataTablePagination({
|
|
|
4394
5900
|
}
|
|
4395
5901
|
|
|
4396
5902
|
// src/components/ui/data-table/data-table-column-header.tsx
|
|
4397
|
-
import { jsx as
|
|
5903
|
+
import { jsx as jsx43, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
4398
5904
|
function DataTableColumnHeader({
|
|
4399
5905
|
column,
|
|
4400
5906
|
title,
|
|
@@ -4402,7 +5908,7 @@ function DataTableColumnHeader({
|
|
|
4402
5908
|
...props
|
|
4403
5909
|
}) {
|
|
4404
5910
|
if (!column.getCanSort()) {
|
|
4405
|
-
return /* @__PURE__ */
|
|
5911
|
+
return /* @__PURE__ */ jsx43(
|
|
4406
5912
|
Text,
|
|
4407
5913
|
{
|
|
4408
5914
|
as: "div",
|
|
@@ -4414,9 +5920,9 @@ function DataTableColumnHeader({
|
|
|
4414
5920
|
);
|
|
4415
5921
|
}
|
|
4416
5922
|
const sorted = column.getIsSorted();
|
|
4417
|
-
return /* @__PURE__ */
|
|
4418
|
-
/* @__PURE__ */
|
|
4419
|
-
/* @__PURE__ */
|
|
5923
|
+
return /* @__PURE__ */ jsxs23("div", { className: cn("flex items-center gap-2", className), ...props, children: [
|
|
5924
|
+
/* @__PURE__ */ jsx43(Text, { as: "span", variant: "body-sm-medium", children: title }),
|
|
5925
|
+
/* @__PURE__ */ jsx43(
|
|
4420
5926
|
Button,
|
|
4421
5927
|
{
|
|
4422
5928
|
variant: "ghost",
|
|
@@ -4428,38 +5934,134 @@ function DataTableColumnHeader({
|
|
|
4428
5934
|
},
|
|
4429
5935
|
"aria-label": `Sort by ${title}`,
|
|
4430
5936
|
className: "text-secondary",
|
|
4431
|
-
children: sorted === "desc" ? /* @__PURE__ */
|
|
5937
|
+
children: sorted === "desc" ? /* @__PURE__ */ jsx43(CaretDownIcon, { "aria-hidden": "true" }) : sorted === "asc" ? /* @__PURE__ */ jsx43(CaretUpIcon, { "aria-hidden": "true" }) : /* @__PURE__ */ jsx43(ArrowsDownUpIcon, { "aria-hidden": "true", size: 16 })
|
|
4432
5938
|
}
|
|
4433
5939
|
)
|
|
4434
5940
|
] });
|
|
4435
5941
|
}
|
|
4436
5942
|
|
|
5943
|
+
// src/components/ui/data-table/data-table.tsx
|
|
5944
|
+
import { jsx as jsx44, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
5945
|
+
function createSelectColumn() {
|
|
5946
|
+
return {
|
|
5947
|
+
id: "select",
|
|
5948
|
+
header: ({ table }) => /* @__PURE__ */ jsx44("div", { className: "flex items-center", children: /* @__PURE__ */ jsx44(
|
|
5949
|
+
Checkbox,
|
|
5950
|
+
{
|
|
5951
|
+
checked: table.getIsAllPageRowsSelected(),
|
|
5952
|
+
indeterminate: table.getIsSomePageRowsSelected() && !table.getIsAllPageRowsSelected(),
|
|
5953
|
+
onCheckedChange: (checked) => table.toggleAllPageRowsSelected(!!checked),
|
|
5954
|
+
"aria-label": "Select all"
|
|
5955
|
+
}
|
|
5956
|
+
) }),
|
|
5957
|
+
cell: ({ row }) => /* @__PURE__ */ jsx44("div", { className: "flex items-center", children: /* @__PURE__ */ jsx44(
|
|
5958
|
+
Checkbox,
|
|
5959
|
+
{
|
|
5960
|
+
checked: row.getIsSelected(),
|
|
5961
|
+
onCheckedChange: (checked) => row.toggleSelected(!!checked),
|
|
5962
|
+
"aria-label": "Select row"
|
|
5963
|
+
}
|
|
5964
|
+
) }),
|
|
5965
|
+
enableSorting: false,
|
|
5966
|
+
enableHiding: false
|
|
5967
|
+
};
|
|
5968
|
+
}
|
|
5969
|
+
function DataTable({
|
|
5970
|
+
columns,
|
|
5971
|
+
data,
|
|
5972
|
+
getRowId,
|
|
5973
|
+
showPagination = true,
|
|
5974
|
+
pageSizeOptions,
|
|
5975
|
+
initialPageSize = 10,
|
|
5976
|
+
enableRowSelection = false,
|
|
5977
|
+
onRowSelectionChange: onRowSelectionChangeProp,
|
|
5978
|
+
enableSorting = true,
|
|
5979
|
+
emptyState,
|
|
5980
|
+
loading,
|
|
5981
|
+
...tableProps
|
|
5982
|
+
}) {
|
|
5983
|
+
const [sorting, setSorting] = React16.useState([]);
|
|
5984
|
+
const [rowSelection, setRowSelection] = React16.useState({});
|
|
5985
|
+
const handleRowSelectionChange = React16.useCallback(
|
|
5986
|
+
(updaterOrValue) => {
|
|
5987
|
+
const next = typeof updaterOrValue === "function" ? updaterOrValue(rowSelection) : updaterOrValue;
|
|
5988
|
+
setRowSelection(next);
|
|
5989
|
+
onRowSelectionChangeProp?.(next);
|
|
5990
|
+
},
|
|
5991
|
+
[rowSelection, onRowSelectionChangeProp]
|
|
5992
|
+
);
|
|
5993
|
+
const allColumns = React16.useMemo(
|
|
5994
|
+
() => enableRowSelection ? [createSelectColumn(), ...columns] : columns,
|
|
5995
|
+
[columns, enableRowSelection]
|
|
5996
|
+
);
|
|
5997
|
+
const resolvedColumns = React16.useMemo(
|
|
5998
|
+
() => enableSorting ? allColumns.map((col) => {
|
|
5999
|
+
if (col.id === "select" || col.id === "actions") return col;
|
|
6000
|
+
if (typeof col.header === "string") {
|
|
6001
|
+
const title = col.header;
|
|
6002
|
+
return {
|
|
6003
|
+
...col,
|
|
6004
|
+
header: ({ column }) => /* @__PURE__ */ jsx44(DataTableColumnHeader, { column, title })
|
|
6005
|
+
};
|
|
6006
|
+
}
|
|
6007
|
+
return col;
|
|
6008
|
+
}) : allColumns,
|
|
6009
|
+
[allColumns, enableSorting]
|
|
6010
|
+
);
|
|
6011
|
+
const table = useReactTable({
|
|
6012
|
+
data,
|
|
6013
|
+
columns: resolvedColumns,
|
|
6014
|
+
state: { sorting, rowSelection },
|
|
6015
|
+
onSortingChange: setSorting,
|
|
6016
|
+
onRowSelectionChange: enableRowSelection ? handleRowSelectionChange : void 0,
|
|
6017
|
+
getCoreRowModel: getCoreRowModel(),
|
|
6018
|
+
getSortedRowModel: enableSorting ? getSortedRowModel() : void 0,
|
|
6019
|
+
getPaginationRowModel: showPagination ? getPaginationRowModel() : void 0,
|
|
6020
|
+
getRowId,
|
|
6021
|
+
...showPagination && {
|
|
6022
|
+
initialState: { pagination: { pageSize: initialPageSize } }
|
|
6023
|
+
}
|
|
6024
|
+
});
|
|
6025
|
+
return /* @__PURE__ */ jsxs24("div", { children: [
|
|
6026
|
+
/* @__PURE__ */ jsx44(
|
|
6027
|
+
DataTableView,
|
|
6028
|
+
{
|
|
6029
|
+
table,
|
|
6030
|
+
emptyState,
|
|
6031
|
+
loading,
|
|
6032
|
+
...tableProps
|
|
6033
|
+
}
|
|
6034
|
+
),
|
|
6035
|
+
showPagination && /* @__PURE__ */ jsx44(DataTablePagination, { table, pageSizeOptions })
|
|
6036
|
+
] });
|
|
6037
|
+
}
|
|
6038
|
+
|
|
4437
6039
|
// src/components/ui/data-table/data-table-view-options.tsx
|
|
4438
|
-
import { jsx as
|
|
6040
|
+
import { jsx as jsx45, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
4439
6041
|
function DataTableViewOptions({
|
|
4440
6042
|
table,
|
|
4441
6043
|
...props
|
|
4442
6044
|
}) {
|
|
4443
|
-
return /* @__PURE__ */
|
|
4444
|
-
/* @__PURE__ */
|
|
6045
|
+
return /* @__PURE__ */ jsxs25(DropdownMenu, { children: [
|
|
6046
|
+
/* @__PURE__ */ jsx45(
|
|
4445
6047
|
DropdownMenuTrigger,
|
|
4446
6048
|
{
|
|
4447
|
-
render: /* @__PURE__ */
|
|
6049
|
+
render: /* @__PURE__ */ jsx45(
|
|
4448
6050
|
Button,
|
|
4449
6051
|
{
|
|
4450
6052
|
variant: "ghost",
|
|
4451
6053
|
size: "sm",
|
|
4452
6054
|
...props,
|
|
4453
6055
|
"aria-label": "Table options",
|
|
4454
|
-
children: /* @__PURE__ */
|
|
6056
|
+
children: /* @__PURE__ */ jsx45(CogIcon, { "aria-hidden": "true" })
|
|
4455
6057
|
}
|
|
4456
6058
|
)
|
|
4457
6059
|
}
|
|
4458
6060
|
),
|
|
4459
|
-
/* @__PURE__ */
|
|
4460
|
-
/* @__PURE__ */
|
|
4461
|
-
/* @__PURE__ */
|
|
4462
|
-
table.getAllColumns().filter((column) => column.getCanHide()).map((column) => /* @__PURE__ */
|
|
6061
|
+
/* @__PURE__ */ jsxs25(DropdownMenuContent, { align: "end", children: [
|
|
6062
|
+
/* @__PURE__ */ jsx45(DropdownMenuLabel, { children: "Toggle columns" }),
|
|
6063
|
+
/* @__PURE__ */ jsx45(DropdownMenuSeparator, {}),
|
|
6064
|
+
table.getAllColumns().filter((column) => column.getCanHide()).map((column) => /* @__PURE__ */ jsx45(
|
|
4463
6065
|
DropdownMenuCheckboxItem,
|
|
4464
6066
|
{
|
|
4465
6067
|
checked: column.getIsVisible(),
|
|
@@ -4528,6 +6130,16 @@ export {
|
|
|
4528
6130
|
CaretLeftIcon,
|
|
4529
6131
|
CaretRightIcon,
|
|
4530
6132
|
CaretUpIcon,
|
|
6133
|
+
Carousel,
|
|
6134
|
+
CarouselContent,
|
|
6135
|
+
CarouselItem,
|
|
6136
|
+
CarouselNext,
|
|
6137
|
+
CarouselPrevious,
|
|
6138
|
+
ChartContainer,
|
|
6139
|
+
ChartLegend,
|
|
6140
|
+
ChartLegendContent,
|
|
6141
|
+
ChartTooltip,
|
|
6142
|
+
ChartTooltipContent,
|
|
4531
6143
|
ChatIcon,
|
|
4532
6144
|
CheckIcon,
|
|
4533
6145
|
Checkbox,
|
|
@@ -4535,7 +6147,21 @@ export {
|
|
|
4535
6147
|
CheckmarkSquareIcon,
|
|
4536
6148
|
CloseIcon,
|
|
4537
6149
|
CogIcon,
|
|
6150
|
+
Combobox,
|
|
6151
|
+
ComboboxChip,
|
|
6152
|
+
ComboboxChips,
|
|
6153
|
+
ComboboxChipsInput,
|
|
6154
|
+
ComboboxContent,
|
|
6155
|
+
ComboboxEmpty,
|
|
6156
|
+
ComboboxGroup,
|
|
6157
|
+
ComboboxInput,
|
|
6158
|
+
ComboboxItem,
|
|
6159
|
+
ComboboxLabel,
|
|
6160
|
+
ComboboxList,
|
|
6161
|
+
ComboboxSeparator,
|
|
6162
|
+
ComboboxTrigger,
|
|
4538
6163
|
CredentialsIcon,
|
|
6164
|
+
DataTable,
|
|
4539
6165
|
DataTableColumnHeader,
|
|
4540
6166
|
DataTablePagination,
|
|
4541
6167
|
DataTableView,
|
|
@@ -4580,6 +6206,12 @@ export {
|
|
|
4580
6206
|
DropdownMenuSubTrigger,
|
|
4581
6207
|
DropdownMenuTrigger,
|
|
4582
6208
|
EditIcon,
|
|
6209
|
+
Empty,
|
|
6210
|
+
EmptyActions,
|
|
6211
|
+
EmptyContent,
|
|
6212
|
+
EmptyDescription,
|
|
6213
|
+
EmptyMedia,
|
|
6214
|
+
EmptyTitle,
|
|
4583
6215
|
EnvelopeIcon,
|
|
4584
6216
|
ExclamationIcon,
|
|
4585
6217
|
EyeClosedIcon,
|
|
@@ -4602,6 +6234,9 @@ export {
|
|
|
4602
6234
|
GraphPieIcon,
|
|
4603
6235
|
HamburgerMenuIcon,
|
|
4604
6236
|
HomeIcon,
|
|
6237
|
+
HoverCard,
|
|
6238
|
+
HoverCardContent,
|
|
6239
|
+
HoverCardTrigger,
|
|
4605
6240
|
InformationIcon,
|
|
4606
6241
|
Input,
|
|
4607
6242
|
InputGroup,
|
|
@@ -4638,6 +6273,9 @@ export {
|
|
|
4638
6273
|
PopoverTrigger,
|
|
4639
6274
|
PrintIcon,
|
|
4640
6275
|
QuestionCircleIcon,
|
|
6276
|
+
RadioGroup,
|
|
6277
|
+
RadioGroupCard,
|
|
6278
|
+
RadioGroupItem,
|
|
4641
6279
|
Select,
|
|
4642
6280
|
SelectContent,
|
|
4643
6281
|
SelectGroup,
|
|
@@ -4661,6 +6299,8 @@ export {
|
|
|
4661
6299
|
SidebarMenuButton,
|
|
4662
6300
|
SidebarMenuItem,
|
|
4663
6301
|
SidebarProvider,
|
|
6302
|
+
SidebarSeparator,
|
|
6303
|
+
Slider,
|
|
4664
6304
|
StarIcon,
|
|
4665
6305
|
StatementIcon,
|
|
4666
6306
|
Switch,
|
|
@@ -4677,8 +6317,10 @@ export {
|
|
|
4677
6317
|
TabsContent,
|
|
4678
6318
|
TabsList,
|
|
4679
6319
|
TabsTrigger,
|
|
6320
|
+
Tag,
|
|
4680
6321
|
Text,
|
|
4681
6322
|
Textarea,
|
|
6323
|
+
Toaster,
|
|
4682
6324
|
Tooltip,
|
|
4683
6325
|
TooltipContent,
|
|
4684
6326
|
TooltipProvider,
|
|
@@ -4689,6 +6331,8 @@ export {
|
|
|
4689
6331
|
UserMultiIcon,
|
|
4690
6332
|
WarningIcon,
|
|
4691
6333
|
WrenchIcon,
|
|
6334
|
+
ZoomInIcon,
|
|
6335
|
+
ZoomOutIcon,
|
|
4692
6336
|
alertVariants,
|
|
4693
6337
|
avatarVariants,
|
|
4694
6338
|
badgeVariants,
|
|
@@ -4696,18 +6340,34 @@ export {
|
|
|
4696
6340
|
buttonGroupVariants,
|
|
4697
6341
|
buttonVariants,
|
|
4698
6342
|
checkboxVariants,
|
|
6343
|
+
cn,
|
|
6344
|
+
comboboxChipsVariants,
|
|
6345
|
+
comboboxInputVariants,
|
|
6346
|
+
createToaster,
|
|
6347
|
+
cva,
|
|
4699
6348
|
dropdownMenuItemVariants,
|
|
6349
|
+
emptyMediaVariants,
|
|
6350
|
+
emptyVariants,
|
|
4700
6351
|
inputGroupAddonVariants,
|
|
4701
6352
|
inputGroupButtonVariants,
|
|
4702
6353
|
inputGroupVariants,
|
|
4703
6354
|
inputVariants,
|
|
4704
6355
|
itemMediaVariants,
|
|
4705
6356
|
itemVariants,
|
|
6357
|
+
radioGroupVariants,
|
|
6358
|
+
radioItemVariants,
|
|
4706
6359
|
selectTriggerVariants,
|
|
4707
6360
|
switchVariants,
|
|
4708
6361
|
tabsListVariants,
|
|
4709
6362
|
tabsTriggerVariants,
|
|
6363
|
+
tagVariants,
|
|
4710
6364
|
textVariants,
|
|
6365
|
+
toast,
|
|
6366
|
+
toastManager,
|
|
4711
6367
|
uploadVariants,
|
|
6368
|
+
useCarousel,
|
|
6369
|
+
useChart,
|
|
6370
|
+
useComboboxAnchor,
|
|
6371
|
+
useComboboxFilter,
|
|
4712
6372
|
useSidebar
|
|
4713
6373
|
};
|