@motor-hero/ui-kit 0.51.0 → 0.52.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 +2 -0
- package/dist/components/combobox.d.ts.map +1 -1
- package/dist/components/multi-combobox.d.ts.map +1 -1
- package/dist/components/rating.d.ts.map +1 -1
- package/dist/index.cjs +47 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +166 -135
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/combobox.tsx +23 -7
- package/src/components/multi-combobox.tsx +9 -3
- package/src/components/rating.tsx +30 -13
package/dist/index.js
CHANGED
|
@@ -600,15 +600,16 @@ function ColorPicker({
|
|
|
600
600
|
// src/components/rating.tsx
|
|
601
601
|
import * as ToggleGroup from "@radix-ui/react-toggle-group";
|
|
602
602
|
import { Star } from "lucide-react";
|
|
603
|
-
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
603
|
+
import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
604
604
|
var MAX_STARS = 5;
|
|
605
605
|
var sizeClasses2 = {
|
|
606
606
|
sm: "h-4 w-4",
|
|
607
607
|
md: "h-5 w-5",
|
|
608
608
|
lg: "h-6 w-6"
|
|
609
609
|
};
|
|
610
|
+
var formatNote = (value) => value.toLocaleString("pt-BR", { maximumFractionDigits: 1 });
|
|
610
611
|
function defaultLabel(value) {
|
|
611
|
-
return value > 0 ? `
|
|
612
|
+
return value > 0 ? `Nota ${formatNote(value)} de ${MAX_STARS}` : "Avalia\xE7\xE3o: sem nota";
|
|
612
613
|
}
|
|
613
614
|
function Rating({
|
|
614
615
|
value = 0,
|
|
@@ -627,17 +628,35 @@ function Rating({
|
|
|
627
628
|
role: "img",
|
|
628
629
|
"aria-label": label,
|
|
629
630
|
className: cn("inline-flex items-center gap-0.5", className),
|
|
630
|
-
children: Array.from({ length: MAX_STARS }, (_, index) =>
|
|
631
|
-
|
|
632
|
-
{
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
631
|
+
children: Array.from({ length: MAX_STARS }, (_, index) => {
|
|
632
|
+
const fill = Math.min(1, Math.max(0, clamped - index));
|
|
633
|
+
return /* @__PURE__ */ jsxs7("span", { className: "relative inline-flex", children: [
|
|
634
|
+
/* @__PURE__ */ jsx8(
|
|
635
|
+
Star,
|
|
636
|
+
{
|
|
637
|
+
"aria-hidden": true,
|
|
638
|
+
className: cn(sizeClasses2[size], "text-muted-foreground")
|
|
639
|
+
}
|
|
640
|
+
),
|
|
641
|
+
fill > 0 && /* @__PURE__ */ jsx8(
|
|
642
|
+
"span",
|
|
643
|
+
{
|
|
644
|
+
className: "absolute inset-y-0 left-0 overflow-hidden",
|
|
645
|
+
style: { width: `${fill * 100}%` },
|
|
646
|
+
children: /* @__PURE__ */ jsx8(
|
|
647
|
+
Star,
|
|
648
|
+
{
|
|
649
|
+
"aria-hidden": true,
|
|
650
|
+
className: cn(
|
|
651
|
+
sizeClasses2[size],
|
|
652
|
+
"max-w-none fill-amber-400 text-amber-400"
|
|
653
|
+
)
|
|
654
|
+
}
|
|
655
|
+
)
|
|
656
|
+
}
|
|
637
657
|
)
|
|
638
|
-
},
|
|
639
|
-
|
|
640
|
-
))
|
|
658
|
+
] }, index);
|
|
659
|
+
})
|
|
641
660
|
}
|
|
642
661
|
);
|
|
643
662
|
}
|
|
@@ -681,7 +700,7 @@ function Rating({
|
|
|
681
700
|
|
|
682
701
|
// src/components/combobox.tsx
|
|
683
702
|
import * as PopoverPrimitive2 from "@radix-ui/react-popover";
|
|
684
|
-
import { Command as CommandPrimitive } from "cmdk";
|
|
703
|
+
import { Command as CommandPrimitive, defaultFilter } from "cmdk";
|
|
685
704
|
import { Check, ChevronsUpDown as ChevronsUpDown2, Loader2, Plus, Search } from "lucide-react";
|
|
686
705
|
import * as React5 from "react";
|
|
687
706
|
import { Drawer as DrawerPrimitive2 } from "vaul";
|
|
@@ -726,7 +745,7 @@ function useInfiniteScrollSentinel({
|
|
|
726
745
|
}
|
|
727
746
|
|
|
728
747
|
// src/components/combobox.tsx
|
|
729
|
-
import { jsx as jsx9, jsxs as
|
|
748
|
+
import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
730
749
|
function Combobox({
|
|
731
750
|
options,
|
|
732
751
|
value,
|
|
@@ -784,7 +803,7 @@ function Combobox({
|
|
|
784
803
|
loading,
|
|
785
804
|
onLoadMore
|
|
786
805
|
});
|
|
787
|
-
const trigger = /* @__PURE__ */
|
|
806
|
+
const trigger = /* @__PURE__ */ jsxs8(
|
|
788
807
|
"button",
|
|
789
808
|
{
|
|
790
809
|
type: "button",
|
|
@@ -799,18 +818,26 @@ function Combobox({
|
|
|
799
818
|
className
|
|
800
819
|
),
|
|
801
820
|
children: [
|
|
802
|
-
/* @__PURE__ */ jsx9(
|
|
821
|
+
/* @__PURE__ */ jsx9(
|
|
822
|
+
"span",
|
|
823
|
+
{
|
|
824
|
+
title: selected?.description,
|
|
825
|
+
className: cn("truncate", !selected && "text-muted-foreground"),
|
|
826
|
+
children: selected ? selected.label : placeholder
|
|
827
|
+
}
|
|
828
|
+
),
|
|
803
829
|
/* @__PURE__ */ jsx9(ChevronsUpDown2, { className: "h-4 w-4 shrink-0 opacity-50" })
|
|
804
830
|
]
|
|
805
831
|
}
|
|
806
832
|
);
|
|
807
|
-
const command = /* @__PURE__ */
|
|
833
|
+
const command = /* @__PURE__ */ jsxs8(
|
|
808
834
|
CommandPrimitive,
|
|
809
835
|
{
|
|
810
836
|
shouldFilter: !isServer,
|
|
837
|
+
filter: filterByKeywords,
|
|
811
838
|
className: "flex h-full w-full flex-col overflow-hidden",
|
|
812
839
|
children: [
|
|
813
|
-
/* @__PURE__ */
|
|
840
|
+
/* @__PURE__ */ jsxs8("div", { className: "flex items-center border-b px-3", children: [
|
|
814
841
|
/* @__PURE__ */ jsx9(Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
|
|
815
842
|
/* @__PURE__ */ jsx9(
|
|
816
843
|
CommandPrimitive.Input,
|
|
@@ -821,17 +848,18 @@ function Combobox({
|
|
|
821
848
|
}
|
|
822
849
|
)
|
|
823
850
|
] }),
|
|
824
|
-
/* @__PURE__ */
|
|
851
|
+
/* @__PURE__ */ jsxs8(
|
|
825
852
|
CommandPrimitive.List,
|
|
826
853
|
{
|
|
827
854
|
ref: listRef,
|
|
828
855
|
className: "max-h-[50dvh] overflow-y-auto overflow-x-hidden p-1 sm:max-h-60",
|
|
829
856
|
children: [
|
|
830
857
|
!isServer && !showCreate && /* @__PURE__ */ jsx9(CommandPrimitive.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
|
|
831
|
-
showCreate && /* @__PURE__ */
|
|
858
|
+
showCreate && /* @__PURE__ */ jsxs8(
|
|
832
859
|
CommandPrimitive.Item,
|
|
833
860
|
{
|
|
834
861
|
value: trimmedSearch,
|
|
862
|
+
keywords: [trimmedSearch],
|
|
835
863
|
onSelect: () => handleSelect(trimmedSearch),
|
|
836
864
|
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",
|
|
837
865
|
children: [
|
|
@@ -842,11 +870,11 @@ function Combobox({
|
|
|
842
870
|
]
|
|
843
871
|
}
|
|
844
872
|
),
|
|
845
|
-
options.map((option) => /* @__PURE__ */
|
|
873
|
+
options.map((option) => /* @__PURE__ */ jsxs8(
|
|
846
874
|
CommandPrimitive.Item,
|
|
847
875
|
{
|
|
848
|
-
value:
|
|
849
|
-
keywords: option
|
|
876
|
+
value: option.value,
|
|
877
|
+
keywords: optionKeywords(option),
|
|
850
878
|
disabled: option.disabled,
|
|
851
879
|
onSelect: () => handleSelect(option.value),
|
|
852
880
|
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",
|
|
@@ -876,7 +904,7 @@ function Combobox({
|
|
|
876
904
|
}
|
|
877
905
|
);
|
|
878
906
|
if (isDesktop) {
|
|
879
|
-
return /* @__PURE__ */
|
|
907
|
+
return /* @__PURE__ */ jsxs8(PopoverPrimitive2.Root, { open, onOpenChange: handleOpenChange, children: [
|
|
880
908
|
/* @__PURE__ */ jsx9(PopoverPrimitive2.Trigger, { asChild: true, children: trigger }),
|
|
881
909
|
/* @__PURE__ */ jsx9(PopoverPrimitive2.Portal, { children: /* @__PURE__ */ jsx9(
|
|
882
910
|
PopoverPrimitive2.Content,
|
|
@@ -890,11 +918,11 @@ function Combobox({
|
|
|
890
918
|
) })
|
|
891
919
|
] });
|
|
892
920
|
}
|
|
893
|
-
return /* @__PURE__ */
|
|
921
|
+
return /* @__PURE__ */ jsxs8(DrawerPrimitive2.Root, { open, onOpenChange: handleOpenChange, children: [
|
|
894
922
|
/* @__PURE__ */ jsx9(DrawerPrimitive2.Trigger, { asChild: true, children: trigger }),
|
|
895
|
-
/* @__PURE__ */
|
|
923
|
+
/* @__PURE__ */ jsxs8(DrawerPrimitive2.Portal, { children: [
|
|
896
924
|
/* @__PURE__ */ jsx9(DrawerPrimitive2.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
897
|
-
/* @__PURE__ */
|
|
925
|
+
/* @__PURE__ */ jsxs8(DrawerPrimitive2.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85dvh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
|
|
898
926
|
/* @__PURE__ */ jsx9(DrawerPrimitive2.Title, { className: "sr-only", children: placeholder }),
|
|
899
927
|
/* @__PURE__ */ jsx9("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
900
928
|
command
|
|
@@ -902,10 +930,12 @@ function Combobox({
|
|
|
902
930
|
] })
|
|
903
931
|
] });
|
|
904
932
|
}
|
|
933
|
+
var filterByKeywords = (_value, search, keywords = []) => defaultFilter(keywords.join(" "), search);
|
|
934
|
+
var optionKeywords = (option) => option.description ? [option.label, option.description] : [option.label];
|
|
905
935
|
function OptionText({ option }) {
|
|
906
936
|
if (!option.description)
|
|
907
937
|
return /* @__PURE__ */ jsx9("span", { className: "truncate", children: option.label });
|
|
908
|
-
return /* @__PURE__ */
|
|
938
|
+
return /* @__PURE__ */ jsxs8("span", { className: "flex min-w-0 flex-col", children: [
|
|
909
939
|
/* @__PURE__ */ jsx9("span", { className: "truncate", children: option.label }),
|
|
910
940
|
/* @__PURE__ */ jsx9(
|
|
911
941
|
"span",
|
|
@@ -920,7 +950,7 @@ function OptionText({ option }) {
|
|
|
920
950
|
|
|
921
951
|
// src/components/confirm-dialog.tsx
|
|
922
952
|
import * as AlertDialog from "@radix-ui/react-alert-dialog";
|
|
923
|
-
import { jsx as jsx10, jsxs as
|
|
953
|
+
import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
924
954
|
function ConfirmDialog({
|
|
925
955
|
open,
|
|
926
956
|
onOpenChange,
|
|
@@ -934,7 +964,7 @@ function ConfirmDialog({
|
|
|
934
964
|
blurBackdrop = true,
|
|
935
965
|
backdropClassName
|
|
936
966
|
}) {
|
|
937
|
-
return /* @__PURE__ */ jsx10(AlertDialog.Root, { open, onOpenChange, children: /* @__PURE__ */
|
|
967
|
+
return /* @__PURE__ */ jsx10(AlertDialog.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxs9(AlertDialog.Portal, { children: [
|
|
938
968
|
/* @__PURE__ */ jsx10(
|
|
939
969
|
AlertDialog.Overlay,
|
|
940
970
|
{
|
|
@@ -945,12 +975,12 @@ function ConfirmDialog({
|
|
|
945
975
|
)
|
|
946
976
|
}
|
|
947
977
|
),
|
|
948
|
-
/* @__PURE__ */
|
|
949
|
-
/* @__PURE__ */
|
|
978
|
+
/* @__PURE__ */ jsxs9(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: [
|
|
979
|
+
/* @__PURE__ */ jsxs9("div", { className: "flex flex-col space-y-2 text-center sm:text-left", children: [
|
|
950
980
|
/* @__PURE__ */ jsx10(AlertDialog.Title, { className: "text-lg font-semibold", children: title }),
|
|
951
981
|
/* @__PURE__ */ jsx10(AlertDialog.Description, { className: "text-sm text-muted-foreground", children: description })
|
|
952
982
|
] }),
|
|
953
|
-
/* @__PURE__ */
|
|
983
|
+
/* @__PURE__ */ jsxs9("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
|
|
954
984
|
/* @__PURE__ */ jsx10(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 }),
|
|
955
985
|
/* @__PURE__ */ jsx10(
|
|
956
986
|
AlertDialog.Action,
|
|
@@ -967,7 +997,7 @@ function ConfirmDialog({
|
|
|
967
997
|
}
|
|
968
998
|
|
|
969
999
|
// src/components/data-table-wrapper.tsx
|
|
970
|
-
import { jsx as jsx11, jsxs as
|
|
1000
|
+
import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
971
1001
|
function DataTableWrapper({
|
|
972
1002
|
children,
|
|
973
1003
|
isEmpty,
|
|
@@ -980,14 +1010,14 @@ function DataTableWrapper({
|
|
|
980
1010
|
hasNextPage = false,
|
|
981
1011
|
hasPreviousPage = false
|
|
982
1012
|
}) {
|
|
983
|
-
return /* @__PURE__ */
|
|
1013
|
+
return /* @__PURE__ */ jsxs10("div", { className: "space-y-4", children: [
|
|
984
1014
|
/* @__PURE__ */ jsx11("div", { className: "overflow-x-auto rounded-md border", children }),
|
|
985
|
-
!isLoading && isEmpty && /* @__PURE__ */
|
|
1015
|
+
!isLoading && isEmpty && /* @__PURE__ */ jsxs10("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
|
|
986
1016
|
emptyIcon && /* @__PURE__ */ jsx11("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
|
|
987
1017
|
/* @__PURE__ */ jsx11("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
|
|
988
1018
|
emptyDescription && /* @__PURE__ */ jsx11("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
|
|
989
1019
|
] }),
|
|
990
|
-
page !== void 0 && onPageChange && /* @__PURE__ */
|
|
1020
|
+
page !== void 0 && onPageChange && /* @__PURE__ */ jsxs10("div", { className: "flex items-center justify-end gap-4", children: [
|
|
991
1021
|
/* @__PURE__ */ jsx11(
|
|
992
1022
|
"button",
|
|
993
1023
|
{
|
|
@@ -998,7 +1028,7 @@ function DataTableWrapper({
|
|
|
998
1028
|
children: "Anterior"
|
|
999
1029
|
}
|
|
1000
1030
|
),
|
|
1001
|
-
/* @__PURE__ */
|
|
1031
|
+
/* @__PURE__ */ jsxs10("span", { className: "text-sm text-muted-foreground", children: [
|
|
1002
1032
|
"P\xE1gina ",
|
|
1003
1033
|
page
|
|
1004
1034
|
] }),
|
|
@@ -1025,7 +1055,7 @@ import { CalendarIcon, ChevronDown, ChevronLeft as ChevronLeft2, ChevronRight as
|
|
|
1025
1055
|
import * as React6 from "react";
|
|
1026
1056
|
import { DayPicker } from "react-day-picker";
|
|
1027
1057
|
import { Drawer as DrawerPrimitive3 } from "vaul";
|
|
1028
|
-
import { Fragment as Fragment5, jsx as jsx12, jsxs as
|
|
1058
|
+
import { Fragment as Fragment5, jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1029
1059
|
var DATE_MASK = "__/__/____";
|
|
1030
1060
|
var TIME_MASK = "__:__";
|
|
1031
1061
|
var MASK_REPLACEMENT = { _: /\d/ };
|
|
@@ -1180,7 +1210,7 @@ function DatePickerImpl({
|
|
|
1180
1210
|
}
|
|
1181
1211
|
};
|
|
1182
1212
|
const canApply = withTime && !!pendingDate && !!parseStrict(pendingTime, TIME_FORMAT);
|
|
1183
|
-
const trigger = /* @__PURE__ */
|
|
1213
|
+
const trigger = /* @__PURE__ */ jsxs11("div", { ref: triggerRef, className: "relative", children: [
|
|
1184
1214
|
/* @__PURE__ */ jsx12(
|
|
1185
1215
|
InputMask,
|
|
1186
1216
|
{
|
|
@@ -1215,7 +1245,7 @@ function DatePickerImpl({
|
|
|
1215
1245
|
}
|
|
1216
1246
|
)
|
|
1217
1247
|
] });
|
|
1218
|
-
const content = /* @__PURE__ */
|
|
1248
|
+
const content = /* @__PURE__ */ jsxs11("div", { className: withTime ? "p-3" : "", children: [
|
|
1219
1249
|
/* @__PURE__ */ jsx12(
|
|
1220
1250
|
DayPicker,
|
|
1221
1251
|
{
|
|
@@ -1234,8 +1264,8 @@ function DatePickerImpl({
|
|
|
1234
1264
|
components: calendarComponents
|
|
1235
1265
|
}
|
|
1236
1266
|
),
|
|
1237
|
-
withTime && /* @__PURE__ */
|
|
1238
|
-
/* @__PURE__ */
|
|
1267
|
+
withTime && /* @__PURE__ */ jsxs11(Fragment5, { children: [
|
|
1268
|
+
/* @__PURE__ */ jsxs11("div", { className: "mt-2 flex items-center gap-2 border-t pt-3", children: [
|
|
1239
1269
|
/* @__PURE__ */ jsx12("span", { className: "text-sm text-muted-foreground", children: "Hor\xE1rio" }),
|
|
1240
1270
|
/* @__PURE__ */ jsx12(
|
|
1241
1271
|
InputMask,
|
|
@@ -1263,7 +1293,7 @@ function DatePickerImpl({
|
|
|
1263
1293
|
] })
|
|
1264
1294
|
] });
|
|
1265
1295
|
if (isDesktop) {
|
|
1266
|
-
return /* @__PURE__ */
|
|
1296
|
+
return /* @__PURE__ */ jsxs11(PopoverPrimitive3.Root, { open, onOpenChange: setOpen, children: [
|
|
1267
1297
|
/* @__PURE__ */ jsx12(PopoverPrimitive3.Anchor, { asChild: true, children: trigger }),
|
|
1268
1298
|
/* @__PURE__ */ jsx12(PopoverPrimitive3.Portal, { children: /* @__PURE__ */ jsx12(
|
|
1269
1299
|
PopoverPrimitive3.Content,
|
|
@@ -1280,11 +1310,11 @@ function DatePickerImpl({
|
|
|
1280
1310
|
) })
|
|
1281
1311
|
] });
|
|
1282
1312
|
}
|
|
1283
|
-
return /* @__PURE__ */
|
|
1313
|
+
return /* @__PURE__ */ jsxs11(DrawerPrimitive3.Root, { open, onOpenChange: setOpen, children: [
|
|
1284
1314
|
trigger,
|
|
1285
|
-
/* @__PURE__ */
|
|
1315
|
+
/* @__PURE__ */ jsxs11(DrawerPrimitive3.Portal, { children: [
|
|
1286
1316
|
/* @__PURE__ */ jsx12(DrawerPrimitive3.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
1287
|
-
/* @__PURE__ */
|
|
1317
|
+
/* @__PURE__ */ jsxs11(
|
|
1288
1318
|
DrawerPrimitive3.Content,
|
|
1289
1319
|
{
|
|
1290
1320
|
onOpenAutoFocus: (event) => event.preventDefault(),
|
|
@@ -1310,9 +1340,9 @@ function DateTimePicker(props) {
|
|
|
1310
1340
|
}
|
|
1311
1341
|
|
|
1312
1342
|
// src/components/empty-state.tsx
|
|
1313
|
-
import { jsx as jsx13, jsxs as
|
|
1343
|
+
import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1314
1344
|
function EmptyState({ icon, title, description, action, className }) {
|
|
1315
|
-
return /* @__PURE__ */
|
|
1345
|
+
return /* @__PURE__ */ jsxs12("div", { className: `flex flex-col items-center justify-center py-16 text-center ${className ?? ""}`, children: [
|
|
1316
1346
|
icon && /* @__PURE__ */ jsx13("div", { className: "mb-4 text-muted-foreground", children: icon }),
|
|
1317
1347
|
/* @__PURE__ */ jsx13("h3", { className: "text-lg font-semibold tracking-tight", children: title }),
|
|
1318
1348
|
description && /* @__PURE__ */ jsx13("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: description }),
|
|
@@ -1325,7 +1355,7 @@ import * as PopoverPrimitive4 from "@radix-ui/react-popover";
|
|
|
1325
1355
|
import { ChevronDown as ChevronDown2, X as X3 } from "lucide-react";
|
|
1326
1356
|
import * as React7 from "react";
|
|
1327
1357
|
import { Drawer as DrawerPrimitive4 } from "vaul";
|
|
1328
|
-
import { jsx as jsx14, jsxs as
|
|
1358
|
+
import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1329
1359
|
function FilterToolbar({
|
|
1330
1360
|
children,
|
|
1331
1361
|
isFilterActive = false,
|
|
@@ -1333,7 +1363,7 @@ function FilterToolbar({
|
|
|
1333
1363
|
clearLabel = "Limpar filtros",
|
|
1334
1364
|
className
|
|
1335
1365
|
}) {
|
|
1336
|
-
return /* @__PURE__ */
|
|
1366
|
+
return /* @__PURE__ */ jsxs13(
|
|
1337
1367
|
"div",
|
|
1338
1368
|
{
|
|
1339
1369
|
className: cn(
|
|
@@ -1342,7 +1372,7 @@ function FilterToolbar({
|
|
|
1342
1372
|
),
|
|
1343
1373
|
children: [
|
|
1344
1374
|
children,
|
|
1345
|
-
isFilterActive && onClear && /* @__PURE__ */
|
|
1375
|
+
isFilterActive && onClear && /* @__PURE__ */ jsxs13(
|
|
1346
1376
|
"button",
|
|
1347
1377
|
{
|
|
1348
1378
|
type: "button",
|
|
@@ -1372,7 +1402,7 @@ function FilterPopover({
|
|
|
1372
1402
|
const isDesktop = useIsDesktop();
|
|
1373
1403
|
const close = React7.useCallback(() => setOpen(false), []);
|
|
1374
1404
|
const content = typeof children === "function" ? children({ close }) : children;
|
|
1375
|
-
const trigger = /* @__PURE__ */
|
|
1405
|
+
const trigger = /* @__PURE__ */ jsxs13(
|
|
1376
1406
|
"button",
|
|
1377
1407
|
{
|
|
1378
1408
|
type: "button",
|
|
@@ -1390,7 +1420,7 @@ function FilterPopover({
|
|
|
1390
1420
|
}
|
|
1391
1421
|
);
|
|
1392
1422
|
if (isDesktop) {
|
|
1393
|
-
return /* @__PURE__ */
|
|
1423
|
+
return /* @__PURE__ */ jsxs13(PopoverPrimitive4.Root, { open, onOpenChange: setOpen, children: [
|
|
1394
1424
|
/* @__PURE__ */ jsx14(PopoverPrimitive4.Trigger, { asChild: true, children: trigger }),
|
|
1395
1425
|
/* @__PURE__ */ jsx14(PopoverPrimitive4.Portal, { children: /* @__PURE__ */ jsx14(
|
|
1396
1426
|
PopoverPrimitive4.Content,
|
|
@@ -1412,11 +1442,11 @@ function FilterPopover({
|
|
|
1412
1442
|
) })
|
|
1413
1443
|
] });
|
|
1414
1444
|
}
|
|
1415
|
-
return /* @__PURE__ */
|
|
1445
|
+
return /* @__PURE__ */ jsxs13(DrawerPrimitive4.Root, { open, onOpenChange: setOpen, children: [
|
|
1416
1446
|
/* @__PURE__ */ jsx14(DrawerPrimitive4.Trigger, { asChild: true, children: trigger }),
|
|
1417
|
-
/* @__PURE__ */
|
|
1447
|
+
/* @__PURE__ */ jsxs13(DrawerPrimitive4.Portal, { children: [
|
|
1418
1448
|
/* @__PURE__ */ jsx14(DrawerPrimitive4.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
1419
|
-
/* @__PURE__ */
|
|
1449
|
+
/* @__PURE__ */ jsxs13(DrawerPrimitive4.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85dvh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
|
|
1420
1450
|
/* @__PURE__ */ jsx14(DrawerPrimitive4.Title, { className: "sr-only", children: title ?? label }),
|
|
1421
1451
|
/* @__PURE__ */ jsx14("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
1422
1452
|
/* @__PURE__ */ jsx14("div", { className: "overflow-y-auto p-2", children: content })
|
|
@@ -1443,10 +1473,10 @@ function FilterOptionList({
|
|
|
1443
1473
|
selected.includes(optionValue) ? selected.filter((v) => v !== optionValue) : [...selected, optionValue]
|
|
1444
1474
|
);
|
|
1445
1475
|
};
|
|
1446
|
-
return /* @__PURE__ */
|
|
1476
|
+
return /* @__PURE__ */ jsxs13("div", { className: "flex flex-col p-1", children: [
|
|
1447
1477
|
options.map((option) => {
|
|
1448
1478
|
const isChecked = selected.includes(option.value);
|
|
1449
|
-
return /* @__PURE__ */
|
|
1479
|
+
return /* @__PURE__ */ jsxs13(
|
|
1450
1480
|
"button",
|
|
1451
1481
|
{
|
|
1452
1482
|
type: "button",
|
|
@@ -1482,7 +1512,7 @@ function FilterOptionList({
|
|
|
1482
1512
|
}
|
|
1483
1513
|
|
|
1484
1514
|
// src/components/form-dialog.tsx
|
|
1485
|
-
import { jsx as jsx15, jsxs as
|
|
1515
|
+
import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1486
1516
|
function FormDialogLayout({
|
|
1487
1517
|
title,
|
|
1488
1518
|
children,
|
|
@@ -1493,10 +1523,10 @@ function FormDialogLayout({
|
|
|
1493
1523
|
isSubmitting = false,
|
|
1494
1524
|
isDisabled = false
|
|
1495
1525
|
}) {
|
|
1496
|
-
return /* @__PURE__ */
|
|
1526
|
+
return /* @__PURE__ */ jsxs14("form", { onSubmit, children: [
|
|
1497
1527
|
/* @__PURE__ */ jsx15("div", { className: "flex flex-col space-y-1.5 text-center sm:text-left", children: /* @__PURE__ */ jsx15("h2", { className: "text-lg font-semibold leading-none tracking-tight", children: title }) }),
|
|
1498
1528
|
/* @__PURE__ */ jsx15("div", { className: "space-y-4 py-4", children }),
|
|
1499
|
-
/* @__PURE__ */
|
|
1529
|
+
/* @__PURE__ */ jsxs14("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
|
|
1500
1530
|
/* @__PURE__ */ jsx15(
|
|
1501
1531
|
"button",
|
|
1502
1532
|
{
|
|
@@ -1534,7 +1564,7 @@ function FormDialog({ onSubmit, ...rest }) {
|
|
|
1534
1564
|
|
|
1535
1565
|
// src/components/form-field.tsx
|
|
1536
1566
|
import { cloneElement, isValidElement, useId } from "react";
|
|
1537
|
-
import { jsx as jsx16, jsxs as
|
|
1567
|
+
import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1538
1568
|
function FormField({ label, htmlFor, error, required, children, className }) {
|
|
1539
1569
|
const errorId = useId();
|
|
1540
1570
|
const field = error && isValidElement(children) ? cloneElement(children, {
|
|
@@ -1544,8 +1574,8 @@ function FormField({ label, htmlFor, error, required, children, className }) {
|
|
|
1544
1574
|
errorId
|
|
1545
1575
|
].filter(Boolean).join(" ")
|
|
1546
1576
|
}) : children;
|
|
1547
|
-
return /* @__PURE__ */
|
|
1548
|
-
/* @__PURE__ */
|
|
1577
|
+
return /* @__PURE__ */ jsxs15("div", { className: `space-y-2 ${className ?? ""}`, children: [
|
|
1578
|
+
/* @__PURE__ */ jsxs15(
|
|
1549
1579
|
"label",
|
|
1550
1580
|
{
|
|
1551
1581
|
htmlFor,
|
|
@@ -1588,7 +1618,7 @@ function HighlightPill({
|
|
|
1588
1618
|
|
|
1589
1619
|
// src/components/mobile-card-list.tsx
|
|
1590
1620
|
import { useRef as useRef4 } from "react";
|
|
1591
|
-
import { jsx as jsx18, jsxs as
|
|
1621
|
+
import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1592
1622
|
var SCROLL_THRESHOLD = 8;
|
|
1593
1623
|
function MobileCardList({
|
|
1594
1624
|
data,
|
|
@@ -1619,13 +1649,13 @@ function MobileCardList({
|
|
|
1619
1649
|
}
|
|
1620
1650
|
};
|
|
1621
1651
|
if (isLoading) {
|
|
1622
|
-
return /* @__PURE__ */ jsx18("div", { className: `space-y-3 ${className ?? ""}`, children: Array.from({ length: loadingCount }).map((_, i) => /* @__PURE__ */ jsx18("div", { className: "rounded-xl border p-4", children: /* @__PURE__ */
|
|
1623
|
-
/* @__PURE__ */
|
|
1652
|
+
return /* @__PURE__ */ jsx18("div", { className: `space-y-3 ${className ?? ""}`, children: Array.from({ length: loadingCount }).map((_, i) => /* @__PURE__ */ jsx18("div", { className: "rounded-xl border p-4", children: /* @__PURE__ */ jsxs16("div", { className: "space-y-3", children: [
|
|
1653
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex justify-between", children: [
|
|
1624
1654
|
/* @__PURE__ */ jsx18("div", { className: "h-5 w-32 animate-pulse rounded bg-muted" }),
|
|
1625
1655
|
/* @__PURE__ */ jsx18("div", { className: "h-5 w-16 animate-pulse rounded bg-muted" })
|
|
1626
1656
|
] }),
|
|
1627
1657
|
/* @__PURE__ */ jsx18("div", { className: "h-4 w-48 animate-pulse rounded bg-muted" }),
|
|
1628
|
-
/* @__PURE__ */
|
|
1658
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex justify-between", children: [
|
|
1629
1659
|
/* @__PURE__ */ jsx18("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
|
|
1630
1660
|
/* @__PURE__ */ jsx18("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" })
|
|
1631
1661
|
] })
|
|
@@ -1733,11 +1763,11 @@ function useTheme() {
|
|
|
1733
1763
|
}
|
|
1734
1764
|
|
|
1735
1765
|
// src/components/mode-toggle.tsx
|
|
1736
|
-
import { jsx as jsx20, jsxs as
|
|
1766
|
+
import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
1737
1767
|
function ModeToggle() {
|
|
1738
1768
|
const { setTheme } = useTheme();
|
|
1739
|
-
return /* @__PURE__ */
|
|
1740
|
-
/* @__PURE__ */ jsx20(DropdownMenu2.Trigger, { asChild: true, children: /* @__PURE__ */
|
|
1769
|
+
return /* @__PURE__ */ jsxs17(DropdownMenu2.Root, { children: [
|
|
1770
|
+
/* @__PURE__ */ jsx20(DropdownMenu2.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs17(
|
|
1741
1771
|
"button",
|
|
1742
1772
|
{
|
|
1743
1773
|
type: "button",
|
|
@@ -1749,13 +1779,13 @@ function ModeToggle() {
|
|
|
1749
1779
|
]
|
|
1750
1780
|
}
|
|
1751
1781
|
) }),
|
|
1752
|
-
/* @__PURE__ */ jsx20(DropdownMenu2.Portal, { children: /* @__PURE__ */
|
|
1782
|
+
/* @__PURE__ */ jsx20(DropdownMenu2.Portal, { children: /* @__PURE__ */ jsxs17(
|
|
1753
1783
|
DropdownMenu2.Content,
|
|
1754
1784
|
{
|
|
1755
1785
|
align: "end",
|
|
1756
1786
|
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",
|
|
1757
1787
|
children: [
|
|
1758
|
-
/* @__PURE__ */
|
|
1788
|
+
/* @__PURE__ */ jsxs17(
|
|
1759
1789
|
DropdownMenu2.Item,
|
|
1760
1790
|
{
|
|
1761
1791
|
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",
|
|
@@ -1766,7 +1796,7 @@ function ModeToggle() {
|
|
|
1766
1796
|
]
|
|
1767
1797
|
}
|
|
1768
1798
|
),
|
|
1769
|
-
/* @__PURE__ */
|
|
1799
|
+
/* @__PURE__ */ jsxs17(
|
|
1770
1800
|
DropdownMenu2.Item,
|
|
1771
1801
|
{
|
|
1772
1802
|
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",
|
|
@@ -1777,7 +1807,7 @@ function ModeToggle() {
|
|
|
1777
1807
|
]
|
|
1778
1808
|
}
|
|
1779
1809
|
),
|
|
1780
|
-
/* @__PURE__ */
|
|
1810
|
+
/* @__PURE__ */ jsxs17(
|
|
1781
1811
|
DropdownMenu2.Item,
|
|
1782
1812
|
{
|
|
1783
1813
|
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",
|
|
@@ -1800,7 +1830,7 @@ import { Command as CommandPrimitive2 } from "cmdk";
|
|
|
1800
1830
|
import { Check as Check2, ChevronsUpDown as ChevronsUpDown3, Loader2 as Loader22, Search as Search2, X as X4 } from "lucide-react";
|
|
1801
1831
|
import * as React8 from "react";
|
|
1802
1832
|
import { Drawer as DrawerPrimitive5 } from "vaul";
|
|
1803
|
-
import { jsx as jsx21, jsxs as
|
|
1833
|
+
import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1804
1834
|
function MultiCombobox({
|
|
1805
1835
|
options,
|
|
1806
1836
|
value,
|
|
@@ -1851,7 +1881,7 @@ function MultiCombobox({
|
|
|
1851
1881
|
const removeValue = (optionValue) => {
|
|
1852
1882
|
onChange(value.filter((v) => v !== optionValue));
|
|
1853
1883
|
};
|
|
1854
|
-
const trigger = /* @__PURE__ */
|
|
1884
|
+
const trigger = /* @__PURE__ */ jsxs18(
|
|
1855
1885
|
"div",
|
|
1856
1886
|
{
|
|
1857
1887
|
id,
|
|
@@ -1873,7 +1903,7 @@ function MultiCombobox({
|
|
|
1873
1903
|
className
|
|
1874
1904
|
),
|
|
1875
1905
|
children: [
|
|
1876
|
-
selected.length === 0 ? /* @__PURE__ */ jsx21("span", { className: "text-muted-foreground", children: placeholder }) : selected.map((option) => /* @__PURE__ */
|
|
1906
|
+
selected.length === 0 ? /* @__PURE__ */ jsx21("span", { className: "text-muted-foreground", children: placeholder }) : selected.map((option) => /* @__PURE__ */ jsxs18(
|
|
1877
1907
|
"span",
|
|
1878
1908
|
{
|
|
1879
1909
|
title: option.description,
|
|
@@ -1903,13 +1933,14 @@ function MultiCombobox({
|
|
|
1903
1933
|
]
|
|
1904
1934
|
}
|
|
1905
1935
|
);
|
|
1906
|
-
const command = /* @__PURE__ */
|
|
1936
|
+
const command = /* @__PURE__ */ jsxs18(
|
|
1907
1937
|
CommandPrimitive2,
|
|
1908
1938
|
{
|
|
1909
1939
|
shouldFilter: !isServer,
|
|
1940
|
+
filter: filterByKeywords,
|
|
1910
1941
|
className: "flex h-full w-full flex-col overflow-hidden",
|
|
1911
1942
|
children: [
|
|
1912
|
-
/* @__PURE__ */
|
|
1943
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex items-center border-b px-3", children: [
|
|
1913
1944
|
/* @__PURE__ */ jsx21(Search2, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
|
|
1914
1945
|
/* @__PURE__ */ jsx21(
|
|
1915
1946
|
CommandPrimitive2.Input,
|
|
@@ -1920,18 +1951,18 @@ function MultiCombobox({
|
|
|
1920
1951
|
}
|
|
1921
1952
|
)
|
|
1922
1953
|
] }),
|
|
1923
|
-
/* @__PURE__ */
|
|
1954
|
+
/* @__PURE__ */ jsxs18(
|
|
1924
1955
|
CommandPrimitive2.List,
|
|
1925
1956
|
{
|
|
1926
1957
|
ref: listRef,
|
|
1927
1958
|
className: "max-h-[50dvh] overflow-y-auto overflow-x-hidden p-1 sm:max-h-60",
|
|
1928
1959
|
children: [
|
|
1929
1960
|
!isServer && /* @__PURE__ */ jsx21(CommandPrimitive2.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
|
|
1930
|
-
options.map((option) => /* @__PURE__ */
|
|
1961
|
+
options.map((option) => /* @__PURE__ */ jsxs18(
|
|
1931
1962
|
CommandPrimitive2.Item,
|
|
1932
1963
|
{
|
|
1933
|
-
value:
|
|
1934
|
-
keywords: option
|
|
1964
|
+
value: option.value,
|
|
1965
|
+
keywords: optionKeywords(option),
|
|
1935
1966
|
disabled: option.disabled,
|
|
1936
1967
|
onSelect: () => toggleValue(option.value),
|
|
1937
1968
|
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",
|
|
@@ -1960,7 +1991,7 @@ function MultiCombobox({
|
|
|
1960
1991
|
}
|
|
1961
1992
|
);
|
|
1962
1993
|
if (isDesktop) {
|
|
1963
|
-
return /* @__PURE__ */
|
|
1994
|
+
return /* @__PURE__ */ jsxs18(PopoverPrimitive5.Root, { open, onOpenChange: handleOpenChange, children: [
|
|
1964
1995
|
/* @__PURE__ */ jsx21(PopoverPrimitive5.Trigger, { asChild: true, disabled, children: trigger }),
|
|
1965
1996
|
/* @__PURE__ */ jsx21(PopoverPrimitive5.Portal, { children: /* @__PURE__ */ jsx21(
|
|
1966
1997
|
PopoverPrimitive5.Content,
|
|
@@ -1974,11 +2005,11 @@ function MultiCombobox({
|
|
|
1974
2005
|
) })
|
|
1975
2006
|
] });
|
|
1976
2007
|
}
|
|
1977
|
-
return /* @__PURE__ */
|
|
2008
|
+
return /* @__PURE__ */ jsxs18(DrawerPrimitive5.Root, { open, onOpenChange: handleOpenChange, children: [
|
|
1978
2009
|
/* @__PURE__ */ jsx21(DrawerPrimitive5.Trigger, { asChild: true, disabled, children: trigger }),
|
|
1979
|
-
/* @__PURE__ */
|
|
2010
|
+
/* @__PURE__ */ jsxs18(DrawerPrimitive5.Portal, { children: [
|
|
1980
2011
|
/* @__PURE__ */ jsx21(DrawerPrimitive5.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
1981
|
-
/* @__PURE__ */
|
|
2012
|
+
/* @__PURE__ */ jsxs18(DrawerPrimitive5.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85dvh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
|
|
1982
2013
|
/* @__PURE__ */ jsx21(DrawerPrimitive5.Title, { className: "sr-only", children: placeholder }),
|
|
1983
2014
|
/* @__PURE__ */ jsx21("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
1984
2015
|
command
|
|
@@ -1988,14 +2019,14 @@ function MultiCombobox({
|
|
|
1988
2019
|
}
|
|
1989
2020
|
|
|
1990
2021
|
// src/components/page-header.tsx
|
|
1991
|
-
import { jsx as jsx22, jsxs as
|
|
2022
|
+
import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1992
2023
|
function PageHeader({ title, description, action, className }) {
|
|
1993
|
-
return /* @__PURE__ */
|
|
2024
|
+
return /* @__PURE__ */ jsxs19(
|
|
1994
2025
|
"div",
|
|
1995
2026
|
{
|
|
1996
2027
|
className: `flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between ${className ?? ""}`,
|
|
1997
2028
|
children: [
|
|
1998
|
-
/* @__PURE__ */
|
|
2029
|
+
/* @__PURE__ */ jsxs19("div", { className: "min-w-0", children: [
|
|
1999
2030
|
/* @__PURE__ */ jsx22("h1", { className: "truncate text-2xl font-semibold tracking-tight", children: title }),
|
|
2000
2031
|
description && /* @__PURE__ */ jsx22("p", { className: "text-sm text-muted-foreground", children: description })
|
|
2001
2032
|
] }),
|
|
@@ -2007,7 +2038,7 @@ function PageHeader({ title, description, action, className }) {
|
|
|
2007
2038
|
|
|
2008
2039
|
// src/components/pagination.tsx
|
|
2009
2040
|
import { useId as useId2, useState as useState11 } from "react";
|
|
2010
|
-
import { jsx as jsx23, jsxs as
|
|
2041
|
+
import { jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
2011
2042
|
var navButtonClass2 = "inline-flex h-8 max-sm:h-10 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";
|
|
2012
2043
|
function Pagination({
|
|
2013
2044
|
page,
|
|
@@ -2022,12 +2053,12 @@ function Pagination({
|
|
|
2022
2053
|
pageSizeOptions,
|
|
2023
2054
|
className
|
|
2024
2055
|
}) {
|
|
2025
|
-
return /* @__PURE__ */
|
|
2056
|
+
return /* @__PURE__ */ jsxs20(
|
|
2026
2057
|
"div",
|
|
2027
2058
|
{
|
|
2028
2059
|
className: `flex flex-wrap items-center ${showPageSizeSelector ? "justify-between" : "justify-end"} gap-x-4 gap-y-2 ${className ?? ""}`,
|
|
2029
2060
|
children: [
|
|
2030
|
-
showPageSizeSelector && /* @__PURE__ */
|
|
2061
|
+
showPageSizeSelector && /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-2", children: [
|
|
2031
2062
|
/* @__PURE__ */ jsx23("label", { htmlFor: "pagination-page-size", className: "text-sm text-muted-foreground", children: "Itens por p\xE1gina" }),
|
|
2032
2063
|
/* @__PURE__ */ jsx23(
|
|
2033
2064
|
"select",
|
|
@@ -2040,7 +2071,7 @@ function Pagination({
|
|
|
2040
2071
|
}
|
|
2041
2072
|
)
|
|
2042
2073
|
] }),
|
|
2043
|
-
/* @__PURE__ */
|
|
2074
|
+
/* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-4", children: [
|
|
2044
2075
|
/* @__PURE__ */ jsx23(
|
|
2045
2076
|
"button",
|
|
2046
2077
|
{
|
|
@@ -2051,7 +2082,7 @@ function Pagination({
|
|
|
2051
2082
|
children: "Anterior"
|
|
2052
2083
|
}
|
|
2053
2084
|
),
|
|
2054
|
-
showPageJump && totalPages !== void 0 ? /* @__PURE__ */ jsx23(PageJumpInput, { page, totalPages, onPageChange }) : /* @__PURE__ */
|
|
2085
|
+
showPageJump && totalPages !== void 0 ? /* @__PURE__ */ jsx23(PageJumpInput, { page, totalPages, onPageChange }) : /* @__PURE__ */ jsxs20("span", { className: "text-sm text-muted-foreground", children: [
|
|
2055
2086
|
"P\xE1gina ",
|
|
2056
2087
|
page,
|
|
2057
2088
|
totalPages ? ` de ${totalPages}` : ""
|
|
@@ -2086,7 +2117,7 @@ function PageJumpInput({ page, totalPages, onPageChange }) {
|
|
|
2086
2117
|
const target = Math.max(1, Math.min(Number(draft), totalPages));
|
|
2087
2118
|
if (target !== page) onPageChange(target);
|
|
2088
2119
|
};
|
|
2089
|
-
return /* @__PURE__ */
|
|
2120
|
+
return /* @__PURE__ */ jsxs20("span", { className: "flex items-center gap-1.5 whitespace-nowrap text-sm text-muted-foreground", children: [
|
|
2090
2121
|
/* @__PURE__ */ jsx23("label", { htmlFor: inputId, className: "max-sm:sr-only", children: "P\xE1gina" }),
|
|
2091
2122
|
/* @__PURE__ */ jsx23(
|
|
2092
2123
|
"input",
|
|
@@ -2109,7 +2140,7 @@ function PageJumpInput({ page, totalPages, onPageChange }) {
|
|
|
2109
2140
|
className: "h-8 max-sm:h-10 rounded-md border border-input bg-background px-1.5 text-center text-xs font-medium tabular-nums text-foreground shadow-sm transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
|
2110
2141
|
}
|
|
2111
2142
|
),
|
|
2112
|
-
/* @__PURE__ */
|
|
2143
|
+
/* @__PURE__ */ jsxs20("span", { children: [
|
|
2113
2144
|
"de ",
|
|
2114
2145
|
totalPages
|
|
2115
2146
|
] })
|
|
@@ -2119,10 +2150,10 @@ function PageJumpInput({ page, totalPages, onPageChange }) {
|
|
|
2119
2150
|
// src/components/password-input.tsx
|
|
2120
2151
|
import { Eye, EyeOff } from "lucide-react";
|
|
2121
2152
|
import * as React9 from "react";
|
|
2122
|
-
import { jsx as jsx24, jsxs as
|
|
2153
|
+
import { jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
2123
2154
|
var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props }, ref) => {
|
|
2124
2155
|
const [visible, setVisible] = React9.useState(false);
|
|
2125
|
-
return /* @__PURE__ */
|
|
2156
|
+
return /* @__PURE__ */ jsxs21("div", { className: `relative ${containerClassName ?? ""}`, children: [
|
|
2126
2157
|
/* @__PURE__ */ jsx24(
|
|
2127
2158
|
"input",
|
|
2128
2159
|
{
|
|
@@ -2148,7 +2179,7 @@ var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props
|
|
|
2148
2179
|
PasswordInput.displayName = "PasswordInput";
|
|
2149
2180
|
|
|
2150
2181
|
// src/components/progress-bar.tsx
|
|
2151
|
-
import { jsx as jsx25, jsxs as
|
|
2182
|
+
import { jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
2152
2183
|
var sizeClasses3 = {
|
|
2153
2184
|
sm: "h-1.5",
|
|
2154
2185
|
md: "h-2"
|
|
@@ -2162,8 +2193,8 @@ function ProgressBar({
|
|
|
2162
2193
|
indicatorClassName
|
|
2163
2194
|
}) {
|
|
2164
2195
|
const clamped = Math.min(100, Math.max(0, value));
|
|
2165
|
-
return /* @__PURE__ */
|
|
2166
|
-
(label || valueLabel) && /* @__PURE__ */
|
|
2196
|
+
return /* @__PURE__ */ jsxs22("div", { className: `space-y-1.5 ${className ?? ""}`, children: [
|
|
2197
|
+
(label || valueLabel) && /* @__PURE__ */ jsxs22("div", { className: "flex items-baseline justify-between gap-2", children: [
|
|
2167
2198
|
label && /* @__PURE__ */ jsx25("span", { className: "text-sm text-muted-foreground", children: label }),
|
|
2168
2199
|
valueLabel && /* @__PURE__ */ jsx25("span", { className: "text-sm font-semibold", children: valueLabel })
|
|
2169
2200
|
] }),
|
|
@@ -2184,7 +2215,7 @@ function ProgressBar({
|
|
|
2184
2215
|
}
|
|
2185
2216
|
|
|
2186
2217
|
// src/components/responsive-data-view.tsx
|
|
2187
|
-
import { jsx as jsx26, jsxs as
|
|
2218
|
+
import { jsx as jsx26, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
2188
2219
|
var BREAKPOINT_CLASSES = {
|
|
2189
2220
|
md: { table: "md:block", cards: "md:hidden" },
|
|
2190
2221
|
lg: { table: "lg:block", cards: "lg:hidden" },
|
|
@@ -2216,7 +2247,7 @@ function ResponsiveDataView({
|
|
|
2216
2247
|
}
|
|
2217
2248
|
const busyClass = isBusy && "pointer-events-none opacity-50";
|
|
2218
2249
|
const visibility = BREAKPOINT_CLASSES[breakpoint];
|
|
2219
|
-
return /* @__PURE__ */
|
|
2250
|
+
return /* @__PURE__ */ jsxs23("div", { className: "space-y-4", children: [
|
|
2220
2251
|
/* @__PURE__ */ jsx26(
|
|
2221
2252
|
"div",
|
|
2222
2253
|
{
|
|
@@ -2239,7 +2270,7 @@ import * as DropdownMenu3 from "@radix-ui/react-dropdown-menu";
|
|
|
2239
2270
|
import { ChevronRight as ChevronRight3, MoreVertical } from "lucide-react";
|
|
2240
2271
|
import { useState as useState13 } from "react";
|
|
2241
2272
|
import { Drawer as DrawerPrimitive6 } from "vaul";
|
|
2242
|
-
import { Fragment as Fragment6, jsx as jsx27, jsxs as
|
|
2273
|
+
import { Fragment as Fragment6, jsx as jsx27, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2243
2274
|
var triggerClass = "inline-flex h-8 w-8 max-sm:h-10 max-sm:w-10 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";
|
|
2244
2275
|
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";
|
|
2245
2276
|
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";
|
|
@@ -2264,7 +2295,7 @@ function RowActionsMenu({
|
|
|
2264
2295
|
}
|
|
2265
2296
|
);
|
|
2266
2297
|
if (isDesktop) {
|
|
2267
|
-
return /* @__PURE__ */
|
|
2298
|
+
return /* @__PURE__ */ jsxs24(DropdownMenu3.Root, { open, onOpenChange: setOpen, modal: false, children: [
|
|
2268
2299
|
/* @__PURE__ */ jsx27(DropdownMenu3.Trigger, { asChild: true, children: trigger }),
|
|
2269
2300
|
/* @__PURE__ */ jsx27(DropdownMenu3.Portal, { children: /* @__PURE__ */ jsx27(
|
|
2270
2301
|
DropdownMenu3.Content,
|
|
@@ -2278,8 +2309,8 @@ function RowActionsMenu({
|
|
|
2278
2309
|
action.destructive && "text-destructive focus:bg-destructive/10"
|
|
2279
2310
|
);
|
|
2280
2311
|
if (action.children?.length) {
|
|
2281
|
-
return /* @__PURE__ */
|
|
2282
|
-
/* @__PURE__ */
|
|
2312
|
+
return /* @__PURE__ */ jsxs24(DropdownMenu3.Sub, { children: [
|
|
2313
|
+
/* @__PURE__ */ jsxs24(
|
|
2283
2314
|
DropdownMenu3.SubTrigger,
|
|
2284
2315
|
{
|
|
2285
2316
|
className: cls,
|
|
@@ -2296,7 +2327,7 @@ function RowActionsMenu({
|
|
|
2296
2327
|
{
|
|
2297
2328
|
sideOffset: 4,
|
|
2298
2329
|
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",
|
|
2299
|
-
children: action.children.map((child) => /* @__PURE__ */
|
|
2330
|
+
children: action.children.map((child) => /* @__PURE__ */ jsxs24(
|
|
2300
2331
|
DropdownMenu3.Item,
|
|
2301
2332
|
{
|
|
2302
2333
|
className: cn(
|
|
@@ -2324,14 +2355,14 @@ function RowActionsMenu({
|
|
|
2324
2355
|
children: renderLink({
|
|
2325
2356
|
href: action.href,
|
|
2326
2357
|
className: cls,
|
|
2327
|
-
children: /* @__PURE__ */
|
|
2358
|
+
children: /* @__PURE__ */ jsxs24(Fragment6, { children: [
|
|
2328
2359
|
action.icon,
|
|
2329
2360
|
action.label
|
|
2330
2361
|
] })
|
|
2331
2362
|
})
|
|
2332
2363
|
},
|
|
2333
2364
|
action.label
|
|
2334
|
-
) : /* @__PURE__ */
|
|
2365
|
+
) : /* @__PURE__ */ jsxs24(
|
|
2335
2366
|
DropdownMenu3.Item,
|
|
2336
2367
|
{
|
|
2337
2368
|
className: cls,
|
|
@@ -2349,11 +2380,11 @@ function RowActionsMenu({
|
|
|
2349
2380
|
) })
|
|
2350
2381
|
] });
|
|
2351
2382
|
}
|
|
2352
|
-
return /* @__PURE__ */
|
|
2383
|
+
return /* @__PURE__ */ jsxs24(DrawerPrimitive6.Root, { open, onOpenChange: setOpen, children: [
|
|
2353
2384
|
/* @__PURE__ */ jsx27(DrawerPrimitive6.Trigger, { asChild: true, children: trigger }),
|
|
2354
|
-
/* @__PURE__ */
|
|
2385
|
+
/* @__PURE__ */ jsxs24(DrawerPrimitive6.Portal, { children: [
|
|
2355
2386
|
/* @__PURE__ */ jsx27(DrawerPrimitive6.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
2356
|
-
/* @__PURE__ */
|
|
2387
|
+
/* @__PURE__ */ jsxs24(DrawerPrimitive6.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: [
|
|
2357
2388
|
/* @__PURE__ */ jsx27(DrawerPrimitive6.Title, { className: "sr-only", children: label }),
|
|
2358
2389
|
/* @__PURE__ */ jsx27("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
2359
2390
|
actions.map((action) => {
|
|
@@ -2361,18 +2392,18 @@ function RowActionsMenu({
|
|
|
2361
2392
|
sheetItemClass2,
|
|
2362
2393
|
action.destructive && "text-destructive"
|
|
2363
2394
|
);
|
|
2364
|
-
const inner = /* @__PURE__ */
|
|
2395
|
+
const inner = /* @__PURE__ */ jsxs24(Fragment6, { children: [
|
|
2365
2396
|
action.icon,
|
|
2366
2397
|
action.label
|
|
2367
2398
|
] });
|
|
2368
2399
|
if (action.children?.length) {
|
|
2369
|
-
return /* @__PURE__ */
|
|
2400
|
+
return /* @__PURE__ */ jsxs24("div", { children: [
|
|
2370
2401
|
/* @__PURE__ */ jsx27("div", { className: "mx-3 my-1 h-px bg-border" }),
|
|
2371
|
-
/* @__PURE__ */
|
|
2402
|
+
/* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-3 px-3 pb-1 pt-2 text-xs font-medium uppercase tracking-wide text-muted-foreground", children: [
|
|
2372
2403
|
action.icon,
|
|
2373
2404
|
action.label
|
|
2374
2405
|
] }),
|
|
2375
|
-
action.children.map((child) => /* @__PURE__ */
|
|
2406
|
+
action.children.map((child) => /* @__PURE__ */ jsxs24(
|
|
2376
2407
|
"button",
|
|
2377
2408
|
{
|
|
2378
2409
|
type: "button",
|
|
@@ -2429,11 +2460,11 @@ function RowActionsMenu({
|
|
|
2429
2460
|
|
|
2430
2461
|
// src/components/search-input.tsx
|
|
2431
2462
|
import * as React10 from "react";
|
|
2432
|
-
import { jsx as jsx28, jsxs as
|
|
2463
|
+
import { jsx as jsx28, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
2433
2464
|
var SearchInput = React10.forwardRef(
|
|
2434
2465
|
({ containerClassName, className, ...props }, ref) => {
|
|
2435
|
-
return /* @__PURE__ */
|
|
2436
|
-
/* @__PURE__ */
|
|
2466
|
+
return /* @__PURE__ */ jsxs25("div", { className: cn("relative flex-1", containerClassName), children: [
|
|
2467
|
+
/* @__PURE__ */ jsxs25(
|
|
2437
2468
|
"svg",
|
|
2438
2469
|
{
|
|
2439
2470
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2471,11 +2502,11 @@ var SearchInput = React10.forwardRef(
|
|
|
2471
2502
|
SearchInput.displayName = "SearchInput";
|
|
2472
2503
|
|
|
2473
2504
|
// src/components/stat-card.tsx
|
|
2474
|
-
import { jsx as jsx29, jsxs as
|
|
2505
|
+
import { jsx as jsx29, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
2475
2506
|
function StatCard({ label, value, detail, icon, isLoading }) {
|
|
2476
2507
|
if (isLoading) {
|
|
2477
|
-
return /* @__PURE__ */
|
|
2478
|
-
/* @__PURE__ */
|
|
2508
|
+
return /* @__PURE__ */ jsxs26("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
|
|
2509
|
+
/* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between pb-2", children: [
|
|
2479
2510
|
/* @__PURE__ */ jsx29("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
|
|
2480
2511
|
/* @__PURE__ */ jsx29("div", { className: "h-4 w-4 animate-pulse rounded bg-muted" })
|
|
2481
2512
|
] }),
|
|
@@ -2483,8 +2514,8 @@ function StatCard({ label, value, detail, icon, isLoading }) {
|
|
|
2483
2514
|
/* @__PURE__ */ jsx29("div", { className: "mt-1 h-4 w-20 animate-pulse rounded bg-muted" })
|
|
2484
2515
|
] });
|
|
2485
2516
|
}
|
|
2486
|
-
return /* @__PURE__ */
|
|
2487
|
-
/* @__PURE__ */
|
|
2517
|
+
return /* @__PURE__ */ jsxs26("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
|
|
2518
|
+
/* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between pb-2", children: [
|
|
2488
2519
|
/* @__PURE__ */ jsx29("span", { className: "text-sm font-medium text-muted-foreground", children: label }),
|
|
2489
2520
|
icon && /* @__PURE__ */ jsx29("span", { className: "text-muted-foreground", children: icon })
|
|
2490
2521
|
] }),
|
|
@@ -2494,7 +2525,7 @@ function StatCard({ label, value, detail, icon, isLoading }) {
|
|
|
2494
2525
|
}
|
|
2495
2526
|
|
|
2496
2527
|
// src/components/status-badge.tsx
|
|
2497
|
-
import { jsx as jsx30, jsxs as
|
|
2528
|
+
import { jsx as jsx30, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
2498
2529
|
var variantClasses = {
|
|
2499
2530
|
neutral: {
|
|
2500
2531
|
badge: "bg-[var(--status-neutral-surface,#f3f4f6)] text-[var(--status-neutral-text,#374151)]",
|
|
@@ -2524,7 +2555,7 @@ function StatusBadge({
|
|
|
2524
2555
|
children
|
|
2525
2556
|
}) {
|
|
2526
2557
|
const classes = variantClasses[variant];
|
|
2527
|
-
return /* @__PURE__ */
|
|
2558
|
+
return /* @__PURE__ */ jsxs27(
|
|
2528
2559
|
"span",
|
|
2529
2560
|
{
|
|
2530
2561
|
className: `inline-flex items-center gap-1.5 rounded-md px-2 py-0.5 text-xs font-medium ${classes.badge} ${className ?? ""}`,
|
|
@@ -2542,9 +2573,9 @@ function StatusBadge({
|
|
|
2542
2573
|
}
|
|
2543
2574
|
|
|
2544
2575
|
// src/components/status-dot.tsx
|
|
2545
|
-
import { jsx as jsx31, jsxs as
|
|
2576
|
+
import { jsx as jsx31, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
2546
2577
|
function StatusDot({ active, label, className }) {
|
|
2547
|
-
return /* @__PURE__ */
|
|
2578
|
+
return /* @__PURE__ */ jsxs28("span", { className: `inline-flex items-center gap-2 ${className ?? ""}`, children: [
|
|
2548
2579
|
/* @__PURE__ */ jsx31(
|
|
2549
2580
|
"span",
|
|
2550
2581
|
{
|
|
@@ -2639,7 +2670,7 @@ function useVersionCheck({
|
|
|
2639
2670
|
}
|
|
2640
2671
|
|
|
2641
2672
|
// src/components/update-banner.tsx
|
|
2642
|
-
import { jsx as jsx34, jsxs as
|
|
2673
|
+
import { jsx as jsx34, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
2643
2674
|
function UpdateBanner({
|
|
2644
2675
|
title = "Nova vers\xE3o dispon\xEDvel",
|
|
2645
2676
|
description = "Atualize para continuar na vers\xE3o mais recente.",
|
|
@@ -2649,7 +2680,7 @@ function UpdateBanner({
|
|
|
2649
2680
|
}) {
|
|
2650
2681
|
const { updateAvailable, reload } = useVersionCheck(options);
|
|
2651
2682
|
if (!updateAvailable) return null;
|
|
2652
|
-
return /* @__PURE__ */
|
|
2683
|
+
return /* @__PURE__ */ jsxs29(
|
|
2653
2684
|
"div",
|
|
2654
2685
|
{
|
|
2655
2686
|
role: "status",
|
|
@@ -2660,7 +2691,7 @@ function UpdateBanner({
|
|
|
2660
2691
|
className
|
|
2661
2692
|
),
|
|
2662
2693
|
children: [
|
|
2663
|
-
/* @__PURE__ */
|
|
2694
|
+
/* @__PURE__ */ jsxs29("span", { className: "flex min-w-0 items-center gap-2", children: [
|
|
2664
2695
|
/* @__PURE__ */ jsx34(RefreshCw, { className: "h-4 w-4 shrink-0 animate-spin [animation-duration:3s]", "aria-hidden": true }),
|
|
2665
2696
|
/* @__PURE__ */ jsx34("span", { className: "font-medium", children: title }),
|
|
2666
2697
|
/* @__PURE__ */ jsx34("span", { className: "hidden truncate opacity-80 sm:inline", children: description })
|