@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/components/combobox.d.ts +4 -1
- package/dist/components/combobox.d.ts.map +1 -1
- package/dist/components/rating.d.ts +10 -0
- package/dist/components/rating.d.ts.map +1 -0
- package/dist/components/search-input.d.ts.map +1 -1
- package/dist/index.cjs +364 -275
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +275 -187
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
- package/src/components/combobox.tsx +222 -220
- package/src/components/rating.tsx +99 -0
- package/src/components/search-input.tsx +36 -31
- package/src/index.ts +2 -0
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
|
|
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
|
|
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,
|
|
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,
|
|
759
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
770
|
-
/* @__PURE__ */ (0,
|
|
771
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
787
|
-
showCreate && /* @__PURE__ */ (0,
|
|
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,
|
|
795
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
810
|
-
|
|
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,
|
|
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,
|
|
824
|
-
isServer && loading && /* @__PURE__ */ (0,
|
|
825
|
-
isServer && hasMore && /* @__PURE__ */ (0,
|
|
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,
|
|
834
|
-
/* @__PURE__ */ (0,
|
|
835
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
848
|
-
/* @__PURE__ */ (0,
|
|
849
|
-
/* @__PURE__ */ (0,
|
|
850
|
-
/* @__PURE__ */ (0,
|
|
851
|
-
/* @__PURE__ */ (0,
|
|
852
|
-
/* @__PURE__ */ (0,
|
|
853
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
877
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
888
|
-
/* @__PURE__ */ (0,
|
|
889
|
-
/* @__PURE__ */ (0,
|
|
890
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
893
|
-
/* @__PURE__ */ (0,
|
|
894
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
923
|
-
/* @__PURE__ */ (0,
|
|
924
|
-
!isLoading && isEmpty && /* @__PURE__ */ (0,
|
|
925
|
-
emptyIcon && /* @__PURE__ */ (0,
|
|
926
|
-
/* @__PURE__ */ (0,
|
|
927
|
-
emptyDescription && /* @__PURE__ */ (0,
|
|
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,
|
|
930
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
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,
|
|
1035
|
-
if (orientation === "right") return /* @__PURE__ */ (0,
|
|
1036
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
1122
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
1157
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1176
|
-
/* @__PURE__ */ (0,
|
|
1177
|
-
/* @__PURE__ */ (0,
|
|
1178
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1205
|
-
/* @__PURE__ */ (0,
|
|
1206
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1305
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_vaul3.Drawer.Root, { open, onOpenChange: setOpen, children: [
|
|
1222
1306
|
trigger,
|
|
1223
|
-
/* @__PURE__ */ (0,
|
|
1224
|
-
/* @__PURE__ */ (0,
|
|
1225
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1235
|
-
/* @__PURE__ */ (0,
|
|
1236
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1328
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DatePickerImpl, { ...props });
|
|
1245
1329
|
}
|
|
1246
1330
|
function DateTimePicker(props) {
|
|
1247
|
-
return /* @__PURE__ */ (0,
|
|
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
|
|
1335
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
1252
1336
|
function EmptyState({ icon, title, description, action, className }) {
|
|
1253
|
-
return /* @__PURE__ */ (0,
|
|
1254
|
-
icon && /* @__PURE__ */ (0,
|
|
1255
|
-
/* @__PURE__ */ (0,
|
|
1256
|
-
description && /* @__PURE__ */ (0,
|
|
1257
|
-
action && /* @__PURE__ */ (0,
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
1324
|
-
/* @__PURE__ */ (0,
|
|
1325
|
-
active && badge != null && /* @__PURE__ */ (0,
|
|
1326
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1332
|
-
/* @__PURE__ */ (0,
|
|
1333
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1354
|
-
/* @__PURE__ */ (0,
|
|
1355
|
-
/* @__PURE__ */ (0,
|
|
1356
|
-
/* @__PURE__ */ (0,
|
|
1357
|
-
/* @__PURE__ */ (0,
|
|
1358
|
-
/* @__PURE__ */ (0,
|
|
1359
|
-
/* @__PURE__ */ (0,
|
|
1360
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
1404
|
-
isChecked && /* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
1435
|
-
/* @__PURE__ */ (0,
|
|
1436
|
-
/* @__PURE__ */ (0,
|
|
1437
|
-
/* @__PURE__ */ (0,
|
|
1438
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1544
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1461
1545
|
BaseDialog,
|
|
1462
1546
|
{
|
|
1463
1547
|
...rest,
|
|
1464
|
-
contentWrapper: onSubmit ? (content) => /* @__PURE__ */ (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
|
|
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,
|
|
1482
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
1532
|
-
/* @__PURE__ */ (0,
|
|
1533
|
-
/* @__PURE__ */ (0,
|
|
1534
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1537
|
-
/* @__PURE__ */ (0,
|
|
1538
|
-
/* @__PURE__ */ (0,
|
|
1539
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
1729
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1646
1730
|
function ModeToggle() {
|
|
1647
1731
|
const { setTheme } = useTheme();
|
|
1648
|
-
return /* @__PURE__ */ (0,
|
|
1649
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1657
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
1811
|
-
/* @__PURE__ */ (0,
|
|
1812
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1828
|
-
options.map((option) => /* @__PURE__ */ (0,
|
|
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,
|
|
1837
|
-
|
|
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,
|
|
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,
|
|
1851
|
-
isServer && loading && /* @__PURE__ */ (0,
|
|
1852
|
-
isServer && hasMore && /* @__PURE__ */ (0,
|
|
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,
|
|
1861
|
-
/* @__PURE__ */ (0,
|
|
1862
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1875
|
-
/* @__PURE__ */ (0,
|
|
1876
|
-
/* @__PURE__ */ (0,
|
|
1877
|
-
/* @__PURE__ */ (0,
|
|
1878
|
-
/* @__PURE__ */ (0,
|
|
1879
|
-
/* @__PURE__ */ (0,
|
|
1880
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
1972
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
1889
1973
|
function PageHeader({ title, description, action, className }) {
|
|
1890
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
1896
|
-
/* @__PURE__ */ (0,
|
|
1897
|
-
description && /* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
1926
|
-
/* @__PURE__ */ (0,
|
|
1927
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1939
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
2055
|
+
var import_lucide_react11 = require("lucide-react");
|
|
1972
2056
|
var React9 = __toESM(require("react"), 1);
|
|
1973
|
-
var
|
|
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,
|
|
1977
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
2003
|
-
var
|
|
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,
|
|
2017
|
-
(label || valueLabel) && /* @__PURE__ */ (0,
|
|
2018
|
-
label && /* @__PURE__ */ (0,
|
|
2019
|
-
valueLabel && /* @__PURE__ */ (0,
|
|
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,
|
|
2105
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
2022
2106
|
"div",
|
|
2023
2107
|
{
|
|
2024
|
-
className: `w-full overflow-hidden rounded-full bg-muted ${
|
|
2025
|
-
children: /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
2050
|
-
/* @__PURE__ */ (0,
|
|
2051
|
-
/* @__PURE__ */ (0,
|
|
2052
|
-
!isLoading && isEmpty && /* @__PURE__ */ (0,
|
|
2053
|
-
emptyIcon && /* @__PURE__ */ (0,
|
|
2054
|
-
/* @__PURE__ */ (0,
|
|
2055
|
-
emptyDescription && /* @__PURE__ */ (0,
|
|
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
|
|
2147
|
+
var import_lucide_react12 = require("lucide-react");
|
|
2064
2148
|
var import_react7 = require("react");
|
|
2065
2149
|
var import_vaul6 = require("vaul");
|
|
2066
|
-
var
|
|
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,
|
|
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,
|
|
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,
|
|
2092
|
-
/* @__PURE__ */ (0,
|
|
2093
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
2138
|
-
/* @__PURE__ */ (0,
|
|
2139
|
-
/* @__PURE__ */ (0,
|
|
2140
|
-
/* @__PURE__ */ (0,
|
|
2141
|
-
/* @__PURE__ */ (0,
|
|
2142
|
-
/* @__PURE__ */ (0,
|
|
2143
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
2191
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2206
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2295
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2211
2296
|
"input",
|
|
2212
2297
|
{
|
|
2213
2298
|
ref,
|
|
2214
2299
|
type: "text",
|
|
2215
|
-
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
|
|
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,
|
|
2229
|
-
/* @__PURE__ */ (0,
|
|
2230
|
-
/* @__PURE__ */ (0,
|
|
2231
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2234
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2238
|
-
/* @__PURE__ */ (0,
|
|
2239
|
-
/* @__PURE__ */ (0,
|
|
2240
|
-
icon && /* @__PURE__ */ (0,
|
|
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,
|
|
2243
|
-
detail && /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
2384
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
2297
2385
|
function StatusDot({ active, label, className }) {
|
|
2298
|
-
return /* @__PURE__ */ (0,
|
|
2299
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
2398
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
2311
2399
|
function TableSkeleton({ rows = 5, columns = 4 }) {
|
|
2312
|
-
return /* @__PURE__ */ (0,
|
|
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
|
|
2405
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
2318
2406
|
function Toaster(props) {
|
|
2319
2407
|
const { theme = "system" } = useTheme();
|
|
2320
|
-
return /* @__PURE__ */ (0,
|
|
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,
|