@wealthx/shadcn 1.0.1 → 1.1.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.
Files changed (63) hide show
  1. package/.turbo/turbo-build.log +154 -135
  2. package/CHANGELOG.md +12 -0
  3. package/README.md +82 -0
  4. package/dist/chunk-3EQP72AW.mjs +58 -0
  5. package/dist/{chunk-2WZVSBAY.mjs → chunk-3NQGYJEZ.mjs} +1 -1
  6. package/dist/{chunk-ZN2QKLF6.mjs → chunk-46OFHMQA.mjs} +1 -1
  7. package/dist/{chunk-IAOOZCUY.mjs → chunk-4AJ5HWHD.mjs} +4 -1
  8. package/dist/chunk-5JGQAAQV.mjs +212 -0
  9. package/dist/{chunk-MKFL5MNH.mjs → chunk-CJ46PDXE.mjs} +6 -6
  10. package/dist/{chunk-7LDIMXGM.mjs → chunk-DKZRJOMF.mjs} +1 -1
  11. package/dist/{chunk-AMJ23O53.mjs → chunk-FHNT55I5.mjs} +2 -2
  12. package/dist/chunk-GLW2UO6O.mjs +212 -0
  13. package/dist/{chunk-NGYG2EA6.mjs → chunk-I64K754C.mjs} +1 -1
  14. package/dist/chunk-K74JRTJR.mjs +105 -0
  15. package/dist/{chunk-NWZ46DJL.mjs → chunk-KQDD5MU3.mjs} +1 -1
  16. package/dist/chunk-RN67642N.mjs +171 -0
  17. package/dist/chunk-UEL4RD5P.mjs +272 -0
  18. package/dist/chunk-YBXCIF5Q.mjs +198 -0
  19. package/dist/components/ui/alert-dialog.js +4 -1
  20. package/dist/components/ui/alert-dialog.mjs +2 -2
  21. package/dist/components/ui/button.js +4 -1
  22. package/dist/components/ui/button.mjs +1 -1
  23. package/dist/components/ui/calendar.js +4 -1
  24. package/dist/components/ui/calendar.mjs +2 -2
  25. package/dist/components/ui/cashflow-bar-chart.js +596 -0
  26. package/dist/components/ui/cashflow-bar-chart.mjs +16 -0
  27. package/dist/components/ui/combobox.js +261 -0
  28. package/dist/components/ui/combobox.mjs +28 -0
  29. package/dist/components/ui/data-table.js +4 -1
  30. package/dist/components/ui/data-table.mjs +4 -4
  31. package/dist/components/ui/date-picker.js +4 -1
  32. package/dist/components/ui/date-picker.mjs +3 -3
  33. package/dist/components/ui/dialog.js +4 -1
  34. package/dist/components/ui/dialog.mjs +2 -2
  35. package/dist/components/ui/expense-bar-chart.js +543 -0
  36. package/dist/components/ui/expense-bar-chart.mjs +16 -0
  37. package/dist/components/ui/field.mjs +2 -2
  38. package/dist/components/ui/income-bar-chart.js +543 -0
  39. package/dist/components/ui/income-bar-chart.mjs +16 -0
  40. package/dist/components/ui/input-group.js +4 -1
  41. package/dist/components/ui/input-group.mjs +2 -2
  42. package/dist/components/ui/pagination.js +4 -1
  43. package/dist/components/ui/pagination.mjs +2 -2
  44. package/dist/components/ui/slider.js +166 -0
  45. package/dist/components/ui/slider.mjs +8 -0
  46. package/dist/components/ui/transactions-income-expense-bar-chart.js +478 -0
  47. package/dist/components/ui/transactions-income-expense-bar-chart.mjs +16 -0
  48. package/dist/index.js +1757 -698
  49. package/dist/index.mjs +160 -115
  50. package/dist/styles.css +1 -1
  51. package/package.json +35 -2
  52. package/src/components/index.tsx +59 -0
  53. package/src/components/ui/button.tsx +2 -0
  54. package/src/components/ui/cashflow-bar-chart.tsx +336 -0
  55. package/src/components/ui/chart-shared.tsx +100 -0
  56. package/src/components/ui/combobox.tsx +217 -0
  57. package/src/components/ui/expense-bar-chart.tsx +278 -0
  58. package/src/components/ui/income-bar-chart.tsx +278 -0
  59. package/src/components/ui/slider.tsx +107 -0
  60. package/src/components/ui/transactions-income-expense-bar-chart.tsx +198 -0
  61. package/src/styles/styles-css.ts +1 -1
  62. package/tsup.config.ts +6 -0
  63. package/dist/{chunk-HUVTPUV2.mjs → chunk-NLLKTU4B.mjs} +3 -3
package/dist/index.js CHANGED
@@ -95,9 +95,21 @@ __export(index_exports, {
95
95
  CardFooter: () => CardFooter,
96
96
  CardHeader: () => CardHeader,
97
97
  CardTitle: () => CardTitle,
98
+ CashflowBarChart: () => CashflowBarChart,
98
99
  Checkbox: () => Checkbox,
99
100
  CheckboxCard: () => CheckboxCard,
100
101
  Chip: () => Chip,
102
+ Combobox: () => Combobox,
103
+ ComboboxContent: () => ComboboxContent,
104
+ ComboboxEmpty: () => ComboboxEmpty,
105
+ ComboboxGroup: () => ComboboxGroup,
106
+ ComboboxGroupLabel: () => ComboboxGroupLabel,
107
+ ComboboxInput: () => ComboboxInput,
108
+ ComboboxItem: () => ComboboxItem,
109
+ ComboboxList: () => ComboboxList,
110
+ ComboboxSeparator: () => ComboboxSeparator,
111
+ ComboboxTrigger: () => ComboboxTrigger,
112
+ ComboboxValue: () => ComboboxValue,
101
113
  DataTable: () => DataTable,
102
114
  DataTableColumnHeader: () => DataTableColumnHeader,
103
115
  DataTablePagination: () => DataTablePagination,
@@ -145,6 +157,7 @@ __export(index_exports, {
145
157
  EmptyHeader: () => EmptyHeader,
146
158
  EmptyMedia: () => EmptyMedia,
147
159
  EmptyTitle: () => EmptyTitle,
160
+ ExpenseBarChart: () => ExpenseBarChart,
148
161
  FONT_FAMILY_SANS: () => FONT_FAMILY_SANS,
149
162
  Field: () => Field,
150
163
  FieldContent: () => FieldContent,
@@ -156,6 +169,7 @@ __export(index_exports, {
156
169
  FieldSeparator: () => FieldSeparator,
157
170
  FieldSet: () => FieldSet,
158
171
  FieldTitle: () => FieldTitle,
172
+ IncomeBarChart: () => IncomeBarChart,
159
173
  Input: () => Input,
160
174
  InputGroup: () => InputGroup,
161
175
  InputGroupAddon: () => InputGroupAddon,
@@ -207,6 +221,7 @@ __export(index_exports, {
207
221
  SheetTitle: () => SheetTitle,
208
222
  SheetTrigger: () => SheetTrigger,
209
223
  Skeleton: () => Skeleton,
224
+ Slider: () => Slider,
210
225
  Spinner: () => Spinner,
211
226
  Switch: () => Switch,
212
227
  SwitchCard: () => SwitchCard,
@@ -234,10 +249,11 @@ __export(index_exports, {
234
249
  Toggle: () => Toggle,
235
250
  ToggleGroup: () => ToggleGroup,
236
251
  ToggleGroupItem: () => ToggleGroupItem,
237
- Tooltip: () => Tooltip,
252
+ Tooltip: () => Tooltip5,
238
253
  TooltipContent: () => TooltipContent,
239
254
  TooltipProvider: () => TooltipProvider,
240
255
  TooltipTrigger: () => TooltipTrigger,
256
+ TransactionsIncomeExpenseBarChart: () => TransactionsIncomeExpenseBarChart,
241
257
  badgeVariants: () => badgeVariants,
242
258
  buttonVariants: () => buttonVariants,
243
259
  cn: () => cn,
@@ -355,91 +371,235 @@ function getResponsiveTypographyCssVars(breakpoint) {
355
371
  return vars;
356
372
  }
357
373
 
358
- // src/components/ui/accordion.tsx
359
- var import_lucide_react = require("lucide-react");
360
- var import_accordion = require("@base-ui/react/accordion");
374
+ // src/components/ui/transactions-income-expense-bar-chart.tsx
375
+ var import_react3 = require("react");
376
+ var import_chart = require("chart.js");
377
+ var import_chartjs_plugin_datalabels = __toESM(require("chartjs-plugin-datalabels"));
378
+ var import_react_chartjs_2 = require("react-chartjs-2");
379
+
380
+ // src/lib/theme-provider.tsx
381
+ var import_react = require("react");
361
382
  var import_jsx_runtime = require("react/jsx-runtime");
362
- function Accordion(props) {
363
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_accordion.Accordion.Root, __spreadValues({ "data-slot": "accordion" }, props));
383
+ var ThemeVarsContext = (0, import_react.createContext)({});
384
+ function useThemeVars() {
385
+ return (0, import_react.useContext)(ThemeVarsContext);
364
386
  }
365
- function AccordionItem(_a) {
387
+
388
+ // src/components/ui/card.tsx
389
+ var import_jsx_runtime2 = require("react/jsx-runtime");
390
+ function Card(_a) {
366
391
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
367
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
368
- import_accordion.Accordion.Item,
392
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
393
+ "div",
369
394
  __spreadValues({
370
- className: cn("border-b", className),
371
- "data-slot": "accordion-item"
395
+ className: cn(
396
+ "flex flex-col gap-6 border bg-card py-6 text-card-foreground shadow-sm",
397
+ className
398
+ ),
399
+ "data-slot": "card"
372
400
  }, props)
373
401
  );
374
402
  }
375
- function AccordionTrigger(_a) {
376
- var _b = _a, {
377
- className,
378
- children
379
- } = _b, props = __objRest(_b, [
380
- "className",
381
- "children"
382
- ]);
383
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_accordion.Accordion.Header, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
384
- import_accordion.Accordion.Trigger,
385
- __spreadProps(__spreadValues({
403
+ function CardHeader(_a) {
404
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
405
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
406
+ "div",
407
+ __spreadValues({
386
408
  className: cn(
387
- // layout
388
- "flex flex-1 items-center justify-between gap-4 py-4 text-left",
389
- // typography
390
- "text-sm font-medium",
391
- // base
392
- "rounded-none outline-none transition-[color,opacity]",
393
- // interactive states
394
- "hover:underline",
395
- "focus-visible:ring-2 focus-visible:ring-foreground/30",
396
- "disabled:pointer-events-none disabled:opacity-50",
397
- // chevron rotation when open
398
- "[&[data-panel-open]>svg]:rotate-180",
409
+ "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
399
410
  className
400
411
  ),
401
- "data-slot": "accordion-trigger"
402
- }, props), {
403
- children: [
404
- children,
405
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronDownIcon, { className: "pointer-events-none size-4 shrink-0 text-muted-foreground transition-transform duration-200" })
406
- ]
407
- })
408
- ) });
412
+ "data-slot": "card-header"
413
+ }, props)
414
+ );
409
415
  }
410
- function AccordionContent(_a) {
416
+ function CardTitle(_a) {
417
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
418
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
419
+ "div",
420
+ __spreadValues({
421
+ className: cn("leading-none font-semibold", className),
422
+ "data-slot": "card-title"
423
+ }, props)
424
+ );
425
+ }
426
+ function CardDescription(_a) {
427
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
428
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
429
+ "div",
430
+ __spreadValues({
431
+ className: cn("text-sm text-muted-foreground", className),
432
+ "data-slot": "card-description"
433
+ }, props)
434
+ );
435
+ }
436
+ function CardAction(_a) {
437
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
438
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
439
+ "div",
440
+ __spreadValues({
441
+ className: cn(
442
+ "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
443
+ className
444
+ ),
445
+ "data-slot": "card-action"
446
+ }, props)
447
+ );
448
+ }
449
+ function CardContent(_a) {
450
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
451
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
452
+ "div",
453
+ __spreadValues({
454
+ className: cn("px-6", className),
455
+ "data-slot": "card-content"
456
+ }, props)
457
+ );
458
+ }
459
+ function CardFooter(_a) {
460
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
461
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
462
+ "div",
463
+ __spreadValues({
464
+ className: cn("flex items-center px-6 [.border-t]:pt-6", className),
465
+ "data-slot": "card-footer"
466
+ }, props)
467
+ );
468
+ }
469
+
470
+ // src/components/ui/empty.tsx
471
+ var import_class_variance_authority = require("class-variance-authority");
472
+ var import_jsx_runtime3 = require("react/jsx-runtime");
473
+ function Empty(_a) {
474
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
475
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
476
+ "div",
477
+ __spreadValues({
478
+ className: cn(
479
+ "flex min-w-0 flex-1 flex-col items-center justify-center gap-6 border border-dashed p-6 text-center text-balance md:p-12",
480
+ className
481
+ ),
482
+ "data-slot": "empty"
483
+ }, props)
484
+ );
485
+ }
486
+ function EmptyHeader(_a) {
487
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
488
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
489
+ "div",
490
+ __spreadValues({
491
+ className: cn(
492
+ "flex max-w-sm flex-col items-center gap-2 text-center",
493
+ className
494
+ ),
495
+ "data-slot": "empty-header"
496
+ }, props)
497
+ );
498
+ }
499
+ var emptyMediaVariants = (0, import_class_variance_authority.cva)(
500
+ "mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
501
+ {
502
+ variants: {
503
+ variant: {
504
+ default: "[&_svg:not([class*='size-'])]:size-10",
505
+ icon: "flex size-10 shrink-0 items-center justify-center text-muted-foreground [&_svg:not([class*='size-'])]:size-6"
506
+ }
507
+ },
508
+ defaultVariants: {
509
+ variant: "default"
510
+ }
511
+ }
512
+ );
513
+ function EmptyMedia(_a) {
411
514
  var _b = _a, {
412
515
  className,
413
- children
516
+ variant = "default"
414
517
  } = _b, props = __objRest(_b, [
415
518
  "className",
416
- "children"
519
+ "variant"
417
520
  ]);
418
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
419
- import_accordion.Accordion.Panel,
420
- __spreadProps(__spreadValues({
421
- className: "overflow-hidden text-sm h-(--accordion-panel-height) transition-[height] duration-200 ease-out data-starting-style:h-0 data-ending-style:h-0",
422
- "data-slot": "accordion-content"
423
- }, props), {
424
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cn("pb-4 text-muted-foreground", className), children })
425
- })
521
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
522
+ "div",
523
+ __spreadValues({
524
+ className: cn(emptyMediaVariants({ variant, className })),
525
+ "data-slot": "empty-icon",
526
+ "data-variant": variant
527
+ }, props)
528
+ );
529
+ }
530
+ function EmptyTitle(_a) {
531
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
532
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
533
+ "div",
534
+ __spreadValues({
535
+ className: cn("text-lg font-medium tracking-tight", className),
536
+ "data-slot": "empty-title"
537
+ }, props)
538
+ );
539
+ }
540
+ function EmptyDescription(_a) {
541
+ var _b = _a, {
542
+ className
543
+ } = _b, props = __objRest(_b, [
544
+ "className"
545
+ ]);
546
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
547
+ "div",
548
+ __spreadValues({
549
+ className: cn(
550
+ "text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
551
+ className
552
+ ),
553
+ "data-slot": "empty-description"
554
+ }, props)
555
+ );
556
+ }
557
+ function EmptyContent(_a) {
558
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
559
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
560
+ "div",
561
+ __spreadValues({
562
+ className: cn(
563
+ "flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance",
564
+ className
565
+ ),
566
+ "data-slot": "empty-content"
567
+ }, props)
426
568
  );
427
569
  }
428
570
 
429
- // src/components/ui/alert-dialog.tsx
430
- var import_alert_dialog = require("@base-ui/react/alert-dialog");
431
-
432
- // src/lib/theme-provider.tsx
433
- var import_react = require("react");
434
- var import_jsx_runtime2 = require("react/jsx-runtime");
435
- var ThemeVarsContext = (0, import_react.createContext)({});
436
- function useThemeVars() {
437
- return (0, import_react.useContext)(ThemeVarsContext);
571
+ // src/components/ui/spinner.tsx
572
+ var import_class_variance_authority2 = require("class-variance-authority");
573
+ var import_lucide_react = require("lucide-react");
574
+ var import_jsx_runtime4 = require("react/jsx-runtime");
575
+ var spinnerVariants = (0, import_class_variance_authority2.cva)("animate-spin shrink-0", {
576
+ variants: {
577
+ size: {
578
+ sm: "size-3",
579
+ default: "size-4",
580
+ lg: "size-6",
581
+ xl: "size-8"
582
+ }
583
+ },
584
+ defaultVariants: {
585
+ size: "default"
586
+ }
587
+ });
588
+ function Spinner(_a) {
589
+ var _b = _a, { className, size } = _b, props = __objRest(_b, ["className", "size"]);
590
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
591
+ import_lucide_react.LoaderCircle,
592
+ __spreadValues({
593
+ "aria-hidden": "true",
594
+ className: cn(spinnerVariants({ size }), className),
595
+ "data-slot": "spinner"
596
+ }, props)
597
+ );
438
598
  }
439
599
 
440
600
  // src/components/ui/button.tsx
441
601
  var import_react2 = require("react");
442
- var import_class_variance_authority = require("class-variance-authority");
602
+ var import_class_variance_authority3 = require("class-variance-authority");
443
603
  var import_lucide_react2 = require("lucide-react");
444
604
 
445
605
  // src/lib/slot.tsx
@@ -490,8 +650,8 @@ var Slot = React2.forwardRef(
490
650
  Slot.displayName = "Slot";
491
651
 
492
652
  // src/components/ui/button.tsx
493
- var import_jsx_runtime3 = require("react/jsx-runtime");
494
- var buttonVariants = (0, import_class_variance_authority.cva)(
653
+ var import_jsx_runtime5 = require("react/jsx-runtime");
654
+ var buttonVariants = (0, import_class_variance_authority3.cva)(
495
655
  "inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 font-sans text-sm font-medium whitespace-nowrap transition-all active:scale-[0.98] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
496
656
  {
497
657
  variants: {
@@ -516,63 +676,901 @@ var buttonVariants = (0, import_class_variance_authority.cva)(
516
676
  "icon-lg": "size-10"
517
677
  }
518
678
  },
519
- defaultVariants: {
520
- variant: "default",
521
- size: "default"
679
+ defaultVariants: {
680
+ variant: "default",
681
+ size: "default"
682
+ }
683
+ }
684
+ );
685
+ var Button = (0, import_react2.forwardRef)(function Button2(_a, ref) {
686
+ var _b = _a, {
687
+ className,
688
+ variant,
689
+ size,
690
+ asChild = false,
691
+ loading = false,
692
+ disabled,
693
+ type = "button",
694
+ children
695
+ } = _b, props = __objRest(_b, [
696
+ "className",
697
+ "variant",
698
+ "size",
699
+ "asChild",
700
+ "loading",
701
+ "disabled",
702
+ "type",
703
+ "children"
704
+ ]);
705
+ const Comp = asChild ? Slot : "button";
706
+ const isIconOnly = size === "icon" || size === "icon-xs" || size === "icon-sm" || size === "icon-lg";
707
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
708
+ Comp,
709
+ __spreadProps(__spreadValues({
710
+ className: cn(buttonVariants({ variant, size, className })),
711
+ "data-size": size,
712
+ "data-slot": "button",
713
+ "data-variant": variant,
714
+ disabled: loading || disabled,
715
+ ref,
716
+ type
717
+ }, props), {
718
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
719
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.Loader2, { "aria-hidden": "true", className: "animate-spin" }),
720
+ !isIconOnly && children
721
+ ] }) : children
722
+ })
723
+ );
724
+ });
725
+
726
+ // src/components/ui/chart-shared.tsx
727
+ var import_jsx_runtime6 = require("react/jsx-runtime");
728
+ var CHART_SLICE_COUNT = {
729
+ monthly: { 1: 1, 3: 3, 6: 6, 12: 12 },
730
+ daily: { 1: 30, 3: 90, 6: 180, 12: 365 }
731
+ };
732
+ var CHART_PERIODS = {
733
+ monthly: [3, 6, 12],
734
+ daily: [1, 3, 6, 12]
735
+ };
736
+ function hexToRgba(hex, alpha) {
737
+ const clean = hex.replace("#", "");
738
+ const full = clean.length === 3 ? clean.split("").map((c) => c + c).join("") : clean;
739
+ const r = parseInt(full.slice(0, 2), 16);
740
+ const g = parseInt(full.slice(2, 4), 16);
741
+ const b = parseInt(full.slice(4, 6), 16);
742
+ return `rgba(${r},${g},${b},${alpha})`;
743
+ }
744
+ var DATASET_ALPHAS = [1, 0.72, 0.52, 0.36, 0.24, 0.15];
745
+ var FALLBACK_TICK = "#9EAAB5";
746
+ function formatTooltipDate(iso, granularity) {
747
+ const d = new Date(iso);
748
+ return d.toLocaleDateString(
749
+ "en-US",
750
+ granularity === "daily" ? { month: "short", day: "numeric", year: "numeric" } : { month: "short", year: "numeric" }
751
+ );
752
+ }
753
+ function ChartLegendItem({ label, color }) {
754
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "flex items-center gap-1.5", children: [
755
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { width: 10, height: 10, backgroundColor: color, flexShrink: 0 } }),
756
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "text-[11px] text-muted-foreground leading-none", children: label })
757
+ ] });
758
+ }
759
+ function ChartPeriodButton({
760
+ period,
761
+ active,
762
+ onClick
763
+ }) {
764
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(Button, { variant: active ? "default" : "outline", size: "xs", onClick, children: [
765
+ period,
766
+ "M"
767
+ ] });
768
+ }
769
+
770
+ // src/components/ui/transactions-income-expense-bar-chart.tsx
771
+ var import_jsx_runtime7 = require("react/jsx-runtime");
772
+ import_chart.Chart.register(import_chart.CategoryScale, import_chart.LinearScale, import_chart.BarElement, import_chart.Tooltip);
773
+ var FALLBACK_PRIMARY = "#33FF99";
774
+ var FALLBACK_SECONDARY = "#162029";
775
+ var VALUE_LABEL_COLOR = "#162029";
776
+ function formatDollar(value) {
777
+ return `$${value.toLocaleString(void 0, {
778
+ minimumFractionDigits: 2,
779
+ maximumFractionDigits: 2
780
+ })}`;
781
+ }
782
+ function TransactionsIncomeExpenseBarChart({
783
+ totalIncome,
784
+ totalExpense,
785
+ title = "Transactions \u2014 Income vs Expense",
786
+ height = 120,
787
+ width = "100%",
788
+ className,
789
+ isLoading = false
790
+ }) {
791
+ const themeVars = useThemeVars();
792
+ const brandPrimary = themeVars["--theme-primary"] || FALLBACK_PRIMARY;
793
+ const brandSecondary = themeVars["--theme-secondary"] || FALLBACK_SECONDARY;
794
+ const hasData = totalIncome != null && totalExpense != null;
795
+ const incomeVal = totalIncome != null ? totalIncome : 0;
796
+ const expenseVal = Math.abs(totalExpense != null ? totalExpense : 0);
797
+ const maxVal = Math.max(incomeVal, expenseVal);
798
+ const chartData = (0, import_react3.useMemo)(() => {
799
+ if (!hasData) return { labels: [], datasets: [] };
800
+ return {
801
+ labels: ["Incoming", "Outgoing"],
802
+ datasets: [
803
+ {
804
+ barThickness: 40,
805
+ backgroundColor: [brandPrimary, brandSecondary],
806
+ hoverBackgroundColor: [brandPrimary, brandSecondary],
807
+ borderWidth: 0,
808
+ borderRadius: 0,
809
+ borderSkipped: false,
810
+ data: [incomeVal, expenseVal],
811
+ // chartjs-plugin-datalabels config — typed via plugin module augmentation
812
+ datalabels: {
813
+ labels: {
814
+ value: {
815
+ anchor: "end",
816
+ align: "end",
817
+ offset: 10,
818
+ clamp: false,
819
+ font: { weight: "bold", size: 14 },
820
+ color: VALUE_LABEL_COLOR,
821
+ textAlign: "left",
822
+ // Returns array for multi-line: dollar value on line 1, blank on line 2
823
+ formatter: (v) => [formatDollar(v), ""]
824
+ },
825
+ name: {
826
+ anchor: "end",
827
+ align: "end",
828
+ offset: 10,
829
+ clamp: false,
830
+ font: { size: 12 },
831
+ color: FALLBACK_TICK,
832
+ textAlign: "left",
833
+ // Returns array for multi-line: blank on line 1, bar label on line 2
834
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
835
+ formatter: (_, ctx) => {
836
+ var _a, _b;
837
+ return ["", String((_b = (_a = ctx.chart.data.labels) == null ? void 0 : _a[ctx.dataIndex]) != null ? _b : "")];
838
+ }
839
+ }
840
+ }
841
+ }
842
+ }
843
+ ]
844
+ };
845
+ }, [hasData, incomeVal, expenseVal, brandPrimary, brandSecondary]);
846
+ const options = (0, import_react3.useMemo)(() => ({
847
+ indexAxis: "y",
848
+ responsive: true,
849
+ maintainAspectRatio: false,
850
+ animation: { duration: 800, easing: "easeOutQuart" },
851
+ layout: {
852
+ // Right padding reserves space for the datalabels rendered outside the bar area
853
+ padding: { right: 180, left: 0, top: 10, bottom: 10 }
854
+ },
855
+ plugins: {
856
+ legend: { display: false },
857
+ tooltip: { enabled: false }
858
+ },
859
+ scales: {
860
+ y: {
861
+ display: true,
862
+ grid: { display: false },
863
+ border: { display: false },
864
+ ticks: { display: false }
865
+ },
866
+ x: {
867
+ display: true,
868
+ suggestedMax: maxVal * 1.3,
869
+ grid: { display: false },
870
+ border: { display: false },
871
+ ticks: { display: false }
872
+ }
873
+ }
874
+ }), [maxVal]);
875
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
876
+ Card,
877
+ {
878
+ className: cn("w-full py-4 sm:py-6 gap-2", className),
879
+ style: { maxWidth: width },
880
+ children: [
881
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardHeader, { className: "px-3 sm:px-6", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardTitle, { className: "text-sm sm:text-base", children: title }) }),
882
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardContent, { className: "px-3 sm:px-6", children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
883
+ "div",
884
+ {
885
+ className: "flex items-center justify-center text-muted-foreground",
886
+ style: { height, width: "100%" },
887
+ children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Spinner, { size: "lg" })
888
+ }
889
+ ) : !hasData ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Empty, { className: "flex-none p-4", style: { height }, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(EmptyDescription, { children: "No data available" }) }) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: { height, width: "100%", position: "relative" }, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
890
+ import_react_chartjs_2.Chart,
891
+ {
892
+ type: "bar",
893
+ data: chartData,
894
+ options,
895
+ plugins: [import_chartjs_plugin_datalabels.default],
896
+ "aria-label": title
897
+ },
898
+ `${brandPrimary}__${brandSecondary}`
899
+ ) }) })
900
+ ]
901
+ }
902
+ );
903
+ }
904
+
905
+ // src/components/ui/cashflow-bar-chart.tsx
906
+ var import_react4 = require("react");
907
+ var import_chart2 = require("chart.js");
908
+ var import_react_chartjs_22 = require("react-chartjs-2");
909
+
910
+ // src/components/ui/skeleton.tsx
911
+ var import_jsx_runtime8 = require("react/jsx-runtime");
912
+ function Skeleton(_a) {
913
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
914
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
915
+ "div",
916
+ __spreadValues({
917
+ className: cn("animate-pulse bg-muted", className),
918
+ "data-slot": "skeleton"
919
+ }, props)
920
+ );
921
+ }
922
+
923
+ // src/components/ui/cashflow-bar-chart.tsx
924
+ var import_jsx_runtime9 = require("react/jsx-runtime");
925
+ import_chart2.Chart.register(import_chart2.CategoryScale, import_chart2.LinearScale, import_chart2.BarElement, import_chart2.Tooltip, import_chart2.Legend);
926
+ function LegendItem({ label, fillColor, strokeColor, strokeWidth = 1.5 }) {
927
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-center gap-1.5", children: [
928
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
929
+ "div",
930
+ {
931
+ style: {
932
+ width: 10,
933
+ height: 10,
934
+ backgroundColor: fillColor,
935
+ border: strokeWidth > 0 ? `${strokeWidth}px solid ${strokeColor}` : "none",
936
+ flexShrink: 0
937
+ }
938
+ }
939
+ ),
940
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "text-[11px] text-muted-foreground leading-none", children: label })
941
+ ] });
942
+ }
943
+ function ChartLegend({ primary, secondary }) {
944
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-wrap gap-x-3 gap-y-1.5 pb-2", children: [
945
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
946
+ LegendItem,
947
+ {
948
+ label: "Income",
949
+ fillColor: hexToRgba(primary, 0.2),
950
+ strokeColor: primary
951
+ }
952
+ ),
953
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
954
+ LegendItem,
955
+ {
956
+ label: "Expenses and Liabilities",
957
+ fillColor: hexToRgba(secondary, 0.2),
958
+ strokeColor: secondary
959
+ }
960
+ ),
961
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
962
+ LegendItem,
963
+ {
964
+ label: "Surplus Income",
965
+ fillColor: primary,
966
+ strokeColor: primary,
967
+ strokeWidth: 0
968
+ }
969
+ ),
970
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
971
+ LegendItem,
972
+ {
973
+ label: "Over Spending",
974
+ fillColor: secondary,
975
+ strokeColor: secondary,
976
+ strokeWidth: 0
977
+ }
978
+ )
979
+ ] });
980
+ }
981
+ var PERIODS = [3, 6, 12];
982
+ var FALLBACK_PRIMARY2 = "#33FF99";
983
+ var FALLBACK_SECONDARY2 = "#162029";
984
+ function CashflowBarChart({
985
+ cashflowData,
986
+ title = "Cashflow",
987
+ showLegend = true,
988
+ showXAxis = true,
989
+ showYAxis = true,
990
+ legendPosition = "top",
991
+ defaultPeriod = 6,
992
+ height = 280,
993
+ width = "100%",
994
+ className,
995
+ isLoading = false
996
+ }) {
997
+ const [period, setPeriod] = (0, import_react4.useState)(defaultPeriod);
998
+ const themeVars = useThemeVars();
999
+ const brandPrimary = themeVars["--theme-primary"] || FALLBACK_PRIMARY2;
1000
+ const brandSecondary = themeVars["--theme-secondary"] || FALLBACK_SECONDARY2;
1001
+ const sliced = (0, import_react4.useMemo)(() => {
1002
+ var _a;
1003
+ if (!((_a = cashflowData == null ? void 0 : cashflowData.data) == null ? void 0 : _a.length)) return null;
1004
+ const count = Math.min(period, cashflowData.data.length);
1005
+ const start = cashflowData.data.length - count;
1006
+ return {
1007
+ months: cashflowData.months.slice(start),
1008
+ data: cashflowData.data.slice(start)
1009
+ };
1010
+ }, [cashflowData, period]);
1011
+ const chartData = (0, import_react4.useMemo)(() => {
1012
+ if (!sliced) return { labels: [], datasets: [] };
1013
+ return {
1014
+ labels: sliced.months,
1015
+ datasets: [
1016
+ {
1017
+ label: "Income",
1018
+ data: sliced.data.map((d) => d.income),
1019
+ backgroundColor: hexToRgba(brandPrimary, 0.2),
1020
+ hoverBackgroundColor: hexToRgba(brandPrimary, 0.35),
1021
+ borderColor: brandPrimary,
1022
+ borderWidth: 1.5,
1023
+ borderRadius: 0,
1024
+ borderSkipped: false,
1025
+ barPercentage: 0.75,
1026
+ categoryPercentage: 0.7
1027
+ },
1028
+ {
1029
+ label: "Expenses and Liabilities",
1030
+ data: sliced.data.map((d) => d.expenses),
1031
+ backgroundColor: hexToRgba(brandSecondary, 0.2),
1032
+ hoverBackgroundColor: hexToRgba(brandSecondary, 0.35),
1033
+ borderColor: brandSecondary,
1034
+ borderWidth: 1.5,
1035
+ borderRadius: 0,
1036
+ borderSkipped: false,
1037
+ barPercentage: 0.75,
1038
+ categoryPercentage: 0.7
1039
+ },
1040
+ {
1041
+ label: "_thirdBar",
1042
+ data: sliced.data.map(
1043
+ (d) => d.overspending > 0 ? d.overspending : d.surplus
1044
+ ),
1045
+ backgroundColor: sliced.data.map(
1046
+ (d) => d.overspending > 0 ? brandSecondary : brandPrimary
1047
+ ),
1048
+ hoverBackgroundColor: sliced.data.map(
1049
+ (d) => d.overspending > 0 ? hexToRgba(brandSecondary, 0.8) : hexToRgba(brandPrimary, 0.8)
1050
+ ),
1051
+ borderWidth: 0,
1052
+ borderRadius: 0,
1053
+ borderSkipped: false,
1054
+ barPercentage: 0.75,
1055
+ categoryPercentage: 0.7
1056
+ }
1057
+ ]
1058
+ };
1059
+ }, [sliced, brandPrimary, brandSecondary]);
1060
+ const options = (0, import_react4.useMemo)(() => ({
1061
+ responsive: true,
1062
+ maintainAspectRatio: false,
1063
+ animation: { duration: 800, easing: "easeOutQuart" },
1064
+ layout: { padding: 0 },
1065
+ plugins: {
1066
+ legend: { display: false },
1067
+ tooltip: {
1068
+ mode: "index",
1069
+ intersect: false,
1070
+ padding: 12,
1071
+ cornerRadius: 0,
1072
+ titleFont: { size: 11, weight: "600" },
1073
+ bodyFont: { size: 12, weight: "500" },
1074
+ callbacks: {
1075
+ title: (tooltipItems) => {
1076
+ var _a, _b, _c, _d;
1077
+ const idx = (_a = tooltipItems[0]) == null ? void 0 : _a.dataIndex;
1078
+ if (idx != null && ((_b = sliced == null ? void 0 : sliced.data[idx]) == null ? void 0 : _b.date)) {
1079
+ return formatTooltipDate(sliced.data[idx].date, "monthly");
1080
+ }
1081
+ return (_d = (_c = tooltipItems[0]) == null ? void 0 : _c.label) != null ? _d : "";
1082
+ },
1083
+ label: (ctx) => {
1084
+ const val = ctx.raw;
1085
+ if (val === 0) return null;
1086
+ if (ctx.datasetIndex === 2) {
1087
+ const d = sliced == null ? void 0 : sliced.data[ctx.dataIndex];
1088
+ if (!d) return null;
1089
+ const lbl = d.overspending > 0 ? "Over Spending" : "Surplus Income";
1090
+ return ` ${lbl}: $${val.toLocaleString()}`;
1091
+ }
1092
+ return ` ${ctx.dataset.label}: $${val.toLocaleString()}`;
1093
+ }
1094
+ }
1095
+ }
1096
+ },
1097
+ scales: {
1098
+ x: {
1099
+ display: showXAxis,
1100
+ grid: { display: false },
1101
+ border: { display: false },
1102
+ ticks: { font: { size: 10 }, color: FALLBACK_TICK }
1103
+ },
1104
+ y: {
1105
+ display: showYAxis,
1106
+ grid: { display: false },
1107
+ border: { display: false },
1108
+ ticks: {
1109
+ font: { size: 10 },
1110
+ color: FALLBACK_TICK,
1111
+ maxTicksLimit: 5,
1112
+ padding: 8,
1113
+ callback: (v) => `$${Number(v).toLocaleString()}`
1114
+ }
1115
+ }
1116
+ }
1117
+ }), [showXAxis, showYAxis, sliced]);
1118
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
1119
+ Card,
1120
+ {
1121
+ className: cn("w-full py-4 sm:py-6 gap-2", className),
1122
+ style: { maxWidth: width },
1123
+ children: [
1124
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(CardHeader, { className: "px-3 sm:px-6", children: [
1125
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CardTitle, { className: "text-sm sm:text-base", children: title }),
1126
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CardAction, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "flex gap-0.5 sm:gap-1", children: PERIODS.map((p) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1127
+ ChartPeriodButton,
1128
+ {
1129
+ period: p,
1130
+ active: period === p,
1131
+ onClick: () => setPeriod(p)
1132
+ },
1133
+ p
1134
+ )) }) })
1135
+ ] }),
1136
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CardContent, { className: "px-3 sm:px-6", children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Skeleton, { style: { height, width: "100%" } }) : !sliced ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Empty, { className: "flex-none p-4", style: { height }, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(EmptyDescription, { children: "No data available" }) }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col gap-2", children: [
1137
+ showLegend && legendPosition === "top" && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(ChartLegend, { primary: brandPrimary, secondary: brandSecondary }),
1138
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: { height, width: "100%", position: "relative" }, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1139
+ import_react_chartjs_22.Chart,
1140
+ {
1141
+ type: "bar",
1142
+ data: chartData,
1143
+ options,
1144
+ "aria-label": title
1145
+ },
1146
+ `${brandPrimary}__${brandSecondary}`
1147
+ ) }),
1148
+ showLegend && legendPosition === "bottom" && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(ChartLegend, { primary: brandPrimary, secondary: brandSecondary })
1149
+ ] }) })
1150
+ ]
1151
+ }
1152
+ );
1153
+ }
1154
+
1155
+ // src/components/ui/expense-bar-chart.tsx
1156
+ var import_react5 = require("react");
1157
+ var import_chart3 = require("chart.js");
1158
+ var import_react_chartjs_23 = require("react-chartjs-2");
1159
+ var import_jsx_runtime10 = require("react/jsx-runtime");
1160
+ import_chart3.Chart.register(import_chart3.CategoryScale, import_chart3.LinearScale, import_chart3.BarElement, import_chart3.Tooltip, import_chart3.Legend);
1161
+ var FALLBACK_SECONDARY3 = "#162029";
1162
+ function ExpenseBarChart({
1163
+ expenseData,
1164
+ title = "Expenses",
1165
+ showLegend = true,
1166
+ showXAxis = true,
1167
+ showYAxis = true,
1168
+ legendPosition = "top",
1169
+ defaultPeriod = 6,
1170
+ granularity = "monthly",
1171
+ height = 280,
1172
+ width = "100%",
1173
+ className,
1174
+ isLoading = false
1175
+ }) {
1176
+ const periods = CHART_PERIODS[granularity];
1177
+ const [period, setPeriod] = (0, import_react5.useState)(defaultPeriod);
1178
+ const isFirstRender = (0, import_react5.useRef)(true);
1179
+ (0, import_react5.useEffect)(() => {
1180
+ if (isFirstRender.current) {
1181
+ isFirstRender.current = false;
1182
+ return;
1183
+ }
1184
+ setPeriod(CHART_PERIODS[granularity][0]);
1185
+ }, [granularity]);
1186
+ const themeVars = useThemeVars();
1187
+ const brandSecondary = themeVars["--theme-secondary"] || FALLBACK_SECONDARY3;
1188
+ const sliced = (0, import_react5.useMemo)(() => {
1189
+ var _a, _b;
1190
+ if (!((_a = expenseData == null ? void 0 : expenseData.months) == null ? void 0 : _a.length) || !expenseData.datasets.length) return null;
1191
+ const count = Math.min(CHART_SLICE_COUNT[granularity][period], expenseData.months.length);
1192
+ const start = expenseData.months.length - count;
1193
+ return {
1194
+ months: expenseData.months.slice(start),
1195
+ dates: (_b = expenseData.dates) == null ? void 0 : _b.slice(start),
1196
+ datasets: expenseData.datasets.map((ds) => __spreadProps(__spreadValues({}, ds), {
1197
+ data: ds.data.slice(start)
1198
+ }))
1199
+ };
1200
+ }, [expenseData, period, granularity]);
1201
+ const datasetColors = (0, import_react5.useMemo)(
1202
+ () => {
1203
+ var _a;
1204
+ return (_a = sliced == null ? void 0 : sliced.datasets.map(
1205
+ (_, i) => hexToRgba(brandSecondary, DATASET_ALPHAS[i % DATASET_ALPHAS.length])
1206
+ )) != null ? _a : [];
1207
+ },
1208
+ [sliced, brandSecondary]
1209
+ );
1210
+ const chartData = (0, import_react5.useMemo)(() => {
1211
+ if (!sliced) return { labels: [], datasets: [] };
1212
+ return {
1213
+ labels: sliced.months,
1214
+ datasets: sliced.datasets.map((ds, i) => ({
1215
+ label: ds.label,
1216
+ data: ds.data,
1217
+ backgroundColor: datasetColors[i],
1218
+ hoverBackgroundColor: hexToRgba(
1219
+ brandSecondary,
1220
+ Math.min(DATASET_ALPHAS[i % DATASET_ALPHAS.length] + 0.15, 1)
1221
+ ),
1222
+ borderWidth: 0,
1223
+ borderRadius: 0,
1224
+ borderSkipped: false,
1225
+ barPercentage: 0.75,
1226
+ categoryPercentage: 0.7,
1227
+ stack: "expense"
1228
+ }))
1229
+ };
1230
+ }, [sliced, datasetColors, brandSecondary]);
1231
+ const options = (0, import_react5.useMemo)(() => ({
1232
+ responsive: true,
1233
+ maintainAspectRatio: false,
1234
+ animation: { duration: 800, easing: "easeOutQuart" },
1235
+ layout: { padding: 0 },
1236
+ plugins: {
1237
+ legend: { display: false },
1238
+ tooltip: {
1239
+ mode: "index",
1240
+ intersect: false,
1241
+ padding: 12,
1242
+ cornerRadius: 0,
1243
+ titleFont: { size: 11, weight: "600" },
1244
+ bodyFont: { size: 12, weight: "500" },
1245
+ callbacks: {
1246
+ title: (tooltipItems) => {
1247
+ var _a, _b, _c, _d;
1248
+ const idx = (_a = tooltipItems[0]) == null ? void 0 : _a.dataIndex;
1249
+ if (idx != null && ((_b = sliced == null ? void 0 : sliced.dates) == null ? void 0 : _b[idx])) {
1250
+ return formatTooltipDate(sliced.dates[idx], granularity);
1251
+ }
1252
+ return (_d = (_c = tooltipItems[0]) == null ? void 0 : _c.label) != null ? _d : "";
1253
+ },
1254
+ label: (ctx) => {
1255
+ const val = ctx.raw;
1256
+ if (val === 0) return null;
1257
+ return ` ${ctx.dataset.label}: $${val.toLocaleString()}`;
1258
+ }
1259
+ }
1260
+ }
1261
+ },
1262
+ scales: {
1263
+ x: {
1264
+ display: showXAxis,
1265
+ stacked: true,
1266
+ grid: { display: false },
1267
+ border: { display: false },
1268
+ ticks: { font: { size: 10 }, color: FALLBACK_TICK }
1269
+ },
1270
+ y: {
1271
+ display: showYAxis,
1272
+ stacked: true,
1273
+ grid: { display: false },
1274
+ border: { display: false },
1275
+ ticks: {
1276
+ font: { size: 10 },
1277
+ color: FALLBACK_TICK,
1278
+ maxTicksLimit: 5,
1279
+ padding: 8,
1280
+ callback: (v) => `$${Number(v).toLocaleString()}`
1281
+ }
1282
+ }
1283
+ }
1284
+ }), [showXAxis, showYAxis, sliced, granularity]);
1285
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
1286
+ Card,
1287
+ {
1288
+ className: cn("w-full py-4 sm:py-6 gap-2", className),
1289
+ style: { maxWidth: width },
1290
+ children: [
1291
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(CardHeader, { className: "px-3 sm:px-6", children: [
1292
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CardTitle, { className: "text-sm sm:text-base", children: title }),
1293
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CardAction, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex gap-0.5 sm:gap-1", children: periods.map((p) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1294
+ ChartPeriodButton,
1295
+ {
1296
+ period: p,
1297
+ active: period === p,
1298
+ onClick: () => setPeriod(p)
1299
+ },
1300
+ p
1301
+ )) }) })
1302
+ ] }),
1303
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CardContent, { className: "px-3 sm:px-6", children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Skeleton, { style: { height, width: "100%" } }) : !sliced ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Empty, { className: "flex-none p-4", style: { height }, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(EmptyDescription, { children: "No data available" }) }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col gap-2", children: [
1304
+ showLegend && legendPosition === "top" && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex flex-wrap gap-x-3 gap-y-1.5 pb-2", children: sliced.datasets.map((ds, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ChartLegendItem, { label: ds.label, color: datasetColors[i] }, ds.label)) }),
1305
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: { height, width: "100%", position: "relative" }, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1306
+ import_react_chartjs_23.Chart,
1307
+ {
1308
+ type: "bar",
1309
+ data: chartData,
1310
+ options,
1311
+ "aria-label": title
1312
+ },
1313
+ brandSecondary
1314
+ ) }),
1315
+ showLegend && legendPosition === "bottom" && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex flex-wrap gap-x-3 gap-y-1.5 pt-2", children: sliced.datasets.map((ds, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ChartLegendItem, { label: ds.label, color: datasetColors[i] }, ds.label)) })
1316
+ ] }) })
1317
+ ]
1318
+ }
1319
+ );
1320
+ }
1321
+
1322
+ // src/components/ui/income-bar-chart.tsx
1323
+ var import_react6 = require("react");
1324
+ var import_chart4 = require("chart.js");
1325
+ var import_react_chartjs_24 = require("react-chartjs-2");
1326
+ var import_jsx_runtime11 = require("react/jsx-runtime");
1327
+ import_chart4.Chart.register(import_chart4.CategoryScale, import_chart4.LinearScale, import_chart4.BarElement, import_chart4.Tooltip, import_chart4.Legend);
1328
+ var FALLBACK_PRIMARY3 = "#33FF99";
1329
+ function IncomeBarChart({
1330
+ incomeData,
1331
+ title = "Income",
1332
+ showLegend = true,
1333
+ showXAxis = true,
1334
+ showYAxis = true,
1335
+ legendPosition = "top",
1336
+ defaultPeriod = 6,
1337
+ granularity = "monthly",
1338
+ height = 280,
1339
+ width = "100%",
1340
+ className,
1341
+ isLoading = false
1342
+ }) {
1343
+ const periods = CHART_PERIODS[granularity];
1344
+ const [period, setPeriod] = (0, import_react6.useState)(defaultPeriod);
1345
+ const isFirstRender = (0, import_react6.useRef)(true);
1346
+ (0, import_react6.useEffect)(() => {
1347
+ if (isFirstRender.current) {
1348
+ isFirstRender.current = false;
1349
+ return;
1350
+ }
1351
+ setPeriod(CHART_PERIODS[granularity][0]);
1352
+ }, [granularity]);
1353
+ const themeVars = useThemeVars();
1354
+ const brandPrimary = themeVars["--theme-primary"] || FALLBACK_PRIMARY3;
1355
+ const sliced = (0, import_react6.useMemo)(() => {
1356
+ var _a, _b;
1357
+ if (!((_a = incomeData == null ? void 0 : incomeData.months) == null ? void 0 : _a.length) || !incomeData.datasets.length) return null;
1358
+ const count = Math.min(CHART_SLICE_COUNT[granularity][period], incomeData.months.length);
1359
+ const start = incomeData.months.length - count;
1360
+ return {
1361
+ months: incomeData.months.slice(start),
1362
+ dates: (_b = incomeData.dates) == null ? void 0 : _b.slice(start),
1363
+ datasets: incomeData.datasets.map((ds) => __spreadProps(__spreadValues({}, ds), {
1364
+ data: ds.data.slice(start)
1365
+ }))
1366
+ };
1367
+ }, [incomeData, period, granularity]);
1368
+ const datasetColors = (0, import_react6.useMemo)(
1369
+ () => {
1370
+ var _a;
1371
+ return (_a = sliced == null ? void 0 : sliced.datasets.map(
1372
+ (_, i) => hexToRgba(brandPrimary, DATASET_ALPHAS[i % DATASET_ALPHAS.length])
1373
+ )) != null ? _a : [];
1374
+ },
1375
+ [sliced, brandPrimary]
1376
+ );
1377
+ const chartData = (0, import_react6.useMemo)(() => {
1378
+ if (!sliced) return { labels: [], datasets: [] };
1379
+ return {
1380
+ labels: sliced.months,
1381
+ datasets: sliced.datasets.map((ds, i) => ({
1382
+ label: ds.label,
1383
+ data: ds.data,
1384
+ backgroundColor: datasetColors[i],
1385
+ hoverBackgroundColor: hexToRgba(
1386
+ brandPrimary,
1387
+ Math.min(DATASET_ALPHAS[i % DATASET_ALPHAS.length] + 0.15, 1)
1388
+ ),
1389
+ borderWidth: 0,
1390
+ borderRadius: 0,
1391
+ borderSkipped: false,
1392
+ barPercentage: 0.75,
1393
+ categoryPercentage: 0.7,
1394
+ stack: "income"
1395
+ }))
1396
+ };
1397
+ }, [sliced, datasetColors, brandPrimary]);
1398
+ const options = (0, import_react6.useMemo)(() => ({
1399
+ responsive: true,
1400
+ maintainAspectRatio: false,
1401
+ animation: { duration: 800, easing: "easeOutQuart" },
1402
+ layout: { padding: 0 },
1403
+ plugins: {
1404
+ legend: { display: false },
1405
+ tooltip: {
1406
+ mode: "index",
1407
+ intersect: false,
1408
+ padding: 12,
1409
+ cornerRadius: 0,
1410
+ titleFont: { size: 11, weight: "600" },
1411
+ bodyFont: { size: 12, weight: "500" },
1412
+ callbacks: {
1413
+ title: (tooltipItems) => {
1414
+ var _a, _b, _c, _d;
1415
+ const idx = (_a = tooltipItems[0]) == null ? void 0 : _a.dataIndex;
1416
+ if (idx != null && ((_b = sliced == null ? void 0 : sliced.dates) == null ? void 0 : _b[idx])) {
1417
+ return formatTooltipDate(sliced.dates[idx], granularity);
1418
+ }
1419
+ return (_d = (_c = tooltipItems[0]) == null ? void 0 : _c.label) != null ? _d : "";
1420
+ },
1421
+ label: (ctx) => {
1422
+ const val = ctx.raw;
1423
+ if (val === 0) return null;
1424
+ return ` ${ctx.dataset.label}: $${val.toLocaleString()}`;
1425
+ }
1426
+ }
1427
+ }
1428
+ },
1429
+ scales: {
1430
+ x: {
1431
+ display: showXAxis,
1432
+ stacked: true,
1433
+ grid: { display: false },
1434
+ border: { display: false },
1435
+ ticks: { font: { size: 10 }, color: FALLBACK_TICK }
1436
+ },
1437
+ y: {
1438
+ display: showYAxis,
1439
+ stacked: true,
1440
+ grid: { display: false },
1441
+ border: { display: false },
1442
+ ticks: {
1443
+ font: { size: 10 },
1444
+ color: FALLBACK_TICK,
1445
+ maxTicksLimit: 5,
1446
+ padding: 8,
1447
+ callback: (v) => `$${Number(v).toLocaleString()}`
1448
+ }
1449
+ }
522
1450
  }
523
- }
524
- );
525
- var Button = (0, import_react2.forwardRef)(function Button2(_a, ref) {
1451
+ }), [showXAxis, showYAxis, sliced, granularity]);
1452
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1453
+ Card,
1454
+ {
1455
+ className: cn("w-full py-4 sm:py-6 gap-2", className),
1456
+ style: { maxWidth: width },
1457
+ children: [
1458
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(CardHeader, { className: "px-3 sm:px-6", children: [
1459
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CardTitle, { className: "text-sm sm:text-base", children: title }),
1460
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CardAction, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex gap-0.5 sm:gap-1", children: periods.map((p) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1461
+ ChartPeriodButton,
1462
+ {
1463
+ period: p,
1464
+ active: period === p,
1465
+ onClick: () => setPeriod(p)
1466
+ },
1467
+ p
1468
+ )) }) })
1469
+ ] }),
1470
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CardContent, { className: "px-3 sm:px-6", children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Skeleton, { style: { height, width: "100%" } }) : !sliced ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Empty, { className: "flex-none p-4", style: { height }, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(EmptyDescription, { children: "No data available" }) }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex flex-col gap-2", children: [
1471
+ showLegend && legendPosition === "top" && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex flex-wrap gap-x-3 gap-y-1.5 pb-2", children: sliced.datasets.map((ds, i) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ChartLegendItem, { label: ds.label, color: datasetColors[i] }, ds.label)) }),
1472
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: { height, width: "100%", position: "relative" }, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1473
+ import_react_chartjs_24.Chart,
1474
+ {
1475
+ type: "bar",
1476
+ data: chartData,
1477
+ options,
1478
+ "aria-label": title
1479
+ },
1480
+ brandPrimary
1481
+ ) }),
1482
+ showLegend && legendPosition === "bottom" && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex flex-wrap gap-x-3 gap-y-1.5 pt-2", children: sliced.datasets.map((ds, i) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ChartLegendItem, { label: ds.label, color: datasetColors[i] }, ds.label)) })
1483
+ ] }) })
1484
+ ]
1485
+ }
1486
+ );
1487
+ }
1488
+
1489
+ // src/components/ui/accordion.tsx
1490
+ var import_lucide_react3 = require("lucide-react");
1491
+ var import_accordion = require("@base-ui/react/accordion");
1492
+ var import_jsx_runtime12 = require("react/jsx-runtime");
1493
+ function Accordion(props) {
1494
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_accordion.Accordion.Root, __spreadValues({ "data-slot": "accordion" }, props));
1495
+ }
1496
+ function AccordionItem(_a) {
1497
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1498
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1499
+ import_accordion.Accordion.Item,
1500
+ __spreadValues({
1501
+ className: cn("border-b", className),
1502
+ "data-slot": "accordion-item"
1503
+ }, props)
1504
+ );
1505
+ }
1506
+ function AccordionTrigger(_a) {
526
1507
  var _b = _a, {
527
1508
  className,
528
- variant,
529
- size,
530
- asChild = false,
531
- loading = false,
532
- disabled,
533
1509
  children
534
1510
  } = _b, props = __objRest(_b, [
535
1511
  "className",
536
- "variant",
537
- "size",
538
- "asChild",
539
- "loading",
540
- "disabled",
541
1512
  "children"
542
1513
  ]);
543
- const Comp = asChild ? Slot : "button";
544
- const isIconOnly = size === "icon" || size === "icon-xs" || size === "icon-sm" || size === "icon-lg";
545
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
546
- Comp,
1514
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_accordion.Accordion.Header, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1515
+ import_accordion.Accordion.Trigger,
547
1516
  __spreadProps(__spreadValues({
548
- className: cn(buttonVariants({ variant, size, className })),
549
- "data-size": size,
550
- "data-slot": "button",
551
- "data-variant": variant,
552
- disabled: loading || disabled,
553
- ref
1517
+ className: cn(
1518
+ // layout
1519
+ "flex flex-1 items-center justify-between gap-4 py-4 text-left",
1520
+ // typography
1521
+ "text-sm font-medium",
1522
+ // base
1523
+ "rounded-none outline-none transition-[color,opacity]",
1524
+ // interactive states
1525
+ "hover:underline",
1526
+ "focus-visible:ring-2 focus-visible:ring-foreground/30",
1527
+ "disabled:pointer-events-none disabled:opacity-50",
1528
+ // chevron rotation when open
1529
+ "[&[data-panel-open]>svg]:rotate-180",
1530
+ className
1531
+ ),
1532
+ "data-slot": "accordion-trigger"
554
1533
  }, props), {
555
- children: loading ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
556
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.Loader2, { "aria-hidden": "true", className: "animate-spin" }),
557
- !isIconOnly && children
558
- ] }) : children
1534
+ children: [
1535
+ children,
1536
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react3.ChevronDownIcon, { className: "pointer-events-none size-4 shrink-0 text-muted-foreground transition-transform duration-200" })
1537
+ ]
1538
+ })
1539
+ ) });
1540
+ }
1541
+ function AccordionContent(_a) {
1542
+ var _b = _a, {
1543
+ className,
1544
+ children
1545
+ } = _b, props = __objRest(_b, [
1546
+ "className",
1547
+ "children"
1548
+ ]);
1549
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1550
+ import_accordion.Accordion.Panel,
1551
+ __spreadProps(__spreadValues({
1552
+ className: "overflow-hidden text-sm h-(--accordion-panel-height) transition-[height] duration-200 ease-out data-starting-style:h-0 data-ending-style:h-0",
1553
+ "data-slot": "accordion-content"
1554
+ }, props), {
1555
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: cn("pb-4 text-muted-foreground", className), children })
559
1556
  })
560
1557
  );
561
- });
1558
+ }
562
1559
 
563
1560
  // src/components/ui/alert-dialog.tsx
564
- var import_jsx_runtime4 = require("react/jsx-runtime");
1561
+ var import_alert_dialog = require("@base-ui/react/alert-dialog");
1562
+ var import_jsx_runtime13 = require("react/jsx-runtime");
565
1563
  function AlertDialog(_a) {
566
1564
  var props = __objRest(_a, []);
567
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_alert_dialog.AlertDialog.Root, __spreadValues({ "data-slot": "alert-dialog" }, props));
1565
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_alert_dialog.AlertDialog.Root, __spreadValues({ "data-slot": "alert-dialog" }, props));
568
1566
  }
569
1567
  function AlertDialogTrigger(_a) {
570
1568
  var props = __objRest(_a, []);
571
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_alert_dialog.AlertDialog.Trigger, __spreadValues({ "data-slot": "alert-dialog-trigger" }, props));
1569
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_alert_dialog.AlertDialog.Trigger, __spreadValues({ "data-slot": "alert-dialog-trigger" }, props));
572
1570
  }
573
1571
  function AlertDialogPortal(_a) {
574
1572
  var props = __objRest(_a, []);
575
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_alert_dialog.AlertDialog.Portal, __spreadValues({ "data-slot": "alert-dialog-portal" }, props));
1573
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_alert_dialog.AlertDialog.Portal, __spreadValues({ "data-slot": "alert-dialog-portal" }, props));
576
1574
  }
577
1575
  function AlertDialogOverlay(_a) {
578
1576
  var _b = _a, {
@@ -580,7 +1578,7 @@ function AlertDialogOverlay(_a) {
580
1578
  } = _b, props = __objRest(_b, [
581
1579
  "className"
582
1580
  ]);
583
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1581
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
584
1582
  import_alert_dialog.AlertDialog.Backdrop,
585
1583
  __spreadValues({
586
1584
  className: cn(
@@ -603,9 +1601,9 @@ function AlertDialogContent(_a) {
603
1601
  "style"
604
1602
  ]);
605
1603
  const themeVars = useThemeVars();
606
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(AlertDialogPortal, { children: [
607
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(AlertDialogOverlay, {}),
608
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1604
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(AlertDialogPortal, { children: [
1605
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(AlertDialogOverlay, {}),
1606
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
609
1607
  import_alert_dialog.AlertDialog.Popup,
610
1608
  __spreadValues({
611
1609
  className: cn(
@@ -626,7 +1624,7 @@ function AlertDialogHeader(_a) {
626
1624
  } = _b, props = __objRest(_b, [
627
1625
  "className"
628
1626
  ]);
629
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1627
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
630
1628
  "div",
631
1629
  __spreadValues({
632
1630
  className: cn(
@@ -643,7 +1641,7 @@ function AlertDialogFooter(_a) {
643
1641
  } = _b, props = __objRest(_b, [
644
1642
  "className"
645
1643
  ]);
646
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1644
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
647
1645
  "div",
648
1646
  __spreadValues({
649
1647
  className: cn(
@@ -661,7 +1659,7 @@ function AlertDialogTitle(_a) {
661
1659
  } = _b, props = __objRest(_b, [
662
1660
  "className"
663
1661
  ]);
664
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1662
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
665
1663
  import_alert_dialog.AlertDialog.Title,
666
1664
  __spreadValues({
667
1665
  className: cn(
@@ -678,7 +1676,7 @@ function AlertDialogDescription(_a) {
678
1676
  } = _b, props = __objRest(_b, [
679
1677
  "className"
680
1678
  ]);
681
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1679
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
682
1680
  import_alert_dialog.AlertDialog.Description,
683
1681
  __spreadValues({
684
1682
  className: cn(
@@ -695,7 +1693,7 @@ function AlertDialogMedia(_a) {
695
1693
  } = _b, props = __objRest(_b, [
696
1694
  "className"
697
1695
  ]);
698
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1696
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
699
1697
  "div",
700
1698
  __spreadValues({
701
1699
  className: cn(
@@ -717,7 +1715,7 @@ function AlertDialogAction(_a) {
717
1715
  "variant",
718
1716
  "size"
719
1717
  ]);
720
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1718
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
721
1719
  import_alert_dialog.AlertDialog.Close,
722
1720
  __spreadValues({
723
1721
  className: cn(buttonVariants({ variant, size }), className),
@@ -735,7 +1733,7 @@ function AlertDialogCancel(_a) {
735
1733
  "variant",
736
1734
  "size"
737
1735
  ]);
738
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1736
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
739
1737
  import_alert_dialog.AlertDialog.Close,
740
1738
  __spreadValues({
741
1739
  className: cn(buttonVariants({ variant, size }), className),
@@ -745,9 +1743,9 @@ function AlertDialogCancel(_a) {
745
1743
  }
746
1744
 
747
1745
  // src/components/ui/alert.tsx
748
- var import_class_variance_authority2 = require("class-variance-authority");
749
- var import_jsx_runtime5 = require("react/jsx-runtime");
750
- var alertVariants = (0, import_class_variance_authority2.cva)(
1746
+ var import_class_variance_authority4 = require("class-variance-authority");
1747
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1748
+ var alertVariants = (0, import_class_variance_authority4.cva)(
751
1749
  "relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
752
1750
  {
753
1751
  variants: {
@@ -772,7 +1770,7 @@ function Alert(_a) {
772
1770
  "className",
773
1771
  "variant"
774
1772
  ]);
775
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1773
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
776
1774
  "div",
777
1775
  __spreadValues({
778
1776
  className: cn(alertVariants({ variant }), className),
@@ -783,7 +1781,7 @@ function Alert(_a) {
783
1781
  }
784
1782
  function AlertTitle(_a) {
785
1783
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
786
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1784
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
787
1785
  "div",
788
1786
  __spreadValues({
789
1787
  className: cn(
@@ -800,7 +1798,7 @@ function AlertDescription(_a) {
800
1798
  } = _b, props = __objRest(_b, [
801
1799
  "className"
802
1800
  ]);
803
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1801
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
804
1802
  "div",
805
1803
  __spreadValues({
806
1804
  className: cn(
@@ -814,7 +1812,7 @@ function AlertDescription(_a) {
814
1812
 
815
1813
  // src/components/ui/avatar.tsx
816
1814
  var import_avatar = require("@base-ui/react/avatar");
817
- var import_jsx_runtime6 = require("react/jsx-runtime");
1815
+ var import_jsx_runtime15 = require("react/jsx-runtime");
818
1816
  function Avatar(_a) {
819
1817
  var _b = _a, {
820
1818
  className,
@@ -823,7 +1821,7 @@ function Avatar(_a) {
823
1821
  "className",
824
1822
  "size"
825
1823
  ]);
826
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1824
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
827
1825
  import_avatar.Avatar.Root,
828
1826
  __spreadValues({
829
1827
  className: cn(
@@ -841,7 +1839,7 @@ function AvatarImage(_a) {
841
1839
  } = _b, props = __objRest(_b, [
842
1840
  "className"
843
1841
  ]);
844
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1842
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
845
1843
  import_avatar.Avatar.Image,
846
1844
  __spreadValues({
847
1845
  className: cn("aspect-square size-full rounded-full", className),
@@ -855,7 +1853,7 @@ function AvatarFallback(_a) {
855
1853
  } = _b, props = __objRest(_b, [
856
1854
  "className"
857
1855
  ]);
858
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1856
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
859
1857
  import_avatar.Avatar.Fallback,
860
1858
  __spreadValues({
861
1859
  className: cn(
@@ -868,7 +1866,7 @@ function AvatarFallback(_a) {
868
1866
  }
869
1867
  function AvatarBadge(_a) {
870
1868
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
871
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1869
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
872
1870
  "span",
873
1871
  __spreadValues({
874
1872
  className: cn(
@@ -884,7 +1882,7 @@ function AvatarBadge(_a) {
884
1882
  }
885
1883
  function AvatarGroup(_a) {
886
1884
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
887
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1885
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
888
1886
  "div",
889
1887
  __spreadValues({
890
1888
  className: cn(
@@ -901,7 +1899,7 @@ function AvatarGroupCount(_a) {
901
1899
  } = _b, props = __objRest(_b, [
902
1900
  "className"
903
1901
  ]);
904
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1902
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
905
1903
  "div",
906
1904
  __spreadValues({
907
1905
  className: cn(
@@ -914,9 +1912,9 @@ function AvatarGroupCount(_a) {
914
1912
  }
915
1913
 
916
1914
  // src/components/ui/badge.tsx
917
- var import_class_variance_authority3 = require("class-variance-authority");
918
- var import_jsx_runtime7 = require("react/jsx-runtime");
919
- var badgeVariants = (0, import_class_variance_authority3.cva)(
1915
+ var import_class_variance_authority5 = require("class-variance-authority");
1916
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1917
+ var badgeVariants = (0, import_class_variance_authority5.cva)(
920
1918
  "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium font-sans whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
921
1919
  {
922
1920
  variants: {
@@ -945,7 +1943,7 @@ function Badge(_a) {
945
1943
  "asChild"
946
1944
  ]);
947
1945
  const Comp = asChild ? Slot : "span";
948
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1946
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
949
1947
  Comp,
950
1948
  __spreadValues({
951
1949
  className: cn(badgeVariants({ variant }), className),
@@ -956,10 +1954,10 @@ function Badge(_a) {
956
1954
  }
957
1955
 
958
1956
  // src/components/ui/calendar.tsx
959
- var React3 = __toESM(require("react"));
960
- var import_lucide_react3 = require("lucide-react");
1957
+ var React7 = __toESM(require("react"));
1958
+ var import_lucide_react4 = require("lucide-react");
961
1959
  var import_react_day_picker = require("react-day-picker");
962
- var import_jsx_runtime8 = require("react/jsx-runtime");
1960
+ var import_jsx_runtime17 = require("react/jsx-runtime");
963
1961
  function CalendarRoot(_a) {
964
1962
  var _b = _a, {
965
1963
  className,
@@ -968,7 +1966,7 @@ function CalendarRoot(_a) {
968
1966
  "className",
969
1967
  "rootRef"
970
1968
  ]);
971
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1969
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
972
1970
  "div",
973
1971
  __spreadValues({
974
1972
  className: cn(className),
@@ -986,17 +1984,17 @@ function CalendarChevron(_a) {
986
1984
  "orientation"
987
1985
  ]);
988
1986
  if (orientation === "left") {
989
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react3.ChevronLeftIcon, __spreadValues({ className: cn("size-4", className) }, props));
1987
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.ChevronLeftIcon, __spreadValues({ className: cn("size-4", className) }, props));
990
1988
  }
991
1989
  if (orientation === "right") {
992
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
993
- import_lucide_react3.ChevronRightIcon,
1990
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1991
+ import_lucide_react4.ChevronRightIcon,
994
1992
  __spreadValues({
995
1993
  className: cn("size-4", className)
996
1994
  }, props)
997
1995
  );
998
1996
  }
999
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react3.ChevronDownIcon, __spreadValues({ className: cn("size-4", className) }, props));
1997
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.ChevronDownIcon, __spreadValues({ className: cn("size-4", className) }, props));
1000
1998
  }
1001
1999
  function CalendarWeekNumber(_a) {
1002
2000
  var _b = _a, {
@@ -1004,7 +2002,7 @@ function CalendarWeekNumber(_a) {
1004
2002
  } = _b, props = __objRest(_b, [
1005
2003
  "children"
1006
2004
  ]);
1007
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("td", __spreadProps(__spreadValues({}, props), { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) }));
2005
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("td", __spreadProps(__spreadValues({}, props), { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) }));
1008
2006
  }
1009
2007
  function Calendar(_a) {
1010
2008
  var _b = _a, {
@@ -1025,7 +2023,7 @@ function Calendar(_a) {
1025
2023
  "components"
1026
2024
  ]);
1027
2025
  const defaultClassNames = (0, import_react_day_picker.getDefaultClassNames)();
1028
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2026
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1029
2027
  import_react_day_picker.DayPicker,
1030
2028
  __spreadValues({
1031
2029
  captionLayout,
@@ -1134,125 +2132,43 @@ function CalendarDayButton(_a) {
1134
2132
  } = _b, props = __objRest(_b, [
1135
2133
  "className",
1136
2134
  "day",
1137
- "modifiers"
1138
- ]);
1139
- const defaultClassNames = (0, import_react_day_picker.getDefaultClassNames)();
1140
- const ref = React3.useRef(null);
1141
- React3.useEffect(() => {
1142
- var _a2;
1143
- if (modifiers.focused) (_a2 = ref.current) == null ? void 0 : _a2.focus();
1144
- }, [modifiers.focused]);
1145
- const selectedSingle = modifiers.selected && !modifiers.range_start && !modifiers.range_end ? !modifiers.range_middle : null;
1146
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1147
- Button,
1148
- __spreadValues({
1149
- className: cn(
1150
- "flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal rounded-none group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-accent-foreground [&>span]:text-xs [&>span]:opacity-70",
1151
- defaultClassNames.day,
1152
- className
1153
- ),
1154
- "data-day": day.date.toLocaleDateString(),
1155
- "data-range-end": modifiers.range_end,
1156
- "data-range-middle": modifiers.range_middle,
1157
- "data-range-start": modifiers.range_start,
1158
- "data-selected-single": selectedSingle,
1159
- ref,
1160
- size: "icon",
1161
- variant: "ghost"
1162
- }, props)
1163
- );
1164
- }
1165
-
1166
- // src/components/ui/card.tsx
1167
- var import_jsx_runtime9 = require("react/jsx-runtime");
1168
- function Card(_a) {
1169
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1170
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1171
- "div",
1172
- __spreadValues({
1173
- className: cn(
1174
- "flex flex-col gap-6 border bg-card py-6 text-card-foreground shadow-sm",
1175
- className
1176
- ),
1177
- "data-slot": "card"
1178
- }, props)
1179
- );
1180
- }
1181
- function CardHeader(_a) {
1182
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1183
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1184
- "div",
1185
- __spreadValues({
1186
- className: cn(
1187
- "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
1188
- className
1189
- ),
1190
- "data-slot": "card-header"
1191
- }, props)
1192
- );
1193
- }
1194
- function CardTitle(_a) {
1195
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1196
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1197
- "div",
1198
- __spreadValues({
1199
- className: cn("leading-none font-semibold", className),
1200
- "data-slot": "card-title"
1201
- }, props)
1202
- );
1203
- }
1204
- function CardDescription(_a) {
1205
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1206
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1207
- "div",
1208
- __spreadValues({
1209
- className: cn("text-sm text-muted-foreground", className),
1210
- "data-slot": "card-description"
1211
- }, props)
1212
- );
1213
- }
1214
- function CardAction(_a) {
1215
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1216
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1217
- "div",
1218
- __spreadValues({
1219
- className: cn(
1220
- "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
1221
- className
1222
- ),
1223
- "data-slot": "card-action"
1224
- }, props)
1225
- );
1226
- }
1227
- function CardContent(_a) {
1228
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1229
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1230
- "div",
1231
- __spreadValues({
1232
- className: cn("px-6", className),
1233
- "data-slot": "card-content"
1234
- }, props)
1235
- );
1236
- }
1237
- function CardFooter(_a) {
1238
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1239
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1240
- "div",
2135
+ "modifiers"
2136
+ ]);
2137
+ const defaultClassNames = (0, import_react_day_picker.getDefaultClassNames)();
2138
+ const ref = React7.useRef(null);
2139
+ React7.useEffect(() => {
2140
+ var _a2;
2141
+ if (modifiers.focused) (_a2 = ref.current) == null ? void 0 : _a2.focus();
2142
+ }, [modifiers.focused]);
2143
+ const selectedSingle = modifiers.selected && !modifiers.range_start && !modifiers.range_end ? !modifiers.range_middle : null;
2144
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2145
+ Button,
1241
2146
  __spreadValues({
1242
- className: cn("flex items-center px-6 [.border-t]:pt-6", className),
1243
- "data-slot": "card-footer"
2147
+ className: cn(
2148
+ "flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal rounded-none group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-accent-foreground [&>span]:text-xs [&>span]:opacity-70",
2149
+ defaultClassNames.day,
2150
+ className
2151
+ ),
2152
+ "data-day": day.date.toLocaleDateString(),
2153
+ "data-range-end": modifiers.range_end,
2154
+ "data-range-middle": modifiers.range_middle,
2155
+ "data-range-start": modifiers.range_start,
2156
+ "data-selected-single": selectedSingle,
2157
+ ref,
2158
+ size: "icon",
2159
+ variant: "ghost"
1244
2160
  }, props)
1245
2161
  );
1246
2162
  }
1247
2163
 
1248
2164
  // src/components/ui/checkbox.tsx
1249
- var import_react3 = require("react");
1250
- var import_lucide_react4 = require("lucide-react");
2165
+ var import_react7 = require("react");
2166
+ var import_lucide_react5 = require("lucide-react");
1251
2167
  var import_checkbox = require("@base-ui/react/checkbox");
1252
- var import_jsx_runtime10 = require("react/jsx-runtime");
2168
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1253
2169
  function Checkbox(_a) {
1254
2170
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1255
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2171
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1256
2172
  import_checkbox.Checkbox.Root,
1257
2173
  __spreadProps(__spreadValues({
1258
2174
  className: cn(
@@ -1271,14 +2187,14 @@ function Checkbox(_a) {
1271
2187
  ),
1272
2188
  "data-slot": "checkbox"
1273
2189
  }, props), {
1274
- children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
2190
+ children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1275
2191
  import_checkbox.Checkbox.Indicator,
1276
2192
  {
1277
2193
  className: "grid place-content-center text-current transition-none",
1278
2194
  "data-slot": "checkbox-indicator",
1279
2195
  children: [
1280
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react4.CheckIcon, { className: "size-3.5 group-data-indeterminate:hidden" }),
1281
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react4.MinusIcon, { className: "size-3.5 hidden group-data-indeterminate:block" })
2196
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.CheckIcon, { className: "size-3.5 group-data-indeterminate:hidden" }),
2197
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.MinusIcon, { className: "size-3.5 hidden group-data-indeterminate:block" })
1282
2198
  ]
1283
2199
  }
1284
2200
  )
@@ -1305,12 +2221,12 @@ function CheckboxCard(_a) {
1305
2221
  "label",
1306
2222
  "description"
1307
2223
  ]);
1308
- const [internalChecked, setInternalChecked] = (0, import_react3.useState)(
2224
+ const [internalChecked, setInternalChecked] = (0, import_react7.useState)(
1309
2225
  Boolean(defaultChecked)
1310
2226
  );
1311
2227
  const resolvedChecked = checked != null ? checked : internalChecked;
1312
2228
  const isTinted = resolvedChecked;
1313
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
2229
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1314
2230
  "label",
1315
2231
  {
1316
2232
  className: cn(
@@ -1321,7 +2237,7 @@ function CheckboxCard(_a) {
1321
2237
  ),
1322
2238
  "data-slot": "checkbox-card",
1323
2239
  children: [
1324
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2240
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1325
2241
  Checkbox,
1326
2242
  __spreadValues({
1327
2243
  "aria-invalid": error || void 0,
@@ -1334,9 +2250,9 @@ function CheckboxCard(_a) {
1334
2250
  }
1335
2251
  }, props)
1336
2252
  ),
1337
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col gap-1", children: [
1338
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-sm font-medium leading-none", children: label }),
1339
- description ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-sm text-muted-foreground", children: description }) : null
2253
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex flex-col gap-1", children: [
2254
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-sm font-medium leading-none", children: label }),
2255
+ description ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-sm text-muted-foreground", children: description }) : null
1340
2256
  ] })
1341
2257
  ]
1342
2258
  }
@@ -1344,8 +2260,8 @@ function CheckboxCard(_a) {
1344
2260
  }
1345
2261
 
1346
2262
  // src/components/ui/chip.tsx
1347
- var import_lucide_react5 = require("lucide-react");
1348
- var import_jsx_runtime11 = require("react/jsx-runtime");
2263
+ var import_lucide_react6 = require("lucide-react");
2264
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1349
2265
  function Chip(_a) {
1350
2266
  var _b = _a, {
1351
2267
  className,
@@ -1360,7 +2276,7 @@ function Chip(_a) {
1360
2276
  "disabled",
1361
2277
  "children"
1362
2278
  ]);
1363
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
2279
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1364
2280
  "span",
1365
2281
  __spreadProps(__spreadValues({
1366
2282
  "aria-disabled": disabled,
@@ -1376,7 +2292,7 @@ function Chip(_a) {
1376
2292
  }, props), {
1377
2293
  children: [
1378
2294
  children,
1379
- onRemove ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
2295
+ onRemove ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1380
2296
  "button",
1381
2297
  {
1382
2298
  "aria-label": "Remove",
@@ -1388,7 +2304,7 @@ function Chip(_a) {
1388
2304
  onRemove();
1389
2305
  },
1390
2306
  type: "button",
1391
- children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react5.X, { className: "size-3" })
2307
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react6.X, { className: "size-3" })
1392
2308
  }
1393
2309
  ) : null
1394
2310
  ]
@@ -1396,21 +2312,197 @@ function Chip(_a) {
1396
2312
  );
1397
2313
  }
1398
2314
 
2315
+ // src/components/ui/combobox.tsx
2316
+ var import_lucide_react7 = require("lucide-react");
2317
+ var import_combobox = require("@base-ui/react/combobox");
2318
+ var import_jsx_runtime20 = require("react/jsx-runtime");
2319
+ function Combobox(_a) {
2320
+ var props = __objRest(_a, []);
2321
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_combobox.Combobox.Root, __spreadValues({ "data-slot": "combobox" }, props));
2322
+ }
2323
+ function ComboboxTrigger(_a) {
2324
+ var _b = _a, {
2325
+ className,
2326
+ size = "default",
2327
+ children
2328
+ } = _b, props = __objRest(_b, [
2329
+ "className",
2330
+ "size",
2331
+ "children"
2332
+ ]);
2333
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
2334
+ import_combobox.Combobox.Trigger,
2335
+ __spreadProps(__spreadValues({
2336
+ "data-slot": "combobox-trigger",
2337
+ "data-size": size,
2338
+ className: cn(
2339
+ "flex w-fit items-center justify-between gap-2 border border-input bg-transparent px-3 py-2 text-body-small whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/20 data-[popup-open]:border-primary data-[popup-open]:ring-[3px] data-[popup-open]:ring-primary/20 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=combobox-value]:line-clamp-1 *:data-[slot=combobox-value]:flex *:data-[slot=combobox-value]:items-center *:data-[slot=combobox-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
2340
+ className
2341
+ )
2342
+ }, props), {
2343
+ children: [
2344
+ children,
2345
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_combobox.Combobox.Icon, { className: "transition-transform duration-200 data-[popup-open]:rotate-180", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react7.ChevronDownIcon, { className: "size-4 opacity-50" }) })
2346
+ ]
2347
+ })
2348
+ );
2349
+ }
2350
+ function ComboboxValue(_a) {
2351
+ var props = __objRest(_a, []);
2352
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_combobox.Combobox.Value, __spreadValues({ "data-slot": "combobox-value" }, props));
2353
+ }
2354
+ function ComboboxInput(_a) {
2355
+ var _b = _a, {
2356
+ className
2357
+ } = _b, props = __objRest(_b, [
2358
+ "className"
2359
+ ]);
2360
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { "data-slot": "combobox-input-wrapper", className: "flex items-center gap-2 border-b border-border px-3", children: [
2361
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react7.SearchIcon, { className: "size-4 shrink-0 text-muted-foreground" }),
2362
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2363
+ import_combobox.Combobox.Input,
2364
+ __spreadValues({
2365
+ "data-slot": "combobox-input",
2366
+ className: cn(
2367
+ "h-9 w-full min-w-0 bg-transparent py-1 text-body-small outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
2368
+ className
2369
+ )
2370
+ }, props)
2371
+ )
2372
+ ] });
2373
+ }
2374
+ function ComboboxContent(_a) {
2375
+ var _b = _a, {
2376
+ className,
2377
+ children
2378
+ } = _b, props = __objRest(_b, [
2379
+ "className",
2380
+ "children"
2381
+ ]);
2382
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_combobox.Combobox.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_combobox.Combobox.Positioner, { sideOffset: 4, align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2383
+ import_combobox.Combobox.Popup,
2384
+ __spreadProps(__spreadValues({
2385
+ "data-slot": "combobox-content",
2386
+ className: cn(
2387
+ "relative z-50 max-h-[var(--available-height)] min-w-[8rem] overflow-hidden border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[ending-style]:animate-out data-[ending-style]:fade-out-0 data-[ending-style]:zoom-out-95 data-[open]:animate-in data-[open]:fade-in-0 data-[open]:zoom-in-95",
2388
+ className
2389
+ )
2390
+ }, props), {
2391
+ children
2392
+ })
2393
+ ) }) });
2394
+ }
2395
+ function ComboboxList(_a) {
2396
+ var _b = _a, {
2397
+ className
2398
+ } = _b, props = __objRest(_b, [
2399
+ "className"
2400
+ ]);
2401
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2402
+ import_combobox.Combobox.List,
2403
+ __spreadValues({
2404
+ "data-slot": "combobox-list",
2405
+ className: cn(
2406
+ "max-h-[min(var(--available-height),18rem)] overflow-y-auto p-1",
2407
+ className
2408
+ )
2409
+ }, props)
2410
+ );
2411
+ }
2412
+ function ComboboxItem(_a) {
2413
+ var _b = _a, {
2414
+ className,
2415
+ children
2416
+ } = _b, props = __objRest(_b, [
2417
+ "className",
2418
+ "children"
2419
+ ]);
2420
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
2421
+ import_combobox.Combobox.Item,
2422
+ __spreadProps(__spreadValues({
2423
+ "data-slot": "combobox-item",
2424
+ className: cn(
2425
+ "relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-body-small outline-hidden select-none data-[highlighted]:bg-primary/5 data-[highlighted]:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
2426
+ className
2427
+ )
2428
+ }, props), {
2429
+ children: [
2430
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2431
+ "span",
2432
+ {
2433
+ "data-slot": "combobox-item-indicator",
2434
+ className: "absolute right-2 flex size-3.5 items-center justify-center",
2435
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_combobox.Combobox.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react7.CheckIcon, { className: "size-4" }) })
2436
+ }
2437
+ ),
2438
+ children
2439
+ ]
2440
+ })
2441
+ );
2442
+ }
2443
+ function ComboboxEmpty(_a) {
2444
+ var _b = _a, {
2445
+ className
2446
+ } = _b, props = __objRest(_b, [
2447
+ "className"
2448
+ ]);
2449
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2450
+ import_combobox.Combobox.Empty,
2451
+ __spreadValues({
2452
+ "data-slot": "combobox-empty",
2453
+ className: `text-body-small ${cn("py-6 text-center text-muted-foreground empty:hidden", className)}`
2454
+ }, props)
2455
+ );
2456
+ }
2457
+ function ComboboxGroup(_a) {
2458
+ var props = __objRest(_a, []);
2459
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_combobox.Combobox.Group, __spreadValues({ "data-slot": "combobox-group" }, props));
2460
+ }
2461
+ function ComboboxGroupLabel(_a) {
2462
+ var _b = _a, {
2463
+ className
2464
+ } = _b, props = __objRest(_b, [
2465
+ "className"
2466
+ ]);
2467
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2468
+ import_combobox.Combobox.GroupLabel,
2469
+ __spreadValues({
2470
+ "data-slot": "combobox-group-label",
2471
+ className: `text-label-small ${cn("px-2 py-1.5 uppercase text-muted-foreground", className)}`
2472
+ }, props)
2473
+ );
2474
+ }
2475
+ function ComboboxSeparator(_a) {
2476
+ var _b = _a, {
2477
+ className
2478
+ } = _b, props = __objRest(_b, [
2479
+ "className"
2480
+ ]);
2481
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2482
+ "div",
2483
+ __spreadValues({
2484
+ role: "separator",
2485
+ "data-slot": "combobox-separator",
2486
+ className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className)
2487
+ }, props)
2488
+ );
2489
+ }
2490
+
1399
2491
  // src/components/ui/data-table.tsx
1400
- var React4 = __toESM(require("react"));
2492
+ var React8 = __toESM(require("react"));
1401
2493
  var import_react_table = require("@tanstack/react-table");
1402
- var import_lucide_react8 = require("lucide-react");
2494
+ var import_lucide_react10 = require("lucide-react");
1403
2495
 
1404
2496
  // src/components/ui/table.tsx
1405
- var import_jsx_runtime12 = require("react/jsx-runtime");
2497
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1406
2498
  function Table(_a) {
1407
2499
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1408
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2500
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1409
2501
  "div",
1410
2502
  {
1411
2503
  className: "relative w-full overflow-x-auto",
1412
2504
  "data-slot": "table-container",
1413
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2505
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1414
2506
  "table",
1415
2507
  __spreadValues({
1416
2508
  className: cn("w-full caption-bottom text-sm", className),
@@ -1422,7 +2514,7 @@ function Table(_a) {
1422
2514
  }
1423
2515
  function TableHeader(_a) {
1424
2516
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1425
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2517
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1426
2518
  "thead",
1427
2519
  __spreadValues({
1428
2520
  className: cn("[&_tr]:border-b", className),
@@ -1432,7 +2524,7 @@ function TableHeader(_a) {
1432
2524
  }
1433
2525
  function TableBody(_a) {
1434
2526
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1435
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2527
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1436
2528
  "tbody",
1437
2529
  __spreadValues({
1438
2530
  className: cn("[&_tr:last-child]:border-0", className),
@@ -1442,7 +2534,7 @@ function TableBody(_a) {
1442
2534
  }
1443
2535
  function TableFooter(_a) {
1444
2536
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1445
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2537
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1446
2538
  "tfoot",
1447
2539
  __spreadValues({
1448
2540
  className: cn(
@@ -1455,7 +2547,7 @@ function TableFooter(_a) {
1455
2547
  }
1456
2548
  function TableRow(_a) {
1457
2549
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1458
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2550
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1459
2551
  "tr",
1460
2552
  __spreadValues({
1461
2553
  className: cn(
@@ -1468,7 +2560,7 @@ function TableRow(_a) {
1468
2560
  }
1469
2561
  function TableHead(_a) {
1470
2562
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1471
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2563
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1472
2564
  "th",
1473
2565
  __spreadValues({
1474
2566
  className: cn(
@@ -1482,7 +2574,7 @@ function TableHead(_a) {
1482
2574
  }
1483
2575
  function TableCell(_a) {
1484
2576
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1485
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2577
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1486
2578
  "td",
1487
2579
  __spreadValues({
1488
2580
  className: cn(
@@ -1500,7 +2592,7 @@ function TableCaption(_a) {
1500
2592
  } = _b, props = __objRest(_b, [
1501
2593
  "className"
1502
2594
  ]);
1503
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2595
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1504
2596
  "caption",
1505
2597
  __spreadValues({
1506
2598
  className: cn("mt-4 text-sm text-muted-foreground", className),
@@ -1510,10 +2602,10 @@ function TableCaption(_a) {
1510
2602
  }
1511
2603
 
1512
2604
  // src/components/ui/input.tsx
1513
- var import_jsx_runtime13 = require("react/jsx-runtime");
2605
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1514
2606
  function Input(_a) {
1515
2607
  var _b = _a, { className, type } = _b, props = __objRest(_b, ["className", "type"]);
1516
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2608
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1517
2609
  "input",
1518
2610
  __spreadValues({
1519
2611
  className: cn(
@@ -1529,20 +2621,20 @@ function Input(_a) {
1529
2621
  }
1530
2622
 
1531
2623
  // src/components/ui/select.tsx
1532
- var import_lucide_react6 = require("lucide-react");
2624
+ var import_lucide_react8 = require("lucide-react");
1533
2625
  var import_select = require("@base-ui/react/select");
1534
- var import_jsx_runtime14 = require("react/jsx-runtime");
2626
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1535
2627
  function Select(_a) {
1536
2628
  var props = __objRest(_a, []);
1537
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_select.Select.Root, __spreadValues({ "data-slot": "select" }, props));
2629
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_select.Select.Root, __spreadValues({ "data-slot": "select" }, props));
1538
2630
  }
1539
2631
  function SelectGroup(_a) {
1540
2632
  var props = __objRest(_a, []);
1541
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_select.Select.Group, __spreadValues({ "data-slot": "select-group" }, props));
2633
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_select.Select.Group, __spreadValues({ "data-slot": "select-group" }, props));
1542
2634
  }
1543
2635
  function SelectValue(_a) {
1544
2636
  var props = __objRest(_a, []);
1545
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_select.Select.Value, __spreadValues({ "data-slot": "select-value" }, props));
2637
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_select.Select.Value, __spreadValues({ "data-slot": "select-value" }, props));
1546
2638
  }
1547
2639
  function SelectTrigger(_a) {
1548
2640
  var _b = _a, {
@@ -1554,7 +2646,7 @@ function SelectTrigger(_a) {
1554
2646
  "size",
1555
2647
  "children"
1556
2648
  ]);
1557
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
2649
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1558
2650
  import_select.Select.Trigger,
1559
2651
  __spreadProps(__spreadValues({
1560
2652
  className: cn(
@@ -1566,7 +2658,7 @@ function SelectTrigger(_a) {
1566
2658
  }, props), {
1567
2659
  children: [
1568
2660
  children,
1569
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_select.Select.Icon, { className: "transition-transform duration-200 data-popup-open:rotate-180", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react6.ChevronDownIcon, { className: "size-4 opacity-50" }) })
2661
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_select.Select.Icon, { className: "transition-transform duration-200 data-popup-open:rotate-180", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.ChevronDownIcon, { className: "size-4 opacity-50" }) })
1570
2662
  ]
1571
2663
  })
1572
2664
  );
@@ -1582,7 +2674,7 @@ function SelectContent(_a) {
1582
2674
  "style"
1583
2675
  ]);
1584
2676
  const themeVars = useThemeVars();
1585
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_select.Select.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_select.Select.Positioner, { align: "start", alignItemWithTrigger: false, sideOffset: 4, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
2677
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_select.Select.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_select.Select.Positioner, { align: "start", alignItemWithTrigger: false, sideOffset: 4, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1586
2678
  import_select.Select.Popup,
1587
2679
  __spreadProps(__spreadValues({
1588
2680
  className: cn(
@@ -1593,9 +2685,9 @@ function SelectContent(_a) {
1593
2685
  style: __spreadValues(__spreadValues({}, themeVars), style2)
1594
2686
  }, props), {
1595
2687
  children: [
1596
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SelectScrollUpButton, {}),
2688
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SelectScrollUpButton, {}),
1597
2689
  children,
1598
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SelectScrollDownButton, {})
2690
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SelectScrollDownButton, {})
1599
2691
  ]
1600
2692
  })
1601
2693
  ) }) });
@@ -1606,7 +2698,7 @@ function SelectLabel(_a) {
1606
2698
  } = _b, props = __objRest(_b, [
1607
2699
  "className"
1608
2700
  ]);
1609
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2701
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1610
2702
  import_select.Select.GroupLabel,
1611
2703
  __spreadValues({
1612
2704
  className: cn("px-2 py-1.5 text-xs font-semibold text-muted-foreground", className),
@@ -1622,7 +2714,7 @@ function SelectItem(_a) {
1622
2714
  "className",
1623
2715
  "children"
1624
2716
  ]);
1625
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
2717
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1626
2718
  import_select.Select.Item,
1627
2719
  __spreadProps(__spreadValues({
1628
2720
  className: cn(
@@ -1632,15 +2724,15 @@ function SelectItem(_a) {
1632
2724
  "data-slot": "select-item"
1633
2725
  }, props), {
1634
2726
  children: [
1635
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2727
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1636
2728
  "span",
1637
2729
  {
1638
2730
  className: "absolute right-2 flex size-3.5 items-center justify-center",
1639
2731
  "data-slot": "select-item-indicator",
1640
- children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_select.Select.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react6.CheckIcon, { className: "size-4" }) })
2732
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_select.Select.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.CheckIcon, { className: "size-4" }) })
1641
2733
  }
1642
2734
  ),
1643
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_select.Select.ItemText, { children })
2735
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_select.Select.ItemText, { children })
1644
2736
  ]
1645
2737
  })
1646
2738
  );
@@ -1651,7 +2743,7 @@ function SelectSeparator(_a) {
1651
2743
  } = _b, props = __objRest(_b, [
1652
2744
  "className"
1653
2745
  ]);
1654
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2746
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1655
2747
  "div",
1656
2748
  __spreadValues({
1657
2749
  className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
@@ -1666,7 +2758,7 @@ function SelectScrollUpButton(_a) {
1666
2758
  } = _b, props = __objRest(_b, [
1667
2759
  "className"
1668
2760
  ]);
1669
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2761
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1670
2762
  import_select.Select.ScrollUpArrow,
1671
2763
  __spreadProps(__spreadValues({
1672
2764
  className: cn(
@@ -1675,7 +2767,7 @@ function SelectScrollUpButton(_a) {
1675
2767
  ),
1676
2768
  "data-slot": "select-scroll-up-button"
1677
2769
  }, props), {
1678
- children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react6.ChevronUpIcon, { className: "size-4" })
2770
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.ChevronUpIcon, { className: "size-4" })
1679
2771
  })
1680
2772
  );
1681
2773
  }
@@ -1685,7 +2777,7 @@ function SelectScrollDownButton(_a) {
1685
2777
  } = _b, props = __objRest(_b, [
1686
2778
  "className"
1687
2779
  ]);
1688
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2780
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1689
2781
  import_select.Select.ScrollDownArrow,
1690
2782
  __spreadProps(__spreadValues({
1691
2783
  className: cn(
@@ -1694,26 +2786,26 @@ function SelectScrollDownButton(_a) {
1694
2786
  ),
1695
2787
  "data-slot": "select-scroll-down-button"
1696
2788
  }, props), {
1697
- children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react6.ChevronDownIcon, { className: "size-4" })
2789
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.ChevronDownIcon, { className: "size-4" })
1698
2790
  })
1699
2791
  );
1700
2792
  }
1701
2793
 
1702
2794
  // src/components/ui/dropdown-menu.tsx
1703
- var import_lucide_react7 = require("lucide-react");
2795
+ var import_lucide_react9 = require("lucide-react");
1704
2796
  var import_menu = require("@base-ui/react/menu");
1705
- var import_jsx_runtime15 = require("react/jsx-runtime");
2797
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1706
2798
  function DropdownMenu(_a) {
1707
2799
  var props = __objRest(_a, []);
1708
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_menu.Menu.Root, __spreadValues({ "data-slot": "dropdown-menu" }, props));
2800
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_menu.Menu.Root, __spreadValues({ "data-slot": "dropdown-menu" }, props));
1709
2801
  }
1710
2802
  function DropdownMenuPortal(_a) {
1711
2803
  var props = __objRest(_a, []);
1712
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_menu.Menu.Portal, __spreadValues({ "data-slot": "dropdown-menu-portal" }, props));
2804
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_menu.Menu.Portal, __spreadValues({ "data-slot": "dropdown-menu-portal" }, props));
1713
2805
  }
1714
2806
  function DropdownMenuTrigger(_a) {
1715
2807
  var props = __objRest(_a, []);
1716
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2808
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1717
2809
  import_menu.Menu.Trigger,
1718
2810
  __spreadValues({
1719
2811
  "data-slot": "dropdown-menu-trigger"
@@ -1731,7 +2823,7 @@ function DropdownMenuContent(_a) {
1731
2823
  "style"
1732
2824
  ]);
1733
2825
  const themeVars = useThemeVars();
1734
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_menu.Menu.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_menu.Menu.Positioner, { sideOffset, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2826
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_menu.Menu.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_menu.Menu.Positioner, { sideOffset, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1735
2827
  import_menu.Menu.Popup,
1736
2828
  __spreadValues({
1737
2829
  className: cn(
@@ -1745,7 +2837,7 @@ function DropdownMenuContent(_a) {
1745
2837
  }
1746
2838
  function DropdownMenuGroup(_a) {
1747
2839
  var props = __objRest(_a, []);
1748
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_menu.Menu.Group, __spreadValues({ "data-slot": "dropdown-menu-group" }, props));
2840
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_menu.Menu.Group, __spreadValues({ "data-slot": "dropdown-menu-group" }, props));
1749
2841
  }
1750
2842
  function DropdownMenuItem(_a) {
1751
2843
  var _b = _a, {
@@ -1757,7 +2849,7 @@ function DropdownMenuItem(_a) {
1757
2849
  "inset",
1758
2850
  "variant"
1759
2851
  ]);
1760
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2852
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1761
2853
  import_menu.Menu.Item,
1762
2854
  __spreadValues({
1763
2855
  className: cn(
@@ -1780,7 +2872,7 @@ function DropdownMenuCheckboxItem(_a) {
1780
2872
  "children",
1781
2873
  "checked"
1782
2874
  ]);
1783
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
2875
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1784
2876
  import_menu.Menu.CheckboxItem,
1785
2877
  __spreadProps(__spreadValues({
1786
2878
  checked,
@@ -1791,7 +2883,7 @@ function DropdownMenuCheckboxItem(_a) {
1791
2883
  "data-slot": "dropdown-menu-checkbox-item"
1792
2884
  }, props), {
1793
2885
  children: [
1794
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_menu.Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react7.CheckIcon, { className: "size-4" }) }) }),
2886
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_menu.Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react9.CheckIcon, { className: "size-4" }) }) }),
1795
2887
  children
1796
2888
  ]
1797
2889
  })
@@ -1799,7 +2891,7 @@ function DropdownMenuCheckboxItem(_a) {
1799
2891
  }
1800
2892
  function DropdownMenuRadioGroup(_a) {
1801
2893
  var props = __objRest(_a, []);
1802
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2894
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1803
2895
  import_menu.Menu.RadioGroup,
1804
2896
  __spreadValues({
1805
2897
  "data-slot": "dropdown-menu-radio-group"
@@ -1814,7 +2906,7 @@ function DropdownMenuRadioItem(_a) {
1814
2906
  "className",
1815
2907
  "children"
1816
2908
  ]);
1817
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
2909
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1818
2910
  import_menu.Menu.RadioItem,
1819
2911
  __spreadProps(__spreadValues({
1820
2912
  className: cn(
@@ -1824,7 +2916,7 @@ function DropdownMenuRadioItem(_a) {
1824
2916
  "data-slot": "dropdown-menu-radio-item"
1825
2917
  }, props), {
1826
2918
  children: [
1827
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_menu.Menu.RadioItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react7.CircleIcon, { className: "size-2 fill-current" }) }) }),
2919
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_menu.Menu.RadioItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react9.CircleIcon, { className: "size-2 fill-current" }) }) }),
1828
2920
  children
1829
2921
  ]
1830
2922
  })
@@ -1838,7 +2930,7 @@ function DropdownMenuLabel(_a) {
1838
2930
  "className",
1839
2931
  "inset"
1840
2932
  ]);
1841
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2933
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1842
2934
  import_menu.Menu.GroupLabel,
1843
2935
  __spreadValues({
1844
2936
  className: cn(
@@ -1856,7 +2948,7 @@ function DropdownMenuSeparator(_a) {
1856
2948
  } = _b, props = __objRest(_b, [
1857
2949
  "className"
1858
2950
  ]);
1859
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2951
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1860
2952
  import_menu.Menu.Separator,
1861
2953
  __spreadValues({
1862
2954
  className: cn("-mx-1 my-1 h-px bg-border", className),
@@ -1870,7 +2962,7 @@ function DropdownMenuShortcut(_a) {
1870
2962
  } = _b, props = __objRest(_b, [
1871
2963
  "className"
1872
2964
  ]);
1873
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2965
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1874
2966
  "span",
1875
2967
  __spreadValues({
1876
2968
  className: cn(
@@ -1883,7 +2975,7 @@ function DropdownMenuShortcut(_a) {
1883
2975
  }
1884
2976
  function DropdownMenuSub(_a) {
1885
2977
  var props = __objRest(_a, []);
1886
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_menu.Menu.SubmenuRoot, __spreadValues({ "data-slot": "dropdown-menu-sub" }, props));
2978
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_menu.Menu.SubmenuRoot, __spreadValues({ "data-slot": "dropdown-menu-sub" }, props));
1887
2979
  }
1888
2980
  function DropdownMenuSubTrigger(_a) {
1889
2981
  var _b = _a, {
@@ -1895,7 +2987,7 @@ function DropdownMenuSubTrigger(_a) {
1895
2987
  "inset",
1896
2988
  "children"
1897
2989
  ]);
1898
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
2990
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1899
2991
  import_menu.Menu.SubmenuTrigger,
1900
2992
  __spreadProps(__spreadValues({
1901
2993
  className: cn(
@@ -1907,7 +2999,7 @@ function DropdownMenuSubTrigger(_a) {
1907
2999
  }, props), {
1908
3000
  children: [
1909
3001
  children,
1910
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react7.ChevronRightIcon, { className: "ml-auto size-4" })
3002
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react9.ChevronRightIcon, { className: "ml-auto size-4" })
1911
3003
  ]
1912
3004
  })
1913
3005
  );
@@ -1923,7 +3015,7 @@ function DropdownMenuSubContent(_a) {
1923
3015
  "style"
1924
3016
  ]);
1925
3017
  const themeVars = useThemeVars();
1926
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_menu.Menu.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_menu.Menu.Positioner, { sideOffset, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
3018
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_menu.Menu.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_menu.Menu.Positioner, { sideOffset, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1927
3019
  import_menu.Menu.Popup,
1928
3020
  __spreadValues({
1929
3021
  className: cn(
@@ -1936,39 +3028,26 @@ function DropdownMenuSubContent(_a) {
1936
3028
  ) }) });
1937
3029
  }
1938
3030
 
1939
- // src/components/ui/skeleton.tsx
1940
- var import_jsx_runtime16 = require("react/jsx-runtime");
1941
- function Skeleton(_a) {
1942
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1943
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1944
- "div",
1945
- __spreadValues({
1946
- className: cn("animate-pulse bg-muted", className),
1947
- "data-slot": "skeleton"
1948
- }, props)
1949
- );
1950
- }
1951
-
1952
3031
  // src/components/ui/data-table.tsx
1953
- var import_jsx_runtime17 = require("react/jsx-runtime");
3032
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1954
3033
  function DataTableColumnHeader({
1955
3034
  column,
1956
3035
  title,
1957
3036
  className
1958
3037
  }) {
1959
3038
  if (!column.getCanSort()) {
1960
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className, children: title });
3039
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className, children: title });
1961
3040
  }
1962
3041
  const sorted = column.getIsSorted();
1963
3042
  let sortIcon;
1964
3043
  if (sorted === "asc") {
1965
- sortIcon = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react8.ArrowUp, { className: "ml-1 size-3.5" });
3044
+ sortIcon = /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.ArrowUp, { className: "ml-1 size-3.5" });
1966
3045
  } else if (sorted === "desc") {
1967
- sortIcon = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react8.ArrowDown, { className: "ml-1 size-3.5" });
3046
+ sortIcon = /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.ArrowDown, { className: "ml-1 size-3.5" });
1968
3047
  } else {
1969
- sortIcon = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react8.ArrowUpDown, { className: "ml-1 size-3.5" });
3048
+ sortIcon = /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.ArrowUpDown, { className: "ml-1 size-3.5" });
1970
3049
  }
1971
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
3050
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1972
3051
  Button,
1973
3052
  {
1974
3053
  className: cn("-ml-3 h-8 font-medium text-muted-foreground hover:text-foreground", className),
@@ -1987,7 +3066,7 @@ function DataTableColumnHeader({
1987
3066
  function getSelectionColumn() {
1988
3067
  return {
1989
3068
  id: "select",
1990
- header: ({ table }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3069
+ header: ({ table }) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1991
3070
  Checkbox,
1992
3071
  {
1993
3072
  "aria-label": "Select all",
@@ -1998,7 +3077,7 @@ function getSelectionColumn() {
1998
3077
  }
1999
3078
  }
2000
3079
  ),
2001
- cell: ({ row }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3080
+ cell: ({ row }) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2002
3081
  Checkbox,
2003
3082
  {
2004
3083
  "aria-label": "Select row",
@@ -2019,8 +3098,8 @@ function DataTableToolbar({
2019
3098
  enableColumnVisibility
2020
3099
  }) {
2021
3100
  var _a;
2022
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center justify-between gap-2 py-4", "data-slot": "data-table-toolbar", children: [
2023
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex flex-1 items-center gap-2", children: searchKey ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3101
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center justify-between gap-2 py-4", "data-slot": "data-table-toolbar", children: [
3102
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "flex flex-1 items-center gap-2", children: searchKey ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2024
3103
  Input,
2025
3104
  {
2026
3105
  className: "max-w-xs",
@@ -2032,21 +3111,21 @@ function DataTableToolbar({
2032
3111
  value: (_a = table.getColumn(searchKey)) == null ? void 0 : _a.getFilterValue()
2033
3112
  }
2034
3113
  ) : null }),
2035
- enableColumnVisibility ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(DropdownMenu, { children: [
2036
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
3114
+ enableColumnVisibility ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(DropdownMenu, { children: [
3115
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
2037
3116
  DropdownMenuTrigger,
2038
3117
  {
2039
- render: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Button, { className: "ml-auto h-8 gap-1.5", size: "sm", variant: "outline" }),
3118
+ render: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Button, { className: "ml-auto h-8 gap-1.5", size: "sm", variant: "outline" }),
2040
3119
  children: [
2041
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react8.SlidersHorizontal, { className: "size-3.5" }),
2042
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "hidden sm:inline", children: "Columns" })
3120
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.SlidersHorizontal, { className: "size-3.5" }),
3121
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "hidden sm:inline", children: "Columns" })
2043
3122
  ]
2044
3123
  }
2045
3124
  ),
2046
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DropdownMenuContent, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(DropdownMenuGroup, { children: [
2047
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DropdownMenuLabel, { children: "Toggle columns" }),
2048
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DropdownMenuSeparator, {}),
2049
- table.getAllColumns().filter((col) => col.getCanHide()).map((col) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3125
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DropdownMenuContent, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(DropdownMenuGroup, { children: [
3126
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DropdownMenuLabel, { children: "Toggle columns" }),
3127
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DropdownMenuSeparator, {}),
3128
+ table.getAllColumns().filter((col) => col.getCanHide()).map((col) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2050
3129
  DropdownMenuCheckboxItem,
2051
3130
  {
2052
3131
  checked: col.getIsVisible(),
@@ -2066,23 +3145,23 @@ function DataTablePagination({
2066
3145
  table,
2067
3146
  pageSizeOptions = [10, 20, 30, 50]
2068
3147
  }) {
2069
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
3148
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
2070
3149
  "div",
2071
3150
  {
2072
3151
  className: "flex items-center justify-between gap-4 py-4",
2073
3152
  "data-slot": "data-table-pagination",
2074
3153
  children: [
2075
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-sm text-muted-foreground", children: table.getFilteredSelectedRowModel().rows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
3154
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-sm text-muted-foreground", children: table.getFilteredSelectedRowModel().rows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
2076
3155
  table.getFilteredSelectedRowModel().rows.length,
2077
3156
  " of",
2078
3157
  " ",
2079
3158
  table.getFilteredRowModel().rows.length,
2080
3159
  " row(s) selected."
2081
3160
  ] }) }),
2082
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center gap-6", children: [
2083
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center gap-2", children: [
2084
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-sm text-muted-foreground whitespace-nowrap", children: "Rows per page" }),
2085
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
3161
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-6", children: [
3162
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-2", children: [
3163
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-sm text-muted-foreground whitespace-nowrap", children: "Rows per page" }),
3164
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
2086
3165
  Select,
2087
3166
  {
2088
3167
  onValueChange: (value) => {
@@ -2090,20 +3169,20 @@ function DataTablePagination({
2090
3169
  },
2091
3170
  value: `${table.getState().pagination.pageSize}`,
2092
3171
  children: [
2093
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SelectTrigger, { className: "w-[70px]", size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SelectValue, { placeholder: `${table.getState().pagination.pageSize}` }) }),
2094
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SelectContent, { children: pageSizeOptions.map((pageSize) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SelectItem, { value: `${pageSize}`, children: pageSize }, pageSize)) })
3172
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SelectTrigger, { className: "w-[70px]", size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SelectValue, { placeholder: `${table.getState().pagination.pageSize}` }) }),
3173
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SelectContent, { children: pageSizeOptions.map((pageSize) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SelectItem, { value: `${pageSize}`, children: pageSize }, pageSize)) })
2095
3174
  ]
2096
3175
  }
2097
3176
  )
2098
3177
  ] }),
2099
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("p", { className: "text-sm text-muted-foreground whitespace-nowrap", children: [
3178
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("p", { className: "text-sm text-muted-foreground whitespace-nowrap", children: [
2100
3179
  "Page ",
2101
3180
  table.getState().pagination.pageIndex + 1,
2102
3181
  " of ",
2103
3182
  table.getPageCount()
2104
3183
  ] }),
2105
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center gap-1", children: [
2106
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3184
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-1", children: [
3185
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2107
3186
  Button,
2108
3187
  {
2109
3188
  "aria-label": "Go to first page",
@@ -2113,10 +3192,10 @@ function DataTablePagination({
2113
3192
  },
2114
3193
  size: "icon-sm",
2115
3194
  variant: "outline",
2116
- children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react8.ChevronsLeftIcon, { className: "size-4" })
3195
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.ChevronsLeftIcon, { className: "size-4" })
2117
3196
  }
2118
3197
  ),
2119
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3198
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2120
3199
  Button,
2121
3200
  {
2122
3201
  "aria-label": "Go to previous page",
@@ -2126,10 +3205,10 @@ function DataTablePagination({
2126
3205
  },
2127
3206
  size: "icon-sm",
2128
3207
  variant: "outline",
2129
- children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react8.ChevronLeftIcon, { className: "size-4" })
3208
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.ChevronLeftIcon, { className: "size-4" })
2130
3209
  }
2131
3210
  ),
2132
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3211
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2133
3212
  Button,
2134
3213
  {
2135
3214
  "aria-label": "Go to next page",
@@ -2139,10 +3218,10 @@ function DataTablePagination({
2139
3218
  },
2140
3219
  size: "icon-sm",
2141
3220
  variant: "outline",
2142
- children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react8.ChevronRightIcon, { className: "size-4" })
3221
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.ChevronRightIcon, { className: "size-4" })
2143
3222
  }
2144
3223
  ),
2145
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3224
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2146
3225
  Button,
2147
3226
  {
2148
3227
  "aria-label": "Go to last page",
@@ -2152,7 +3231,7 @@ function DataTablePagination({
2152
3231
  },
2153
3232
  size: "icon-sm",
2154
3233
  variant: "outline",
2155
- children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react8.ChevronsRightIcon, { className: "size-4" })
3234
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.ChevronsRightIcon, { className: "size-4" })
2156
3235
  }
2157
3236
  )
2158
3237
  ] })
@@ -2165,7 +3244,7 @@ function DataTableSkeleton({
2165
3244
  columnCount,
2166
3245
  rowCount = 5
2167
3246
  }) {
2168
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_jsx_runtime17.Fragment, { children: Array.from({ length: rowCount }).map((_, rowIdx) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableRow, { children: Array.from({ length: columnCount }).map((_inner, colIdx) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Skeleton, { className: "h-4 w-3/4" }) }, `skeleton-cell-${String(rowIdx)}-${String(colIdx)}`)) }, `skeleton-row-${String(rowIdx)}`)) });
3247
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_jsx_runtime25.Fragment, { children: Array.from({ length: rowCount }).map((_, rowIdx) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TableRow, { children: Array.from({ length: columnCount }).map((_inner, colIdx) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Skeleton, { className: "h-4 w-3/4" }) }, `skeleton-cell-${String(rowIdx)}-${String(colIdx)}`)) }, `skeleton-row-${String(rowIdx)}`)) });
2169
3248
  }
2170
3249
  function DataTable({
2171
3250
  columns: userColumns,
@@ -2182,11 +3261,11 @@ function DataTable({
2182
3261
  toolbar,
2183
3262
  emptyText = "No results."
2184
3263
  }) {
2185
- const [sorting, setSorting] = React4.useState([]);
2186
- const [columnFilters, setColumnFilters] = React4.useState([]);
2187
- const [columnVisibility, setColumnVisibility] = React4.useState({});
2188
- const [rowSelection, setRowSelection] = React4.useState({});
2189
- const resolvedColumns = React4.useMemo(() => {
3264
+ const [sorting, setSorting] = React8.useState([]);
3265
+ const [columnFilters, setColumnFilters] = React8.useState([]);
3266
+ const [columnVisibility, setColumnVisibility] = React8.useState({});
3267
+ const [rowSelection, setRowSelection] = React8.useState({});
3268
+ const resolvedColumns = React8.useMemo(() => {
2190
3269
  if (!enableRowSelection) return userColumns;
2191
3270
  return [getSelectionColumn(), ...userColumns];
2192
3271
  }, [userColumns, enableRowSelection]);
@@ -2215,19 +3294,19 @@ function DataTable({
2215
3294
  });
2216
3295
  function renderTableBody() {
2217
3296
  if (loading) {
2218
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DataTableSkeleton, { columnCount: resolvedColumns.length, rowCount: skeletonRows });
3297
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DataTableSkeleton, { columnCount: resolvedColumns.length, rowCount: skeletonRows });
2219
3298
  }
2220
3299
  if (table.getRowModel().rows.length) {
2221
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_jsx_runtime17.Fragment, { children: table.getRowModel().rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3300
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_jsx_runtime25.Fragment, { children: table.getRowModel().rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2222
3301
  TableRow,
2223
3302
  {
2224
3303
  "data-state": row.getIsSelected() ? "selected" : void 0,
2225
- children: row.getVisibleCells().map((cell) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableCell, { children: (0, import_react_table.flexRender)(cell.column.columnDef.cell, cell.getContext()) }, cell.id))
3304
+ children: row.getVisibleCells().map((cell) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TableCell, { children: (0, import_react_table.flexRender)(cell.column.columnDef.cell, cell.getContext()) }, cell.id))
2226
3305
  },
2227
3306
  row.id
2228
3307
  )) });
2229
3308
  }
2230
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3309
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2231
3310
  TableCell,
2232
3311
  {
2233
3312
  className: "h-24 text-center text-muted-foreground",
@@ -2236,8 +3315,8 @@ function DataTable({
2236
3315
  }
2237
3316
  ) });
2238
3317
  }
2239
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: cn("w-full font-sans", className), "data-slot": "data-table", children: [
2240
- toolbar ? toolbar(table) : (searchKey || enableColumnVisibility) && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3318
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: cn("w-full font-sans", className), "data-slot": "data-table", children: [
3319
+ toolbar ? toolbar(table) : (searchKey || enableColumnVisibility) && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2241
3320
  DataTableToolbar,
2242
3321
  {
2243
3322
  enableColumnVisibility,
@@ -2246,29 +3325,29 @@ function DataTable({
2246
3325
  table
2247
3326
  }
2248
3327
  ),
2249
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "border border-border", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(Table, { children: [
2250
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableRow, { children: headerGroup.headers.map((header) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableHead, { children: header.isPlaceholder ? null : (0, import_react_table.flexRender)(header.column.columnDef.header, header.getContext()) }, header.id)) }, headerGroup.id)) }),
2251
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableBody, { children: renderTableBody() })
3328
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "border border-border", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Table, { children: [
3329
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TableRow, { children: headerGroup.headers.map((header) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TableHead, { children: header.isPlaceholder ? null : (0, import_react_table.flexRender)(header.column.columnDef.header, header.getContext()) }, header.id)) }, headerGroup.id)) }),
3330
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TableBody, { children: renderTableBody() })
2252
3331
  ] }) }),
2253
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DataTablePagination, { pageSizeOptions, table })
3332
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DataTablePagination, { pageSizeOptions, table })
2254
3333
  ] });
2255
3334
  }
2256
3335
 
2257
3336
  // src/components/ui/date-picker.tsx
2258
- var React5 = __toESM(require("react"));
3337
+ var React9 = __toESM(require("react"));
2259
3338
  var import_date_fns = require("date-fns");
2260
- var import_lucide_react9 = require("lucide-react");
3339
+ var import_lucide_react11 = require("lucide-react");
2261
3340
 
2262
3341
  // src/components/ui/popover.tsx
2263
3342
  var import_popover = require("@base-ui/react/popover");
2264
- var import_jsx_runtime18 = require("react/jsx-runtime");
3343
+ var import_jsx_runtime26 = require("react/jsx-runtime");
2265
3344
  function Popover(_a) {
2266
3345
  var props = __objRest(_a, []);
2267
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_popover.Popover.Root, __spreadValues({ "data-slot": "popover" }, props));
3346
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_popover.Popover.Root, __spreadValues({ "data-slot": "popover" }, props));
2268
3347
  }
2269
3348
  function PopoverTrigger(_a) {
2270
3349
  var props = __objRest(_a, []);
2271
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_popover.Popover.Trigger, __spreadValues({ "data-slot": "popover-trigger" }, props));
3350
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_popover.Popover.Trigger, __spreadValues({ "data-slot": "popover-trigger" }, props));
2272
3351
  }
2273
3352
  function PopoverContent(_a) {
2274
3353
  var _b = _a, {
@@ -2283,12 +3362,12 @@ function PopoverContent(_a) {
2283
3362
  "style"
2284
3363
  ]);
2285
3364
  const themeVars = useThemeVars();
2286
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_popover.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3365
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_popover.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2287
3366
  import_popover.Popover.Positioner,
2288
3367
  {
2289
3368
  align,
2290
3369
  sideOffset,
2291
- children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3370
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2292
3371
  import_popover.Popover.Popup,
2293
3372
  __spreadValues({
2294
3373
  className: cn(
@@ -2304,11 +3383,11 @@ function PopoverContent(_a) {
2304
3383
  }
2305
3384
  function PopoverAnchor(_a) {
2306
3385
  var props = __objRest(_a, []);
2307
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", __spreadValues({ "data-slot": "popover-anchor" }, props));
3386
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", __spreadValues({ "data-slot": "popover-anchor" }, props));
2308
3387
  }
2309
3388
  function PopoverHeader(_a) {
2310
3389
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2311
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3390
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2312
3391
  "div",
2313
3392
  __spreadValues({
2314
3393
  className: cn("flex flex-col gap-1 text-sm", className),
@@ -2320,7 +3399,7 @@ function PopoverTitle(_a) {
2320
3399
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2321
3400
  return (
2322
3401
  // eslint-disable-next-line jsx-a11y/heading-has-content -- children passed via props spread
2323
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3402
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2324
3403
  "h2",
2325
3404
  __spreadValues({
2326
3405
  className: cn("font-medium", className),
@@ -2335,7 +3414,7 @@ function PopoverDescription(_a) {
2335
3414
  } = _b, props = __objRest(_b, [
2336
3415
  "className"
2337
3416
  ]);
2338
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3417
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2339
3418
  "p",
2340
3419
  __spreadValues({
2341
3420
  className: cn("text-muted-foreground", className),
@@ -2345,7 +3424,7 @@ function PopoverDescription(_a) {
2345
3424
  }
2346
3425
 
2347
3426
  // src/components/ui/date-picker.tsx
2348
- var import_jsx_runtime19 = require("react/jsx-runtime");
3427
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2349
3428
  function DatePicker({
2350
3429
  value,
2351
3430
  onChange,
@@ -2355,7 +3434,7 @@ function DatePicker({
2355
3434
  className,
2356
3435
  calendarProps
2357
3436
  }) {
2358
- const [open, setOpen] = React5.useState(false);
3437
+ const [open, setOpen] = React9.useState(false);
2359
3438
  function handleDaySelect(day) {
2360
3439
  if (!day) {
2361
3440
  onChange == null ? void 0 : onChange(void 0);
@@ -2380,11 +3459,11 @@ function DatePicker({
2380
3459
  } else if (value) {
2381
3460
  displayValue = (0, import_date_fns.format)(value, "dd/MM/yyyy");
2382
3461
  }
2383
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(Popover, { onOpenChange: disabled ? void 0 : setOpen, open, children: [
2384
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
3462
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Popover, { onOpenChange: disabled ? void 0 : setOpen, open, children: [
3463
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
2385
3464
  PopoverTrigger,
2386
3465
  {
2387
- render: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3466
+ render: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2388
3467
  Button,
2389
3468
  {
2390
3469
  className: cn(
@@ -2398,18 +3477,18 @@ function DatePicker({
2398
3477
  }
2399
3478
  ),
2400
3479
  children: [
2401
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.CalendarIcon, {}),
3480
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.CalendarIcon, {}),
2402
3481
  value ? displayValue : placeholder
2403
3482
  ]
2404
3483
  }
2405
3484
  ),
2406
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
3485
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
2407
3486
  PopoverContent,
2408
3487
  {
2409
3488
  align: "start",
2410
3489
  className: "w-auto rounded-none p-0 shadow-sm",
2411
3490
  children: [
2412
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3491
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2413
3492
  Calendar,
2414
3493
  __spreadProps(__spreadValues({
2415
3494
  captionLayout: "dropdown",
@@ -2423,9 +3502,9 @@ function DatePicker({
2423
3502
  )
2424
3503
  })
2425
3504
  ),
2426
- showTimePicker ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "border-t border-border px-3 pb-3 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("label", { className: "mb-1.5 block text-xs font-medium text-muted-foreground", children: [
3505
+ showTimePicker ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "border-t border-border px-3 pb-3 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("label", { className: "mb-1.5 block text-xs font-medium text-muted-foreground", children: [
2427
3506
  "Time",
2428
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3507
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2429
3508
  "input",
2430
3509
  {
2431
3510
  className: "mt-1.5 h-8 w-full rounded-none border border-input bg-transparent px-2 text-sm font-sans outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
@@ -2442,24 +3521,24 @@ function DatePicker({
2442
3521
  }
2443
3522
 
2444
3523
  // src/components/ui/dialog.tsx
2445
- var import_lucide_react10 = require("lucide-react");
3524
+ var import_lucide_react12 = require("lucide-react");
2446
3525
  var import_dialog = require("@base-ui/react/dialog");
2447
- var import_jsx_runtime20 = require("react/jsx-runtime");
3526
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2448
3527
  function Dialog(_a) {
2449
3528
  var props = __objRest(_a, []);
2450
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dialog.Dialog.Root, __spreadValues({ "data-slot": "dialog" }, props));
3529
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_dialog.Dialog.Root, __spreadValues({ "data-slot": "dialog" }, props));
2451
3530
  }
2452
3531
  function DialogTrigger(_a) {
2453
3532
  var props = __objRest(_a, []);
2454
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dialog.Dialog.Trigger, __spreadValues({ "data-slot": "dialog-trigger" }, props));
3533
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_dialog.Dialog.Trigger, __spreadValues({ "data-slot": "dialog-trigger" }, props));
2455
3534
  }
2456
3535
  function DialogPortal(_a) {
2457
3536
  var props = __objRest(_a, []);
2458
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dialog.Dialog.Portal, __spreadValues({ "data-slot": "dialog-portal" }, props));
3537
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_dialog.Dialog.Portal, __spreadValues({ "data-slot": "dialog-portal" }, props));
2459
3538
  }
2460
3539
  function DialogClose(_a) {
2461
3540
  var props = __objRest(_a, []);
2462
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_dialog.Dialog.Close, __spreadValues({ "data-slot": "dialog-close" }, props));
3541
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_dialog.Dialog.Close, __spreadValues({ "data-slot": "dialog-close" }, props));
2463
3542
  }
2464
3543
  function DialogOverlay(_a) {
2465
3544
  var _b = _a, {
@@ -2467,7 +3546,7 @@ function DialogOverlay(_a) {
2467
3546
  } = _b, props = __objRest(_b, [
2468
3547
  "className"
2469
3548
  ]);
2470
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3549
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2471
3550
  import_dialog.Dialog.Backdrop,
2472
3551
  __spreadValues({
2473
3552
  className: cn(
@@ -2492,9 +3571,9 @@ function DialogContent(_a) {
2492
3571
  "style"
2493
3572
  ]);
2494
3573
  const themeVars = useThemeVars();
2495
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(DialogPortal, { children: [
2496
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(DialogOverlay, {}),
2497
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
3574
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(DialogPortal, { children: [
3575
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(DialogOverlay, {}),
3576
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2498
3577
  import_dialog.Dialog.Popup,
2499
3578
  __spreadProps(__spreadValues({
2500
3579
  className: cn(
@@ -2507,14 +3586,14 @@ function DialogContent(_a) {
2507
3586
  }, props), {
2508
3587
  children: [
2509
3588
  children,
2510
- showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
3589
+ showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2511
3590
  import_dialog.Dialog.Close,
2512
3591
  {
2513
3592
  className: "absolute top-4 right-4 transition-colors hover:bg-foreground/5 focus:outline-hidden focus:ring-2 focus:ring-border focus:ring-offset-0 disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2514
3593
  "data-slot": "dialog-close",
2515
3594
  children: [
2516
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react10.XIcon, {}),
2517
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "sr-only", children: "Close" })
3595
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.XIcon, {}),
3596
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "sr-only", children: "Close" })
2518
3597
  ]
2519
3598
  }
2520
3599
  ) : null
@@ -2525,7 +3604,7 @@ function DialogContent(_a) {
2525
3604
  }
2526
3605
  function DialogHeader(_a) {
2527
3606
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2528
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3607
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2529
3608
  "div",
2530
3609
  __spreadValues({
2531
3610
  className: cn("flex flex-col gap-1.5", className),
@@ -2543,7 +3622,7 @@ function DialogFooter(_a) {
2543
3622
  "showCloseButton",
2544
3623
  "children"
2545
3624
  ]);
2546
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
3625
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2547
3626
  "div",
2548
3627
  __spreadProps(__spreadValues({
2549
3628
  className: cn(
@@ -2555,7 +3634,7 @@ function DialogFooter(_a) {
2555
3634
  }, props), {
2556
3635
  children: [
2557
3636
  children,
2558
- showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3637
+ showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2559
3638
  import_dialog.Dialog.Close,
2560
3639
  {
2561
3640
  className: cn(buttonVariants({ variant: "outline" })),
@@ -2572,7 +3651,7 @@ function DialogTitle(_a) {
2572
3651
  } = _b, props = __objRest(_b, [
2573
3652
  "className"
2574
3653
  ]);
2575
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3654
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2576
3655
  import_dialog.Dialog.Title,
2577
3656
  __spreadValues({
2578
3657
  className: cn("text-lg leading-none font-semibold", className),
@@ -2586,7 +3665,7 @@ function DialogDescription(_a) {
2586
3665
  } = _b, props = __objRest(_b, [
2587
3666
  "className"
2588
3667
  ]);
2589
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3668
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2590
3669
  import_dialog.Dialog.Description,
2591
3670
  __spreadValues({
2592
3671
  className: cn("text-sm text-muted-foreground", className),
@@ -2597,22 +3676,22 @@ function DialogDescription(_a) {
2597
3676
 
2598
3677
  // src/components/ui/drawer.tsx
2599
3678
  var import_vaul = require("vaul");
2600
- var import_jsx_runtime21 = require("react/jsx-runtime");
3679
+ var import_jsx_runtime29 = require("react/jsx-runtime");
2601
3680
  function Drawer(_a) {
2602
3681
  var props = __objRest(_a, []);
2603
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_vaul.Drawer.Root, __spreadValues({ "data-slot": "drawer" }, props));
3682
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_vaul.Drawer.Root, __spreadValues({ "data-slot": "drawer" }, props));
2604
3683
  }
2605
3684
  function DrawerTrigger(_a) {
2606
3685
  var props = __objRest(_a, []);
2607
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_vaul.Drawer.Trigger, __spreadValues({ "data-slot": "drawer-trigger" }, props));
3686
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_vaul.Drawer.Trigger, __spreadValues({ "data-slot": "drawer-trigger" }, props));
2608
3687
  }
2609
3688
  function DrawerPortal(_a) {
2610
3689
  var props = __objRest(_a, []);
2611
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_vaul.Drawer.Portal, __spreadValues({ "data-slot": "drawer-portal" }, props));
3690
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_vaul.Drawer.Portal, __spreadValues({ "data-slot": "drawer-portal" }, props));
2612
3691
  }
2613
3692
  function DrawerClose(_a) {
2614
3693
  var props = __objRest(_a, []);
2615
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_vaul.Drawer.Close, __spreadValues({ "data-slot": "drawer-close" }, props));
3694
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_vaul.Drawer.Close, __spreadValues({ "data-slot": "drawer-close" }, props));
2616
3695
  }
2617
3696
  function DrawerOverlay(_a) {
2618
3697
  var _b = _a, {
@@ -2620,7 +3699,7 @@ function DrawerOverlay(_a) {
2620
3699
  } = _b, props = __objRest(_b, [
2621
3700
  "className"
2622
3701
  ]);
2623
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3702
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2624
3703
  import_vaul.Drawer.Overlay,
2625
3704
  __spreadValues({
2626
3705
  className: cn(
@@ -2643,9 +3722,9 @@ function DrawerContent(_a) {
2643
3722
  "style"
2644
3723
  ]);
2645
3724
  const themeVars = useThemeVars();
2646
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(DrawerPortal, { "data-slot": "drawer-portal", children: [
2647
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(DrawerOverlay, {}),
2648
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
3725
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(DrawerPortal, { "data-slot": "drawer-portal", children: [
3726
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DrawerOverlay, {}),
3727
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
2649
3728
  import_vaul.Drawer.Content,
2650
3729
  __spreadProps(__spreadValues({
2651
3730
  className: cn(
@@ -2661,7 +3740,7 @@ function DrawerContent(_a) {
2661
3740
  style: __spreadValues(__spreadValues({}, themeVars), style2)
2662
3741
  }, props), {
2663
3742
  children: [
2664
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block group-data-[vaul-drawer-direction=top]/drawer-content:block" }),
3743
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block group-data-[vaul-drawer-direction=top]/drawer-content:block" }),
2665
3744
  children
2666
3745
  ]
2667
3746
  })
@@ -2670,7 +3749,7 @@ function DrawerContent(_a) {
2670
3749
  }
2671
3750
  function DrawerHeader(_a) {
2672
3751
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2673
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3752
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2674
3753
  "div",
2675
3754
  __spreadValues({
2676
3755
  className: cn("flex flex-col gap-1 p-4", className),
@@ -2680,7 +3759,7 @@ function DrawerHeader(_a) {
2680
3759
  }
2681
3760
  function DrawerFooter(_a) {
2682
3761
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2683
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3762
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2684
3763
  "div",
2685
3764
  __spreadValues({
2686
3765
  className: cn("mt-auto flex flex-col gap-2 p-4", className),
@@ -2694,7 +3773,7 @@ function DrawerTitle(_a) {
2694
3773
  } = _b, props = __objRest(_b, [
2695
3774
  "className"
2696
3775
  ]);
2697
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3776
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2698
3777
  import_vaul.Drawer.Title,
2699
3778
  __spreadValues({
2700
3779
  className: cn("text-lg font-semibold text-foreground", className),
@@ -2708,7 +3787,7 @@ function DrawerDescription(_a) {
2708
3787
  } = _b, props = __objRest(_b, [
2709
3788
  "className"
2710
3789
  ]);
2711
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3790
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2712
3791
  import_vaul.Drawer.Description,
2713
3792
  __spreadValues({
2714
3793
  className: cn("text-sm text-muted-foreground", className),
@@ -2717,113 +3796,12 @@ function DrawerDescription(_a) {
2717
3796
  );
2718
3797
  }
2719
3798
 
2720
- // src/components/ui/empty.tsx
2721
- var import_class_variance_authority4 = require("class-variance-authority");
2722
- var import_jsx_runtime22 = require("react/jsx-runtime");
2723
- function Empty(_a) {
2724
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2725
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2726
- "div",
2727
- __spreadValues({
2728
- className: cn(
2729
- "flex min-w-0 flex-1 flex-col items-center justify-center gap-6 border border-dashed p-6 text-center text-balance md:p-12",
2730
- className
2731
- ),
2732
- "data-slot": "empty"
2733
- }, props)
2734
- );
2735
- }
2736
- function EmptyHeader(_a) {
2737
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2738
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2739
- "div",
2740
- __spreadValues({
2741
- className: cn(
2742
- "flex max-w-sm flex-col items-center gap-2 text-center",
2743
- className
2744
- ),
2745
- "data-slot": "empty-header"
2746
- }, props)
2747
- );
2748
- }
2749
- var emptyMediaVariants = (0, import_class_variance_authority4.cva)(
2750
- "mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
2751
- {
2752
- variants: {
2753
- variant: {
2754
- default: "[&_svg:not([class*='size-'])]:size-10",
2755
- icon: "flex size-10 shrink-0 items-center justify-center text-muted-foreground [&_svg:not([class*='size-'])]:size-6"
2756
- }
2757
- },
2758
- defaultVariants: {
2759
- variant: "default"
2760
- }
2761
- }
2762
- );
2763
- function EmptyMedia(_a) {
2764
- var _b = _a, {
2765
- className,
2766
- variant = "default"
2767
- } = _b, props = __objRest(_b, [
2768
- "className",
2769
- "variant"
2770
- ]);
2771
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2772
- "div",
2773
- __spreadValues({
2774
- className: cn(emptyMediaVariants({ variant, className })),
2775
- "data-slot": "empty-icon",
2776
- "data-variant": variant
2777
- }, props)
2778
- );
2779
- }
2780
- function EmptyTitle(_a) {
2781
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2782
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2783
- "div",
2784
- __spreadValues({
2785
- className: cn("text-lg font-medium tracking-tight", className),
2786
- "data-slot": "empty-title"
2787
- }, props)
2788
- );
2789
- }
2790
- function EmptyDescription(_a) {
2791
- var _b = _a, {
2792
- className
2793
- } = _b, props = __objRest(_b, [
2794
- "className"
2795
- ]);
2796
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2797
- "div",
2798
- __spreadValues({
2799
- className: cn(
2800
- "text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
2801
- className
2802
- ),
2803
- "data-slot": "empty-description"
2804
- }, props)
2805
- );
2806
- }
2807
- function EmptyContent(_a) {
2808
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2809
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2810
- "div",
2811
- __spreadValues({
2812
- className: cn(
2813
- "flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance",
2814
- className
2815
- ),
2816
- "data-slot": "empty-content"
2817
- }, props)
2818
- );
2819
- }
2820
-
2821
3799
  // src/components/ui/field.tsx
2822
- var import_react4 = require("react");
2823
- var import_class_variance_authority5 = require("class-variance-authority");
3800
+ var import_react8 = require("react");
3801
+ var import_class_variance_authority6 = require("class-variance-authority");
2824
3802
 
2825
3803
  // src/components/ui/label.tsx
2826
- var import_jsx_runtime23 = (
3804
+ var import_jsx_runtime30 = (
2827
3805
  // eslint-disable-next-line jsx-a11y/label-has-associated-control -- htmlFor is passed by the consumer
2828
3806
  require("react/jsx-runtime")
2829
3807
  );
@@ -2833,7 +3811,7 @@ function Label(_a) {
2833
3811
  } = _b, props = __objRest(_b, [
2834
3812
  "className"
2835
3813
  ]);
2836
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3814
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2837
3815
  "label",
2838
3816
  __spreadValues({
2839
3817
  className: cn(
@@ -2847,7 +3825,7 @@ function Label(_a) {
2847
3825
 
2848
3826
  // src/components/ui/separator.tsx
2849
3827
  var import_separator = require("@base-ui/react/separator");
2850
- var import_jsx_runtime24 = require("react/jsx-runtime");
3828
+ var import_jsx_runtime31 = require("react/jsx-runtime");
2851
3829
  function Separator(_a) {
2852
3830
  var _b = _a, {
2853
3831
  className,
@@ -2856,7 +3834,7 @@ function Separator(_a) {
2856
3834
  "className",
2857
3835
  "orientation"
2858
3836
  ]);
2859
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
3837
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2860
3838
  import_separator.Separator,
2861
3839
  __spreadValues({
2862
3840
  className: cn(
@@ -2870,10 +3848,10 @@ function Separator(_a) {
2870
3848
  }
2871
3849
 
2872
3850
  // src/components/ui/field.tsx
2873
- var import_jsx_runtime25 = require("react/jsx-runtime");
3851
+ var import_jsx_runtime32 = require("react/jsx-runtime");
2874
3852
  function FieldSet(_a) {
2875
3853
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2876
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3854
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2877
3855
  "fieldset",
2878
3856
  __spreadValues({
2879
3857
  className: cn(
@@ -2893,7 +3871,7 @@ function FieldLegend(_a) {
2893
3871
  "className",
2894
3872
  "variant"
2895
3873
  ]);
2896
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3874
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2897
3875
  "legend",
2898
3876
  __spreadValues({
2899
3877
  className: cn(
@@ -2909,7 +3887,7 @@ function FieldLegend(_a) {
2909
3887
  }
2910
3888
  function FieldGroup(_a) {
2911
3889
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2912
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3890
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2913
3891
  "div",
2914
3892
  __spreadValues({
2915
3893
  className: cn(
@@ -2920,7 +3898,7 @@ function FieldGroup(_a) {
2920
3898
  }, props)
2921
3899
  );
2922
3900
  }
2923
- var fieldVariants = (0, import_class_variance_authority5.cva)(
3901
+ var fieldVariants = (0, import_class_variance_authority6.cva)(
2924
3902
  "group/field flex w-full gap-3 data-[invalid=true]:text-destructive",
2925
3903
  {
2926
3904
  variants: {
@@ -2951,7 +3929,7 @@ function Field(_a) {
2951
3929
  "className",
2952
3930
  "orientation"
2953
3931
  ]);
2954
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3932
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2955
3933
  "div",
2956
3934
  __spreadValues({
2957
3935
  className: cn(fieldVariants({ orientation }), className),
@@ -2963,7 +3941,7 @@ function Field(_a) {
2963
3941
  }
2964
3942
  function FieldContent(_a) {
2965
3943
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2966
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3944
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2967
3945
  "div",
2968
3946
  __spreadValues({
2969
3947
  className: cn(
@@ -2980,7 +3958,7 @@ function FieldLabel(_a) {
2980
3958
  } = _b, props = __objRest(_b, [
2981
3959
  "className"
2982
3960
  ]);
2983
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3961
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2984
3962
  Label,
2985
3963
  __spreadValues({
2986
3964
  className: cn(
@@ -2995,7 +3973,7 @@ function FieldLabel(_a) {
2995
3973
  }
2996
3974
  function FieldTitle(_a) {
2997
3975
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2998
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3976
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2999
3977
  "div",
3000
3978
  __spreadValues({
3001
3979
  className: cn(
@@ -3008,7 +3986,7 @@ function FieldTitle(_a) {
3008
3986
  }
3009
3987
  function FieldDescription(_a) {
3010
3988
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3011
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3989
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
3012
3990
  "p",
3013
3991
  __spreadValues({
3014
3992
  className: cn(
@@ -3029,7 +4007,7 @@ function FieldSeparator(_a) {
3029
4007
  "children",
3030
4008
  "className"
3031
4009
  ]);
3032
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
4010
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
3033
4011
  "div",
3034
4012
  __spreadProps(__spreadValues({
3035
4013
  className: cn(
@@ -3040,8 +4018,8 @@ function FieldSeparator(_a) {
3040
4018
  "data-slot": "field-separator"
3041
4019
  }, props), {
3042
4020
  children: [
3043
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Separator, { className: "absolute inset-0 top-1/2" }),
3044
- children ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4021
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Separator, { className: "absolute inset-0 top-1/2" }),
4022
+ children ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
3045
4023
  "span",
3046
4024
  {
3047
4025
  className: "relative mx-auto block w-fit bg-background px-2 text-muted-foreground",
@@ -3063,7 +4041,7 @@ function FieldError(_a) {
3063
4041
  "children",
3064
4042
  "errors"
3065
4043
  ]);
3066
- const content = (0, import_react4.useMemo)(() => {
4044
+ const content = (0, import_react8.useMemo)(() => {
3067
4045
  var _a2;
3068
4046
  if (children) {
3069
4047
  return children;
@@ -3077,14 +4055,14 @@ function FieldError(_a) {
3077
4055
  if (uniqueErrors.length === 1) {
3078
4056
  return (_a2 = uniqueErrors[0]) == null ? void 0 : _a2.message;
3079
4057
  }
3080
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map(
3081
- (error) => (error == null ? void 0 : error.message) && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("li", { children: error.message }, error.message)
4058
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map(
4059
+ (error) => (error == null ? void 0 : error.message) && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("li", { children: error.message }, error.message)
3082
4060
  ) });
3083
4061
  }, [children, errors]);
3084
4062
  if (!content) {
3085
4063
  return null;
3086
4064
  }
3087
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4065
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
3088
4066
  "div",
3089
4067
  __spreadProps(__spreadValues({
3090
4068
  className: cn("text-xs font-normal text-destructive", className),
@@ -3097,13 +4075,13 @@ function FieldError(_a) {
3097
4075
  }
3098
4076
 
3099
4077
  // src/components/ui/input-group.tsx
3100
- var import_class_variance_authority6 = require("class-variance-authority");
4078
+ var import_class_variance_authority7 = require("class-variance-authority");
3101
4079
 
3102
4080
  // src/components/ui/textarea.tsx
3103
- var import_jsx_runtime26 = require("react/jsx-runtime");
4081
+ var import_jsx_runtime33 = require("react/jsx-runtime");
3104
4082
  function Textarea(_a) {
3105
4083
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3106
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4084
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3107
4085
  "textarea",
3108
4086
  __spreadValues({
3109
4087
  className: cn(
@@ -3117,10 +4095,10 @@ function Textarea(_a) {
3117
4095
  }
3118
4096
 
3119
4097
  // src/components/ui/input-group.tsx
3120
- var import_jsx_runtime27 = require("react/jsx-runtime");
4098
+ var import_jsx_runtime34 = require("react/jsx-runtime");
3121
4099
  function InputGroup(_a) {
3122
4100
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3123
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4101
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3124
4102
  "div",
3125
4103
  __spreadValues({
3126
4104
  className: cn(
@@ -3142,7 +4120,7 @@ function InputGroup(_a) {
3142
4120
  }, props)
3143
4121
  );
3144
4122
  }
3145
- var inputGroupAddonVariants = (0, import_class_variance_authority6.cva)(
4123
+ var inputGroupAddonVariants = (0, import_class_variance_authority7.cva)(
3146
4124
  "flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4",
3147
4125
  {
3148
4126
  variants: {
@@ -3168,7 +4146,7 @@ function InputGroupAddon(_a) {
3168
4146
  ]);
3169
4147
  return (
3170
4148
  // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- click only forwards focus to the sibling input; the div is not truly interactive
3171
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4149
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3172
4150
  "div",
3173
4151
  __spreadValues({
3174
4152
  className: cn(inputGroupAddonVariants({ align }), className),
@@ -3192,7 +4170,7 @@ function InputGroupAddon(_a) {
3192
4170
  )
3193
4171
  );
3194
4172
  }
3195
- var inputGroupButtonVariants = (0, import_class_variance_authority6.cva)(
4173
+ var inputGroupButtonVariants = (0, import_class_variance_authority7.cva)(
3196
4174
  "flex items-center gap-2 text-sm shadow-none",
3197
4175
  {
3198
4176
  variants: {
@@ -3220,7 +4198,7 @@ function InputGroupButton(_a) {
3220
4198
  "variant",
3221
4199
  "size"
3222
4200
  ]);
3223
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4201
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3224
4202
  Button,
3225
4203
  __spreadValues({
3226
4204
  className: cn(inputGroupButtonVariants({ size }), className),
@@ -3232,7 +4210,7 @@ function InputGroupButton(_a) {
3232
4210
  }
3233
4211
  function InputGroupText(_a) {
3234
4212
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3235
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4213
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3236
4214
  "span",
3237
4215
  __spreadValues({
3238
4216
  className: cn(
@@ -3248,7 +4226,7 @@ function InputGroupInput(_a) {
3248
4226
  } = _b, props = __objRest(_b, [
3249
4227
  "className"
3250
4228
  ]);
3251
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4229
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3252
4230
  Input,
3253
4231
  __spreadValues({
3254
4232
  className: cn(
@@ -3265,7 +4243,7 @@ function InputGroupTextarea(_a) {
3265
4243
  } = _b, props = __objRest(_b, [
3266
4244
  "className"
3267
4245
  ]);
3268
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4246
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3269
4247
  Textarea,
3270
4248
  __spreadValues({
3271
4249
  className: cn(
@@ -3278,10 +4256,10 @@ function InputGroupTextarea(_a) {
3278
4256
  }
3279
4257
 
3280
4258
  // src/components/ui/input-otp.tsx
3281
- var React6 = __toESM(require("react"));
4259
+ var React10 = __toESM(require("react"));
3282
4260
  var import_input_otp = require("input-otp");
3283
- var import_lucide_react11 = require("lucide-react");
3284
- var import_jsx_runtime28 = require("react/jsx-runtime");
4261
+ var import_lucide_react13 = require("lucide-react");
4262
+ var import_jsx_runtime35 = require("react/jsx-runtime");
3285
4263
  function InputOTP(_a) {
3286
4264
  var _b = _a, {
3287
4265
  className,
@@ -3290,7 +4268,7 @@ function InputOTP(_a) {
3290
4268
  "className",
3291
4269
  "containerClassName"
3292
4270
  ]);
3293
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4271
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3294
4272
  import_input_otp.OTPInput,
3295
4273
  __spreadValues({
3296
4274
  className: cn("disabled:cursor-not-allowed", className),
@@ -3304,7 +4282,7 @@ function InputOTP(_a) {
3304
4282
  }
3305
4283
  function InputOTPGroup(_a) {
3306
4284
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3307
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4285
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3308
4286
  "div",
3309
4287
  __spreadValues({
3310
4288
  className: cn("flex items-center", className),
@@ -3321,9 +4299,9 @@ function InputOTPSlot(_a) {
3321
4299
  "className"
3322
4300
  ]);
3323
4301
  var _a2;
3324
- const inputOTPContext = React6.useContext(import_input_otp.OTPInputContext);
4302
+ const inputOTPContext = React10.useContext(import_input_otp.OTPInputContext);
3325
4303
  const { char, hasFakeCaret, isActive } = (_a2 = inputOTPContext.slots[index]) != null ? _a2 : {};
3326
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
4304
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
3327
4305
  "div",
3328
4306
  __spreadProps(__spreadValues({
3329
4307
  className: cn(
@@ -3335,22 +4313,22 @@ function InputOTPSlot(_a) {
3335
4313
  }, props), {
3336
4314
  children: [
3337
4315
  char,
3338
- hasFakeCaret ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) }) : null
4316
+ hasFakeCaret ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) }) : null
3339
4317
  ]
3340
4318
  })
3341
4319
  );
3342
4320
  }
3343
4321
  function InputOTPSeparator(_a) {
3344
4322
  var props = __objRest(_a, []);
3345
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", __spreadProps(__spreadValues({ "data-slot": "input-otp-separator", role: "separator" }, props), { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.MinusIcon, {}) }));
4323
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", __spreadProps(__spreadValues({ "data-slot": "input-otp-separator", role: "separator" }, props), { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react13.MinusIcon, {}) }));
3346
4324
  }
3347
4325
 
3348
4326
  // src/components/ui/pagination.tsx
3349
- var import_lucide_react12 = require("lucide-react");
3350
- var import_jsx_runtime29 = require("react/jsx-runtime");
4327
+ var import_lucide_react14 = require("lucide-react");
4328
+ var import_jsx_runtime36 = require("react/jsx-runtime");
3351
4329
  function Pagination(_a) {
3352
4330
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3353
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4331
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3354
4332
  "nav",
3355
4333
  __spreadValues({
3356
4334
  "aria-label": "pagination",
@@ -3366,7 +4344,7 @@ function PaginationContent(_a) {
3366
4344
  } = _b, props = __objRest(_b, [
3367
4345
  "className"
3368
4346
  ]);
3369
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4347
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3370
4348
  "ul",
3371
4349
  __spreadValues({
3372
4350
  className: cn("flex flex-row items-center gap-1", className),
@@ -3376,7 +4354,7 @@ function PaginationContent(_a) {
3376
4354
  }
3377
4355
  function PaginationItem(_a) {
3378
4356
  var props = __objRest(_a, []);
3379
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("li", __spreadValues({ "data-slot": "pagination-item" }, props));
4357
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("li", __spreadValues({ "data-slot": "pagination-item" }, props));
3380
4358
  }
3381
4359
  function PaginationLink(_a) {
3382
4360
  var _b = _a, {
@@ -3390,7 +4368,7 @@ function PaginationLink(_a) {
3390
4368
  ]);
3391
4369
  return (
3392
4370
  // eslint-disable-next-line jsx-a11y/anchor-has-content -- children passed via props spread
3393
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4371
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3394
4372
  "a",
3395
4373
  __spreadValues({
3396
4374
  "aria-current": isActive ? "page" : void 0,
@@ -3413,7 +4391,7 @@ function PaginationPrevious(_a) {
3413
4391
  } = _b, props = __objRest(_b, [
3414
4392
  "className"
3415
4393
  ]);
3416
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4394
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
3417
4395
  PaginationLink,
3418
4396
  __spreadProps(__spreadValues({
3419
4397
  "aria-label": "Go to previous page",
@@ -3421,8 +4399,8 @@ function PaginationPrevious(_a) {
3421
4399
  size: "default"
3422
4400
  }, props), {
3423
4401
  children: [
3424
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react12.ChevronLeftIcon, {}),
3425
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "hidden sm:block", children: "Previous" })
4402
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react14.ChevronLeftIcon, {}),
4403
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "hidden sm:block", children: "Previous" })
3426
4404
  ]
3427
4405
  })
3428
4406
  );
@@ -3433,7 +4411,7 @@ function PaginationNext(_a) {
3433
4411
  } = _b, props = __objRest(_b, [
3434
4412
  "className"
3435
4413
  ]);
3436
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4414
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
3437
4415
  PaginationLink,
3438
4416
  __spreadProps(__spreadValues({
3439
4417
  "aria-label": "Go to next page",
@@ -3441,8 +4419,8 @@ function PaginationNext(_a) {
3441
4419
  size: "default"
3442
4420
  }, props), {
3443
4421
  children: [
3444
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "hidden sm:block", children: "Next" }),
3445
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react12.ChevronRightIcon, {})
4422
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "hidden sm:block", children: "Next" }),
4423
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react14.ChevronRightIcon, {})
3446
4424
  ]
3447
4425
  })
3448
4426
  );
@@ -3453,7 +4431,7 @@ function PaginationEllipsis(_a) {
3453
4431
  } = _b, props = __objRest(_b, [
3454
4432
  "className"
3455
4433
  ]);
3456
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4434
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
3457
4435
  "span",
3458
4436
  __spreadProps(__spreadValues({
3459
4437
  "aria-hidden": true,
@@ -3461,8 +4439,8 @@ function PaginationEllipsis(_a) {
3461
4439
  "data-slot": "pagination-ellipsis"
3462
4440
  }, props), {
3463
4441
  children: [
3464
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react12.MoreHorizontalIcon, { className: "size-4" }),
3465
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "sr-only", children: "More pages" })
4442
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react14.MoreHorizontalIcon, { className: "size-4" }),
4443
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "sr-only", children: "More pages" })
3466
4444
  ]
3467
4445
  })
3468
4446
  );
@@ -3470,7 +4448,7 @@ function PaginationEllipsis(_a) {
3470
4448
 
3471
4449
  // src/components/ui/progress.tsx
3472
4450
  var import_progress = require("@base-ui/react/progress");
3473
- var import_jsx_runtime30 = require("react/jsx-runtime");
4451
+ var import_jsx_runtime37 = require("react/jsx-runtime");
3474
4452
  function Progress(_a) {
3475
4453
  var _b = _a, {
3476
4454
  className,
@@ -3479,7 +4457,7 @@ function Progress(_a) {
3479
4457
  "className",
3480
4458
  "value"
3481
4459
  ]);
3482
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4460
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3483
4461
  import_progress.Progress.Root,
3484
4462
  __spreadProps(__spreadValues({
3485
4463
  className: cn(
@@ -3489,7 +4467,7 @@ function Progress(_a) {
3489
4467
  "data-slot": "progress",
3490
4468
  value
3491
4469
  }, props), {
3492
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_progress.Progress.Track, { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4470
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_progress.Progress.Track, { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3493
4471
  import_progress.Progress.Indicator,
3494
4472
  {
3495
4473
  className: "h-full bg-primary transition-all",
@@ -3501,10 +4479,10 @@ function Progress(_a) {
3501
4479
  }
3502
4480
 
3503
4481
  // src/components/ui/radio-group.tsx
3504
- var import_lucide_react13 = require("lucide-react");
4482
+ var import_lucide_react15 = require("lucide-react");
3505
4483
  var import_radio_group = require("@base-ui/react/radio-group");
3506
4484
  var import_radio = require("@base-ui/react/radio");
3507
- var import_jsx_runtime31 = require("react/jsx-runtime");
4485
+ var import_jsx_runtime38 = require("react/jsx-runtime");
3508
4486
  var CIRCLE_BASE = "inline-flex items-center justify-center aspect-square size-4 shrink-0 rounded-full border border-primary bg-background";
3509
4487
  var INDICATOR_DOT = "size-2 fill-background text-background";
3510
4488
  function RadioGroup(_a) {
@@ -3513,7 +4491,7 @@ function RadioGroup(_a) {
3513
4491
  } = _b, props = __objRest(_b, [
3514
4492
  "className"
3515
4493
  ]);
3516
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4494
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3517
4495
  import_radio_group.RadioGroup,
3518
4496
  __spreadValues({
3519
4497
  className: cn("grid gap-3", className),
@@ -3527,7 +4505,7 @@ function RadioGroupItem(_a) {
3527
4505
  } = _b, props = __objRest(_b, [
3528
4506
  "className"
3529
4507
  ]);
3530
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4508
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3531
4509
  import_radio.Radio.Root,
3532
4510
  __spreadProps(__spreadValues({
3533
4511
  className: cn(
@@ -3543,11 +4521,11 @@ function RadioGroupItem(_a) {
3543
4521
  ),
3544
4522
  "data-slot": "radio-group-item"
3545
4523
  }, props), {
3546
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4524
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3547
4525
  import_radio.Radio.Indicator,
3548
4526
  {
3549
4527
  "data-slot": "radio-group-indicator",
3550
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react13.CircleIcon, { className: INDICATOR_DOT })
4528
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react15.CircleIcon, { className: INDICATOR_DOT })
3551
4529
  }
3552
4530
  )
3553
4531
  })
@@ -3569,7 +4547,7 @@ function RadioGroupCard(_a) {
3569
4547
  "label",
3570
4548
  "description"
3571
4549
  ]);
3572
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
4550
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
3573
4551
  import_radio.Radio.Root,
3574
4552
  __spreadProps(__spreadValues({
3575
4553
  "aria-invalid": error || void 0,
@@ -3587,7 +4565,7 @@ function RadioGroupCard(_a) {
3587
4565
  value
3588
4566
  }, props), {
3589
4567
  children: [
3590
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4568
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3591
4569
  "div",
3592
4570
  {
3593
4571
  className: cn(
@@ -3597,12 +4575,12 @@ function RadioGroupCard(_a) {
3597
4575
  "group-aria-invalid/card:border-destructive",
3598
4576
  "group-aria-invalid/card:group-data-[checked]/card:border-destructive group-aria-invalid/card:group-data-[checked]/card:bg-destructive"
3599
4577
  ),
3600
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_radio.Radio.Indicator, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react13.CircleIcon, { className: INDICATOR_DOT }) })
4578
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_radio.Radio.Indicator, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react15.CircleIcon, { className: INDICATOR_DOT }) })
3601
4579
  }
3602
4580
  ),
3603
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex flex-col gap-1", children: [
3604
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "text-sm font-medium leading-none", children: label }),
3605
- description ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "text-sm text-muted-foreground", children: description }) : null
4581
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex flex-col gap-1", children: [
4582
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-sm font-medium leading-none", children: label }),
4583
+ description ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-sm text-muted-foreground", children: description }) : null
3606
4584
  ] })
3607
4585
  ]
3608
4586
  })
@@ -3610,9 +4588,9 @@ function RadioGroupCard(_a) {
3610
4588
  }
3611
4589
 
3612
4590
  // src/components/ui/sheet.tsx
3613
- var import_lucide_react14 = require("lucide-react");
4591
+ var import_lucide_react16 = require("lucide-react");
3614
4592
  var import_dialog2 = require("@base-ui/react/dialog");
3615
- var import_jsx_runtime32 = require("react/jsx-runtime");
4593
+ var import_jsx_runtime39 = require("react/jsx-runtime");
3616
4594
  var SIDE_CLASSES = {
3617
4595
  right: "inset-y-0 right-0 h-full w-3/4 border-l data-ending-style:slide-out-to-right data-open:slide-in-from-right sm:max-w-sm",
3618
4596
  left: "inset-y-0 left-0 h-full w-3/4 border-r data-ending-style:slide-out-to-left data-open:slide-in-from-left sm:max-w-sm",
@@ -3621,19 +4599,19 @@ var SIDE_CLASSES = {
3621
4599
  };
3622
4600
  function Sheet(_a) {
3623
4601
  var props = __objRest(_a, []);
3624
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_dialog2.Dialog.Root, __spreadValues({ "data-slot": "sheet" }, props));
4602
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_dialog2.Dialog.Root, __spreadValues({ "data-slot": "sheet" }, props));
3625
4603
  }
3626
4604
  function SheetTrigger(_a) {
3627
4605
  var props = __objRest(_a, []);
3628
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_dialog2.Dialog.Trigger, __spreadValues({ "data-slot": "sheet-trigger" }, props));
4606
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_dialog2.Dialog.Trigger, __spreadValues({ "data-slot": "sheet-trigger" }, props));
3629
4607
  }
3630
4608
  function SheetClose(_a) {
3631
4609
  var props = __objRest(_a, []);
3632
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_dialog2.Dialog.Close, __spreadValues({ "data-slot": "sheet-close" }, props));
4610
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_dialog2.Dialog.Close, __spreadValues({ "data-slot": "sheet-close" }, props));
3633
4611
  }
3634
4612
  function SheetPortal(_a) {
3635
4613
  var props = __objRest(_a, []);
3636
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_dialog2.Dialog.Portal, __spreadValues({ "data-slot": "sheet-portal" }, props));
4614
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_dialog2.Dialog.Portal, __spreadValues({ "data-slot": "sheet-portal" }, props));
3637
4615
  }
3638
4616
  function SheetOverlay(_a) {
3639
4617
  var _b = _a, {
@@ -3641,7 +4619,7 @@ function SheetOverlay(_a) {
3641
4619
  } = _b, props = __objRest(_b, [
3642
4620
  "className"
3643
4621
  ]);
3644
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4622
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3645
4623
  import_dialog2.Dialog.Backdrop,
3646
4624
  __spreadValues({
3647
4625
  className: cn(
@@ -3667,9 +4645,9 @@ function SheetContent(_a) {
3667
4645
  "style"
3668
4646
  ]);
3669
4647
  const themeVars = useThemeVars();
3670
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(SheetPortal, { children: [
3671
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SheetOverlay, {}),
3672
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
4648
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(SheetPortal, { children: [
4649
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(SheetOverlay, {}),
4650
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
3673
4651
  import_dialog2.Dialog.Popup,
3674
4652
  __spreadProps(__spreadValues({
3675
4653
  className: cn(
@@ -3682,14 +4660,14 @@ function SheetContent(_a) {
3682
4660
  }, props), {
3683
4661
  children: [
3684
4662
  children,
3685
- showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
4663
+ showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
3686
4664
  import_dialog2.Dialog.Close,
3687
4665
  {
3688
4666
  className: "absolute top-4 right-4 transition-colors hover:bg-foreground/5 focus:outline-hidden focus:ring-2 focus:ring-border focus:ring-offset-0 disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3689
4667
  "data-slot": "sheet-icon-close",
3690
4668
  children: [
3691
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react14.XIcon, {}),
3692
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "sr-only", children: "Close" })
4669
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react16.XIcon, {}),
4670
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "sr-only", children: "Close" })
3693
4671
  ]
3694
4672
  }
3695
4673
  ) : null
@@ -3700,7 +4678,7 @@ function SheetContent(_a) {
3700
4678
  }
3701
4679
  function SheetHeader(_a) {
3702
4680
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3703
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4681
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3704
4682
  "div",
3705
4683
  __spreadValues({
3706
4684
  className: cn("flex flex-col gap-1.5 p-4", className),
@@ -3710,7 +4688,7 @@ function SheetHeader(_a) {
3710
4688
  }
3711
4689
  function SheetFooter(_a) {
3712
4690
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3713
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4691
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3714
4692
  "div",
3715
4693
  __spreadValues({
3716
4694
  className: cn("mt-auto flex flex-col gap-2 p-4", className),
@@ -3724,7 +4702,7 @@ function SheetTitle(_a) {
3724
4702
  } = _b, props = __objRest(_b, [
3725
4703
  "className"
3726
4704
  ]);
3727
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4705
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3728
4706
  import_dialog2.Dialog.Title,
3729
4707
  __spreadValues({
3730
4708
  className: cn("text-lg font-semibold text-foreground", className),
@@ -3738,7 +4716,7 @@ function SheetDescription(_a) {
3738
4716
  } = _b, props = __objRest(_b, [
3739
4717
  "className"
3740
4718
  ]);
3741
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4719
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3742
4720
  import_dialog2.Dialog.Description,
3743
4721
  __spreadValues({
3744
4722
  className: cn("text-sm text-muted-foreground", className),
@@ -3747,22 +4725,116 @@ function SheetDescription(_a) {
3747
4725
  );
3748
4726
  }
3749
4727
 
4728
+ // src/components/ui/slider.tsx
4729
+ var React11 = __toESM(require("react"));
4730
+ var import_jsx_runtime40 = require("react/jsx-runtime");
4731
+ var Slider = React11.forwardRef(
4732
+ (_a, ref) => {
4733
+ var _b = _a, {
4734
+ className,
4735
+ value,
4736
+ defaultValue = 0,
4737
+ min = 0,
4738
+ max = 100,
4739
+ step = 1,
4740
+ disabled = false,
4741
+ onValueChange
4742
+ } = _b, props = __objRest(_b, [
4743
+ "className",
4744
+ "value",
4745
+ "defaultValue",
4746
+ "min",
4747
+ "max",
4748
+ "step",
4749
+ "disabled",
4750
+ "onValueChange"
4751
+ ]);
4752
+ const [internalValue, setInternalValue] = React11.useState(defaultValue);
4753
+ const currentValue = value !== void 0 ? value : internalValue;
4754
+ const percentage = (currentValue - min) / (max - min) * 100;
4755
+ const handleChange = (e) => {
4756
+ const newValue = Number(e.target.value);
4757
+ if (value === void 0) {
4758
+ setInternalValue(newValue);
4759
+ }
4760
+ onValueChange == null ? void 0 : onValueChange(newValue);
4761
+ };
4762
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
4763
+ "div",
4764
+ {
4765
+ "data-slot": "slider",
4766
+ className: cn(
4767
+ "relative flex w-full touch-none items-center select-none",
4768
+ disabled && "opacity-50",
4769
+ className
4770
+ ),
4771
+ children: [
4772
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4773
+ "div",
4774
+ {
4775
+ "data-slot": "slider-track",
4776
+ className: "relative h-2 w-full overflow-hidden rounded-full bg-muted",
4777
+ children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4778
+ "div",
4779
+ {
4780
+ "data-slot": "slider-range",
4781
+ className: "absolute h-full rounded-full bg-primary",
4782
+ style: { width: `${percentage}%` }
4783
+ }
4784
+ )
4785
+ }
4786
+ ),
4787
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4788
+ "input",
4789
+ __spreadValues({
4790
+ ref,
4791
+ type: "range",
4792
+ min,
4793
+ max,
4794
+ step,
4795
+ value: currentValue,
4796
+ disabled,
4797
+ onChange: handleChange,
4798
+ className: cn(
4799
+ "absolute inset-0 h-full w-full cursor-pointer opacity-0",
4800
+ disabled && "cursor-not-allowed"
4801
+ )
4802
+ }, props)
4803
+ ),
4804
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4805
+ "div",
4806
+ {
4807
+ "data-slot": "slider-thumb",
4808
+ className: cn(
4809
+ "pointer-events-none absolute top-1/2 -translate-x-1/2 -translate-y-1/2",
4810
+ "block size-5 rounded-full border-2 border-primary bg-background shadow-sm"
4811
+ ),
4812
+ style: { left: `${percentage}%` }
4813
+ }
4814
+ )
4815
+ ]
4816
+ }
4817
+ );
4818
+ }
4819
+ );
4820
+ Slider.displayName = "Slider";
4821
+
3750
4822
  // src/components/ui/sonner.tsx
3751
- var import_lucide_react15 = require("lucide-react");
4823
+ var import_lucide_react17 = require("lucide-react");
3752
4824
  var import_sonner = require("sonner");
3753
- var import_jsx_runtime33 = require("react/jsx-runtime");
4825
+ var import_jsx_runtime41 = require("react/jsx-runtime");
3754
4826
  function Toaster(_a) {
3755
4827
  var _b = _a, { theme = "light" } = _b, props = __objRest(_b, ["theme"]);
3756
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4828
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3757
4829
  import_sonner.Toaster,
3758
4830
  __spreadValues({
3759
4831
  className: "toaster group",
3760
4832
  icons: {
3761
- success: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react15.CircleCheckIcon, { className: "size-4" }),
3762
- info: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react15.InfoIcon, { className: "size-4" }),
3763
- warning: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react15.TriangleAlertIcon, { className: "size-4" }),
3764
- error: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react15.OctagonXIcon, { className: "size-4" }),
3765
- loading: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react15.Loader2Icon, { className: "size-4 animate-spin" })
4833
+ success: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react17.CircleCheckIcon, { className: "size-4" }),
4834
+ info: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react17.InfoIcon, { className: "size-4" }),
4835
+ warning: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react17.TriangleAlertIcon, { className: "size-4" }),
4836
+ error: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react17.OctagonXIcon, { className: "size-4" }),
4837
+ loading: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react17.Loader2Icon, { className: "size-4 animate-spin" })
3766
4838
  },
3767
4839
  style: {
3768
4840
  "--normal-bg": "var(--popover)",
@@ -3780,39 +4852,10 @@ function Toaster(_a) {
3780
4852
  );
3781
4853
  }
3782
4854
 
3783
- // src/components/ui/spinner.tsx
3784
- var import_class_variance_authority7 = require("class-variance-authority");
3785
- var import_lucide_react16 = require("lucide-react");
3786
- var import_jsx_runtime34 = require("react/jsx-runtime");
3787
- var spinnerVariants = (0, import_class_variance_authority7.cva)("animate-spin shrink-0", {
3788
- variants: {
3789
- size: {
3790
- sm: "size-3",
3791
- default: "size-4",
3792
- lg: "size-6",
3793
- xl: "size-8"
3794
- }
3795
- },
3796
- defaultVariants: {
3797
- size: "default"
3798
- }
3799
- });
3800
- function Spinner(_a) {
3801
- var _b = _a, { className, size } = _b, props = __objRest(_b, ["className", "size"]);
3802
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3803
- import_lucide_react16.LoaderCircle,
3804
- __spreadValues({
3805
- "aria-hidden": "true",
3806
- className: cn(spinnerVariants({ size }), className),
3807
- "data-slot": "spinner"
3808
- }, props)
3809
- );
3810
- }
3811
-
3812
4855
  // src/components/ui/switch.tsx
3813
- var import_react5 = require("react");
4856
+ var import_react9 = require("react");
3814
4857
  var import_switch = require("@base-ui/react/switch");
3815
- var import_jsx_runtime35 = require("react/jsx-runtime");
4858
+ var import_jsx_runtime42 = require("react/jsx-runtime");
3816
4859
  function Switch(_a) {
3817
4860
  var _b = _a, {
3818
4861
  className,
@@ -3821,7 +4864,7 @@ function Switch(_a) {
3821
4864
  "className",
3822
4865
  "size"
3823
4866
  ]);
3824
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4867
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3825
4868
  import_switch.Switch.Root,
3826
4869
  __spreadProps(__spreadValues({
3827
4870
  className: cn(
@@ -3838,7 +4881,7 @@ function Switch(_a) {
3838
4881
  "data-size": size,
3839
4882
  "data-slot": "switch"
3840
4883
  }, props), {
3841
- children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4884
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3842
4885
  import_switch.Switch.Thumb,
3843
4886
  {
3844
4887
  className: cn(
@@ -3877,9 +4920,9 @@ function SwitchCard(_a) {
3877
4920
  "switchPosition",
3878
4921
  "size"
3879
4922
  ]);
3880
- const [internalChecked, setInternalChecked] = (0, import_react5.useState)(defaultChecked != null ? defaultChecked : false);
4923
+ const [internalChecked, setInternalChecked] = (0, import_react9.useState)(defaultChecked != null ? defaultChecked : false);
3881
4924
  const isChecked = checked != null ? checked : internalChecked;
3882
- const switchElement = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4925
+ const switchElement = /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3883
4926
  Switch,
3884
4927
  __spreadValues({
3885
4928
  "aria-invalid": error || void 0,
@@ -3893,11 +4936,11 @@ function SwitchCard(_a) {
3893
4936
  size
3894
4937
  }, props)
3895
4938
  );
3896
- const contentElement = /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex flex-col gap-1", children: [
3897
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-sm font-medium leading-none", children: label }),
3898
- description ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-sm text-muted-foreground", children: description }) : null
4939
+ const contentElement = /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "flex flex-col gap-1", children: [
4940
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "text-sm font-medium leading-none", children: label }),
4941
+ description ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "text-sm text-muted-foreground", children: description }) : null
3899
4942
  ] });
3900
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4943
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3901
4944
  "label",
3902
4945
  {
3903
4946
  className: cn(
@@ -3908,10 +4951,10 @@ function SwitchCard(_a) {
3908
4951
  className
3909
4952
  ),
3910
4953
  "data-slot": "switch-card",
3911
- children: switchPosition === "left" ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
4954
+ children: switchPosition === "left" ? /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
3912
4955
  switchElement,
3913
4956
  contentElement
3914
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
4957
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
3915
4958
  contentElement,
3916
4959
  switchElement
3917
4960
  ] })
@@ -3922,7 +4965,7 @@ function SwitchCard(_a) {
3922
4965
  // src/components/ui/tabs.tsx
3923
4966
  var import_class_variance_authority8 = require("class-variance-authority");
3924
4967
  var import_tabs = require("@base-ui/react/tabs");
3925
- var import_jsx_runtime36 = require("react/jsx-runtime");
4968
+ var import_jsx_runtime43 = require("react/jsx-runtime");
3926
4969
  function Tabs(_a) {
3927
4970
  var _b = _a, {
3928
4971
  className,
@@ -3931,7 +4974,7 @@ function Tabs(_a) {
3931
4974
  "className",
3932
4975
  "orientation"
3933
4976
  ]);
3934
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
4977
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3935
4978
  import_tabs.Tabs.Root,
3936
4979
  __spreadValues({
3937
4980
  className: cn(
@@ -3965,7 +5008,7 @@ function TabsList(_a) {
3965
5008
  "className",
3966
5009
  "variant"
3967
5010
  ]);
3968
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
5011
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3969
5012
  import_tabs.Tabs.List,
3970
5013
  __spreadValues({
3971
5014
  className: cn(tabsListVariants({ variant }), className),
@@ -3980,7 +5023,7 @@ function TabsTrigger(_a) {
3980
5023
  } = _b, props = __objRest(_b, [
3981
5024
  "className"
3982
5025
  ]);
3983
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
5026
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3984
5027
  import_tabs.Tabs.Tab,
3985
5028
  __spreadValues({
3986
5029
  className: cn(
@@ -4021,7 +5064,7 @@ function TabsContent(_a) {
4021
5064
  } = _b, props = __objRest(_b, [
4022
5065
  "className"
4023
5066
  ]);
4024
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
5067
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4025
5068
  import_tabs.Tabs.Panel,
4026
5069
  __spreadValues({
4027
5070
  className: cn("flex-1 outline-none", className),
@@ -4031,14 +5074,14 @@ function TabsContent(_a) {
4031
5074
  }
4032
5075
 
4033
5076
  // src/components/ui/toggle-group.tsx
4034
- var React7 = __toESM(require("react"));
5077
+ var React12 = __toESM(require("react"));
4035
5078
  var import_toggle_group = require("@base-ui/react/toggle-group");
4036
5079
  var import_toggle2 = require("@base-ui/react/toggle");
4037
5080
 
4038
5081
  // src/components/ui/toggle.tsx
4039
5082
  var import_class_variance_authority9 = require("class-variance-authority");
4040
5083
  var import_toggle = require("@base-ui/react/toggle");
4041
- var import_jsx_runtime37 = require("react/jsx-runtime");
5084
+ var import_jsx_runtime44 = require("react/jsx-runtime");
4042
5085
  var toggleVariants = (0, import_class_variance_authority9.cva)(
4043
5086
  "inline-flex items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-pressed:bg-primary/10 data-pressed:inset-ring data-pressed:inset-ring-primary data-pressed:text-foreground data-pressed:hover:bg-primary/10 data-pressed:hover:text-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
4044
5087
  {
@@ -4069,7 +5112,7 @@ function Toggle(_a) {
4069
5112
  "variant",
4070
5113
  "size"
4071
5114
  ]);
4072
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
5115
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
4073
5116
  import_toggle.Toggle,
4074
5117
  __spreadValues({
4075
5118
  className: cn(toggleVariants({ variant, size, className })),
@@ -4079,8 +5122,8 @@ function Toggle(_a) {
4079
5122
  }
4080
5123
 
4081
5124
  // src/components/ui/toggle-group.tsx
4082
- var import_jsx_runtime38 = require("react/jsx-runtime");
4083
- var ToggleGroupContext = React7.createContext({
5125
+ var import_jsx_runtime45 = require("react/jsx-runtime");
5126
+ var ToggleGroupContext = React12.createContext({
4084
5127
  size: "default",
4085
5128
  variant: "default",
4086
5129
  spacing: 0
@@ -4101,7 +5144,7 @@ function ToggleGroup(_a) {
4101
5144
  "type",
4102
5145
  "children"
4103
5146
  ]);
4104
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5147
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4105
5148
  import_toggle_group.ToggleGroup,
4106
5149
  __spreadProps(__spreadValues({
4107
5150
  className: cn(
@@ -4116,7 +5159,7 @@ function ToggleGroup(_a) {
4116
5159
  multiple: type === "multiple",
4117
5160
  style: { "--gap": spacing }
4118
5161
  }, props), {
4119
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ToggleGroupContext.Provider, { value: { variant, size, spacing }, children })
5162
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(ToggleGroupContext.Provider, { value: { variant, size, spacing }, children })
4120
5163
  })
4121
5164
  );
4122
5165
  }
@@ -4132,8 +5175,8 @@ function ToggleGroupItem(_a) {
4132
5175
  "variant",
4133
5176
  "size"
4134
5177
  ]);
4135
- const context = React7.useContext(ToggleGroupContext);
4136
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5178
+ const context = React12.useContext(ToggleGroupContext);
5179
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4137
5180
  import_toggle2.Toggle,
4138
5181
  __spreadProps(__spreadValues({
4139
5182
  className: cn(
@@ -4158,14 +5201,14 @@ function ToggleGroupItem(_a) {
4158
5201
 
4159
5202
  // src/components/ui/tooltip.tsx
4160
5203
  var import_tooltip = require("@base-ui/react/tooltip");
4161
- var import_jsx_runtime39 = require("react/jsx-runtime");
5204
+ var import_jsx_runtime46 = require("react/jsx-runtime");
4162
5205
  function TooltipProvider(_a) {
4163
5206
  var _b = _a, {
4164
5207
  delay = 0
4165
5208
  } = _b, props = __objRest(_b, [
4166
5209
  "delay"
4167
5210
  ]);
4168
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5211
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4169
5212
  import_tooltip.Tooltip.Provider,
4170
5213
  __spreadValues({
4171
5214
  "data-slot": "tooltip-provider",
@@ -4173,13 +5216,13 @@ function TooltipProvider(_a) {
4173
5216
  }, props)
4174
5217
  );
4175
5218
  }
4176
- function Tooltip(_a) {
5219
+ function Tooltip5(_a) {
4177
5220
  var props = __objRest(_a, []);
4178
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_tooltip.Tooltip.Root, __spreadValues({ "data-slot": "tooltip" }, props));
5221
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_tooltip.Tooltip.Root, __spreadValues({ "data-slot": "tooltip" }, props));
4179
5222
  }
4180
5223
  function TooltipTrigger(_a) {
4181
5224
  var props = __objRest(_a, []);
4182
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_tooltip.Tooltip.Trigger, __spreadValues({ "data-slot": "tooltip-trigger" }, props));
5225
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_tooltip.Tooltip.Trigger, __spreadValues({ "data-slot": "tooltip-trigger" }, props));
4183
5226
  }
4184
5227
  function TooltipContent(_a) {
4185
5228
  var _b = _a, {
@@ -4194,8 +5237,8 @@ function TooltipContent(_a) {
4194
5237
  "style"
4195
5238
  ]);
4196
5239
  const themeVars = useThemeVars();
4197
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_tooltip.Tooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_tooltip.Tooltip.Positioner, { sideOffset, children: [
4198
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5240
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_tooltip.Tooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_tooltip.Tooltip.Positioner, { sideOffset, children: [
5241
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4199
5242
  import_tooltip.Tooltip.Popup,
4200
5243
  __spreadProps(__spreadValues({
4201
5244
  className: cn(
@@ -4208,7 +5251,7 @@ function TooltipContent(_a) {
4208
5251
  children
4209
5252
  })
4210
5253
  ),
4211
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5254
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4212
5255
  import_tooltip.Tooltip.Arrow,
4213
5256
  {
4214
5257
  className: "z-50 size-2.5 rotate-45 bg-brand-secondary"
@@ -4254,9 +5297,21 @@ function TooltipContent(_a) {
4254
5297
  CardFooter,
4255
5298
  CardHeader,
4256
5299
  CardTitle,
5300
+ CashflowBarChart,
4257
5301
  Checkbox,
4258
5302
  CheckboxCard,
4259
5303
  Chip,
5304
+ Combobox,
5305
+ ComboboxContent,
5306
+ ComboboxEmpty,
5307
+ ComboboxGroup,
5308
+ ComboboxGroupLabel,
5309
+ ComboboxInput,
5310
+ ComboboxItem,
5311
+ ComboboxList,
5312
+ ComboboxSeparator,
5313
+ ComboboxTrigger,
5314
+ ComboboxValue,
4260
5315
  DataTable,
4261
5316
  DataTableColumnHeader,
4262
5317
  DataTablePagination,
@@ -4304,6 +5359,7 @@ function TooltipContent(_a) {
4304
5359
  EmptyHeader,
4305
5360
  EmptyMedia,
4306
5361
  EmptyTitle,
5362
+ ExpenseBarChart,
4307
5363
  FONT_FAMILY_SANS,
4308
5364
  Field,
4309
5365
  FieldContent,
@@ -4315,6 +5371,7 @@ function TooltipContent(_a) {
4315
5371
  FieldSeparator,
4316
5372
  FieldSet,
4317
5373
  FieldTitle,
5374
+ IncomeBarChart,
4318
5375
  Input,
4319
5376
  InputGroup,
4320
5377
  InputGroupAddon,
@@ -4366,6 +5423,7 @@ function TooltipContent(_a) {
4366
5423
  SheetTitle,
4367
5424
  SheetTrigger,
4368
5425
  Skeleton,
5426
+ Slider,
4369
5427
  Spinner,
4370
5428
  Switch,
4371
5429
  SwitchCard,
@@ -4397,6 +5455,7 @@ function TooltipContent(_a) {
4397
5455
  TooltipContent,
4398
5456
  TooltipProvider,
4399
5457
  TooltipTrigger,
5458
+ TransactionsIncomeExpenseBarChart,
4400
5459
  badgeVariants,
4401
5460
  buttonVariants,
4402
5461
  cn,