@motor-hero/ui-kit 0.36.2 → 0.37.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
@@ -53,6 +53,7 @@ __export(index_exports, {
53
53
  Pagination: () => Pagination,
54
54
  PasswordInput: () => PasswordInput,
55
55
  ProgressBar: () => ProgressBar,
56
+ Rating: () => Rating,
56
57
  ResponsiveDataView: () => ResponsiveDataView,
57
58
  RowActionsMenu: () => RowActionsMenu,
58
59
  SearchInput: () => SearchInput,
@@ -651,10 +652,92 @@ function ColorPicker({
651
652
  ] });
652
653
  }
653
654
 
655
+ // src/components/rating.tsx
656
+ var ToggleGroup = __toESM(require("@radix-ui/react-toggle-group"), 1);
657
+ var import_lucide_react5 = require("lucide-react");
658
+ var import_jsx_runtime8 = require("react/jsx-runtime");
659
+ var MAX_STARS = 5;
660
+ var sizeClasses2 = {
661
+ sm: "h-4 w-4",
662
+ md: "h-5 w-5",
663
+ lg: "h-6 w-6"
664
+ };
665
+ function defaultLabel(value) {
666
+ return value > 0 ? `Avalia\xE7\xE3o: ${value} de ${MAX_STARS} estrelas` : "Avalia\xE7\xE3o: sem nota";
667
+ }
668
+ function Rating({
669
+ value = 0,
670
+ onChange,
671
+ readOnly = false,
672
+ size = "md",
673
+ className,
674
+ "aria-label": ariaLabel
675
+ }) {
676
+ const clamped = Math.min(MAX_STARS, Math.max(0, value));
677
+ const label = ariaLabel ?? defaultLabel(clamped);
678
+ if (readOnly) {
679
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
680
+ "div",
681
+ {
682
+ role: "img",
683
+ "aria-label": label,
684
+ className: cn("inline-flex items-center gap-0.5", className),
685
+ children: Array.from({ length: MAX_STARS }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
686
+ import_lucide_react5.Star,
687
+ {
688
+ "aria-hidden": true,
689
+ className: cn(
690
+ sizeClasses2[size],
691
+ index < clamped ? "fill-amber-400 text-amber-400" : "text-muted-foreground"
692
+ )
693
+ },
694
+ index
695
+ ))
696
+ }
697
+ );
698
+ }
699
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
700
+ ToggleGroup.Root,
701
+ {
702
+ type: "single",
703
+ value: clamped > 0 ? String(clamped) : "",
704
+ onValueChange: (next) => {
705
+ if (next) onChange?.(Number(next));
706
+ },
707
+ "aria-label": label,
708
+ className: cn("inline-flex items-center gap-0.5", className),
709
+ children: Array.from({ length: MAX_STARS }, (_, index) => {
710
+ const starValue = index + 1;
711
+ const filled = starValue <= clamped;
712
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
713
+ ToggleGroup.Item,
714
+ {
715
+ value: String(starValue),
716
+ "aria-label": `${starValue} ${starValue === 1 ? "estrela" : "estrelas"}`,
717
+ className: "inline-flex cursor-pointer items-center justify-center rounded-sm bg-transparent p-0.5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
718
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
719
+ import_lucide_react5.Star,
720
+ {
721
+ "aria-hidden": true,
722
+ className: cn(
723
+ sizeClasses2[size],
724
+ "transition-colors",
725
+ filled ? "fill-amber-400 text-amber-400" : "text-muted-foreground hover:text-amber-400"
726
+ )
727
+ }
728
+ )
729
+ },
730
+ starValue
731
+ );
732
+ })
733
+ }
734
+ );
735
+ }
736
+
654
737
  // src/components/combobox.tsx
655
738
  var PopoverPrimitive2 = __toESM(require("@radix-ui/react-popover"), 1);
656
739
  var import_cmdk = require("cmdk");
657
- var import_lucide_react5 = require("lucide-react");
740
+ var import_lucide_react6 = require("lucide-react");
658
741
  var React5 = __toESM(require("react"), 1);
659
742
  var import_vaul2 = require("vaul");
660
743
 
@@ -693,7 +776,7 @@ function useInfiniteScrollSentinel({
693
776
  }
694
777
 
695
778
  // src/components/combobox.tsx
696
- var import_jsx_runtime8 = require("react/jsx-runtime");
779
+ var import_jsx_runtime9 = require("react/jsx-runtime");
697
780
  function Combobox({
698
781
  options,
699
782
  value,
@@ -712,7 +795,8 @@ function Combobox({
712
795
  hasMore,
713
796
  selectedOption,
714
797
  creatable,
715
- formatCreateLabel
798
+ formatCreateLabel,
799
+ deselectable
716
800
  }) {
717
801
  const [open, setOpen] = React5.useState(false);
718
802
  const [search, setSearch] = React5.useState("");
@@ -724,7 +808,7 @@ function Combobox({
724
808
  if (!next) setSearch("");
725
809
  };
726
810
  const handleSelect = (next) => {
727
- onChange(next);
811
+ onChange(deselectable && next === value ? "" : next);
728
812
  handleOpenChange(false);
729
813
  };
730
814
  const handleSearchChange = (next) => {
@@ -740,7 +824,7 @@ function Combobox({
740
824
  loading,
741
825
  onLoadMore
742
826
  });
743
- const trigger = /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
827
+ const trigger = /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
744
828
  "button",
745
829
  {
746
830
  type: "button",
@@ -755,20 +839,20 @@ function Combobox({
755
839
  className
756
840
  ),
757
841
  children: [
758
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: cn("truncate", !selected && "text-muted-foreground"), children: selected ? selected.label : placeholder }),
759
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react5.ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50" })
842
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: cn("truncate", !selected && "text-muted-foreground"), children: selected ? selected.label : placeholder }),
843
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react6.ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50" })
760
844
  ]
761
845
  }
762
846
  );
763
- const command = /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
847
+ const command = /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
764
848
  import_cmdk.Command,
765
849
  {
766
850
  shouldFilter: !isServer,
767
851
  className: "flex h-full w-full flex-col overflow-hidden",
768
852
  children: [
769
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex items-center border-b px-3", children: [
770
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react5.Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
771
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
853
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-center border-b px-3", children: [
854
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react6.Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
855
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
772
856
  import_cmdk.Command.Input,
773
857
  {
774
858
  placeholder: searchPlaceholder,
@@ -777,28 +861,28 @@ function Combobox({
777
861
  }
778
862
  )
779
863
  ] }),
780
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
864
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
781
865
  import_cmdk.Command.List,
782
866
  {
783
867
  ref: listRef,
784
868
  className: "max-h-[50vh] overflow-y-auto overflow-x-hidden p-1 sm:max-h-60",
785
869
  children: [
786
- !isServer && !showCreate && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_cmdk.Command.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
787
- showCreate && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
870
+ !isServer && !showCreate && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_cmdk.Command.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
871
+ showCreate && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
788
872
  import_cmdk.Command.Item,
789
873
  {
790
874
  value: trimmedSearch,
791
875
  onSelect: () => handleSelect(trimmedSearch),
792
876
  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",
793
877
  children: [
794
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react5.Plus, { className: "h-4 w-4 shrink-0" }),
795
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "truncate", children: (formatCreateLabel ?? ((text) => `Usar "${text}"`))(
878
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react6.Plus, { className: "h-4 w-4 shrink-0" }),
879
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "truncate", children: (formatCreateLabel ?? ((text) => `Usar "${text}"`))(
796
880
  trimmedSearch
797
881
  ) })
798
882
  ]
799
883
  }
800
884
  ),
801
- options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
885
+ options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
802
886
  import_cmdk.Command.Item,
803
887
  {
804
888
  value: isServer ? option.value : option.label,
@@ -806,8 +890,8 @@ function Combobox({
806
890
  onSelect: () => handleSelect(option.value),
807
891
  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",
808
892
  children: [
809
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
810
- import_lucide_react5.Check,
893
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
894
+ import_lucide_react6.Check,
811
895
  {
812
896
  className: cn(
813
897
  "h-4 w-4 shrink-0",
@@ -815,14 +899,14 @@ function Combobox({
815
899
  )
816
900
  }
817
901
  ),
818
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "truncate", children: option.label })
902
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "truncate", children: option.label })
819
903
  ]
820
904
  },
821
905
  option.value
822
906
  )),
823
- isServer && !loading && options.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
824
- isServer && loading && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "flex items-center justify-center py-6", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react5.Loader2, { className: "h-4 w-4 animate-spin text-muted-foreground" }) }),
825
- isServer && hasMore && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1" })
907
+ isServer && !loading && options.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
908
+ isServer && loading && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "flex items-center justify-center py-6", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react6.Loader2, { className: "h-4 w-4 animate-spin text-muted-foreground" }) }),
909
+ isServer && hasMore && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1" })
826
910
  ]
827
911
  }
828
912
  )
@@ -830,9 +914,9 @@ function Combobox({
830
914
  }
831
915
  );
832
916
  if (isDesktop) {
833
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(PopoverPrimitive2.Root, { open, onOpenChange: handleOpenChange, children: [
834
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PopoverPrimitive2.Trigger, { asChild: true, children: trigger }),
835
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PopoverPrimitive2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
917
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(PopoverPrimitive2.Root, { open, onOpenChange: handleOpenChange, children: [
918
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PopoverPrimitive2.Trigger, { asChild: true, children: trigger }),
919
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PopoverPrimitive2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
836
920
  PopoverPrimitive2.Content,
837
921
  {
838
922
  align: "start",
@@ -844,13 +928,13 @@ function Combobox({
844
928
  ) })
845
929
  ] });
846
930
  }
847
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_vaul2.Drawer.Root, { open, onOpenChange: handleOpenChange, children: [
848
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_vaul2.Drawer.Trigger, { asChild: true, children: trigger }),
849
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_vaul2.Drawer.Portal, { children: [
850
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_vaul2.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
851
- /* @__PURE__ */ (0, import_jsx_runtime8.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: [
852
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_vaul2.Drawer.Title, { className: "sr-only", children: placeholder }),
853
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
931
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_vaul2.Drawer.Root, { open, onOpenChange: handleOpenChange, children: [
932
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_vaul2.Drawer.Trigger, { asChild: true, children: trigger }),
933
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_vaul2.Drawer.Portal, { children: [
934
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_vaul2.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
935
+ /* @__PURE__ */ (0, import_jsx_runtime9.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: [
936
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_vaul2.Drawer.Title, { className: "sr-only", children: placeholder }),
937
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
854
938
  command
855
939
  ] })
856
940
  ] })
@@ -859,7 +943,7 @@ function Combobox({
859
943
 
860
944
  // src/components/confirm-dialog.tsx
861
945
  var AlertDialog = __toESM(require("@radix-ui/react-alert-dialog"), 1);
862
- var import_jsx_runtime9 = require("react/jsx-runtime");
946
+ var import_jsx_runtime10 = require("react/jsx-runtime");
863
947
  function ConfirmDialog({
864
948
  open,
865
949
  onOpenChange,
@@ -873,8 +957,8 @@ function ConfirmDialog({
873
957
  blurBackdrop = true,
874
958
  backdropClassName
875
959
  }) {
876
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(AlertDialog.Root, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(AlertDialog.Portal, { children: [
877
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
960
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AlertDialog.Root, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(AlertDialog.Portal, { children: [
961
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
878
962
  AlertDialog.Overlay,
879
963
  {
880
964
  className: cn(
@@ -884,14 +968,14 @@ function ConfirmDialog({
884
968
  )
885
969
  }
886
970
  ),
887
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(AlertDialog.Content, { className: "fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg", children: [
888
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col space-y-2 text-center sm:text-left", children: [
889
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(AlertDialog.Title, { className: "text-lg font-semibold", children: title }),
890
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(AlertDialog.Description, { className: "text-sm text-muted-foreground", children: description })
971
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(AlertDialog.Content, { className: "fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg", children: [
972
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col space-y-2 text-center sm:text-left", children: [
973
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AlertDialog.Title, { className: "text-lg font-semibold", children: title }),
974
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AlertDialog.Description, { className: "text-sm text-muted-foreground", children: description })
891
975
  ] }),
892
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
893
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(AlertDialog.Cancel, { 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 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 cursor-pointer", children: cancelLabel }),
894
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
976
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
977
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AlertDialog.Cancel, { 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 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 cursor-pointer", children: cancelLabel }),
978
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
895
979
  AlertDialog.Action,
896
980
  {
897
981
  onClick: onConfirm,
@@ -906,7 +990,7 @@ function ConfirmDialog({
906
990
  }
907
991
 
908
992
  // src/components/data-table-wrapper.tsx
909
- var import_jsx_runtime10 = require("react/jsx-runtime");
993
+ var import_jsx_runtime11 = require("react/jsx-runtime");
910
994
  function DataTableWrapper({
911
995
  children,
912
996
  isEmpty,
@@ -919,15 +1003,15 @@ function DataTableWrapper({
919
1003
  hasNextPage = false,
920
1004
  hasPreviousPage = false
921
1005
  }) {
922
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "space-y-4", children: [
923
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "overflow-x-auto rounded-md border", children }),
924
- !isLoading && isEmpty && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
925
- emptyIcon && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
926
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
927
- emptyDescription && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
1006
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "space-y-4", children: [
1007
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "overflow-x-auto rounded-md border", children }),
1008
+ !isLoading && isEmpty && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
1009
+ emptyIcon && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
1010
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
1011
+ emptyDescription && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
928
1012
  ] }),
929
- page !== void 0 && onPageChange && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-center justify-end gap-4", children: [
930
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1013
+ page !== void 0 && onPageChange && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex items-center justify-end gap-4", children: [
1014
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
931
1015
  "button",
932
1016
  {
933
1017
  type: "button",
@@ -937,11 +1021,11 @@ function DataTableWrapper({
937
1021
  children: "Anterior"
938
1022
  }
939
1023
  ),
940
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "text-sm text-muted-foreground", children: [
1024
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { className: "text-sm text-muted-foreground", children: [
941
1025
  "P\xE1gina ",
942
1026
  page
943
1027
  ] }),
944
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1028
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
945
1029
  "button",
946
1030
  {
947
1031
  type: "button",
@@ -960,11 +1044,11 @@ var PopoverPrimitive3 = __toESM(require("@radix-ui/react-popover"), 1);
960
1044
  var import_mask = require("@react-input/mask");
961
1045
  var import_date_fns = require("date-fns");
962
1046
  var import_locale = require("date-fns/locale");
963
- var import_lucide_react6 = require("lucide-react");
1047
+ var import_lucide_react7 = require("lucide-react");
964
1048
  var React6 = __toESM(require("react"), 1);
965
1049
  var import_react_day_picker = require("react-day-picker");
966
1050
  var import_vaul3 = require("vaul");
967
- var import_jsx_runtime11 = require("react/jsx-runtime");
1051
+ var import_jsx_runtime12 = require("react/jsx-runtime");
968
1052
  var DATE_MASK = "__/__/____";
969
1053
  var TIME_MASK = "__:__";
970
1054
  var MASK_REPLACEMENT = { _: /\d/ };
@@ -1031,9 +1115,9 @@ var calendarClassNames = {
1031
1115
  };
1032
1116
  var calendarComponents = {
1033
1117
  Chevron: ({ orientation }) => {
1034
- if (orientation === "left") return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react6.ChevronLeft, { className: "size-4" });
1035
- if (orientation === "right") return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react6.ChevronRight, { className: "size-4" });
1036
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react6.ChevronDown, { className: "size-4" });
1118
+ if (orientation === "left") return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react7.ChevronLeft, { className: "size-4" });
1119
+ if (orientation === "right") return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react7.ChevronRight, { className: "size-4" });
1120
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react7.ChevronDown, { className: "size-4" });
1037
1121
  }
1038
1122
  };
1039
1123
  var formatMonthDropdown = (date) => date.toLocaleString("pt-BR", { month: "short" });
@@ -1118,8 +1202,8 @@ function DatePickerImpl({
1118
1202
  }
1119
1203
  };
1120
1204
  const canApply = withTime && !!pendingDate && !!parseStrict(pendingTime, TIME_FORMAT);
1121
- const trigger = /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { ref: triggerRef, className: "relative", children: [
1122
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1205
+ const trigger = /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { ref: triggerRef, className: "relative", children: [
1206
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1123
1207
  import_mask.InputMask,
1124
1208
  {
1125
1209
  id,
@@ -1139,7 +1223,7 @@ function DatePickerImpl({
1139
1223
  className: cn(triggerInputClass, className)
1140
1224
  }
1141
1225
  ),
1142
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1226
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1143
1227
  "button",
1144
1228
  {
1145
1229
  type: "button",
@@ -1149,12 +1233,12 @@ function DatePickerImpl({
1149
1233
  "aria-expanded": open,
1150
1234
  onClick: () => setOpen(!open),
1151
1235
  className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground transition-colors hover:text-foreground disabled:pointer-events-none disabled:opacity-50",
1152
- children: withTime ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react6.Clock, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react6.CalendarIcon, { className: "h-4 w-4" })
1236
+ children: withTime ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react7.Clock, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react7.CalendarIcon, { className: "h-4 w-4" })
1153
1237
  }
1154
1238
  )
1155
1239
  ] });
1156
- const content = /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: withTime ? "p-3" : "", children: [
1157
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1240
+ const content = /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: withTime ? "p-3" : "", children: [
1241
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1158
1242
  import_react_day_picker.DayPicker,
1159
1243
  {
1160
1244
  mode: "single",
@@ -1172,10 +1256,10 @@ function DatePickerImpl({
1172
1256
  components: calendarComponents
1173
1257
  }
1174
1258
  ),
1175
- withTime && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
1176
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "mt-2 flex items-center gap-2 border-t pt-3", children: [
1177
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "text-sm text-muted-foreground", children: "Hor\xE1rio" }),
1178
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1259
+ withTime && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
1260
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "mt-2 flex items-center gap-2 border-t pt-3", children: [
1261
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-sm text-muted-foreground", children: "Hor\xE1rio" }),
1262
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1179
1263
  import_mask.InputMask,
1180
1264
  {
1181
1265
  mask: TIME_MASK,
@@ -1188,7 +1272,7 @@ function DatePickerImpl({
1188
1272
  }
1189
1273
  )
1190
1274
  ] }),
1191
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1275
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1192
1276
  "button",
1193
1277
  {
1194
1278
  type: "button",
@@ -1201,9 +1285,9 @@ function DatePickerImpl({
1201
1285
  ] })
1202
1286
  ] });
1203
1287
  if (isDesktop) {
1204
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(PopoverPrimitive3.Root, { open, onOpenChange: setOpen, children: [
1205
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(PopoverPrimitive3.Anchor, { asChild: true, children: trigger }),
1206
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(PopoverPrimitive3.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1288
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(PopoverPrimitive3.Root, { open, onOpenChange: setOpen, children: [
1289
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(PopoverPrimitive3.Anchor, { asChild: true, children: trigger }),
1290
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(PopoverPrimitive3.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1207
1291
  PopoverPrimitive3.Content,
1208
1292
  {
1209
1293
  align: "start",
@@ -1218,11 +1302,11 @@ function DatePickerImpl({
1218
1302
  ) })
1219
1303
  ] });
1220
1304
  }
1221
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_vaul3.Drawer.Root, { open, onOpenChange: setOpen, children: [
1305
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_vaul3.Drawer.Root, { open, onOpenChange: setOpen, children: [
1222
1306
  trigger,
1223
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_vaul3.Drawer.Portal, { children: [
1224
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_vaul3.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1225
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1307
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_vaul3.Drawer.Portal, { children: [
1308
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_vaul3.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1309
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1226
1310
  import_vaul3.Drawer.Content,
1227
1311
  {
1228
1312
  onOpenAutoFocus: (event) => event.preventDefault(),
@@ -1231,9 +1315,9 @@ function DatePickerImpl({
1231
1315
  },
1232
1316
  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",
1233
1317
  children: [
1234
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_vaul3.Drawer.Title, { className: "sr-only", children: withTime ? "Selecione a data e o hor\xE1rio" : "Selecione a data" }),
1235
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
1236
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex justify-center overflow-y-auto pb-4", children: content })
1318
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_vaul3.Drawer.Title, { className: "sr-only", children: withTime ? "Selecione a data e o hor\xE1rio" : "Selecione a data" }),
1319
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
1320
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex justify-center overflow-y-auto pb-4", children: content })
1237
1321
  ]
1238
1322
  }
1239
1323
  )
@@ -1241,29 +1325,29 @@ function DatePickerImpl({
1241
1325
  ] });
1242
1326
  }
1243
1327
  function DatePicker(props) {
1244
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DatePickerImpl, { ...props });
1328
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DatePickerImpl, { ...props });
1245
1329
  }
1246
1330
  function DateTimePicker(props) {
1247
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DatePickerImpl, { ...props, withTime: true });
1331
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DatePickerImpl, { ...props, withTime: true });
1248
1332
  }
1249
1333
 
1250
1334
  // src/components/empty-state.tsx
1251
- var import_jsx_runtime12 = require("react/jsx-runtime");
1335
+ var import_jsx_runtime13 = require("react/jsx-runtime");
1252
1336
  function EmptyState({ icon, title, description, action, className }) {
1253
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: `flex flex-col items-center justify-center py-16 text-center ${className ?? ""}`, children: [
1254
- icon && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "mb-4 text-muted-foreground", children: icon }),
1255
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("h3", { className: "text-lg font-semibold tracking-tight", children: title }),
1256
- description && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: description }),
1257
- action && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "mt-4", children: action })
1337
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: `flex flex-col items-center justify-center py-16 text-center ${className ?? ""}`, children: [
1338
+ icon && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "mb-4 text-muted-foreground", children: icon }),
1339
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("h3", { className: "text-lg font-semibold tracking-tight", children: title }),
1340
+ description && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: description }),
1341
+ action && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "mt-4", children: action })
1258
1342
  ] });
1259
1343
  }
1260
1344
 
1261
1345
  // src/components/filter-toolbar.tsx
1262
1346
  var PopoverPrimitive4 = __toESM(require("@radix-ui/react-popover"), 1);
1263
- var import_lucide_react7 = require("lucide-react");
1347
+ var import_lucide_react8 = require("lucide-react");
1264
1348
  var React7 = __toESM(require("react"), 1);
1265
1349
  var import_vaul4 = require("vaul");
1266
- var import_jsx_runtime13 = require("react/jsx-runtime");
1350
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1267
1351
  function FilterToolbar({
1268
1352
  children,
1269
1353
  isFilterActive = false,
@@ -1271,7 +1355,7 @@ function FilterToolbar({
1271
1355
  clearLabel = "Limpar filtros",
1272
1356
  className
1273
1357
  }) {
1274
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1358
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1275
1359
  "div",
1276
1360
  {
1277
1361
  className: cn(
@@ -1280,14 +1364,14 @@ function FilterToolbar({
1280
1364
  ),
1281
1365
  children: [
1282
1366
  children,
1283
- isFilterActive && onClear && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1367
+ isFilterActive && onClear && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1284
1368
  "button",
1285
1369
  {
1286
1370
  type: "button",
1287
1371
  onClick: onClear,
1288
1372
  className: "inline-flex h-9 shrink-0 items-center justify-center gap-1.5 self-start rounded-md px-2.5 text-sm text-muted-foreground transition-colors hover:text-foreground sm:self-auto",
1289
1373
  children: [
1290
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react7.X, { className: "h-4 w-4" }),
1374
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react8.X, { className: "h-4 w-4" }),
1291
1375
  clearLabel
1292
1376
  ]
1293
1377
  }
@@ -1310,7 +1394,7 @@ function FilterPopover({
1310
1394
  const isDesktop = useIsDesktop();
1311
1395
  const close = React7.useCallback(() => setOpen(false), []);
1312
1396
  const content = typeof children === "function" ? children({ close }) : children;
1313
- const trigger = /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1397
+ const trigger = /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1314
1398
  "button",
1315
1399
  {
1316
1400
  type: "button",
@@ -1320,17 +1404,17 @@ function FilterPopover({
1320
1404
  active ? "border-ring/60 text-foreground" : "text-muted-foreground"
1321
1405
  ),
1322
1406
  children: [
1323
- Icon && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { className: "h-4 w-4 shrink-0 opacity-70" }),
1324
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "truncate", children: label }),
1325
- active && badge != null && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[10px] font-medium leading-none text-primary-foreground", children: badge }),
1326
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react7.ChevronDown, { className: "h-4 w-4 shrink-0 opacity-50" })
1407
+ Icon && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Icon, { className: "h-4 w-4 shrink-0 opacity-70" }),
1408
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "truncate", children: label }),
1409
+ active && badge != null && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[10px] font-medium leading-none text-primary-foreground", children: badge }),
1410
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react8.ChevronDown, { className: "h-4 w-4 shrink-0 opacity-50" })
1327
1411
  ]
1328
1412
  }
1329
1413
  );
1330
1414
  if (isDesktop) {
1331
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(PopoverPrimitive4.Root, { open, onOpenChange: setOpen, children: [
1332
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(PopoverPrimitive4.Trigger, { asChild: true, children: trigger }),
1333
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(PopoverPrimitive4.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1415
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(PopoverPrimitive4.Root, { open, onOpenChange: setOpen, children: [
1416
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(PopoverPrimitive4.Trigger, { asChild: true, children: trigger }),
1417
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(PopoverPrimitive4.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1334
1418
  PopoverPrimitive4.Content,
1335
1419
  {
1336
1420
  align,
@@ -1350,14 +1434,14 @@ function FilterPopover({
1350
1434
  ) })
1351
1435
  ] });
1352
1436
  }
1353
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_vaul4.Drawer.Root, { open, onOpenChange: setOpen, children: [
1354
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_vaul4.Drawer.Trigger, { asChild: true, children: trigger }),
1355
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_vaul4.Drawer.Portal, { children: [
1356
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_vaul4.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1357
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_vaul4.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: [
1358
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_vaul4.Drawer.Title, { className: "sr-only", children: title ?? label }),
1359
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
1360
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "overflow-y-auto p-2", children: content })
1437
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_vaul4.Drawer.Root, { open, onOpenChange: setOpen, children: [
1438
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_vaul4.Drawer.Trigger, { asChild: true, children: trigger }),
1439
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_vaul4.Drawer.Portal, { children: [
1440
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_vaul4.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1441
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_vaul4.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: [
1442
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_vaul4.Drawer.Title, { className: "sr-only", children: title ?? label }),
1443
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
1444
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "overflow-y-auto p-2", children: content })
1361
1445
  ] })
1362
1446
  ] })
1363
1447
  ] });
@@ -1381,17 +1465,17 @@ function FilterOptionList({
1381
1465
  selected.includes(optionValue) ? selected.filter((v) => v !== optionValue) : [...selected, optionValue]
1382
1466
  );
1383
1467
  };
1384
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-col p-1", children: [
1468
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex flex-col p-1", children: [
1385
1469
  options.map((option) => {
1386
1470
  const isChecked = selected.includes(option.value);
1387
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1471
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1388
1472
  "button",
1389
1473
  {
1390
1474
  type: "button",
1391
1475
  onClick: () => toggle(option.value),
1392
1476
  className: "flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm transition-colors hover:bg-accent hover:text-accent-foreground",
1393
1477
  children: [
1394
- option.dotClassName && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1478
+ option.dotClassName && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1395
1479
  "span",
1396
1480
  {
1397
1481
  className: cn(
@@ -1400,14 +1484,14 @@ function FilterOptionList({
1400
1484
  )
1401
1485
  }
1402
1486
  ),
1403
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "flex-1 truncate", children: option.label }),
1404
- isChecked && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "h-1.5 w-1.5 shrink-0 rounded-full bg-primary" })
1487
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "flex-1 truncate", children: option.label }),
1488
+ isChecked && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "h-1.5 w-1.5 shrink-0 rounded-full bg-primary" })
1405
1489
  ]
1406
1490
  },
1407
1491
  option.value
1408
1492
  );
1409
1493
  }),
1410
- clearable && hasSelection && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1494
+ clearable && hasSelection && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1411
1495
  "button",
1412
1496
  {
1413
1497
  type: "button",
@@ -1420,7 +1504,7 @@ function FilterOptionList({
1420
1504
  }
1421
1505
 
1422
1506
  // src/components/form-dialog.tsx
1423
- var import_jsx_runtime14 = require("react/jsx-runtime");
1507
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1424
1508
  function FormDialogLayout({
1425
1509
  title,
1426
1510
  children,
@@ -1431,11 +1515,11 @@ function FormDialogLayout({
1431
1515
  isSubmitting = false,
1432
1516
  isDisabled = false
1433
1517
  }) {
1434
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("form", { onSubmit, children: [
1435
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex flex-col space-y-1.5 text-center sm:text-left", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("h2", { className: "text-lg font-semibold leading-none tracking-tight", children: title }) }),
1436
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "space-y-4 py-4", children }),
1437
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
1438
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1518
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("form", { onSubmit, children: [
1519
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex flex-col space-y-1.5 text-center sm:text-left", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("h2", { className: "text-lg font-semibold leading-none tracking-tight", children: title }) }),
1520
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "space-y-4 py-4", children }),
1521
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
1522
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1439
1523
  "button",
1440
1524
  {
1441
1525
  type: "button",
@@ -1444,7 +1528,7 @@ function FormDialogLayout({
1444
1528
  children: cancelLabel
1445
1529
  }
1446
1530
  ),
1447
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1531
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1448
1532
  "button",
1449
1533
  {
1450
1534
  type: "submit",
@@ -1457,18 +1541,18 @@ function FormDialogLayout({
1457
1541
  ] });
1458
1542
  }
1459
1543
  function FormDialog({ onSubmit, ...rest }) {
1460
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1544
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1461
1545
  BaseDialog,
1462
1546
  {
1463
1547
  ...rest,
1464
- contentWrapper: onSubmit ? (content) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("form", { onSubmit, className: "flex min-h-0 flex-1 flex-col", children: content }) : void 0
1548
+ contentWrapper: onSubmit ? (content) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("form", { onSubmit, className: "flex min-h-0 flex-1 flex-col", children: content }) : void 0
1465
1549
  }
1466
1550
  );
1467
1551
  }
1468
1552
 
1469
1553
  // src/components/form-field.tsx
1470
1554
  var import_react4 = require("react");
1471
- var import_jsx_runtime15 = require("react/jsx-runtime");
1555
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1472
1556
  function FormField({ label, htmlFor, error, required, children, className }) {
1473
1557
  const errorId = (0, import_react4.useId)();
1474
1558
  const field = error && (0, import_react4.isValidElement)(children) ? (0, import_react4.cloneElement)(children, {
@@ -1478,26 +1562,26 @@ function FormField({ label, htmlFor, error, required, children, className }) {
1478
1562
  errorId
1479
1563
  ].filter(Boolean).join(" ")
1480
1564
  }) : children;
1481
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: `space-y-2 ${className ?? ""}`, children: [
1482
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
1565
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: `space-y-2 ${className ?? ""}`, children: [
1566
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
1483
1567
  "label",
1484
1568
  {
1485
1569
  htmlFor,
1486
1570
  className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
1487
1571
  children: [
1488
1572
  label,
1489
- required && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "ml-1 text-destructive", children: "*" })
1573
+ required && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "ml-1 text-destructive", children: "*" })
1490
1574
  ]
1491
1575
  }
1492
1576
  ),
1493
1577
  field,
1494
- error && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { id: errorId, className: "text-sm text-destructive", children: error })
1578
+ error && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { id: errorId, className: "text-sm text-destructive", children: error })
1495
1579
  ] });
1496
1580
  }
1497
1581
 
1498
1582
  // src/components/mobile-card-list.tsx
1499
1583
  var import_react5 = require("react");
1500
- var import_jsx_runtime16 = require("react/jsx-runtime");
1584
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1501
1585
  var SCROLL_THRESHOLD = 8;
1502
1586
  function MobileCardList({
1503
1587
  data,
@@ -1528,26 +1612,26 @@ function MobileCardList({
1528
1612
  }
1529
1613
  };
1530
1614
  if (isLoading) {
1531
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: `space-y-3 ${className ?? ""}`, children: Array.from({ length: loadingCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "rounded-xl border p-4", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "space-y-3", children: [
1532
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex justify-between", children: [
1533
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "h-5 w-32 animate-pulse rounded bg-muted" }),
1534
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "h-5 w-16 animate-pulse rounded bg-muted" })
1615
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: `space-y-3 ${className ?? ""}`, children: Array.from({ length: loadingCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "rounded-xl border p-4", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "space-y-3", children: [
1616
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex justify-between", children: [
1617
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "h-5 w-32 animate-pulse rounded bg-muted" }),
1618
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "h-5 w-16 animate-pulse rounded bg-muted" })
1535
1619
  ] }),
1536
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "h-4 w-48 animate-pulse rounded bg-muted" }),
1537
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex justify-between", children: [
1538
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
1539
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" })
1620
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "h-4 w-48 animate-pulse rounded bg-muted" }),
1621
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex justify-between", children: [
1622
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
1623
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" })
1540
1624
  ] })
1541
1625
  ] }) }, i)) });
1542
1626
  }
1543
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1627
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1544
1628
  "div",
1545
1629
  {
1546
1630
  className: `space-y-3 ${className ?? ""}`,
1547
1631
  onTouchStart,
1548
1632
  onTouchMove,
1549
1633
  onClickCapture,
1550
- children: data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1634
+ children: data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1551
1635
  "div",
1552
1636
  {
1553
1637
  className: "rounded-xl border p-4 transition-all duration-150 hover:border-foreground/20 active:scale-[0.99]",
@@ -1561,7 +1645,7 @@ function MobileCardList({
1561
1645
 
1562
1646
  // src/components/mode-toggle.tsx
1563
1647
  var DropdownMenu2 = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
1564
- var import_lucide_react8 = require("lucide-react");
1648
+ var import_lucide_react9 = require("lucide-react");
1565
1649
 
1566
1650
  // src/components/theme-provider.tsx
1567
1651
  var import_react6 = require("react");
@@ -1592,7 +1676,7 @@ function applyCompanyTheme(root, companyTheme, mode) {
1592
1676
  }
1593
1677
 
1594
1678
  // src/components/theme-provider.tsx
1595
- var import_jsx_runtime17 = require("react/jsx-runtime");
1679
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1596
1680
  var initialState = {
1597
1681
  theme: "system",
1598
1682
  setTheme: () => null
@@ -1631,7 +1715,7 @@ function ThemeProvider({
1631
1715
  setTheme(theme2);
1632
1716
  }
1633
1717
  };
1634
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ThemeProviderContext.Provider, { ...props, value, children });
1718
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ThemeProviderContext.Provider, { ...props, value, children });
1635
1719
  }
1636
1720
  function useTheme() {
1637
1721
  const context = (0, import_react6.useContext)(ThemeProviderContext);
@@ -1642,57 +1726,57 @@ function useTheme() {
1642
1726
  }
1643
1727
 
1644
1728
  // src/components/mode-toggle.tsx
1645
- var import_jsx_runtime18 = require("react/jsx-runtime");
1729
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1646
1730
  function ModeToggle() {
1647
1731
  const { setTheme } = useTheme();
1648
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(DropdownMenu2.Root, { children: [
1649
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(DropdownMenu2.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1732
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(DropdownMenu2.Root, { children: [
1733
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DropdownMenu2.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1650
1734
  "button",
1651
1735
  {
1652
1736
  type: "button",
1653
1737
  className: "relative inline-flex h-9 w-9 items-center justify-center rounded-md border border-input bg-background text-sm font-medium shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
1654
1738
  "aria-label": "Alternar tema",
1655
1739
  children: [
1656
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.Sun, { className: "h-4 w-4 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" }),
1657
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.Moon, { className: "absolute inset-0 m-auto h-4 w-4 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" })
1740
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.Sun, { className: "h-4 w-4 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" }),
1741
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.Moon, { className: "absolute inset-0 m-auto h-4 w-4 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" })
1658
1742
  ]
1659
1743
  }
1660
1744
  ) }),
1661
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(DropdownMenu2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1745
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DropdownMenu2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1662
1746
  DropdownMenu2.Content,
1663
1747
  {
1664
1748
  align: "end",
1665
1749
  className: "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95",
1666
1750
  children: [
1667
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1751
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1668
1752
  DropdownMenu2.Item,
1669
1753
  {
1670
1754
  className: "flex 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",
1671
1755
  onClick: () => setTheme("light"),
1672
1756
  children: [
1673
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.Sun, { className: "h-4 w-4" }),
1757
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.Sun, { className: "h-4 w-4" }),
1674
1758
  " Claro"
1675
1759
  ]
1676
1760
  }
1677
1761
  ),
1678
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1762
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1679
1763
  DropdownMenu2.Item,
1680
1764
  {
1681
1765
  className: "flex 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",
1682
1766
  onClick: () => setTheme("dark"),
1683
1767
  children: [
1684
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.Moon, { className: "h-4 w-4" }),
1768
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.Moon, { className: "h-4 w-4" }),
1685
1769
  " Escuro"
1686
1770
  ]
1687
1771
  }
1688
1772
  ),
1689
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1773
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1690
1774
  DropdownMenu2.Item,
1691
1775
  {
1692
1776
  className: "flex 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",
1693
1777
  onClick: () => setTheme("system"),
1694
1778
  children: [
1695
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.Monitor, { className: "h-4 w-4" }),
1779
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.Monitor, { className: "h-4 w-4" }),
1696
1780
  " Sistema"
1697
1781
  ]
1698
1782
  }
@@ -1706,10 +1790,10 @@ function ModeToggle() {
1706
1790
  // src/components/multi-combobox.tsx
1707
1791
  var PopoverPrimitive5 = __toESM(require("@radix-ui/react-popover"), 1);
1708
1792
  var import_cmdk2 = require("cmdk");
1709
- var import_lucide_react9 = require("lucide-react");
1793
+ var import_lucide_react10 = require("lucide-react");
1710
1794
  var React8 = __toESM(require("react"), 1);
1711
1795
  var import_vaul5 = require("vaul");
1712
- var import_jsx_runtime19 = require("react/jsx-runtime");
1796
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1713
1797
  function MultiCombobox({
1714
1798
  options,
1715
1799
  value,
@@ -1750,7 +1834,7 @@ function MultiCombobox({
1750
1834
  const removeValue = (optionValue) => {
1751
1835
  onChange(value.filter((v) => v !== optionValue));
1752
1836
  };
1753
- const trigger = /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1837
+ const trigger = /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1754
1838
  "div",
1755
1839
  {
1756
1840
  id,
@@ -1772,13 +1856,13 @@ function MultiCombobox({
1772
1856
  className
1773
1857
  ),
1774
1858
  children: [
1775
- selected.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "text-muted-foreground", children: placeholder }) : selected.map((option) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1859
+ selected.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-muted-foreground", children: placeholder }) : selected.map((option) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1776
1860
  "span",
1777
1861
  {
1778
1862
  className: "inline-flex items-center gap-1 rounded bg-secondary px-1.5 py-0.5 text-xs text-secondary-foreground",
1779
1863
  children: [
1780
1864
  option.label,
1781
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1865
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1782
1866
  "button",
1783
1867
  {
1784
1868
  type: "button",
@@ -1790,26 +1874,26 @@ function MultiCombobox({
1790
1874
  },
1791
1875
  onPointerDown: (event) => event.stopPropagation(),
1792
1876
  className: "rounded-sm opacity-60 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
1793
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.X, { className: "h-3 w-3" })
1877
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react10.X, { className: "h-3 w-3" })
1794
1878
  }
1795
1879
  )
1796
1880
  ]
1797
1881
  },
1798
1882
  option.value
1799
1883
  )),
1800
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.ChevronsUpDown, { className: "ml-auto h-4 w-4 shrink-0 opacity-50" })
1884
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react10.ChevronsUpDown, { className: "ml-auto h-4 w-4 shrink-0 opacity-50" })
1801
1885
  ]
1802
1886
  }
1803
1887
  );
1804
- const command = /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1888
+ const command = /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1805
1889
  import_cmdk2.Command,
1806
1890
  {
1807
1891
  shouldFilter: !isServer,
1808
1892
  className: "flex h-full w-full flex-col overflow-hidden",
1809
1893
  children: [
1810
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center border-b px-3", children: [
1811
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
1812
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1894
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex items-center border-b px-3", children: [
1895
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react10.Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
1896
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1813
1897
  import_cmdk2.Command.Input,
1814
1898
  {
1815
1899
  placeholder: searchPlaceholder,
@@ -1818,14 +1902,14 @@ function MultiCombobox({
1818
1902
  }
1819
1903
  )
1820
1904
  ] }),
1821
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1905
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1822
1906
  import_cmdk2.Command.List,
1823
1907
  {
1824
1908
  ref: listRef,
1825
1909
  className: "max-h-[50vh] overflow-y-auto overflow-x-hidden p-1 sm:max-h-60",
1826
1910
  children: [
1827
- !isServer && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_cmdk2.Command.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
1828
- options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1911
+ !isServer && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_cmdk2.Command.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
1912
+ options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1829
1913
  import_cmdk2.Command.Item,
1830
1914
  {
1831
1915
  value: isServer ? option.value : option.label,
@@ -1833,8 +1917,8 @@ function MultiCombobox({
1833
1917
  onSelect: () => toggleValue(option.value),
1834
1918
  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",
1835
1919
  children: [
1836
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1837
- import_lucide_react9.Check,
1920
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1921
+ import_lucide_react10.Check,
1838
1922
  {
1839
1923
  className: cn(
1840
1924
  "h-4 w-4 shrink-0",
@@ -1842,14 +1926,14 @@ function MultiCombobox({
1842
1926
  )
1843
1927
  }
1844
1928
  ),
1845
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "truncate", children: option.label })
1929
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "truncate", children: option.label })
1846
1930
  ]
1847
1931
  },
1848
1932
  option.value
1849
1933
  )),
1850
- isServer && !loading && options.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
1851
- isServer && loading && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "flex items-center justify-center py-6", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.Loader2, { className: "h-4 w-4 animate-spin text-muted-foreground" }) }),
1852
- isServer && hasMore && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1" })
1934
+ isServer && !loading && options.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
1935
+ isServer && loading && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex items-center justify-center py-6", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react10.Loader2, { className: "h-4 w-4 animate-spin text-muted-foreground" }) }),
1936
+ isServer && hasMore && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1" })
1853
1937
  ]
1854
1938
  }
1855
1939
  )
@@ -1857,9 +1941,9 @@ function MultiCombobox({
1857
1941
  }
1858
1942
  );
1859
1943
  if (isDesktop) {
1860
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(PopoverPrimitive5.Root, { open, onOpenChange: setOpen, children: [
1861
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(PopoverPrimitive5.Trigger, { asChild: true, disabled, children: trigger }),
1862
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(PopoverPrimitive5.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1944
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(PopoverPrimitive5.Root, { open, onOpenChange: setOpen, children: [
1945
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(PopoverPrimitive5.Trigger, { asChild: true, disabled, children: trigger }),
1946
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(PopoverPrimitive5.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1863
1947
  PopoverPrimitive5.Content,
1864
1948
  {
1865
1949
  align: "start",
@@ -1871,13 +1955,13 @@ function MultiCombobox({
1871
1955
  ) })
1872
1956
  ] });
1873
1957
  }
1874
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_vaul5.Drawer.Root, { open, onOpenChange: setOpen, children: [
1875
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_vaul5.Drawer.Trigger, { asChild: true, disabled, children: trigger }),
1876
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_vaul5.Drawer.Portal, { children: [
1877
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_vaul5.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1878
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_vaul5.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: [
1879
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_vaul5.Drawer.Title, { className: "sr-only", children: placeholder }),
1880
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
1958
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_vaul5.Drawer.Root, { open, onOpenChange: setOpen, children: [
1959
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_vaul5.Drawer.Trigger, { asChild: true, disabled, children: trigger }),
1960
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_vaul5.Drawer.Portal, { children: [
1961
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_vaul5.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1962
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_vaul5.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: [
1963
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_vaul5.Drawer.Title, { className: "sr-only", children: placeholder }),
1964
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
1881
1965
  command
1882
1966
  ] })
1883
1967
  ] })
@@ -1885,25 +1969,25 @@ function MultiCombobox({
1885
1969
  }
1886
1970
 
1887
1971
  // src/components/page-header.tsx
1888
- var import_jsx_runtime20 = require("react/jsx-runtime");
1972
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1889
1973
  function PageHeader({ title, description, action, className }) {
1890
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1974
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
1891
1975
  "div",
1892
1976
  {
1893
1977
  className: `flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between ${className ?? ""}`,
1894
1978
  children: [
1895
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "min-w-0", children: [
1896
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("h1", { className: "truncate text-2xl font-semibold tracking-tight", children: title }),
1897
- description && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-sm text-muted-foreground", children: description })
1979
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "min-w-0", children: [
1980
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("h1", { className: "truncate text-2xl font-semibold tracking-tight", children: title }),
1981
+ description && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "text-sm text-muted-foreground", children: description })
1898
1982
  ] }),
1899
- action && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "shrink-0", children: action })
1983
+ action && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "shrink-0", children: action })
1900
1984
  ]
1901
1985
  }
1902
1986
  );
1903
1987
  }
1904
1988
 
1905
1989
  // src/components/pagination.tsx
1906
- var import_jsx_runtime21 = require("react/jsx-runtime");
1990
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1907
1991
  var navButtonClass2 = "inline-flex h-8 items-center justify-center rounded-md border border-input bg-background px-3 text-xs font-medium shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground cursor-pointer disabled:pointer-events-none disabled:opacity-50";
1908
1992
  function Pagination({
1909
1993
  page,
@@ -1917,26 +2001,26 @@ function Pagination({
1917
2001
  pageSizeOptions,
1918
2002
  className
1919
2003
  }) {
1920
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
2004
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1921
2005
  "div",
1922
2006
  {
1923
2007
  className: `flex items-center ${showPageSizeSelector ? "justify-between" : "justify-end"} gap-4 ${className ?? ""}`,
1924
2008
  children: [
1925
- showPageSizeSelector && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-2", children: [
1926
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("label", { htmlFor: "pagination-page-size", className: "text-sm text-muted-foreground", children: "Itens por p\xE1gina" }),
1927
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2009
+ showPageSizeSelector && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center gap-2", children: [
2010
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("label", { htmlFor: "pagination-page-size", className: "text-sm text-muted-foreground", children: "Itens por p\xE1gina" }),
2011
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1928
2012
  "select",
1929
2013
  {
1930
2014
  id: "pagination-page-size",
1931
2015
  value: pageSize,
1932
2016
  onChange: (e) => onPageSizeChange?.(Number(e.target.value)),
1933
2017
  className: "h-8 rounded-md border border-input bg-background px-2 text-xs font-medium shadow-sm transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring cursor-pointer",
1934
- children: (pageSizeOptions ?? []).map((size) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("option", { value: size, children: size }, size))
2018
+ children: (pageSizeOptions ?? []).map((size) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("option", { value: size, children: size }, size))
1935
2019
  }
1936
2020
  )
1937
2021
  ] }),
1938
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-4", children: [
1939
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2022
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center gap-4", children: [
2023
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1940
2024
  "button",
1941
2025
  {
1942
2026
  type: "button",
@@ -1946,12 +2030,12 @@ function Pagination({
1946
2030
  children: "Anterior"
1947
2031
  }
1948
2032
  ),
1949
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("span", { className: "text-sm text-muted-foreground", children: [
2033
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { className: "text-sm text-muted-foreground", children: [
1950
2034
  "P\xE1gina ",
1951
2035
  page,
1952
2036
  totalPages ? ` de ${totalPages}` : ""
1953
2037
  ] }),
1954
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2038
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1955
2039
  "button",
1956
2040
  {
1957
2041
  type: "button",
@@ -1968,13 +2052,13 @@ function Pagination({
1968
2052
  }
1969
2053
 
1970
2054
  // src/components/password-input.tsx
1971
- var import_lucide_react10 = require("lucide-react");
2055
+ var import_lucide_react11 = require("lucide-react");
1972
2056
  var React9 = __toESM(require("react"), 1);
1973
- var import_jsx_runtime22 = require("react/jsx-runtime");
2057
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1974
2058
  var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props }, ref) => {
1975
2059
  const [visible, setVisible] = React9.useState(false);
1976
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: `relative ${containerClassName ?? ""}`, children: [
1977
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2060
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: `relative ${containerClassName ?? ""}`, children: [
2061
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1978
2062
  "input",
1979
2063
  {
1980
2064
  ref,
@@ -1983,7 +2067,7 @@ var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props
1983
2067
  ...props
1984
2068
  }
1985
2069
  ),
1986
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2070
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1987
2071
  "button",
1988
2072
  {
1989
2073
  type: "button",
@@ -1991,7 +2075,7 @@ var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props
1991
2075
  "aria-label": visible ? "Ocultar senha" : "Mostrar senha",
1992
2076
  tabIndex: -1,
1993
2077
  className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground transition-colors hover:text-foreground",
1994
- children: visible ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react10.EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react10.Eye, { className: "h-4 w-4" })
2078
+ children: visible ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react11.EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react11.Eye, { className: "h-4 w-4" })
1995
2079
  }
1996
2080
  )
1997
2081
  ] });
@@ -1999,8 +2083,8 @@ var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props
1999
2083
  PasswordInput.displayName = "PasswordInput";
2000
2084
 
2001
2085
  // src/components/progress-bar.tsx
2002
- var import_jsx_runtime23 = require("react/jsx-runtime");
2003
- var sizeClasses2 = {
2086
+ var import_jsx_runtime24 = require("react/jsx-runtime");
2087
+ var sizeClasses3 = {
2004
2088
  sm: "h-1.5",
2005
2089
  md: "h-2"
2006
2090
  };
@@ -2013,16 +2097,16 @@ function ProgressBar({
2013
2097
  indicatorClassName
2014
2098
  }) {
2015
2099
  const clamped = Math.min(100, Math.max(0, value));
2016
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: `space-y-1.5 ${className ?? ""}`, children: [
2017
- (label || valueLabel) && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-baseline justify-between gap-2", children: [
2018
- label && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "text-sm text-muted-foreground", children: label }),
2019
- valueLabel && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "text-sm font-semibold", children: valueLabel })
2100
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `space-y-1.5 ${className ?? ""}`, children: [
2101
+ (label || valueLabel) && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-baseline justify-between gap-2", children: [
2102
+ label && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "text-sm text-muted-foreground", children: label }),
2103
+ valueLabel && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "text-sm font-semibold", children: valueLabel })
2020
2104
  ] }),
2021
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2105
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2022
2106
  "div",
2023
2107
  {
2024
- className: `w-full overflow-hidden rounded-full bg-muted ${sizeClasses2[size]}`,
2025
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2108
+ className: `w-full overflow-hidden rounded-full bg-muted ${sizeClasses3[size]}`,
2109
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2026
2110
  "div",
2027
2111
  {
2028
2112
  className: `h-full rounded-full transition-all duration-300 ${indicatorClassName ?? "bg-primary"}`,
@@ -2035,7 +2119,7 @@ function ProgressBar({
2035
2119
  }
2036
2120
 
2037
2121
  // src/components/responsive-data-view.tsx
2038
- var import_jsx_runtime24 = require("react/jsx-runtime");
2122
+ var import_jsx_runtime25 = require("react/jsx-runtime");
2039
2123
  function ResponsiveDataView({
2040
2124
  table,
2041
2125
  cards,
@@ -2046,13 +2130,13 @@ function ResponsiveDataView({
2046
2130
  emptyDescription,
2047
2131
  pagination
2048
2132
  }) {
2049
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-4", children: [
2050
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "hidden overflow-x-auto rounded-md border md:block", children: table }),
2051
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "md:hidden", children: cards }),
2052
- !isLoading && isEmpty && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
2053
- emptyIcon && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
2054
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
2055
- emptyDescription && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
2133
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-4", children: [
2134
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "hidden overflow-x-auto rounded-md border md:block", children: table }),
2135
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "md:hidden", children: cards }),
2136
+ !isLoading && isEmpty && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
2137
+ emptyIcon && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
2138
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
2139
+ emptyDescription && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
2056
2140
  ] }),
2057
2141
  pagination
2058
2142
  ] });
@@ -2060,10 +2144,10 @@ function ResponsiveDataView({
2060
2144
 
2061
2145
  // src/components/row-actions-menu.tsx
2062
2146
  var DropdownMenu3 = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
2063
- var import_lucide_react11 = require("lucide-react");
2147
+ var import_lucide_react12 = require("lucide-react");
2064
2148
  var import_react7 = require("react");
2065
2149
  var import_vaul6 = require("vaul");
2066
- var import_jsx_runtime25 = require("react/jsx-runtime");
2150
+ var import_jsx_runtime26 = require("react/jsx-runtime");
2067
2151
  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";
2068
2152
  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";
2069
2153
  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";
@@ -2077,20 +2161,20 @@ function RowActionsMenu({
2077
2161
  const isDesktop = useIsDesktop();
2078
2162
  const [open, setOpen] = (0, import_react7.useState)(false);
2079
2163
  if (actions.length === 0) return null;
2080
- const trigger = /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2164
+ const trigger = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2081
2165
  "button",
2082
2166
  {
2083
2167
  type: "button",
2084
2168
  disabled,
2085
2169
  "aria-label": label,
2086
2170
  className: triggerClass,
2087
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react11.MoreVertical, { className: "h-4 w-4" })
2171
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react12.MoreVertical, { className: "h-4 w-4" })
2088
2172
  }
2089
2173
  );
2090
2174
  if (isDesktop) {
2091
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(DropdownMenu3.Root, { open, onOpenChange: setOpen, modal: false, children: [
2092
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DropdownMenu3.Trigger, { asChild: true, children: trigger }),
2093
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DropdownMenu3.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2175
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(DropdownMenu3.Root, { open, onOpenChange: setOpen, modal: false, children: [
2176
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DropdownMenu3.Trigger, { asChild: true, children: trigger }),
2177
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DropdownMenu3.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2094
2178
  DropdownMenu3.Content,
2095
2179
  {
2096
2180
  align,
@@ -2101,7 +2185,7 @@ function RowActionsMenu({
2101
2185
  itemClass2,
2102
2186
  action.destructive && "text-destructive focus:bg-destructive/10"
2103
2187
  );
2104
- return action.href ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2188
+ return action.href ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2105
2189
  DropdownMenu3.Item,
2106
2190
  {
2107
2191
  asChild: true,
@@ -2109,14 +2193,14 @@ function RowActionsMenu({
2109
2193
  children: renderLink({
2110
2194
  href: action.href,
2111
2195
  className: cls,
2112
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
2196
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
2113
2197
  action.icon,
2114
2198
  action.label
2115
2199
  ] })
2116
2200
  })
2117
2201
  },
2118
2202
  action.label
2119
- ) : /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
2203
+ ) : /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
2120
2204
  DropdownMenu3.Item,
2121
2205
  {
2122
2206
  className: cls,
@@ -2134,23 +2218,23 @@ function RowActionsMenu({
2134
2218
  ) })
2135
2219
  ] });
2136
2220
  }
2137
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_vaul6.Drawer.Root, { open, onOpenChange: setOpen, children: [
2138
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_vaul6.Drawer.Trigger, { asChild: true, children: trigger }),
2139
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_vaul6.Drawer.Portal, { children: [
2140
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_vaul6.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
2141
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_vaul6.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: [
2142
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_vaul6.Drawer.Title, { className: "sr-only", children: label }),
2143
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
2221
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_vaul6.Drawer.Root, { open, onOpenChange: setOpen, children: [
2222
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_vaul6.Drawer.Trigger, { asChild: true, children: trigger }),
2223
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_vaul6.Drawer.Portal, { children: [
2224
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_vaul6.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
2225
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_vaul6.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: [
2226
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_vaul6.Drawer.Title, { className: "sr-only", children: label }),
2227
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
2144
2228
  actions.map((action) => {
2145
2229
  const cls = cn(
2146
2230
  sheetItemClass2,
2147
2231
  action.destructive && "text-destructive"
2148
2232
  );
2149
- const inner = /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
2233
+ const inner = /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
2150
2234
  action.icon,
2151
2235
  action.label
2152
2236
  ] });
2153
- return action.href ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2237
+ return action.href ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2154
2238
  "span",
2155
2239
  {
2156
2240
  onClick: () => setOpen(false),
@@ -2162,7 +2246,7 @@ function RowActionsMenu({
2162
2246
  })
2163
2247
  },
2164
2248
  action.label
2165
- ) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2249
+ ) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2166
2250
  "button",
2167
2251
  {
2168
2252
  type: "button",
@@ -2184,11 +2268,11 @@ function RowActionsMenu({
2184
2268
 
2185
2269
  // src/components/search-input.tsx
2186
2270
  var React10 = __toESM(require("react"), 1);
2187
- var import_jsx_runtime26 = require("react/jsx-runtime");
2271
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2188
2272
  var SearchInput = React10.forwardRef(
2189
2273
  ({ containerClassName, className, ...props }, ref) => {
2190
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: `relative flex-1 ${containerClassName ?? ""}`, children: [
2191
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
2274
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: cn("relative flex-1", containerClassName), children: [
2275
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
2192
2276
  "svg",
2193
2277
  {
2194
2278
  xmlns: "http://www.w3.org/2000/svg",
@@ -2200,19 +2284,23 @@ var SearchInput = React10.forwardRef(
2200
2284
  strokeWidth: "2",
2201
2285
  strokeLinecap: "round",
2202
2286
  strokeLinejoin: "round",
2287
+ "aria-hidden": "true",
2203
2288
  className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground",
2204
2289
  children: [
2205
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("circle", { cx: "11", cy: "11", r: "8" }),
2206
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("path", { d: "m21 21-4.3-4.3" })
2290
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("circle", { cx: "11", cy: "11", r: "8" }),
2291
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("path", { d: "m21 21-4.3-4.3" })
2207
2292
  ]
2208
2293
  }
2209
2294
  ),
2210
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2295
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2211
2296
  "input",
2212
2297
  {
2213
2298
  ref,
2214
2299
  type: "text",
2215
- className: `flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 pl-10 text-sm shadow-sm transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 ${className ?? ""}`,
2300
+ className: cn(
2301
+ "flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 pl-10 text-sm shadow-sm transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
2302
+ className
2303
+ ),
2216
2304
  ...props
2217
2305
  }
2218
2306
  )
@@ -2222,30 +2310,30 @@ var SearchInput = React10.forwardRef(
2222
2310
  SearchInput.displayName = "SearchInput";
2223
2311
 
2224
2312
  // src/components/stat-card.tsx
2225
- var import_jsx_runtime27 = require("react/jsx-runtime");
2313
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2226
2314
  function StatCard({ label, value, detail, icon, isLoading }) {
2227
2315
  if (isLoading) {
2228
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
2229
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center justify-between pb-2", children: [
2230
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
2231
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "h-4 w-4 animate-pulse rounded bg-muted" })
2316
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
2317
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center justify-between pb-2", children: [
2318
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
2319
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "h-4 w-4 animate-pulse rounded bg-muted" })
2232
2320
  ] }),
2233
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "mt-2 h-7 w-16 animate-pulse rounded bg-muted" }),
2234
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "mt-1 h-4 w-20 animate-pulse rounded bg-muted" })
2321
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "mt-2 h-7 w-16 animate-pulse rounded bg-muted" }),
2322
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "mt-1 h-4 w-20 animate-pulse rounded bg-muted" })
2235
2323
  ] });
2236
2324
  }
2237
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
2238
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center justify-between pb-2", children: [
2239
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-sm font-medium text-muted-foreground", children: label }),
2240
- icon && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-muted-foreground", children: icon })
2325
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
2326
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center justify-between pb-2", children: [
2327
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-sm font-medium text-muted-foreground", children: label }),
2328
+ icon && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-muted-foreground", children: icon })
2241
2329
  ] }),
2242
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "text-2xl font-bold", children: value }),
2243
- detail && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "text-xs text-muted-foreground", children: detail })
2330
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "text-2xl font-bold", children: value }),
2331
+ detail && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: "text-xs text-muted-foreground", children: detail })
2244
2332
  ] });
2245
2333
  }
2246
2334
 
2247
2335
  // src/components/status-badge.tsx
2248
- var import_jsx_runtime28 = require("react/jsx-runtime");
2336
+ var import_jsx_runtime29 = require("react/jsx-runtime");
2249
2337
  var variantClasses = {
2250
2338
  neutral: {
2251
2339
  badge: "bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300",
@@ -2275,12 +2363,12 @@ function StatusBadge({
2275
2363
  children
2276
2364
  }) {
2277
2365
  const classes = variantClasses[variant];
2278
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2366
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
2279
2367
  "span",
2280
2368
  {
2281
2369
  className: `inline-flex items-center gap-1.5 rounded-md px-2 py-0.5 text-xs font-medium ${classes.badge} ${className ?? ""}`,
2282
2370
  children: [
2283
- dot && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2371
+ dot && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2284
2372
  "span",
2285
2373
  {
2286
2374
  className: `inline-block h-1.5 w-1.5 shrink-0 rounded-full ${classes.dot}`
@@ -2293,31 +2381,31 @@ function StatusBadge({
2293
2381
  }
2294
2382
 
2295
2383
  // src/components/status-dot.tsx
2296
- var import_jsx_runtime29 = require("react/jsx-runtime");
2384
+ var import_jsx_runtime30 = require("react/jsx-runtime");
2297
2385
  function StatusDot({ active, label, className }) {
2298
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("span", { className: `inline-flex items-center gap-2 ${className ?? ""}`, children: [
2299
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2386
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("span", { className: `inline-flex items-center gap-2 ${className ?? ""}`, children: [
2387
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2300
2388
  "span",
2301
2389
  {
2302
2390
  className: `h-2 w-2 rounded-full ${active ? "bg-green-500" : "bg-red-500"}`
2303
2391
  }
2304
2392
  ),
2305
- label && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: label })
2393
+ label && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: label })
2306
2394
  ] });
2307
2395
  }
2308
2396
 
2309
2397
  // src/components/table-skeleton.tsx
2310
- var import_jsx_runtime30 = require("react/jsx-runtime");
2398
+ var import_jsx_runtime31 = require("react/jsx-runtime");
2311
2399
  function TableSkeleton({ rows = 5, columns = 4 }) {
2312
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_jsx_runtime30.Fragment, { children: Array.from({ length: rows }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("tr", { className: "border-b transition-colors", children: Array.from({ length: columns }).map((_2, j) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("td", { className: "p-4 align-middle", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "h-5 w-full animate-pulse rounded bg-muted" }) }, j)) }, i)) });
2400
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_jsx_runtime31.Fragment, { children: Array.from({ length: rows }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("tr", { className: "border-b transition-colors", children: Array.from({ length: columns }).map((_2, j) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("td", { className: "p-4 align-middle", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "h-5 w-full animate-pulse rounded bg-muted" }) }, j)) }, i)) });
2313
2401
  }
2314
2402
 
2315
2403
  // src/components/toaster.tsx
2316
2404
  var import_sonner = require("sonner");
2317
- var import_jsx_runtime31 = require("react/jsx-runtime");
2405
+ var import_jsx_runtime32 = require("react/jsx-runtime");
2318
2406
  function Toaster(props) {
2319
2407
  const { theme = "system" } = useTheme();
2320
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2408
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2321
2409
  import_sonner.Toaster,
2322
2410
  {
2323
2411
  theme,
@@ -2442,6 +2530,7 @@ function extractApiError(err, fallbackMessage = "Ocorreu um erro inesperado.") {
2442
2530
  Pagination,
2443
2531
  PasswordInput,
2444
2532
  ProgressBar,
2533
+ Rating,
2445
2534
  ResponsiveDataView,
2446
2535
  RowActionsMenu,
2447
2536
  SearchInput,