@motor-hero/ui-kit 0.25.0 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -32,6 +32,7 @@ var index_exports = {};
32
32
  __export(index_exports, {
33
33
  AppShell: () => AppShell,
34
34
  AuthCard: () => AuthCard,
35
+ BaseDialog: () => BaseDialog,
35
36
  ColorPicker: () => ColorPicker,
36
37
  Combobox: () => Combobox,
37
38
  ConfirmDialog: () => ConfirmDialog,
@@ -443,7 +444,7 @@ function FormField({ label, htmlFor, error, required, children, className }) {
443
444
  ] });
444
445
  }
445
446
 
446
- // src/components/form-dialog.tsx
447
+ // src/components/base-dialog.tsx
447
448
  var Dialog = __toESM(require("@radix-ui/react-dialog"), 1);
448
449
  var import_lucide_react2 = require("lucide-react");
449
450
  var React = __toESM(require("react"), 1);
@@ -455,43 +456,8 @@ function cn(...inputs) {
455
456
  return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
456
457
  }
457
458
 
458
- // src/components/form-dialog.tsx
459
+ // src/components/base-dialog.tsx
459
460
  var import_jsx_runtime10 = require("react/jsx-runtime");
460
- function FormDialogLayout({
461
- title,
462
- children,
463
- onSubmit,
464
- submitLabel = "Salvar",
465
- cancelLabel = "Cancelar",
466
- onCancel,
467
- isSubmitting = false,
468
- isDisabled = false
469
- }) {
470
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("form", { onSubmit, children: [
471
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex flex-col space-y-1.5 text-center sm:text-left", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h2", { className: "text-lg font-semibold leading-none tracking-tight", children: title }) }),
472
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "space-y-4 py-4", children }),
473
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
474
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
475
- "button",
476
- {
477
- type: "button",
478
- onClick: onCancel,
479
- className: "inline-flex h-9 items-center justify-center rounded-md border border-input bg-background px-4 text-sm font-medium shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground cursor-pointer disabled:pointer-events-none disabled:opacity-50",
480
- children: cancelLabel
481
- }
482
- ),
483
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
484
- "button",
485
- {
486
- type: "submit",
487
- disabled: isSubmitting || isDisabled,
488
- className: "inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground shadow transition-colors hover:bg-primary/90 cursor-pointer disabled:pointer-events-none disabled:opacity-50",
489
- children: isSubmitting ? "Salvando..." : submitLabel
490
- }
491
- )
492
- ] })
493
- ] });
494
- }
495
461
  var sizeClasses2 = {
496
462
  sm: "sm:max-w-sm",
497
463
  md: "sm:max-w-md",
@@ -499,16 +465,16 @@ var sizeClasses2 = {
499
465
  xl: "sm:max-w-xl",
500
466
  "2xl": "sm:max-w-2xl"
501
467
  };
502
- function FormDialog({
468
+ function BaseDialog({
503
469
  open,
504
470
  onOpenChange,
505
471
  title,
506
472
  description,
507
473
  children,
508
474
  footer,
509
- onSubmit,
510
475
  size = "lg",
511
- className
476
+ className,
477
+ contentWrapper = (content) => content
512
478
  }) {
513
479
  React.useEffect(() => {
514
480
  if (open) return;
@@ -553,37 +519,77 @@ function FormDialog({
553
519
  sizeClasses2[size],
554
520
  className
555
521
  ),
556
- children: onSubmit ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
557
- "form",
558
- {
559
- onSubmit,
560
- className: "flex min-h-0 flex-1 flex-col",
561
- children: body
562
- }
563
- ) : body
522
+ children: contentWrapper(body)
564
523
  }
565
524
  )
566
525
  ] }) });
567
526
  }
568
527
 
569
- // src/components/auth-card.tsx
528
+ // src/components/form-dialog.tsx
570
529
  var import_jsx_runtime11 = require("react/jsx-runtime");
530
+ function FormDialogLayout({
531
+ title,
532
+ children,
533
+ onSubmit,
534
+ submitLabel = "Salvar",
535
+ cancelLabel = "Cancelar",
536
+ onCancel,
537
+ isSubmitting = false,
538
+ isDisabled = false
539
+ }) {
540
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("form", { onSubmit, children: [
541
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex flex-col space-y-1.5 text-center sm:text-left", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("h2", { className: "text-lg font-semibold leading-none tracking-tight", children: title }) }),
542
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "space-y-4 py-4", children }),
543
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
544
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
545
+ "button",
546
+ {
547
+ type: "button",
548
+ onClick: onCancel,
549
+ className: "inline-flex h-9 items-center justify-center rounded-md border border-input bg-background px-4 text-sm font-medium shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground cursor-pointer disabled:pointer-events-none disabled:opacity-50",
550
+ children: cancelLabel
551
+ }
552
+ ),
553
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
554
+ "button",
555
+ {
556
+ type: "submit",
557
+ disabled: isSubmitting || isDisabled,
558
+ className: "inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground shadow transition-colors hover:bg-primary/90 cursor-pointer disabled:pointer-events-none disabled:opacity-50",
559
+ children: isSubmitting ? "Salvando..." : submitLabel
560
+ }
561
+ )
562
+ ] })
563
+ ] });
564
+ }
565
+ function FormDialog({ onSubmit, ...rest }) {
566
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
567
+ BaseDialog,
568
+ {
569
+ ...rest,
570
+ contentWrapper: onSubmit ? (content) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("form", { onSubmit, className: "flex min-h-0 flex-1 flex-col", children: content }) : void 0
571
+ }
572
+ );
573
+ }
574
+
575
+ // src/components/auth-card.tsx
576
+ var import_jsx_runtime12 = require("react/jsx-runtime");
571
577
  function AuthCard({ title, description, children, footer }) {
572
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex min-h-screen items-center justify-center px-4", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "w-full max-w-sm rounded-lg border bg-card p-6 shadow-sm", children: [
573
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "mb-6 text-center", children: [
574
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("h1", { className: "text-2xl font-semibold tracking-tight", children: title }),
575
- description && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: description })
578
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex min-h-screen items-center justify-center px-4", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "w-full max-w-sm rounded-lg border bg-card p-6 shadow-sm", children: [
579
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "mb-6 text-center", children: [
580
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("h1", { className: "text-2xl font-semibold tracking-tight", children: title }),
581
+ description && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: description })
576
582
  ] }),
577
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "space-y-4", children }),
578
- footer && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "mt-4", children: footer })
583
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "space-y-4", children }),
584
+ footer && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "mt-4", children: footer })
579
585
  ] }) });
580
586
  }
581
587
 
582
588
  // src/components/pagination.tsx
583
- var import_jsx_runtime12 = require("react/jsx-runtime");
589
+ var import_jsx_runtime13 = require("react/jsx-runtime");
584
590
  function Pagination({ page, onPageChange, hasNextPage, hasPreviousPage, className }) {
585
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: `flex items-center justify-end gap-4 ${className ?? ""}`, children: [
586
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
591
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: `flex items-center justify-end gap-4 ${className ?? ""}`, children: [
592
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
587
593
  "button",
588
594
  {
589
595
  type: "button",
@@ -593,11 +599,11 @@ function Pagination({ page, onPageChange, hasNextPage, hasPreviousPage, classNam
593
599
  children: "Anterior"
594
600
  }
595
601
  ),
596
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "text-sm text-muted-foreground", children: [
602
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "text-sm text-muted-foreground", children: [
597
603
  "P\xE1gina ",
598
604
  page
599
605
  ] }),
600
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
606
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
601
607
  "button",
602
608
  {
603
609
  type: "button",
@@ -611,18 +617,18 @@ function Pagination({ page, onPageChange, hasNextPage, hasPreviousPage, classNam
611
617
  }
612
618
 
613
619
  // src/components/table-skeleton.tsx
614
- var import_jsx_runtime13 = require("react/jsx-runtime");
620
+ var import_jsx_runtime14 = require("react/jsx-runtime");
615
621
  function TableSkeleton({ rows = 5, columns = 4 }) {
616
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_jsx_runtime13.Fragment, { children: Array.from({ length: rows }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("tr", { className: "border-b transition-colors", children: Array.from({ length: columns }).map((_2, j) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("td", { className: "p-4 align-middle", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "h-5 w-full animate-pulse rounded bg-muted" }) }, j)) }, i)) });
622
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_jsx_runtime14.Fragment, { children: Array.from({ length: rows }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("tr", { className: "border-b transition-colors", children: Array.from({ length: columns }).map((_2, j) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("td", { className: "p-4 align-middle", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "h-5 w-full animate-pulse rounded bg-muted" }) }, j)) }, i)) });
617
623
  }
618
624
 
619
625
  // src/components/search-input.tsx
620
626
  var React2 = __toESM(require("react"), 1);
621
- var import_jsx_runtime14 = require("react/jsx-runtime");
627
+ var import_jsx_runtime15 = require("react/jsx-runtime");
622
628
  var SearchInput = React2.forwardRef(
623
629
  ({ containerClassName, className, ...props }, ref) => {
624
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: `relative flex-1 ${containerClassName ?? ""}`, children: [
625
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
630
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: `relative flex-1 ${containerClassName ?? ""}`, children: [
631
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
626
632
  "svg",
627
633
  {
628
634
  xmlns: "http://www.w3.org/2000/svg",
@@ -636,12 +642,12 @@ var SearchInput = React2.forwardRef(
636
642
  strokeLinejoin: "round",
637
643
  className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground",
638
644
  children: [
639
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("circle", { cx: "11", cy: "11", r: "8" }),
640
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("path", { d: "m21 21-4.3-4.3" })
645
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("circle", { cx: "11", cy: "11", r: "8" }),
646
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("path", { d: "m21 21-4.3-4.3" })
641
647
  ]
642
648
  }
643
649
  ),
644
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
650
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
645
651
  "input",
646
652
  {
647
653
  ref,
@@ -658,11 +664,11 @@ SearchInput.displayName = "SearchInput";
658
664
  // src/components/password-input.tsx
659
665
  var import_lucide_react3 = require("lucide-react");
660
666
  var React3 = __toESM(require("react"), 1);
661
- var import_jsx_runtime15 = require("react/jsx-runtime");
667
+ var import_jsx_runtime16 = require("react/jsx-runtime");
662
668
  var PasswordInput = React3.forwardRef(({ containerClassName, className, ...props }, ref) => {
663
669
  const [visible, setVisible] = React3.useState(false);
664
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: `relative ${containerClassName ?? ""}`, children: [
665
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
670
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: `relative ${containerClassName ?? ""}`, children: [
671
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
666
672
  "input",
667
673
  {
668
674
  ref,
@@ -671,7 +677,7 @@ var PasswordInput = React3.forwardRef(({ containerClassName, className, ...props
671
677
  ...props
672
678
  }
673
679
  ),
674
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
680
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
675
681
  "button",
676
682
  {
677
683
  type: "button",
@@ -679,7 +685,7 @@ var PasswordInput = React3.forwardRef(({ containerClassName, className, ...props
679
685
  "aria-label": visible ? "Ocultar senha" : "Mostrar senha",
680
686
  tabIndex: -1,
681
687
  className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground transition-colors hover:text-foreground",
682
- children: visible ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react3.EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react3.Eye, { className: "h-4 w-4" })
688
+ children: visible ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react3.EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react3.Eye, { className: "h-4 w-4" })
683
689
  }
684
690
  )
685
691
  ] });
@@ -745,7 +751,7 @@ function useIsDesktop() {
745
751
  }
746
752
 
747
753
  // src/components/combobox.tsx
748
- var import_jsx_runtime16 = require("react/jsx-runtime");
754
+ var import_jsx_runtime17 = require("react/jsx-runtime");
749
755
  function Combobox({
750
756
  options,
751
757
  value,
@@ -792,7 +798,7 @@ function Combobox({
792
798
  loading,
793
799
  onLoadMore
794
800
  });
795
- const trigger = /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
801
+ const trigger = /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
796
802
  "button",
797
803
  {
798
804
  type: "button",
@@ -807,20 +813,20 @@ function Combobox({
807
813
  className
808
814
  ),
809
815
  children: [
810
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: cn("truncate", !selected && "text-muted-foreground"), children: selected ? selected.label : placeholder }),
811
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react4.ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50" })
816
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: cn("truncate", !selected && "text-muted-foreground"), children: selected ? selected.label : placeholder }),
817
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50" })
812
818
  ]
813
819
  }
814
820
  );
815
- const command = /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
821
+ const command = /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
816
822
  import_cmdk.Command,
817
823
  {
818
824
  shouldFilter: !isServer,
819
825
  className: "flex h-full w-full flex-col overflow-hidden",
820
826
  children: [
821
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex items-center border-b px-3", children: [
822
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react4.Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
823
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
827
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center border-b px-3", children: [
828
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
829
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
824
830
  import_cmdk.Command.Input,
825
831
  {
826
832
  placeholder: searchPlaceholder,
@@ -829,28 +835,28 @@ function Combobox({
829
835
  }
830
836
  )
831
837
  ] }),
832
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
838
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
833
839
  import_cmdk.Command.List,
834
840
  {
835
841
  ref: listRef,
836
842
  className: "max-h-[50vh] overflow-y-auto overflow-x-hidden p-1 sm:max-h-60",
837
843
  children: [
838
- !isServer && !showCreate && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_cmdk.Command.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
839
- showCreate && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
844
+ !isServer && !showCreate && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_cmdk.Command.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
845
+ showCreate && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
840
846
  import_cmdk.Command.Item,
841
847
  {
842
848
  value: trimmedSearch,
843
849
  onSelect: () => handleSelect(trimmedSearch),
844
850
  className: "relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-2.5 text-sm outline-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground sm:py-1.5",
845
851
  children: [
846
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react4.Plus, { className: "h-4 w-4 shrink-0" }),
847
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "truncate", children: (formatCreateLabel ?? ((text) => `Usar "${text}"`))(
852
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.Plus, { className: "h-4 w-4 shrink-0" }),
853
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "truncate", children: (formatCreateLabel ?? ((text) => `Usar "${text}"`))(
848
854
  trimmedSearch
849
855
  ) })
850
856
  ]
851
857
  }
852
858
  ),
853
- options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
859
+ options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
854
860
  import_cmdk.Command.Item,
855
861
  {
856
862
  value: isServer ? option.value : option.label,
@@ -858,7 +864,7 @@ function Combobox({
858
864
  onSelect: () => handleSelect(option.value),
859
865
  className: "relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-2.5 text-sm outline-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 sm:py-1.5",
860
866
  children: [
861
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
867
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
862
868
  import_lucide_react4.Check,
863
869
  {
864
870
  className: cn(
@@ -867,14 +873,14 @@ function Combobox({
867
873
  )
868
874
  }
869
875
  ),
870
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "truncate", children: option.label })
876
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "truncate", children: option.label })
871
877
  ]
872
878
  },
873
879
  option.value
874
880
  )),
875
- isServer && !loading && options.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
876
- isServer && loading && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "flex items-center justify-center py-6", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react4.Loader2, { className: "h-4 w-4 animate-spin text-muted-foreground" }) }),
877
- isServer && hasMore && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1" })
881
+ isServer && !loading && options.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
882
+ isServer && loading && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex items-center justify-center py-6", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.Loader2, { className: "h-4 w-4 animate-spin text-muted-foreground" }) }),
883
+ isServer && hasMore && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1" })
878
884
  ]
879
885
  }
880
886
  )
@@ -882,9 +888,9 @@ function Combobox({
882
888
  }
883
889
  );
884
890
  if (isDesktop) {
885
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(PopoverPrimitive.Root, { open, onOpenChange: handleOpenChange, children: [
886
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(PopoverPrimitive.Trigger, { asChild: true, children: trigger }),
887
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(PopoverPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
891
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(PopoverPrimitive.Root, { open, onOpenChange: handleOpenChange, children: [
892
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(PopoverPrimitive.Trigger, { asChild: true, children: trigger }),
893
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(PopoverPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
888
894
  PopoverPrimitive.Content,
889
895
  {
890
896
  align: "start",
@@ -896,13 +902,13 @@ function Combobox({
896
902
  ) })
897
903
  ] });
898
904
  }
899
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_vaul.Drawer.Root, { open, onOpenChange: handleOpenChange, children: [
900
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_vaul.Drawer.Trigger, { asChild: true, children: trigger }),
901
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_vaul.Drawer.Portal, { children: [
902
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_vaul.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
903
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_vaul.Drawer.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85vh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
904
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_vaul.Drawer.Title, { className: "sr-only", children: placeholder }),
905
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
905
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_vaul.Drawer.Root, { open, onOpenChange: handleOpenChange, children: [
906
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_vaul.Drawer.Trigger, { asChild: true, children: trigger }),
907
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_vaul.Drawer.Portal, { children: [
908
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_vaul.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
909
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_vaul.Drawer.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85vh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
910
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_vaul.Drawer.Title, { className: "sr-only", children: placeholder }),
911
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
906
912
  command
907
913
  ] })
908
914
  ] })
@@ -915,7 +921,7 @@ var import_cmdk2 = require("cmdk");
915
921
  var import_lucide_react5 = require("lucide-react");
916
922
  var React7 = __toESM(require("react"), 1);
917
923
  var import_vaul2 = require("vaul");
918
- var import_jsx_runtime17 = require("react/jsx-runtime");
924
+ var import_jsx_runtime18 = require("react/jsx-runtime");
919
925
  function MultiCombobox({
920
926
  options,
921
927
  value,
@@ -956,7 +962,7 @@ function MultiCombobox({
956
962
  const removeValue = (optionValue) => {
957
963
  onChange(value.filter((v) => v !== optionValue));
958
964
  };
959
- const trigger = /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
965
+ const trigger = /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
960
966
  "div",
961
967
  {
962
968
  id,
@@ -978,13 +984,13 @@ function MultiCombobox({
978
984
  className
979
985
  ),
980
986
  children: [
981
- selected.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-muted-foreground", children: placeholder }) : selected.map((option) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
987
+ selected.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-muted-foreground", children: placeholder }) : selected.map((option) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
982
988
  "span",
983
989
  {
984
990
  className: "inline-flex items-center gap-1 rounded bg-secondary px-1.5 py-0.5 text-xs text-secondary-foreground",
985
991
  children: [
986
992
  option.label,
987
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
993
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
988
994
  "button",
989
995
  {
990
996
  type: "button",
@@ -996,26 +1002,26 @@ function MultiCombobox({
996
1002
  },
997
1003
  onPointerDown: (event) => event.stopPropagation(),
998
1004
  className: "rounded-sm opacity-60 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
999
- children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react5.X, { className: "h-3 w-3" })
1005
+ children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.X, { className: "h-3 w-3" })
1000
1006
  }
1001
1007
  )
1002
1008
  ]
1003
1009
  },
1004
1010
  option.value
1005
1011
  )),
1006
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react5.ChevronsUpDown, { className: "ml-auto h-4 w-4 shrink-0 opacity-50" })
1012
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.ChevronsUpDown, { className: "ml-auto h-4 w-4 shrink-0 opacity-50" })
1007
1013
  ]
1008
1014
  }
1009
1015
  );
1010
- const command = /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1016
+ const command = /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1011
1017
  import_cmdk2.Command,
1012
1018
  {
1013
1019
  shouldFilter: !isServer,
1014
1020
  className: "flex h-full w-full flex-col overflow-hidden",
1015
1021
  children: [
1016
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center border-b px-3", children: [
1017
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react5.Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
1018
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1022
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex items-center border-b px-3", children: [
1023
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
1024
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1019
1025
  import_cmdk2.Command.Input,
1020
1026
  {
1021
1027
  placeholder: searchPlaceholder,
@@ -1024,14 +1030,14 @@ function MultiCombobox({
1024
1030
  }
1025
1031
  )
1026
1032
  ] }),
1027
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1033
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1028
1034
  import_cmdk2.Command.List,
1029
1035
  {
1030
1036
  ref: listRef,
1031
1037
  className: "max-h-[50vh] overflow-y-auto overflow-x-hidden p-1 sm:max-h-60",
1032
1038
  children: [
1033
- !isServer && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_cmdk2.Command.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
1034
- options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1039
+ !isServer && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_cmdk2.Command.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
1040
+ options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1035
1041
  import_cmdk2.Command.Item,
1036
1042
  {
1037
1043
  value: isServer ? option.value : option.label,
@@ -1039,7 +1045,7 @@ function MultiCombobox({
1039
1045
  onSelect: () => toggleValue(option.value),
1040
1046
  className: "relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-2.5 text-sm outline-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 sm:py-1.5",
1041
1047
  children: [
1042
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1048
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1043
1049
  import_lucide_react5.Check,
1044
1050
  {
1045
1051
  className: cn(
@@ -1048,14 +1054,14 @@ function MultiCombobox({
1048
1054
  )
1049
1055
  }
1050
1056
  ),
1051
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "truncate", children: option.label })
1057
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "truncate", children: option.label })
1052
1058
  ]
1053
1059
  },
1054
1060
  option.value
1055
1061
  )),
1056
- isServer && !loading && options.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
1057
- isServer && loading && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex items-center justify-center py-6", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react5.Loader2, { className: "h-4 w-4 animate-spin text-muted-foreground" }) }),
1058
- isServer && hasMore && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1" })
1062
+ isServer && !loading && options.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
1063
+ isServer && loading && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "flex items-center justify-center py-6", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.Loader2, { className: "h-4 w-4 animate-spin text-muted-foreground" }) }),
1064
+ isServer && hasMore && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1" })
1059
1065
  ]
1060
1066
  }
1061
1067
  )
@@ -1063,9 +1069,9 @@ function MultiCombobox({
1063
1069
  }
1064
1070
  );
1065
1071
  if (isDesktop) {
1066
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(PopoverPrimitive2.Root, { open, onOpenChange: setOpen, children: [
1067
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(PopoverPrimitive2.Trigger, { asChild: true, disabled, children: trigger }),
1068
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(PopoverPrimitive2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1072
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(PopoverPrimitive2.Root, { open, onOpenChange: setOpen, children: [
1073
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(PopoverPrimitive2.Trigger, { asChild: true, disabled, children: trigger }),
1074
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(PopoverPrimitive2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1069
1075
  PopoverPrimitive2.Content,
1070
1076
  {
1071
1077
  align: "start",
@@ -1077,13 +1083,13 @@ function MultiCombobox({
1077
1083
  ) })
1078
1084
  ] });
1079
1085
  }
1080
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_vaul2.Drawer.Root, { open, onOpenChange: setOpen, children: [
1081
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_vaul2.Drawer.Trigger, { asChild: true, disabled, children: trigger }),
1082
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_vaul2.Drawer.Portal, { children: [
1083
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_vaul2.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1084
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_vaul2.Drawer.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85vh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
1085
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_vaul2.Drawer.Title, { className: "sr-only", children: placeholder }),
1086
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
1086
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_vaul2.Drawer.Root, { open, onOpenChange: setOpen, children: [
1087
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_vaul2.Drawer.Trigger, { asChild: true, disabled, children: trigger }),
1088
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_vaul2.Drawer.Portal, { children: [
1089
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_vaul2.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1090
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_vaul2.Drawer.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85vh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
1091
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_vaul2.Drawer.Title, { className: "sr-only", children: placeholder }),
1092
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
1087
1093
  command
1088
1094
  ] })
1089
1095
  ] })
@@ -1095,7 +1101,7 @@ var PopoverPrimitive3 = __toESM(require("@radix-ui/react-popover"), 1);
1095
1101
  var import_lucide_react6 = require("lucide-react");
1096
1102
  var React8 = __toESM(require("react"), 1);
1097
1103
  var import_react_colorful = require("react-colorful");
1098
- var import_jsx_runtime18 = require("react/jsx-runtime");
1104
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1099
1105
  function ColorPicker({
1100
1106
  value,
1101
1107
  onChange,
@@ -1108,8 +1114,8 @@ function ColorPicker({
1108
1114
  }) {
1109
1115
  const [open, setOpen] = React8.useState(false);
1110
1116
  const color = value || "";
1111
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(PopoverPrimitive3.Root, { open, onOpenChange: setOpen, modal: true, children: [
1112
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(PopoverPrimitive3.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1117
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(PopoverPrimitive3.Root, { open, onOpenChange: setOpen, children: [
1118
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(PopoverPrimitive3.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1113
1119
  "button",
1114
1120
  {
1115
1121
  type: "button",
@@ -1122,8 +1128,8 @@ function ColorPicker({
1122
1128
  className
1123
1129
  ),
1124
1130
  children: [
1125
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("span", { className: "flex items-center gap-2 truncate", children: [
1126
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1131
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { className: "flex items-center gap-2 truncate", children: [
1132
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1127
1133
  "span",
1128
1134
  {
1129
1135
  "aria-hidden": true,
@@ -1136,23 +1142,23 @@ function ColorPicker({
1136
1142
  }
1137
1143
  }
1138
1144
  ),
1139
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: cn("truncate", !color && "text-muted-foreground"), children: color || placeholder })
1145
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: cn("truncate", !color && "text-muted-foreground"), children: color || placeholder })
1140
1146
  ] }),
1141
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react6.ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50" })
1147
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react6.ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50" })
1142
1148
  ]
1143
1149
  }
1144
1150
  ) }),
1145
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(PopoverPrimitive3.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1151
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(PopoverPrimitive3.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1146
1152
  PopoverPrimitive3.Content,
1147
1153
  {
1148
1154
  align: "start",
1149
1155
  sideOffset: 4,
1150
1156
  className: "z-50 w-56 rounded-md border bg-popover p-3 text-popover-foreground shadow-md",
1151
- children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "mh-color-picker flex flex-col gap-3", children: [
1152
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_colorful.HexColorPicker, { color, onChange }),
1153
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex items-center gap-2", children: [
1154
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-sm text-muted-foreground", children: "#" }),
1155
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1157
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "mh-color-picker flex flex-col gap-3", children: [
1158
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_colorful.HexColorPicker, { color, onChange }),
1159
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center gap-2", children: [
1160
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "text-sm text-muted-foreground", children: "#" }),
1161
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1156
1162
  import_react_colorful.HexColorInput,
1157
1163
  {
1158
1164
  color,
@@ -1169,30 +1175,30 @@ function ColorPicker({
1169
1175
  }
1170
1176
 
1171
1177
  // src/components/stat-card.tsx
1172
- var import_jsx_runtime19 = require("react/jsx-runtime");
1178
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1173
1179
  function StatCard({ label, value, detail, icon, isLoading }) {
1174
1180
  if (isLoading) {
1175
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
1176
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center justify-between pb-2", children: [
1177
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
1178
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "h-4 w-4 animate-pulse rounded bg-muted" })
1181
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
1182
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex items-center justify-between pb-2", children: [
1183
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
1184
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "h-4 w-4 animate-pulse rounded bg-muted" })
1179
1185
  ] }),
1180
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "mt-2 h-7 w-16 animate-pulse rounded bg-muted" }),
1181
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "mt-1 h-4 w-20 animate-pulse rounded bg-muted" })
1186
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "mt-2 h-7 w-16 animate-pulse rounded bg-muted" }),
1187
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "mt-1 h-4 w-20 animate-pulse rounded bg-muted" })
1182
1188
  ] });
1183
1189
  }
1184
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
1185
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center justify-between pb-2", children: [
1186
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "text-sm font-medium text-muted-foreground", children: label }),
1187
- icon && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "text-muted-foreground", children: icon })
1190
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
1191
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex items-center justify-between pb-2", children: [
1192
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-sm font-medium text-muted-foreground", children: label }),
1193
+ icon && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-muted-foreground", children: icon })
1188
1194
  ] }),
1189
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "text-2xl font-bold", children: value }),
1190
- detail && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-xs text-muted-foreground", children: detail })
1195
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "text-2xl font-bold", children: value }),
1196
+ detail && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-xs text-muted-foreground", children: detail })
1191
1197
  ] });
1192
1198
  }
1193
1199
 
1194
1200
  // src/components/data-table-wrapper.tsx
1195
- var import_jsx_runtime20 = require("react/jsx-runtime");
1201
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1196
1202
  function DataTableWrapper({
1197
1203
  children,
1198
1204
  isEmpty,
@@ -1205,15 +1211,15 @@ function DataTableWrapper({
1205
1211
  hasNextPage = false,
1206
1212
  hasPreviousPage = false
1207
1213
  }) {
1208
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "space-y-4", children: [
1209
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "overflow-x-auto rounded-md border", children }),
1210
- !isLoading && isEmpty && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
1211
- emptyIcon && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
1212
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
1213
- emptyDescription && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
1214
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-4", children: [
1215
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "overflow-x-auto rounded-md border", children }),
1216
+ !isLoading && isEmpty && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
1217
+ emptyIcon && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
1218
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
1219
+ emptyDescription && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
1214
1220
  ] }),
1215
- page !== void 0 && onPageChange && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex items-center justify-end gap-4", children: [
1216
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1221
+ page !== void 0 && onPageChange && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center justify-end gap-4", children: [
1222
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1217
1223
  "button",
1218
1224
  {
1219
1225
  type: "button",
@@ -1223,11 +1229,11 @@ function DataTableWrapper({
1223
1229
  children: "Anterior"
1224
1230
  }
1225
1231
  ),
1226
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("span", { className: "text-sm text-muted-foreground", children: [
1232
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("span", { className: "text-sm text-muted-foreground", children: [
1227
1233
  "P\xE1gina ",
1228
1234
  page
1229
1235
  ] }),
1230
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1236
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1231
1237
  "button",
1232
1238
  {
1233
1239
  type: "button",
@@ -1243,7 +1249,7 @@ function DataTableWrapper({
1243
1249
 
1244
1250
  // src/components/mobile-card-list.tsx
1245
1251
  var import_react4 = require("react");
1246
- var import_jsx_runtime21 = require("react/jsx-runtime");
1252
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1247
1253
  var SCROLL_THRESHOLD = 8;
1248
1254
  function MobileCardList({
1249
1255
  data,
@@ -1274,26 +1280,26 @@ function MobileCardList({
1274
1280
  }
1275
1281
  };
1276
1282
  if (isLoading) {
1277
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: `space-y-3 ${className ?? ""}`, children: Array.from({ length: loadingCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "rounded-xl border p-4", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-3", children: [
1278
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex justify-between", children: [
1279
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "h-5 w-32 animate-pulse rounded bg-muted" }),
1280
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "h-5 w-16 animate-pulse rounded bg-muted" })
1283
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: `space-y-3 ${className ?? ""}`, children: Array.from({ length: loadingCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "rounded-xl border p-4", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "space-y-3", children: [
1284
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex justify-between", children: [
1285
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "h-5 w-32 animate-pulse rounded bg-muted" }),
1286
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "h-5 w-16 animate-pulse rounded bg-muted" })
1281
1287
  ] }),
1282
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "h-4 w-48 animate-pulse rounded bg-muted" }),
1283
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex justify-between", children: [
1284
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
1285
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" })
1288
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "h-4 w-48 animate-pulse rounded bg-muted" }),
1289
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex justify-between", children: [
1290
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
1291
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" })
1286
1292
  ] })
1287
1293
  ] }) }, i)) });
1288
1294
  }
1289
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1295
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1290
1296
  "div",
1291
1297
  {
1292
1298
  className: `space-y-3 ${className ?? ""}`,
1293
1299
  onTouchStart,
1294
1300
  onTouchMove,
1295
1301
  onClickCapture,
1296
- children: data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1302
+ children: data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1297
1303
  "div",
1298
1304
  {
1299
1305
  className: "rounded-xl border p-4 transition-all duration-150 hover:border-foreground/20 active:scale-[0.99]",
@@ -1306,7 +1312,7 @@ function MobileCardList({
1306
1312
  }
1307
1313
 
1308
1314
  // src/components/responsive-data-view.tsx
1309
- var import_jsx_runtime22 = require("react/jsx-runtime");
1315
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1310
1316
  function ResponsiveDataView({
1311
1317
  table,
1312
1318
  cards,
@@ -1317,13 +1323,13 @@ function ResponsiveDataView({
1317
1323
  emptyDescription,
1318
1324
  pagination
1319
1325
  }) {
1320
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "space-y-4", children: [
1321
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "hidden overflow-x-auto rounded-md border md:block", children: table }),
1322
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "md:hidden", children: cards }),
1323
- !isLoading && isEmpty && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
1324
- emptyIcon && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
1325
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
1326
- emptyDescription && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
1326
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-4", children: [
1327
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "hidden overflow-x-auto rounded-md border md:block", children: table }),
1328
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "md:hidden", children: cards }),
1329
+ !isLoading && isEmpty && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
1330
+ emptyIcon && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
1331
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
1332
+ emptyDescription && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
1327
1333
  ] }),
1328
1334
  pagination
1329
1335
  ] });
@@ -1331,10 +1337,10 @@ function ResponsiveDataView({
1331
1337
 
1332
1338
  // src/components/toaster.tsx
1333
1339
  var import_sonner = require("sonner");
1334
- var import_jsx_runtime23 = require("react/jsx-runtime");
1340
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1335
1341
  function Toaster(props) {
1336
1342
  const { theme = "system" } = useTheme();
1337
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1343
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1338
1344
  import_sonner.Toaster,
1339
1345
  {
1340
1346
  theme,
@@ -1362,11 +1368,11 @@ var import_react7 = require("react");
1362
1368
  var import_react5 = require("react");
1363
1369
 
1364
1370
  // src/components/types.tsx
1365
- var import_jsx_runtime24 = require("react/jsx-runtime");
1366
- var defaultRenderLink = ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("a", { ...props, children });
1371
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1372
+ var defaultRenderLink = ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("a", { ...props, children });
1367
1373
 
1368
1374
  // src/components/sidebar-nav.tsx
1369
- var import_jsx_runtime25 = require("react/jsx-runtime");
1375
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1370
1376
  function defaultIsActive(item, activePath) {
1371
1377
  if (item.href === "/") return activePath === "/";
1372
1378
  return activePath === item.href || activePath.startsWith(item.href + "/");
@@ -1381,7 +1387,7 @@ function SidebarNav({
1381
1387
  onNavigate
1382
1388
  }) {
1383
1389
  const visible = items.filter((item) => !item.adminOnly || isAdmin);
1384
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("nav", { className: "flex flex-col gap-1", children: visible.map((item) => {
1390
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("nav", { className: "flex flex-col gap-1", children: visible.map((item) => {
1385
1391
  const active = isActive(item, activePath);
1386
1392
  const link = renderLink({
1387
1393
  href: item.href,
@@ -1393,12 +1399,12 @@ function SidebarNav({
1393
1399
  active ? "bg-accent text-accent-foreground font-semibold" : "text-muted-foreground hover:bg-accent hover:text-accent-foreground",
1394
1400
  isCollapsed && "justify-center px-2"
1395
1401
  ),
1396
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
1397
- item.icon && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "shrink-0", children: item.icon }),
1398
- !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "truncate", children: item.label })
1402
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
1403
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "shrink-0", children: item.icon }),
1404
+ !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "truncate", children: item.label })
1399
1405
  ] })
1400
1406
  });
1401
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react5.Fragment, { children: link }, item.href);
1407
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react5.Fragment, { children: link }, item.href);
1402
1408
  }) });
1403
1409
  }
1404
1410
 
@@ -1407,7 +1413,7 @@ var DropdownMenu2 = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
1407
1413
  var import_lucide_react7 = require("lucide-react");
1408
1414
  var import_react6 = require("react");
1409
1415
  var import_vaul3 = require("vaul");
1410
- var import_jsx_runtime26 = require("react/jsx-runtime");
1416
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1411
1417
  function initials(user) {
1412
1418
  const source = user?.name?.trim() || user?.email?.trim();
1413
1419
  if (!source) return "";
@@ -1428,50 +1434,50 @@ function UserMenu({
1428
1434
  const isDesktop = useIsDesktop();
1429
1435
  const [open, setOpen] = (0, import_react6.useState)(false);
1430
1436
  const label = initials(user);
1431
- const trigger = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1437
+ const trigger = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1432
1438
  "button",
1433
1439
  {
1434
1440
  type: "button",
1435
1441
  className: "inline-flex h-9 w-9 items-center justify-center overflow-hidden rounded-full border border-input bg-background text-xs font-semibold shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1436
1442
  "aria-label": "Menu do usu\xE1rio",
1437
1443
  "data-testid": "user-menu",
1438
- children: user?.avatarUrl ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1444
+ children: user?.avatarUrl ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1439
1445
  "img",
1440
1446
  {
1441
1447
  src: user.avatarUrl,
1442
1448
  alt: user.name ?? user.email ?? "Avatar",
1443
1449
  className: "h-full w-full object-cover"
1444
1450
  }
1445
- ) : label ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { children: label }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react7.User, { className: "h-4 w-4" })
1451
+ ) : label ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: label }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react7.User, { className: "h-4 w-4" })
1446
1452
  }
1447
1453
  );
1448
- const userInfo = (user?.name || user?.email) && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "px-2 py-1.5", children: [
1449
- user.name && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "truncate text-sm font-medium", children: user.name }),
1450
- user.email && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "truncate text-xs text-muted-foreground", children: user.email })
1454
+ const userInfo = (user?.name || user?.email) && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "px-2 py-1.5", children: [
1455
+ user.name && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "truncate text-sm font-medium", children: user.name }),
1456
+ user.email && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "truncate text-xs text-muted-foreground", children: user.email })
1451
1457
  ] });
1452
1458
  if (isDesktop) {
1453
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(DropdownMenu2.Root, { open, onOpenChange: setOpen, children: [
1454
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DropdownMenu2.Trigger, { asChild: true, children: trigger }),
1455
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DropdownMenu2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1459
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(DropdownMenu2.Root, { open, onOpenChange: setOpen, children: [
1460
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenu2.Trigger, { asChild: true, children: trigger }),
1461
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenu2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1456
1462
  DropdownMenu2.Content,
1457
1463
  {
1458
1464
  align,
1459
1465
  sideOffset: 6,
1460
1466
  className: "z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95",
1461
1467
  children: [
1462
- userInfo && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
1468
+ userInfo && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
1463
1469
  userInfo,
1464
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DropdownMenu2.Separator, { className: "-mx-1 my-1 h-px bg-border" })
1470
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenu2.Separator, { className: "-mx-1 my-1 h-px bg-border" })
1465
1471
  ] }),
1466
1472
  items.map(
1467
- (item) => item.href ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DropdownMenu2.Item, { asChild: true, children: renderLink({
1473
+ (item) => item.href ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenu2.Item, { asChild: true, children: renderLink({
1468
1474
  href: item.href,
1469
1475
  className: itemClass,
1470
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
1476
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
1471
1477
  item.icon,
1472
1478
  item.label
1473
1479
  ] })
1474
- }) }, item.label) : /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1480
+ }) }, item.label) : /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1475
1481
  DropdownMenu2.Item,
1476
1482
  {
1477
1483
  className: itemClass,
@@ -1484,9 +1490,9 @@ function UserMenu({
1484
1490
  item.label
1485
1491
  )
1486
1492
  ),
1487
- onLogout && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
1488
- items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DropdownMenu2.Separator, { className: "-mx-1 my-1 h-px bg-border" }),
1489
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1493
+ onLogout && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
1494
+ items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenu2.Separator, { className: "-mx-1 my-1 h-px bg-border" }),
1495
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1490
1496
  DropdownMenu2.Item,
1491
1497
  {
1492
1498
  className: cn(
@@ -1495,7 +1501,7 @@ function UserMenu({
1495
1501
  ),
1496
1502
  onClick: onLogout,
1497
1503
  children: [
1498
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react7.LogOut, { className: "h-4 w-4" }),
1504
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react7.LogOut, { className: "h-4 w-4" }),
1499
1505
  logoutLabel
1500
1506
  ]
1501
1507
  }
@@ -1506,19 +1512,19 @@ function UserMenu({
1506
1512
  ) })
1507
1513
  ] });
1508
1514
  }
1509
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_vaul3.Drawer.Root, { open, onOpenChange: setOpen, children: [
1510
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_vaul3.Drawer.Trigger, { asChild: true, children: trigger }),
1511
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_vaul3.Drawer.Portal, { children: [
1512
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_vaul3.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1513
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_vaul3.Drawer.Content, { className: "fixed inset-x-0 bottom-0 z-50 flex flex-col rounded-t-2xl border bg-popover p-2 pb-[max(0.5rem,env(safe-area-inset-bottom))] text-popover-foreground outline-none", children: [
1514
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_vaul3.Drawer.Title, { className: "sr-only", children: "Menu do usu\xE1rio" }),
1515
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
1516
- userInfo && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
1515
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_vaul3.Drawer.Root, { open, onOpenChange: setOpen, children: [
1516
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_vaul3.Drawer.Trigger, { asChild: true, children: trigger }),
1517
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_vaul3.Drawer.Portal, { children: [
1518
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_vaul3.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1519
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_vaul3.Drawer.Content, { className: "fixed inset-x-0 bottom-0 z-50 flex flex-col rounded-t-2xl border bg-popover p-2 pb-[max(0.5rem,env(safe-area-inset-bottom))] text-popover-foreground outline-none", children: [
1520
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_vaul3.Drawer.Title, { className: "sr-only", children: "Menu do usu\xE1rio" }),
1521
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
1522
+ userInfo && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
1517
1523
  userInfo,
1518
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "-mx-1 my-1 h-px bg-border" })
1524
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "-mx-1 my-1 h-px bg-border" })
1519
1525
  ] }),
1520
1526
  items.map(
1521
- (item) => item.href ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1527
+ (item) => item.href ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1522
1528
  "span",
1523
1529
  {
1524
1530
  onClick: () => setOpen(false),
@@ -1526,14 +1532,14 @@ function UserMenu({
1526
1532
  children: renderLink({
1527
1533
  href: item.href,
1528
1534
  className: sheetItemClass,
1529
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
1535
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
1530
1536
  item.icon,
1531
1537
  item.label
1532
1538
  ] })
1533
1539
  })
1534
1540
  },
1535
1541
  item.label
1536
- ) : /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1542
+ ) : /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1537
1543
  "button",
1538
1544
  {
1539
1545
  type: "button",
@@ -1550,9 +1556,9 @@ function UserMenu({
1550
1556
  item.label
1551
1557
  )
1552
1558
  ),
1553
- onLogout && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
1554
- items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "-mx-1 my-1 h-px bg-border" }),
1555
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1559
+ onLogout && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
1560
+ items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "-mx-1 my-1 h-px bg-border" }),
1561
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1556
1562
  "button",
1557
1563
  {
1558
1564
  type: "button",
@@ -1562,7 +1568,7 @@ function UserMenu({
1562
1568
  setOpen(false);
1563
1569
  },
1564
1570
  children: [
1565
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react7.LogOut, { className: "h-4 w-4" }),
1571
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react7.LogOut, { className: "h-4 w-4" }),
1566
1572
  logoutLabel
1567
1573
  ]
1568
1574
  }
@@ -1574,7 +1580,7 @@ function UserMenu({
1574
1580
  }
1575
1581
 
1576
1582
  // src/components/app-shell.tsx
1577
- var import_jsx_runtime27 = require("react/jsx-runtime");
1583
+ var import_jsx_runtime28 = require("react/jsx-runtime");
1578
1584
  function AppShell({
1579
1585
  brand,
1580
1586
  brandCollapsed,
@@ -1593,7 +1599,7 @@ function AppShell({
1593
1599
  }) {
1594
1600
  const [collapsed, setCollapsed] = (0, import_react7.useState)(defaultCollapsed);
1595
1601
  const [mobileOpen, setMobileOpen] = (0, import_react7.useState)(false);
1596
- const nav = (isCollapsed, onNavigate) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1602
+ const nav = (isCollapsed, onNavigate) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1597
1603
  SidebarNav,
1598
1604
  {
1599
1605
  items: navItems,
@@ -1605,8 +1611,8 @@ function AppShell({
1605
1611
  onNavigate
1606
1612
  }
1607
1613
  );
1608
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex h-screen overflow-hidden bg-background", children: [
1609
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1614
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex h-screen overflow-hidden bg-background", children: [
1615
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
1610
1616
  "aside",
1611
1617
  {
1612
1618
  className: cn(
@@ -1614,22 +1620,22 @@ function AppShell({
1614
1620
  collapsed ? "w-16" : "w-60"
1615
1621
  ),
1616
1622
  children: [
1617
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "flex h-14 shrink-0 items-center border-b px-4", children: collapsed ? brandCollapsed ?? brand : brand }),
1618
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "flex-1 overflow-y-auto px-2 py-4", children: nav(collapsed) }),
1619
- collapsible && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "border-t p-2", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1623
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex h-14 shrink-0 items-center border-b px-4", children: collapsed ? brandCollapsed ?? brand : brand }),
1624
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex-1 overflow-y-auto px-2 py-4", children: nav(collapsed) }),
1625
+ collapsible && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "border-t p-2", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1620
1626
  "button",
1621
1627
  {
1622
1628
  type: "button",
1623
1629
  onClick: () => setCollapsed((v) => !v),
1624
1630
  className: "flex w-full items-center justify-center rounded-md px-2 py-2 text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground",
1625
1631
  "aria-label": collapsed ? "Expandir menu" : "Recolher menu",
1626
- children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react8.ChevronRight, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react8.ChevronLeft, { className: "h-4 w-4" })
1632
+ children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react8.ChevronRight, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react8.ChevronLeft, { className: "h-4 w-4" })
1627
1633
  }
1628
1634
  ) })
1629
1635
  ]
1630
1636
  }
1631
1637
  ),
1632
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1638
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
1633
1639
  "div",
1634
1640
  {
1635
1641
  className: cn(
@@ -1638,8 +1644,8 @@ function AppShell({
1638
1644
  ),
1639
1645
  onClick: () => setMobileOpen(false),
1640
1646
  children: [
1641
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "absolute inset-0 bg-black/50" }),
1642
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1647
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "absolute inset-0 bg-black/50" }),
1648
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
1643
1649
  "div",
1644
1650
  {
1645
1651
  className: cn(
@@ -1648,32 +1654,32 @@ function AppShell({
1648
1654
  ),
1649
1655
  onClick: (e) => e.stopPropagation(),
1650
1656
  children: [
1651
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "flex h-14 shrink-0 items-center border-b px-4", children: brand }),
1652
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "flex-1 overflow-y-auto px-2 py-4", children: nav(false, () => setMobileOpen(false)) })
1657
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex h-14 shrink-0 items-center border-b px-4", children: brand }),
1658
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex-1 overflow-y-auto px-2 py-4", children: nav(false, () => setMobileOpen(false)) })
1653
1659
  ]
1654
1660
  }
1655
1661
  )
1656
1662
  ]
1657
1663
  }
1658
1664
  ),
1659
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex flex-1 flex-col overflow-hidden", children: [
1660
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("header", { className: "flex h-14 shrink-0 items-center gap-2 border-b bg-background px-4", children: [
1661
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1665
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex flex-1 flex-col overflow-hidden", children: [
1666
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("header", { className: "flex h-14 shrink-0 items-center gap-2 border-b bg-background px-4", children: [
1667
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1662
1668
  "button",
1663
1669
  {
1664
1670
  type: "button",
1665
1671
  onClick: () => setMobileOpen(true),
1666
1672
  className: "inline-flex h-9 w-9 items-center justify-center rounded-md border border-input bg-background shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground md:hidden",
1667
1673
  "aria-label": "Abrir menu",
1668
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react8.Menu, { className: "h-4 w-4" })
1674
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react8.Menu, { className: "h-4 w-4" })
1669
1675
  }
1670
1676
  ),
1671
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "ml-auto flex items-center gap-2", children: [
1677
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "ml-auto flex items-center gap-2", children: [
1672
1678
  headerActions,
1673
- (user || onLogout) && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(UserMenu, { user, items: userMenuItems, onLogout, renderLink })
1679
+ (user || onLogout) && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(UserMenu, { user, items: userMenuItems, onLogout, renderLink })
1674
1680
  ] })
1675
1681
  ] }),
1676
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("main", { className: "flex-1 overflow-y-auto", children })
1682
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("main", { className: "flex-1 overflow-y-auto", children })
1677
1683
  ] })
1678
1684
  ] });
1679
1685
  }
@@ -1683,7 +1689,7 @@ var DropdownMenu3 = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
1683
1689
  var import_lucide_react9 = require("lucide-react");
1684
1690
  var import_react8 = require("react");
1685
1691
  var import_vaul4 = require("vaul");
1686
- var import_jsx_runtime28 = require("react/jsx-runtime");
1692
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1687
1693
  var triggerClass = "inline-flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50";
1688
1694
  var itemClass2 = "flex w-full cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent focus:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50";
1689
1695
  var sheetItemClass2 = "flex w-full cursor-pointer select-none items-center gap-3 rounded-md px-3 py-3 text-base outline-none transition-colors hover:bg-accent active:bg-accent disabled:pointer-events-none disabled:opacity-50";
@@ -1697,20 +1703,20 @@ function RowActionsMenu({
1697
1703
  const isDesktop = useIsDesktop();
1698
1704
  const [open, setOpen] = (0, import_react8.useState)(false);
1699
1705
  if (actions.length === 0) return null;
1700
- const trigger = /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1706
+ const trigger = /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1701
1707
  "button",
1702
1708
  {
1703
1709
  type: "button",
1704
1710
  disabled,
1705
1711
  "aria-label": label,
1706
1712
  className: triggerClass,
1707
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react9.MoreVertical, { className: "h-4 w-4" })
1713
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react9.MoreVertical, { className: "h-4 w-4" })
1708
1714
  }
1709
1715
  );
1710
1716
  if (isDesktop) {
1711
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(DropdownMenu3.Root, { open, onOpenChange: setOpen, modal: false, children: [
1712
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(DropdownMenu3.Trigger, { asChild: true, children: trigger }),
1713
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(DropdownMenu3.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1717
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(DropdownMenu3.Root, { open, onOpenChange: setOpen, modal: false, children: [
1718
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DropdownMenu3.Trigger, { asChild: true, children: trigger }),
1719
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DropdownMenu3.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1714
1720
  DropdownMenu3.Content,
1715
1721
  {
1716
1722
  align,
@@ -1721,7 +1727,7 @@ function RowActionsMenu({
1721
1727
  itemClass2,
1722
1728
  action.destructive && "text-destructive focus:bg-destructive/10"
1723
1729
  );
1724
- return action.href ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1730
+ return action.href ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1725
1731
  DropdownMenu3.Item,
1726
1732
  {
1727
1733
  asChild: true,
@@ -1729,14 +1735,14 @@ function RowActionsMenu({
1729
1735
  children: renderLink({
1730
1736
  href: action.href,
1731
1737
  className: cls,
1732
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_jsx_runtime28.Fragment, { children: [
1738
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
1733
1739
  action.icon,
1734
1740
  action.label
1735
1741
  ] })
1736
1742
  })
1737
1743
  },
1738
1744
  action.label
1739
- ) : /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
1745
+ ) : /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
1740
1746
  DropdownMenu3.Item,
1741
1747
  {
1742
1748
  className: cls,
@@ -1754,23 +1760,23 @@ function RowActionsMenu({
1754
1760
  ) })
1755
1761
  ] });
1756
1762
  }
1757
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_vaul4.Drawer.Root, { open, onOpenChange: setOpen, children: [
1758
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_vaul4.Drawer.Trigger, { asChild: true, children: trigger }),
1759
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_vaul4.Drawer.Portal, { children: [
1760
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_vaul4.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1761
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_vaul4.Drawer.Content, { className: "fixed inset-x-0 bottom-0 z-50 flex flex-col rounded-t-2xl border bg-popover p-2 pb-[max(0.5rem,env(safe-area-inset-bottom))] text-popover-foreground outline-none", children: [
1762
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_vaul4.Drawer.Title, { className: "sr-only", children: label }),
1763
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
1763
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_vaul4.Drawer.Root, { open, onOpenChange: setOpen, children: [
1764
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_vaul4.Drawer.Trigger, { asChild: true, children: trigger }),
1765
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_vaul4.Drawer.Portal, { children: [
1766
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_vaul4.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1767
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_vaul4.Drawer.Content, { className: "fixed inset-x-0 bottom-0 z-50 flex flex-col rounded-t-2xl border bg-popover p-2 pb-[max(0.5rem,env(safe-area-inset-bottom))] text-popover-foreground outline-none", children: [
1768
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_vaul4.Drawer.Title, { className: "sr-only", children: label }),
1769
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
1764
1770
  actions.map((action) => {
1765
1771
  const cls = cn(
1766
1772
  sheetItemClass2,
1767
1773
  action.destructive && "text-destructive"
1768
1774
  );
1769
- const inner = /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_jsx_runtime28.Fragment, { children: [
1775
+ const inner = /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
1770
1776
  action.icon,
1771
1777
  action.label
1772
1778
  ] });
1773
- return action.href ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1779
+ return action.href ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1774
1780
  "span",
1775
1781
  {
1776
1782
  onClick: () => setOpen(false),
@@ -1782,7 +1788,7 @@ function RowActionsMenu({
1782
1788
  })
1783
1789
  },
1784
1790
  action.label
1785
- ) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1791
+ ) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1786
1792
  "button",
1787
1793
  {
1788
1794
  type: "button",
@@ -1850,6 +1856,7 @@ function useCustomToast() {
1850
1856
  0 && (module.exports = {
1851
1857
  AppShell,
1852
1858
  AuthCard,
1859
+ BaseDialog,
1853
1860
  ColorPicker,
1854
1861
  Combobox,
1855
1862
  ConfirmDialog,