@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.js
CHANGED
|
@@ -575,6 +575,88 @@ function ColorPicker({
|
|
|
575
575
|
] });
|
|
576
576
|
}
|
|
577
577
|
|
|
578
|
+
// src/components/rating.tsx
|
|
579
|
+
import * as ToggleGroup from "@radix-ui/react-toggle-group";
|
|
580
|
+
import { Star } from "lucide-react";
|
|
581
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
582
|
+
var MAX_STARS = 5;
|
|
583
|
+
var sizeClasses2 = {
|
|
584
|
+
sm: "h-4 w-4",
|
|
585
|
+
md: "h-5 w-5",
|
|
586
|
+
lg: "h-6 w-6"
|
|
587
|
+
};
|
|
588
|
+
function defaultLabel(value) {
|
|
589
|
+
return value > 0 ? `Avalia\xE7\xE3o: ${value} de ${MAX_STARS} estrelas` : "Avalia\xE7\xE3o: sem nota";
|
|
590
|
+
}
|
|
591
|
+
function Rating({
|
|
592
|
+
value = 0,
|
|
593
|
+
onChange,
|
|
594
|
+
readOnly = false,
|
|
595
|
+
size = "md",
|
|
596
|
+
className,
|
|
597
|
+
"aria-label": ariaLabel
|
|
598
|
+
}) {
|
|
599
|
+
const clamped = Math.min(MAX_STARS, Math.max(0, value));
|
|
600
|
+
const label = ariaLabel ?? defaultLabel(clamped);
|
|
601
|
+
if (readOnly) {
|
|
602
|
+
return /* @__PURE__ */ jsx8(
|
|
603
|
+
"div",
|
|
604
|
+
{
|
|
605
|
+
role: "img",
|
|
606
|
+
"aria-label": label,
|
|
607
|
+
className: cn("inline-flex items-center gap-0.5", className),
|
|
608
|
+
children: Array.from({ length: MAX_STARS }, (_, index) => /* @__PURE__ */ jsx8(
|
|
609
|
+
Star,
|
|
610
|
+
{
|
|
611
|
+
"aria-hidden": true,
|
|
612
|
+
className: cn(
|
|
613
|
+
sizeClasses2[size],
|
|
614
|
+
index < clamped ? "fill-amber-400 text-amber-400" : "text-muted-foreground"
|
|
615
|
+
)
|
|
616
|
+
},
|
|
617
|
+
index
|
|
618
|
+
))
|
|
619
|
+
}
|
|
620
|
+
);
|
|
621
|
+
}
|
|
622
|
+
return /* @__PURE__ */ jsx8(
|
|
623
|
+
ToggleGroup.Root,
|
|
624
|
+
{
|
|
625
|
+
type: "single",
|
|
626
|
+
value: clamped > 0 ? String(clamped) : "",
|
|
627
|
+
onValueChange: (next) => {
|
|
628
|
+
if (next) onChange?.(Number(next));
|
|
629
|
+
},
|
|
630
|
+
"aria-label": label,
|
|
631
|
+
className: cn("inline-flex items-center gap-0.5", className),
|
|
632
|
+
children: Array.from({ length: MAX_STARS }, (_, index) => {
|
|
633
|
+
const starValue = index + 1;
|
|
634
|
+
const filled = starValue <= clamped;
|
|
635
|
+
return /* @__PURE__ */ jsx8(
|
|
636
|
+
ToggleGroup.Item,
|
|
637
|
+
{
|
|
638
|
+
value: String(starValue),
|
|
639
|
+
"aria-label": `${starValue} ${starValue === 1 ? "estrela" : "estrelas"}`,
|
|
640
|
+
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",
|
|
641
|
+
children: /* @__PURE__ */ jsx8(
|
|
642
|
+
Star,
|
|
643
|
+
{
|
|
644
|
+
"aria-hidden": true,
|
|
645
|
+
className: cn(
|
|
646
|
+
sizeClasses2[size],
|
|
647
|
+
"transition-colors",
|
|
648
|
+
filled ? "fill-amber-400 text-amber-400" : "text-muted-foreground hover:text-amber-400"
|
|
649
|
+
)
|
|
650
|
+
}
|
|
651
|
+
)
|
|
652
|
+
},
|
|
653
|
+
starValue
|
|
654
|
+
);
|
|
655
|
+
})
|
|
656
|
+
}
|
|
657
|
+
);
|
|
658
|
+
}
|
|
659
|
+
|
|
578
660
|
// src/components/combobox.tsx
|
|
579
661
|
import * as PopoverPrimitive2 from "@radix-ui/react-popover";
|
|
580
662
|
import { Command as CommandPrimitive } from "cmdk";
|
|
@@ -617,7 +699,7 @@ function useInfiniteScrollSentinel({
|
|
|
617
699
|
}
|
|
618
700
|
|
|
619
701
|
// src/components/combobox.tsx
|
|
620
|
-
import { jsx as
|
|
702
|
+
import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
621
703
|
function Combobox({
|
|
622
704
|
options,
|
|
623
705
|
value,
|
|
@@ -636,7 +718,8 @@ function Combobox({
|
|
|
636
718
|
hasMore,
|
|
637
719
|
selectedOption,
|
|
638
720
|
creatable,
|
|
639
|
-
formatCreateLabel
|
|
721
|
+
formatCreateLabel,
|
|
722
|
+
deselectable
|
|
640
723
|
}) {
|
|
641
724
|
const [open, setOpen] = React5.useState(false);
|
|
642
725
|
const [search, setSearch] = React5.useState("");
|
|
@@ -648,7 +731,7 @@ function Combobox({
|
|
|
648
731
|
if (!next) setSearch("");
|
|
649
732
|
};
|
|
650
733
|
const handleSelect = (next) => {
|
|
651
|
-
onChange(next);
|
|
734
|
+
onChange(deselectable && next === value ? "" : next);
|
|
652
735
|
handleOpenChange(false);
|
|
653
736
|
};
|
|
654
737
|
const handleSearchChange = (next) => {
|
|
@@ -679,8 +762,8 @@ function Combobox({
|
|
|
679
762
|
className
|
|
680
763
|
),
|
|
681
764
|
children: [
|
|
682
|
-
/* @__PURE__ */
|
|
683
|
-
/* @__PURE__ */
|
|
765
|
+
/* @__PURE__ */ jsx9("span", { className: cn("truncate", !selected && "text-muted-foreground"), children: selected ? selected.label : placeholder }),
|
|
766
|
+
/* @__PURE__ */ jsx9(ChevronsUpDown2, { className: "h-4 w-4 shrink-0 opacity-50" })
|
|
684
767
|
]
|
|
685
768
|
}
|
|
686
769
|
);
|
|
@@ -691,8 +774,8 @@ function Combobox({
|
|
|
691
774
|
className: "flex h-full w-full flex-col overflow-hidden",
|
|
692
775
|
children: [
|
|
693
776
|
/* @__PURE__ */ jsxs7("div", { className: "flex items-center border-b px-3", children: [
|
|
694
|
-
/* @__PURE__ */
|
|
695
|
-
/* @__PURE__ */
|
|
777
|
+
/* @__PURE__ */ jsx9(Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
|
|
778
|
+
/* @__PURE__ */ jsx9(
|
|
696
779
|
CommandPrimitive.Input,
|
|
697
780
|
{
|
|
698
781
|
placeholder: searchPlaceholder,
|
|
@@ -707,7 +790,7 @@ function Combobox({
|
|
|
707
790
|
ref: listRef,
|
|
708
791
|
className: "max-h-[50vh] overflow-y-auto overflow-x-hidden p-1 sm:max-h-60",
|
|
709
792
|
children: [
|
|
710
|
-
!isServer && !showCreate && /* @__PURE__ */
|
|
793
|
+
!isServer && !showCreate && /* @__PURE__ */ jsx9(CommandPrimitive.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
|
|
711
794
|
showCreate && /* @__PURE__ */ jsxs7(
|
|
712
795
|
CommandPrimitive.Item,
|
|
713
796
|
{
|
|
@@ -715,8 +798,8 @@ function Combobox({
|
|
|
715
798
|
onSelect: () => handleSelect(trimmedSearch),
|
|
716
799
|
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",
|
|
717
800
|
children: [
|
|
718
|
-
/* @__PURE__ */
|
|
719
|
-
/* @__PURE__ */
|
|
801
|
+
/* @__PURE__ */ jsx9(Plus, { className: "h-4 w-4 shrink-0" }),
|
|
802
|
+
/* @__PURE__ */ jsx9("span", { className: "truncate", children: (formatCreateLabel ?? ((text) => `Usar "${text}"`))(
|
|
720
803
|
trimmedSearch
|
|
721
804
|
) })
|
|
722
805
|
]
|
|
@@ -730,7 +813,7 @@ function Combobox({
|
|
|
730
813
|
onSelect: () => handleSelect(option.value),
|
|
731
814
|
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",
|
|
732
815
|
children: [
|
|
733
|
-
/* @__PURE__ */
|
|
816
|
+
/* @__PURE__ */ jsx9(
|
|
734
817
|
Check,
|
|
735
818
|
{
|
|
736
819
|
className: cn(
|
|
@@ -739,14 +822,14 @@ function Combobox({
|
|
|
739
822
|
)
|
|
740
823
|
}
|
|
741
824
|
),
|
|
742
|
-
/* @__PURE__ */
|
|
825
|
+
/* @__PURE__ */ jsx9("span", { className: "truncate", children: option.label })
|
|
743
826
|
]
|
|
744
827
|
},
|
|
745
828
|
option.value
|
|
746
829
|
)),
|
|
747
|
-
isServer && !loading && options.length === 0 && /* @__PURE__ */
|
|
748
|
-
isServer && loading && /* @__PURE__ */
|
|
749
|
-
isServer && hasMore && /* @__PURE__ */
|
|
830
|
+
isServer && !loading && options.length === 0 && /* @__PURE__ */ jsx9("div", { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
|
|
831
|
+
isServer && loading && /* @__PURE__ */ jsx9("div", { className: "flex items-center justify-center py-6", children: /* @__PURE__ */ jsx9(Loader2, { className: "h-4 w-4 animate-spin text-muted-foreground" }) }),
|
|
832
|
+
isServer && hasMore && /* @__PURE__ */ jsx9("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1" })
|
|
750
833
|
]
|
|
751
834
|
}
|
|
752
835
|
)
|
|
@@ -755,8 +838,8 @@ function Combobox({
|
|
|
755
838
|
);
|
|
756
839
|
if (isDesktop) {
|
|
757
840
|
return /* @__PURE__ */ jsxs7(PopoverPrimitive2.Root, { open, onOpenChange: handleOpenChange, children: [
|
|
758
|
-
/* @__PURE__ */
|
|
759
|
-
/* @__PURE__ */
|
|
841
|
+
/* @__PURE__ */ jsx9(PopoverPrimitive2.Trigger, { asChild: true, children: trigger }),
|
|
842
|
+
/* @__PURE__ */ jsx9(PopoverPrimitive2.Portal, { children: /* @__PURE__ */ jsx9(
|
|
760
843
|
PopoverPrimitive2.Content,
|
|
761
844
|
{
|
|
762
845
|
align: "start",
|
|
@@ -769,12 +852,12 @@ function Combobox({
|
|
|
769
852
|
] });
|
|
770
853
|
}
|
|
771
854
|
return /* @__PURE__ */ jsxs7(DrawerPrimitive2.Root, { open, onOpenChange: handleOpenChange, children: [
|
|
772
|
-
/* @__PURE__ */
|
|
855
|
+
/* @__PURE__ */ jsx9(DrawerPrimitive2.Trigger, { asChild: true, children: trigger }),
|
|
773
856
|
/* @__PURE__ */ jsxs7(DrawerPrimitive2.Portal, { children: [
|
|
774
|
-
/* @__PURE__ */
|
|
857
|
+
/* @__PURE__ */ jsx9(DrawerPrimitive2.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
775
858
|
/* @__PURE__ */ jsxs7(DrawerPrimitive2.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: [
|
|
776
|
-
/* @__PURE__ */
|
|
777
|
-
/* @__PURE__ */
|
|
859
|
+
/* @__PURE__ */ jsx9(DrawerPrimitive2.Title, { className: "sr-only", children: placeholder }),
|
|
860
|
+
/* @__PURE__ */ jsx9("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
778
861
|
command
|
|
779
862
|
] })
|
|
780
863
|
] })
|
|
@@ -783,7 +866,7 @@ function Combobox({
|
|
|
783
866
|
|
|
784
867
|
// src/components/confirm-dialog.tsx
|
|
785
868
|
import * as AlertDialog from "@radix-ui/react-alert-dialog";
|
|
786
|
-
import { jsx as
|
|
869
|
+
import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
787
870
|
function ConfirmDialog({
|
|
788
871
|
open,
|
|
789
872
|
onOpenChange,
|
|
@@ -797,8 +880,8 @@ function ConfirmDialog({
|
|
|
797
880
|
blurBackdrop = true,
|
|
798
881
|
backdropClassName
|
|
799
882
|
}) {
|
|
800
|
-
return /* @__PURE__ */
|
|
801
|
-
/* @__PURE__ */
|
|
883
|
+
return /* @__PURE__ */ jsx10(AlertDialog.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxs8(AlertDialog.Portal, { children: [
|
|
884
|
+
/* @__PURE__ */ jsx10(
|
|
802
885
|
AlertDialog.Overlay,
|
|
803
886
|
{
|
|
804
887
|
className: cn(
|
|
@@ -810,12 +893,12 @@ function ConfirmDialog({
|
|
|
810
893
|
),
|
|
811
894
|
/* @__PURE__ */ jsxs8(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: [
|
|
812
895
|
/* @__PURE__ */ jsxs8("div", { className: "flex flex-col space-y-2 text-center sm:text-left", children: [
|
|
813
|
-
/* @__PURE__ */
|
|
814
|
-
/* @__PURE__ */
|
|
896
|
+
/* @__PURE__ */ jsx10(AlertDialog.Title, { className: "text-lg font-semibold", children: title }),
|
|
897
|
+
/* @__PURE__ */ jsx10(AlertDialog.Description, { className: "text-sm text-muted-foreground", children: description })
|
|
815
898
|
] }),
|
|
816
899
|
/* @__PURE__ */ jsxs8("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
|
|
817
|
-
/* @__PURE__ */
|
|
818
|
-
/* @__PURE__ */
|
|
900
|
+
/* @__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 }),
|
|
901
|
+
/* @__PURE__ */ jsx10(
|
|
819
902
|
AlertDialog.Action,
|
|
820
903
|
{
|
|
821
904
|
onClick: onConfirm,
|
|
@@ -830,7 +913,7 @@ function ConfirmDialog({
|
|
|
830
913
|
}
|
|
831
914
|
|
|
832
915
|
// src/components/data-table-wrapper.tsx
|
|
833
|
-
import { jsx as
|
|
916
|
+
import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
834
917
|
function DataTableWrapper({
|
|
835
918
|
children,
|
|
836
919
|
isEmpty,
|
|
@@ -844,14 +927,14 @@ function DataTableWrapper({
|
|
|
844
927
|
hasPreviousPage = false
|
|
845
928
|
}) {
|
|
846
929
|
return /* @__PURE__ */ jsxs9("div", { className: "space-y-4", children: [
|
|
847
|
-
/* @__PURE__ */
|
|
930
|
+
/* @__PURE__ */ jsx11("div", { className: "overflow-x-auto rounded-md border", children }),
|
|
848
931
|
!isLoading && isEmpty && /* @__PURE__ */ jsxs9("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
|
|
849
|
-
emptyIcon && /* @__PURE__ */
|
|
850
|
-
/* @__PURE__ */
|
|
851
|
-
emptyDescription && /* @__PURE__ */
|
|
932
|
+
emptyIcon && /* @__PURE__ */ jsx11("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
|
|
933
|
+
/* @__PURE__ */ jsx11("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
|
|
934
|
+
emptyDescription && /* @__PURE__ */ jsx11("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
|
|
852
935
|
] }),
|
|
853
936
|
page !== void 0 && onPageChange && /* @__PURE__ */ jsxs9("div", { className: "flex items-center justify-end gap-4", children: [
|
|
854
|
-
/* @__PURE__ */
|
|
937
|
+
/* @__PURE__ */ jsx11(
|
|
855
938
|
"button",
|
|
856
939
|
{
|
|
857
940
|
type: "button",
|
|
@@ -865,7 +948,7 @@ function DataTableWrapper({
|
|
|
865
948
|
"P\xE1gina ",
|
|
866
949
|
page
|
|
867
950
|
] }),
|
|
868
|
-
/* @__PURE__ */
|
|
951
|
+
/* @__PURE__ */ jsx11(
|
|
869
952
|
"button",
|
|
870
953
|
{
|
|
871
954
|
type: "button",
|
|
@@ -888,7 +971,7 @@ import { CalendarIcon, ChevronDown, ChevronLeft as ChevronLeft2, ChevronRight as
|
|
|
888
971
|
import * as React6 from "react";
|
|
889
972
|
import { DayPicker } from "react-day-picker";
|
|
890
973
|
import { Drawer as DrawerPrimitive3 } from "vaul";
|
|
891
|
-
import { Fragment as Fragment5, jsx as
|
|
974
|
+
import { Fragment as Fragment5, jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
892
975
|
var DATE_MASK = "__/__/____";
|
|
893
976
|
var TIME_MASK = "__:__";
|
|
894
977
|
var MASK_REPLACEMENT = { _: /\d/ };
|
|
@@ -955,9 +1038,9 @@ var calendarClassNames = {
|
|
|
955
1038
|
};
|
|
956
1039
|
var calendarComponents = {
|
|
957
1040
|
Chevron: ({ orientation }) => {
|
|
958
|
-
if (orientation === "left") return /* @__PURE__ */
|
|
959
|
-
if (orientation === "right") return /* @__PURE__ */
|
|
960
|
-
return /* @__PURE__ */
|
|
1041
|
+
if (orientation === "left") return /* @__PURE__ */ jsx12(ChevronLeft2, { className: "size-4" });
|
|
1042
|
+
if (orientation === "right") return /* @__PURE__ */ jsx12(ChevronRight2, { className: "size-4" });
|
|
1043
|
+
return /* @__PURE__ */ jsx12(ChevronDown, { className: "size-4" });
|
|
961
1044
|
}
|
|
962
1045
|
};
|
|
963
1046
|
var formatMonthDropdown = (date) => date.toLocaleString("pt-BR", { month: "short" });
|
|
@@ -1043,7 +1126,7 @@ function DatePickerImpl({
|
|
|
1043
1126
|
};
|
|
1044
1127
|
const canApply = withTime && !!pendingDate && !!parseStrict(pendingTime, TIME_FORMAT);
|
|
1045
1128
|
const trigger = /* @__PURE__ */ jsxs10("div", { ref: triggerRef, className: "relative", children: [
|
|
1046
|
-
/* @__PURE__ */
|
|
1129
|
+
/* @__PURE__ */ jsx12(
|
|
1047
1130
|
InputMask,
|
|
1048
1131
|
{
|
|
1049
1132
|
id,
|
|
@@ -1063,7 +1146,7 @@ function DatePickerImpl({
|
|
|
1063
1146
|
className: cn(triggerInputClass, className)
|
|
1064
1147
|
}
|
|
1065
1148
|
),
|
|
1066
|
-
/* @__PURE__ */
|
|
1149
|
+
/* @__PURE__ */ jsx12(
|
|
1067
1150
|
"button",
|
|
1068
1151
|
{
|
|
1069
1152
|
type: "button",
|
|
@@ -1073,12 +1156,12 @@ function DatePickerImpl({
|
|
|
1073
1156
|
"aria-expanded": open,
|
|
1074
1157
|
onClick: () => setOpen(!open),
|
|
1075
1158
|
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",
|
|
1076
|
-
children: withTime ? /* @__PURE__ */
|
|
1159
|
+
children: withTime ? /* @__PURE__ */ jsx12(Clock, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx12(CalendarIcon, { className: "h-4 w-4" })
|
|
1077
1160
|
}
|
|
1078
1161
|
)
|
|
1079
1162
|
] });
|
|
1080
1163
|
const content = /* @__PURE__ */ jsxs10("div", { className: withTime ? "p-3" : "", children: [
|
|
1081
|
-
/* @__PURE__ */
|
|
1164
|
+
/* @__PURE__ */ jsx12(
|
|
1082
1165
|
DayPicker,
|
|
1083
1166
|
{
|
|
1084
1167
|
mode: "single",
|
|
@@ -1098,8 +1181,8 @@ function DatePickerImpl({
|
|
|
1098
1181
|
),
|
|
1099
1182
|
withTime && /* @__PURE__ */ jsxs10(Fragment5, { children: [
|
|
1100
1183
|
/* @__PURE__ */ jsxs10("div", { className: "mt-2 flex items-center gap-2 border-t pt-3", children: [
|
|
1101
|
-
/* @__PURE__ */
|
|
1102
|
-
/* @__PURE__ */
|
|
1184
|
+
/* @__PURE__ */ jsx12("span", { className: "text-sm text-muted-foreground", children: "Hor\xE1rio" }),
|
|
1185
|
+
/* @__PURE__ */ jsx12(
|
|
1103
1186
|
InputMask,
|
|
1104
1187
|
{
|
|
1105
1188
|
mask: TIME_MASK,
|
|
@@ -1112,7 +1195,7 @@ function DatePickerImpl({
|
|
|
1112
1195
|
}
|
|
1113
1196
|
)
|
|
1114
1197
|
] }),
|
|
1115
|
-
/* @__PURE__ */
|
|
1198
|
+
/* @__PURE__ */ jsx12(
|
|
1116
1199
|
"button",
|
|
1117
1200
|
{
|
|
1118
1201
|
type: "button",
|
|
@@ -1126,8 +1209,8 @@ function DatePickerImpl({
|
|
|
1126
1209
|
] });
|
|
1127
1210
|
if (isDesktop) {
|
|
1128
1211
|
return /* @__PURE__ */ jsxs10(PopoverPrimitive3.Root, { open, onOpenChange: setOpen, children: [
|
|
1129
|
-
/* @__PURE__ */
|
|
1130
|
-
/* @__PURE__ */
|
|
1212
|
+
/* @__PURE__ */ jsx12(PopoverPrimitive3.Anchor, { asChild: true, children: trigger }),
|
|
1213
|
+
/* @__PURE__ */ jsx12(PopoverPrimitive3.Portal, { children: /* @__PURE__ */ jsx12(
|
|
1131
1214
|
PopoverPrimitive3.Content,
|
|
1132
1215
|
{
|
|
1133
1216
|
align: "start",
|
|
@@ -1145,7 +1228,7 @@ function DatePickerImpl({
|
|
|
1145
1228
|
return /* @__PURE__ */ jsxs10(DrawerPrimitive3.Root, { open, onOpenChange: setOpen, children: [
|
|
1146
1229
|
trigger,
|
|
1147
1230
|
/* @__PURE__ */ jsxs10(DrawerPrimitive3.Portal, { children: [
|
|
1148
|
-
/* @__PURE__ */
|
|
1231
|
+
/* @__PURE__ */ jsx12(DrawerPrimitive3.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
1149
1232
|
/* @__PURE__ */ jsxs10(
|
|
1150
1233
|
DrawerPrimitive3.Content,
|
|
1151
1234
|
{
|
|
@@ -1155,9 +1238,9 @@ function DatePickerImpl({
|
|
|
1155
1238
|
},
|
|
1156
1239
|
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",
|
|
1157
1240
|
children: [
|
|
1158
|
-
/* @__PURE__ */
|
|
1159
|
-
/* @__PURE__ */
|
|
1160
|
-
/* @__PURE__ */
|
|
1241
|
+
/* @__PURE__ */ jsx12(DrawerPrimitive3.Title, { className: "sr-only", children: withTime ? "Selecione a data e o hor\xE1rio" : "Selecione a data" }),
|
|
1242
|
+
/* @__PURE__ */ jsx12("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
1243
|
+
/* @__PURE__ */ jsx12("div", { className: "flex justify-center overflow-y-auto pb-4", children: content })
|
|
1161
1244
|
]
|
|
1162
1245
|
}
|
|
1163
1246
|
)
|
|
@@ -1165,20 +1248,20 @@ function DatePickerImpl({
|
|
|
1165
1248
|
] });
|
|
1166
1249
|
}
|
|
1167
1250
|
function DatePicker(props) {
|
|
1168
|
-
return /* @__PURE__ */
|
|
1251
|
+
return /* @__PURE__ */ jsx12(DatePickerImpl, { ...props });
|
|
1169
1252
|
}
|
|
1170
1253
|
function DateTimePicker(props) {
|
|
1171
|
-
return /* @__PURE__ */
|
|
1254
|
+
return /* @__PURE__ */ jsx12(DatePickerImpl, { ...props, withTime: true });
|
|
1172
1255
|
}
|
|
1173
1256
|
|
|
1174
1257
|
// src/components/empty-state.tsx
|
|
1175
|
-
import { jsx as
|
|
1258
|
+
import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1176
1259
|
function EmptyState({ icon, title, description, action, className }) {
|
|
1177
1260
|
return /* @__PURE__ */ jsxs11("div", { className: `flex flex-col items-center justify-center py-16 text-center ${className ?? ""}`, children: [
|
|
1178
|
-
icon && /* @__PURE__ */
|
|
1179
|
-
/* @__PURE__ */
|
|
1180
|
-
description && /* @__PURE__ */
|
|
1181
|
-
action && /* @__PURE__ */
|
|
1261
|
+
icon && /* @__PURE__ */ jsx13("div", { className: "mb-4 text-muted-foreground", children: icon }),
|
|
1262
|
+
/* @__PURE__ */ jsx13("h3", { className: "text-lg font-semibold tracking-tight", children: title }),
|
|
1263
|
+
description && /* @__PURE__ */ jsx13("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: description }),
|
|
1264
|
+
action && /* @__PURE__ */ jsx13("div", { className: "mt-4", children: action })
|
|
1182
1265
|
] });
|
|
1183
1266
|
}
|
|
1184
1267
|
|
|
@@ -1187,7 +1270,7 @@ import * as PopoverPrimitive4 from "@radix-ui/react-popover";
|
|
|
1187
1270
|
import { ChevronDown as ChevronDown2, X as X3 } from "lucide-react";
|
|
1188
1271
|
import * as React7 from "react";
|
|
1189
1272
|
import { Drawer as DrawerPrimitive4 } from "vaul";
|
|
1190
|
-
import { jsx as
|
|
1273
|
+
import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1191
1274
|
function FilterToolbar({
|
|
1192
1275
|
children,
|
|
1193
1276
|
isFilterActive = false,
|
|
@@ -1211,7 +1294,7 @@ function FilterToolbar({
|
|
|
1211
1294
|
onClick: onClear,
|
|
1212
1295
|
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",
|
|
1213
1296
|
children: [
|
|
1214
|
-
/* @__PURE__ */
|
|
1297
|
+
/* @__PURE__ */ jsx14(X3, { className: "h-4 w-4" }),
|
|
1215
1298
|
clearLabel
|
|
1216
1299
|
]
|
|
1217
1300
|
}
|
|
@@ -1244,17 +1327,17 @@ function FilterPopover({
|
|
|
1244
1327
|
active ? "border-ring/60 text-foreground" : "text-muted-foreground"
|
|
1245
1328
|
),
|
|
1246
1329
|
children: [
|
|
1247
|
-
Icon && /* @__PURE__ */
|
|
1248
|
-
/* @__PURE__ */
|
|
1249
|
-
active && badge != null && /* @__PURE__ */
|
|
1250
|
-
/* @__PURE__ */
|
|
1330
|
+
Icon && /* @__PURE__ */ jsx14(Icon, { className: "h-4 w-4 shrink-0 opacity-70" }),
|
|
1331
|
+
/* @__PURE__ */ jsx14("span", { className: "truncate", children: label }),
|
|
1332
|
+
active && badge != null && /* @__PURE__ */ jsx14("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 }),
|
|
1333
|
+
/* @__PURE__ */ jsx14(ChevronDown2, { className: "h-4 w-4 shrink-0 opacity-50" })
|
|
1251
1334
|
]
|
|
1252
1335
|
}
|
|
1253
1336
|
);
|
|
1254
1337
|
if (isDesktop) {
|
|
1255
1338
|
return /* @__PURE__ */ jsxs12(PopoverPrimitive4.Root, { open, onOpenChange: setOpen, children: [
|
|
1256
|
-
/* @__PURE__ */
|
|
1257
|
-
/* @__PURE__ */
|
|
1339
|
+
/* @__PURE__ */ jsx14(PopoverPrimitive4.Trigger, { asChild: true, children: trigger }),
|
|
1340
|
+
/* @__PURE__ */ jsx14(PopoverPrimitive4.Portal, { children: /* @__PURE__ */ jsx14(
|
|
1258
1341
|
PopoverPrimitive4.Content,
|
|
1259
1342
|
{
|
|
1260
1343
|
align,
|
|
@@ -1275,13 +1358,13 @@ function FilterPopover({
|
|
|
1275
1358
|
] });
|
|
1276
1359
|
}
|
|
1277
1360
|
return /* @__PURE__ */ jsxs12(DrawerPrimitive4.Root, { open, onOpenChange: setOpen, children: [
|
|
1278
|
-
/* @__PURE__ */
|
|
1361
|
+
/* @__PURE__ */ jsx14(DrawerPrimitive4.Trigger, { asChild: true, children: trigger }),
|
|
1279
1362
|
/* @__PURE__ */ jsxs12(DrawerPrimitive4.Portal, { children: [
|
|
1280
|
-
/* @__PURE__ */
|
|
1363
|
+
/* @__PURE__ */ jsx14(DrawerPrimitive4.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
1281
1364
|
/* @__PURE__ */ jsxs12(DrawerPrimitive4.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: [
|
|
1282
|
-
/* @__PURE__ */
|
|
1283
|
-
/* @__PURE__ */
|
|
1284
|
-
/* @__PURE__ */
|
|
1365
|
+
/* @__PURE__ */ jsx14(DrawerPrimitive4.Title, { className: "sr-only", children: title ?? label }),
|
|
1366
|
+
/* @__PURE__ */ jsx14("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
1367
|
+
/* @__PURE__ */ jsx14("div", { className: "overflow-y-auto p-2", children: content })
|
|
1285
1368
|
] })
|
|
1286
1369
|
] })
|
|
1287
1370
|
] });
|
|
@@ -1315,7 +1398,7 @@ function FilterOptionList({
|
|
|
1315
1398
|
onClick: () => toggle(option.value),
|
|
1316
1399
|
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",
|
|
1317
1400
|
children: [
|
|
1318
|
-
option.dotClassName && /* @__PURE__ */
|
|
1401
|
+
option.dotClassName && /* @__PURE__ */ jsx14(
|
|
1319
1402
|
"span",
|
|
1320
1403
|
{
|
|
1321
1404
|
className: cn(
|
|
@@ -1324,14 +1407,14 @@ function FilterOptionList({
|
|
|
1324
1407
|
)
|
|
1325
1408
|
}
|
|
1326
1409
|
),
|
|
1327
|
-
/* @__PURE__ */
|
|
1328
|
-
isChecked && /* @__PURE__ */
|
|
1410
|
+
/* @__PURE__ */ jsx14("span", { className: "flex-1 truncate", children: option.label }),
|
|
1411
|
+
isChecked && /* @__PURE__ */ jsx14("span", { className: "h-1.5 w-1.5 shrink-0 rounded-full bg-primary" })
|
|
1329
1412
|
]
|
|
1330
1413
|
},
|
|
1331
1414
|
option.value
|
|
1332
1415
|
);
|
|
1333
1416
|
}),
|
|
1334
|
-
clearable && hasSelection && /* @__PURE__ */
|
|
1417
|
+
clearable && hasSelection && /* @__PURE__ */ jsx14(
|
|
1335
1418
|
"button",
|
|
1336
1419
|
{
|
|
1337
1420
|
type: "button",
|
|
@@ -1344,7 +1427,7 @@ function FilterOptionList({
|
|
|
1344
1427
|
}
|
|
1345
1428
|
|
|
1346
1429
|
// src/components/form-dialog.tsx
|
|
1347
|
-
import { jsx as
|
|
1430
|
+
import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1348
1431
|
function FormDialogLayout({
|
|
1349
1432
|
title,
|
|
1350
1433
|
children,
|
|
@@ -1356,10 +1439,10 @@ function FormDialogLayout({
|
|
|
1356
1439
|
isDisabled = false
|
|
1357
1440
|
}) {
|
|
1358
1441
|
return /* @__PURE__ */ jsxs13("form", { onSubmit, children: [
|
|
1359
|
-
/* @__PURE__ */
|
|
1360
|
-
/* @__PURE__ */
|
|
1442
|
+
/* @__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 }) }),
|
|
1443
|
+
/* @__PURE__ */ jsx15("div", { className: "space-y-4 py-4", children }),
|
|
1361
1444
|
/* @__PURE__ */ jsxs13("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
|
|
1362
|
-
/* @__PURE__ */
|
|
1445
|
+
/* @__PURE__ */ jsx15(
|
|
1363
1446
|
"button",
|
|
1364
1447
|
{
|
|
1365
1448
|
type: "button",
|
|
@@ -1368,7 +1451,7 @@ function FormDialogLayout({
|
|
|
1368
1451
|
children: cancelLabel
|
|
1369
1452
|
}
|
|
1370
1453
|
),
|
|
1371
|
-
/* @__PURE__ */
|
|
1454
|
+
/* @__PURE__ */ jsx15(
|
|
1372
1455
|
"button",
|
|
1373
1456
|
{
|
|
1374
1457
|
type: "submit",
|
|
@@ -1381,18 +1464,18 @@ function FormDialogLayout({
|
|
|
1381
1464
|
] });
|
|
1382
1465
|
}
|
|
1383
1466
|
function FormDialog({ onSubmit, ...rest }) {
|
|
1384
|
-
return /* @__PURE__ */
|
|
1467
|
+
return /* @__PURE__ */ jsx15(
|
|
1385
1468
|
BaseDialog,
|
|
1386
1469
|
{
|
|
1387
1470
|
...rest,
|
|
1388
|
-
contentWrapper: onSubmit ? (content) => /* @__PURE__ */
|
|
1471
|
+
contentWrapper: onSubmit ? (content) => /* @__PURE__ */ jsx15("form", { onSubmit, className: "flex min-h-0 flex-1 flex-col", children: content }) : void 0
|
|
1389
1472
|
}
|
|
1390
1473
|
);
|
|
1391
1474
|
}
|
|
1392
1475
|
|
|
1393
1476
|
// src/components/form-field.tsx
|
|
1394
1477
|
import { cloneElement, isValidElement, useId } from "react";
|
|
1395
|
-
import { jsx as
|
|
1478
|
+
import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1396
1479
|
function FormField({ label, htmlFor, error, required, children, className }) {
|
|
1397
1480
|
const errorId = useId();
|
|
1398
1481
|
const field = error && isValidElement(children) ? cloneElement(children, {
|
|
@@ -1410,18 +1493,18 @@ function FormField({ label, htmlFor, error, required, children, className }) {
|
|
|
1410
1493
|
className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
|
|
1411
1494
|
children: [
|
|
1412
1495
|
label,
|
|
1413
|
-
required && /* @__PURE__ */
|
|
1496
|
+
required && /* @__PURE__ */ jsx16("span", { className: "ml-1 text-destructive", children: "*" })
|
|
1414
1497
|
]
|
|
1415
1498
|
}
|
|
1416
1499
|
),
|
|
1417
1500
|
field,
|
|
1418
|
-
error && /* @__PURE__ */
|
|
1501
|
+
error && /* @__PURE__ */ jsx16("p", { id: errorId, className: "text-sm text-destructive", children: error })
|
|
1419
1502
|
] });
|
|
1420
1503
|
}
|
|
1421
1504
|
|
|
1422
1505
|
// src/components/mobile-card-list.tsx
|
|
1423
1506
|
import { useRef as useRef3 } from "react";
|
|
1424
|
-
import { jsx as
|
|
1507
|
+
import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1425
1508
|
var SCROLL_THRESHOLD = 8;
|
|
1426
1509
|
function MobileCardList({
|
|
1427
1510
|
data,
|
|
@@ -1452,26 +1535,26 @@ function MobileCardList({
|
|
|
1452
1535
|
}
|
|
1453
1536
|
};
|
|
1454
1537
|
if (isLoading) {
|
|
1455
|
-
return /* @__PURE__ */
|
|
1538
|
+
return /* @__PURE__ */ jsx17("div", { className: `space-y-3 ${className ?? ""}`, children: Array.from({ length: loadingCount }).map((_, i) => /* @__PURE__ */ jsx17("div", { className: "rounded-xl border p-4", children: /* @__PURE__ */ jsxs15("div", { className: "space-y-3", children: [
|
|
1456
1539
|
/* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
|
|
1457
|
-
/* @__PURE__ */
|
|
1458
|
-
/* @__PURE__ */
|
|
1540
|
+
/* @__PURE__ */ jsx17("div", { className: "h-5 w-32 animate-pulse rounded bg-muted" }),
|
|
1541
|
+
/* @__PURE__ */ jsx17("div", { className: "h-5 w-16 animate-pulse rounded bg-muted" })
|
|
1459
1542
|
] }),
|
|
1460
|
-
/* @__PURE__ */
|
|
1543
|
+
/* @__PURE__ */ jsx17("div", { className: "h-4 w-48 animate-pulse rounded bg-muted" }),
|
|
1461
1544
|
/* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
|
|
1462
|
-
/* @__PURE__ */
|
|
1463
|
-
/* @__PURE__ */
|
|
1545
|
+
/* @__PURE__ */ jsx17("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
|
|
1546
|
+
/* @__PURE__ */ jsx17("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" })
|
|
1464
1547
|
] })
|
|
1465
1548
|
] }) }, i)) });
|
|
1466
1549
|
}
|
|
1467
|
-
return /* @__PURE__ */
|
|
1550
|
+
return /* @__PURE__ */ jsx17(
|
|
1468
1551
|
"div",
|
|
1469
1552
|
{
|
|
1470
1553
|
className: `space-y-3 ${className ?? ""}`,
|
|
1471
1554
|
onTouchStart,
|
|
1472
1555
|
onTouchMove,
|
|
1473
1556
|
onClickCapture,
|
|
1474
|
-
children: data.map((item, index) => /* @__PURE__ */
|
|
1557
|
+
children: data.map((item, index) => /* @__PURE__ */ jsx17(
|
|
1475
1558
|
"div",
|
|
1476
1559
|
{
|
|
1477
1560
|
className: "rounded-xl border p-4 transition-all duration-150 hover:border-foreground/20 active:scale-[0.99]",
|
|
@@ -1516,7 +1599,7 @@ function applyCompanyTheme(root, companyTheme, mode) {
|
|
|
1516
1599
|
}
|
|
1517
1600
|
|
|
1518
1601
|
// src/components/theme-provider.tsx
|
|
1519
|
-
import { jsx as
|
|
1602
|
+
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
1520
1603
|
var initialState = {
|
|
1521
1604
|
theme: "system",
|
|
1522
1605
|
setTheme: () => null
|
|
@@ -1555,7 +1638,7 @@ function ThemeProvider({
|
|
|
1555
1638
|
setTheme(theme2);
|
|
1556
1639
|
}
|
|
1557
1640
|
};
|
|
1558
|
-
return /* @__PURE__ */
|
|
1641
|
+
return /* @__PURE__ */ jsx18(ThemeProviderContext.Provider, { ...props, value, children });
|
|
1559
1642
|
}
|
|
1560
1643
|
function useTheme() {
|
|
1561
1644
|
const context = useContext(ThemeProviderContext);
|
|
@@ -1566,23 +1649,23 @@ function useTheme() {
|
|
|
1566
1649
|
}
|
|
1567
1650
|
|
|
1568
1651
|
// src/components/mode-toggle.tsx
|
|
1569
|
-
import { jsx as
|
|
1652
|
+
import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1570
1653
|
function ModeToggle() {
|
|
1571
1654
|
const { setTheme } = useTheme();
|
|
1572
1655
|
return /* @__PURE__ */ jsxs16(DropdownMenu2.Root, { children: [
|
|
1573
|
-
/* @__PURE__ */
|
|
1656
|
+
/* @__PURE__ */ jsx19(DropdownMenu2.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs16(
|
|
1574
1657
|
"button",
|
|
1575
1658
|
{
|
|
1576
1659
|
type: "button",
|
|
1577
1660
|
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",
|
|
1578
1661
|
"aria-label": "Alternar tema",
|
|
1579
1662
|
children: [
|
|
1580
|
-
/* @__PURE__ */
|
|
1581
|
-
/* @__PURE__ */
|
|
1663
|
+
/* @__PURE__ */ jsx19(Sun, { className: "h-4 w-4 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" }),
|
|
1664
|
+
/* @__PURE__ */ jsx19(Moon, { className: "absolute inset-0 m-auto h-4 w-4 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" })
|
|
1582
1665
|
]
|
|
1583
1666
|
}
|
|
1584
1667
|
) }),
|
|
1585
|
-
/* @__PURE__ */
|
|
1668
|
+
/* @__PURE__ */ jsx19(DropdownMenu2.Portal, { children: /* @__PURE__ */ jsxs16(
|
|
1586
1669
|
DropdownMenu2.Content,
|
|
1587
1670
|
{
|
|
1588
1671
|
align: "end",
|
|
@@ -1594,7 +1677,7 @@ function ModeToggle() {
|
|
|
1594
1677
|
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",
|
|
1595
1678
|
onClick: () => setTheme("light"),
|
|
1596
1679
|
children: [
|
|
1597
|
-
/* @__PURE__ */
|
|
1680
|
+
/* @__PURE__ */ jsx19(Sun, { className: "h-4 w-4" }),
|
|
1598
1681
|
" Claro"
|
|
1599
1682
|
]
|
|
1600
1683
|
}
|
|
@@ -1605,7 +1688,7 @@ function ModeToggle() {
|
|
|
1605
1688
|
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",
|
|
1606
1689
|
onClick: () => setTheme("dark"),
|
|
1607
1690
|
children: [
|
|
1608
|
-
/* @__PURE__ */
|
|
1691
|
+
/* @__PURE__ */ jsx19(Moon, { className: "h-4 w-4" }),
|
|
1609
1692
|
" Escuro"
|
|
1610
1693
|
]
|
|
1611
1694
|
}
|
|
@@ -1616,7 +1699,7 @@ function ModeToggle() {
|
|
|
1616
1699
|
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",
|
|
1617
1700
|
onClick: () => setTheme("system"),
|
|
1618
1701
|
children: [
|
|
1619
|
-
/* @__PURE__ */
|
|
1702
|
+
/* @__PURE__ */ jsx19(Monitor, { className: "h-4 w-4" }),
|
|
1620
1703
|
" Sistema"
|
|
1621
1704
|
]
|
|
1622
1705
|
}
|
|
@@ -1633,7 +1716,7 @@ import { Command as CommandPrimitive2 } from "cmdk";
|
|
|
1633
1716
|
import { Check as Check2, ChevronsUpDown as ChevronsUpDown3, Loader2 as Loader22, Search as Search2, X as X4 } from "lucide-react";
|
|
1634
1717
|
import * as React8 from "react";
|
|
1635
1718
|
import { Drawer as DrawerPrimitive5 } from "vaul";
|
|
1636
|
-
import { jsx as
|
|
1719
|
+
import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
1637
1720
|
function MultiCombobox({
|
|
1638
1721
|
options,
|
|
1639
1722
|
value,
|
|
@@ -1696,13 +1779,13 @@ function MultiCombobox({
|
|
|
1696
1779
|
className
|
|
1697
1780
|
),
|
|
1698
1781
|
children: [
|
|
1699
|
-
selected.length === 0 ? /* @__PURE__ */
|
|
1782
|
+
selected.length === 0 ? /* @__PURE__ */ jsx20("span", { className: "text-muted-foreground", children: placeholder }) : selected.map((option) => /* @__PURE__ */ jsxs17(
|
|
1700
1783
|
"span",
|
|
1701
1784
|
{
|
|
1702
1785
|
className: "inline-flex items-center gap-1 rounded bg-secondary px-1.5 py-0.5 text-xs text-secondary-foreground",
|
|
1703
1786
|
children: [
|
|
1704
1787
|
option.label,
|
|
1705
|
-
/* @__PURE__ */
|
|
1788
|
+
/* @__PURE__ */ jsx20(
|
|
1706
1789
|
"button",
|
|
1707
1790
|
{
|
|
1708
1791
|
type: "button",
|
|
@@ -1714,14 +1797,14 @@ function MultiCombobox({
|
|
|
1714
1797
|
},
|
|
1715
1798
|
onPointerDown: (event) => event.stopPropagation(),
|
|
1716
1799
|
className: "rounded-sm opacity-60 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
1717
|
-
children: /* @__PURE__ */
|
|
1800
|
+
children: /* @__PURE__ */ jsx20(X4, { className: "h-3 w-3" })
|
|
1718
1801
|
}
|
|
1719
1802
|
)
|
|
1720
1803
|
]
|
|
1721
1804
|
},
|
|
1722
1805
|
option.value
|
|
1723
1806
|
)),
|
|
1724
|
-
/* @__PURE__ */
|
|
1807
|
+
/* @__PURE__ */ jsx20(ChevronsUpDown3, { className: "ml-auto h-4 w-4 shrink-0 opacity-50" })
|
|
1725
1808
|
]
|
|
1726
1809
|
}
|
|
1727
1810
|
);
|
|
@@ -1732,8 +1815,8 @@ function MultiCombobox({
|
|
|
1732
1815
|
className: "flex h-full w-full flex-col overflow-hidden",
|
|
1733
1816
|
children: [
|
|
1734
1817
|
/* @__PURE__ */ jsxs17("div", { className: "flex items-center border-b px-3", children: [
|
|
1735
|
-
/* @__PURE__ */
|
|
1736
|
-
/* @__PURE__ */
|
|
1818
|
+
/* @__PURE__ */ jsx20(Search2, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
|
|
1819
|
+
/* @__PURE__ */ jsx20(
|
|
1737
1820
|
CommandPrimitive2.Input,
|
|
1738
1821
|
{
|
|
1739
1822
|
placeholder: searchPlaceholder,
|
|
@@ -1748,7 +1831,7 @@ function MultiCombobox({
|
|
|
1748
1831
|
ref: listRef,
|
|
1749
1832
|
className: "max-h-[50vh] overflow-y-auto overflow-x-hidden p-1 sm:max-h-60",
|
|
1750
1833
|
children: [
|
|
1751
|
-
!isServer && /* @__PURE__ */
|
|
1834
|
+
!isServer && /* @__PURE__ */ jsx20(CommandPrimitive2.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
|
|
1752
1835
|
options.map((option) => /* @__PURE__ */ jsxs17(
|
|
1753
1836
|
CommandPrimitive2.Item,
|
|
1754
1837
|
{
|
|
@@ -1757,7 +1840,7 @@ function MultiCombobox({
|
|
|
1757
1840
|
onSelect: () => toggleValue(option.value),
|
|
1758
1841
|
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",
|
|
1759
1842
|
children: [
|
|
1760
|
-
/* @__PURE__ */
|
|
1843
|
+
/* @__PURE__ */ jsx20(
|
|
1761
1844
|
Check2,
|
|
1762
1845
|
{
|
|
1763
1846
|
className: cn(
|
|
@@ -1766,14 +1849,14 @@ function MultiCombobox({
|
|
|
1766
1849
|
)
|
|
1767
1850
|
}
|
|
1768
1851
|
),
|
|
1769
|
-
/* @__PURE__ */
|
|
1852
|
+
/* @__PURE__ */ jsx20("span", { className: "truncate", children: option.label })
|
|
1770
1853
|
]
|
|
1771
1854
|
},
|
|
1772
1855
|
option.value
|
|
1773
1856
|
)),
|
|
1774
|
-
isServer && !loading && options.length === 0 && /* @__PURE__ */
|
|
1775
|
-
isServer && loading && /* @__PURE__ */
|
|
1776
|
-
isServer && hasMore && /* @__PURE__ */
|
|
1857
|
+
isServer && !loading && options.length === 0 && /* @__PURE__ */ jsx20("div", { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
|
|
1858
|
+
isServer && loading && /* @__PURE__ */ jsx20("div", { className: "flex items-center justify-center py-6", children: /* @__PURE__ */ jsx20(Loader22, { className: "h-4 w-4 animate-spin text-muted-foreground" }) }),
|
|
1859
|
+
isServer && hasMore && /* @__PURE__ */ jsx20("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1" })
|
|
1777
1860
|
]
|
|
1778
1861
|
}
|
|
1779
1862
|
)
|
|
@@ -1782,8 +1865,8 @@ function MultiCombobox({
|
|
|
1782
1865
|
);
|
|
1783
1866
|
if (isDesktop) {
|
|
1784
1867
|
return /* @__PURE__ */ jsxs17(PopoverPrimitive5.Root, { open, onOpenChange: setOpen, children: [
|
|
1785
|
-
/* @__PURE__ */
|
|
1786
|
-
/* @__PURE__ */
|
|
1868
|
+
/* @__PURE__ */ jsx20(PopoverPrimitive5.Trigger, { asChild: true, disabled, children: trigger }),
|
|
1869
|
+
/* @__PURE__ */ jsx20(PopoverPrimitive5.Portal, { children: /* @__PURE__ */ jsx20(
|
|
1787
1870
|
PopoverPrimitive5.Content,
|
|
1788
1871
|
{
|
|
1789
1872
|
align: "start",
|
|
@@ -1796,12 +1879,12 @@ function MultiCombobox({
|
|
|
1796
1879
|
] });
|
|
1797
1880
|
}
|
|
1798
1881
|
return /* @__PURE__ */ jsxs17(DrawerPrimitive5.Root, { open, onOpenChange: setOpen, children: [
|
|
1799
|
-
/* @__PURE__ */
|
|
1882
|
+
/* @__PURE__ */ jsx20(DrawerPrimitive5.Trigger, { asChild: true, disabled, children: trigger }),
|
|
1800
1883
|
/* @__PURE__ */ jsxs17(DrawerPrimitive5.Portal, { children: [
|
|
1801
|
-
/* @__PURE__ */
|
|
1884
|
+
/* @__PURE__ */ jsx20(DrawerPrimitive5.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
1802
1885
|
/* @__PURE__ */ jsxs17(DrawerPrimitive5.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: [
|
|
1803
|
-
/* @__PURE__ */
|
|
1804
|
-
/* @__PURE__ */
|
|
1886
|
+
/* @__PURE__ */ jsx20(DrawerPrimitive5.Title, { className: "sr-only", children: placeholder }),
|
|
1887
|
+
/* @__PURE__ */ jsx20("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
1805
1888
|
command
|
|
1806
1889
|
] })
|
|
1807
1890
|
] })
|
|
@@ -1809,7 +1892,7 @@ function MultiCombobox({
|
|
|
1809
1892
|
}
|
|
1810
1893
|
|
|
1811
1894
|
// src/components/page-header.tsx
|
|
1812
|
-
import { jsx as
|
|
1895
|
+
import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1813
1896
|
function PageHeader({ title, description, action, className }) {
|
|
1814
1897
|
return /* @__PURE__ */ jsxs18(
|
|
1815
1898
|
"div",
|
|
@@ -1817,17 +1900,17 @@ function PageHeader({ title, description, action, className }) {
|
|
|
1817
1900
|
className: `flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between ${className ?? ""}`,
|
|
1818
1901
|
children: [
|
|
1819
1902
|
/* @__PURE__ */ jsxs18("div", { className: "min-w-0", children: [
|
|
1820
|
-
/* @__PURE__ */
|
|
1821
|
-
description && /* @__PURE__ */
|
|
1903
|
+
/* @__PURE__ */ jsx21("h1", { className: "truncate text-2xl font-semibold tracking-tight", children: title }),
|
|
1904
|
+
description && /* @__PURE__ */ jsx21("p", { className: "text-sm text-muted-foreground", children: description })
|
|
1822
1905
|
] }),
|
|
1823
|
-
action && /* @__PURE__ */
|
|
1906
|
+
action && /* @__PURE__ */ jsx21("div", { className: "shrink-0", children: action })
|
|
1824
1907
|
]
|
|
1825
1908
|
}
|
|
1826
1909
|
);
|
|
1827
1910
|
}
|
|
1828
1911
|
|
|
1829
1912
|
// src/components/pagination.tsx
|
|
1830
|
-
import { jsx as
|
|
1913
|
+
import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1831
1914
|
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";
|
|
1832
1915
|
function Pagination({
|
|
1833
1916
|
page,
|
|
@@ -1847,20 +1930,20 @@ function Pagination({
|
|
|
1847
1930
|
className: `flex items-center ${showPageSizeSelector ? "justify-between" : "justify-end"} gap-4 ${className ?? ""}`,
|
|
1848
1931
|
children: [
|
|
1849
1932
|
showPageSizeSelector && /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-2", children: [
|
|
1850
|
-
/* @__PURE__ */
|
|
1851
|
-
/* @__PURE__ */
|
|
1933
|
+
/* @__PURE__ */ jsx22("label", { htmlFor: "pagination-page-size", className: "text-sm text-muted-foreground", children: "Itens por p\xE1gina" }),
|
|
1934
|
+
/* @__PURE__ */ jsx22(
|
|
1852
1935
|
"select",
|
|
1853
1936
|
{
|
|
1854
1937
|
id: "pagination-page-size",
|
|
1855
1938
|
value: pageSize,
|
|
1856
1939
|
onChange: (e) => onPageSizeChange?.(Number(e.target.value)),
|
|
1857
1940
|
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",
|
|
1858
|
-
children: (pageSizeOptions ?? []).map((size) => /* @__PURE__ */
|
|
1941
|
+
children: (pageSizeOptions ?? []).map((size) => /* @__PURE__ */ jsx22("option", { value: size, children: size }, size))
|
|
1859
1942
|
}
|
|
1860
1943
|
)
|
|
1861
1944
|
] }),
|
|
1862
1945
|
/* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-4", children: [
|
|
1863
|
-
/* @__PURE__ */
|
|
1946
|
+
/* @__PURE__ */ jsx22(
|
|
1864
1947
|
"button",
|
|
1865
1948
|
{
|
|
1866
1949
|
type: "button",
|
|
@@ -1875,7 +1958,7 @@ function Pagination({
|
|
|
1875
1958
|
page,
|
|
1876
1959
|
totalPages ? ` de ${totalPages}` : ""
|
|
1877
1960
|
] }),
|
|
1878
|
-
/* @__PURE__ */
|
|
1961
|
+
/* @__PURE__ */ jsx22(
|
|
1879
1962
|
"button",
|
|
1880
1963
|
{
|
|
1881
1964
|
type: "button",
|
|
@@ -1894,11 +1977,11 @@ function Pagination({
|
|
|
1894
1977
|
// src/components/password-input.tsx
|
|
1895
1978
|
import { Eye, EyeOff } from "lucide-react";
|
|
1896
1979
|
import * as React9 from "react";
|
|
1897
|
-
import { jsx as
|
|
1980
|
+
import { jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
1898
1981
|
var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props }, ref) => {
|
|
1899
1982
|
const [visible, setVisible] = React9.useState(false);
|
|
1900
1983
|
return /* @__PURE__ */ jsxs20("div", { className: `relative ${containerClassName ?? ""}`, children: [
|
|
1901
|
-
/* @__PURE__ */
|
|
1984
|
+
/* @__PURE__ */ jsx23(
|
|
1902
1985
|
"input",
|
|
1903
1986
|
{
|
|
1904
1987
|
ref,
|
|
@@ -1907,7 +1990,7 @@ var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props
|
|
|
1907
1990
|
...props
|
|
1908
1991
|
}
|
|
1909
1992
|
),
|
|
1910
|
-
/* @__PURE__ */
|
|
1993
|
+
/* @__PURE__ */ jsx23(
|
|
1911
1994
|
"button",
|
|
1912
1995
|
{
|
|
1913
1996
|
type: "button",
|
|
@@ -1915,7 +1998,7 @@ var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props
|
|
|
1915
1998
|
"aria-label": visible ? "Ocultar senha" : "Mostrar senha",
|
|
1916
1999
|
tabIndex: -1,
|
|
1917
2000
|
className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground transition-colors hover:text-foreground",
|
|
1918
|
-
children: visible ? /* @__PURE__ */
|
|
2001
|
+
children: visible ? /* @__PURE__ */ jsx23(EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx23(Eye, { className: "h-4 w-4" })
|
|
1919
2002
|
}
|
|
1920
2003
|
)
|
|
1921
2004
|
] });
|
|
@@ -1923,8 +2006,8 @@ var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props
|
|
|
1923
2006
|
PasswordInput.displayName = "PasswordInput";
|
|
1924
2007
|
|
|
1925
2008
|
// src/components/progress-bar.tsx
|
|
1926
|
-
import { jsx as
|
|
1927
|
-
var
|
|
2009
|
+
import { jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
2010
|
+
var sizeClasses3 = {
|
|
1928
2011
|
sm: "h-1.5",
|
|
1929
2012
|
md: "h-2"
|
|
1930
2013
|
};
|
|
@@ -1939,14 +2022,14 @@ function ProgressBar({
|
|
|
1939
2022
|
const clamped = Math.min(100, Math.max(0, value));
|
|
1940
2023
|
return /* @__PURE__ */ jsxs21("div", { className: `space-y-1.5 ${className ?? ""}`, children: [
|
|
1941
2024
|
(label || valueLabel) && /* @__PURE__ */ jsxs21("div", { className: "flex items-baseline justify-between gap-2", children: [
|
|
1942
|
-
label && /* @__PURE__ */
|
|
1943
|
-
valueLabel && /* @__PURE__ */
|
|
2025
|
+
label && /* @__PURE__ */ jsx24("span", { className: "text-sm text-muted-foreground", children: label }),
|
|
2026
|
+
valueLabel && /* @__PURE__ */ jsx24("span", { className: "text-sm font-semibold", children: valueLabel })
|
|
1944
2027
|
] }),
|
|
1945
|
-
/* @__PURE__ */
|
|
2028
|
+
/* @__PURE__ */ jsx24(
|
|
1946
2029
|
"div",
|
|
1947
2030
|
{
|
|
1948
|
-
className: `w-full overflow-hidden rounded-full bg-muted ${
|
|
1949
|
-
children: /* @__PURE__ */
|
|
2031
|
+
className: `w-full overflow-hidden rounded-full bg-muted ${sizeClasses3[size]}`,
|
|
2032
|
+
children: /* @__PURE__ */ jsx24(
|
|
1950
2033
|
"div",
|
|
1951
2034
|
{
|
|
1952
2035
|
className: `h-full rounded-full transition-all duration-300 ${indicatorClassName ?? "bg-primary"}`,
|
|
@@ -1959,7 +2042,7 @@ function ProgressBar({
|
|
|
1959
2042
|
}
|
|
1960
2043
|
|
|
1961
2044
|
// src/components/responsive-data-view.tsx
|
|
1962
|
-
import { jsx as
|
|
2045
|
+
import { jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
1963
2046
|
function ResponsiveDataView({
|
|
1964
2047
|
table,
|
|
1965
2048
|
cards,
|
|
@@ -1971,12 +2054,12 @@ function ResponsiveDataView({
|
|
|
1971
2054
|
pagination
|
|
1972
2055
|
}) {
|
|
1973
2056
|
return /* @__PURE__ */ jsxs22("div", { className: "space-y-4", children: [
|
|
1974
|
-
/* @__PURE__ */
|
|
1975
|
-
/* @__PURE__ */
|
|
2057
|
+
/* @__PURE__ */ jsx25("div", { className: "hidden overflow-x-auto rounded-md border md:block", children: table }),
|
|
2058
|
+
/* @__PURE__ */ jsx25("div", { className: "md:hidden", children: cards }),
|
|
1976
2059
|
!isLoading && isEmpty && /* @__PURE__ */ jsxs22("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
|
|
1977
|
-
emptyIcon && /* @__PURE__ */
|
|
1978
|
-
/* @__PURE__ */
|
|
1979
|
-
emptyDescription && /* @__PURE__ */
|
|
2060
|
+
emptyIcon && /* @__PURE__ */ jsx25("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
|
|
2061
|
+
/* @__PURE__ */ jsx25("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
|
|
2062
|
+
emptyDescription && /* @__PURE__ */ jsx25("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
|
|
1980
2063
|
] }),
|
|
1981
2064
|
pagination
|
|
1982
2065
|
] });
|
|
@@ -1987,7 +2070,7 @@ import * as DropdownMenu3 from "@radix-ui/react-dropdown-menu";
|
|
|
1987
2070
|
import { MoreVertical } from "lucide-react";
|
|
1988
2071
|
import { useState as useState11 } from "react";
|
|
1989
2072
|
import { Drawer as DrawerPrimitive6 } from "vaul";
|
|
1990
|
-
import { Fragment as Fragment6, jsx as
|
|
2073
|
+
import { Fragment as Fragment6, jsx as jsx26, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
1991
2074
|
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";
|
|
1992
2075
|
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";
|
|
1993
2076
|
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";
|
|
@@ -2001,20 +2084,20 @@ function RowActionsMenu({
|
|
|
2001
2084
|
const isDesktop = useIsDesktop();
|
|
2002
2085
|
const [open, setOpen] = useState11(false);
|
|
2003
2086
|
if (actions.length === 0) return null;
|
|
2004
|
-
const trigger = /* @__PURE__ */
|
|
2087
|
+
const trigger = /* @__PURE__ */ jsx26(
|
|
2005
2088
|
"button",
|
|
2006
2089
|
{
|
|
2007
2090
|
type: "button",
|
|
2008
2091
|
disabled,
|
|
2009
2092
|
"aria-label": label,
|
|
2010
2093
|
className: triggerClass,
|
|
2011
|
-
children: /* @__PURE__ */
|
|
2094
|
+
children: /* @__PURE__ */ jsx26(MoreVertical, { className: "h-4 w-4" })
|
|
2012
2095
|
}
|
|
2013
2096
|
);
|
|
2014
2097
|
if (isDesktop) {
|
|
2015
2098
|
return /* @__PURE__ */ jsxs23(DropdownMenu3.Root, { open, onOpenChange: setOpen, modal: false, children: [
|
|
2016
|
-
/* @__PURE__ */
|
|
2017
|
-
/* @__PURE__ */
|
|
2099
|
+
/* @__PURE__ */ jsx26(DropdownMenu3.Trigger, { asChild: true, children: trigger }),
|
|
2100
|
+
/* @__PURE__ */ jsx26(DropdownMenu3.Portal, { children: /* @__PURE__ */ jsx26(
|
|
2018
2101
|
DropdownMenu3.Content,
|
|
2019
2102
|
{
|
|
2020
2103
|
align,
|
|
@@ -2025,7 +2108,7 @@ function RowActionsMenu({
|
|
|
2025
2108
|
itemClass2,
|
|
2026
2109
|
action.destructive && "text-destructive focus:bg-destructive/10"
|
|
2027
2110
|
);
|
|
2028
|
-
return action.href ? /* @__PURE__ */
|
|
2111
|
+
return action.href ? /* @__PURE__ */ jsx26(
|
|
2029
2112
|
DropdownMenu3.Item,
|
|
2030
2113
|
{
|
|
2031
2114
|
asChild: true,
|
|
@@ -2059,12 +2142,12 @@ function RowActionsMenu({
|
|
|
2059
2142
|
] });
|
|
2060
2143
|
}
|
|
2061
2144
|
return /* @__PURE__ */ jsxs23(DrawerPrimitive6.Root, { open, onOpenChange: setOpen, children: [
|
|
2062
|
-
/* @__PURE__ */
|
|
2145
|
+
/* @__PURE__ */ jsx26(DrawerPrimitive6.Trigger, { asChild: true, children: trigger }),
|
|
2063
2146
|
/* @__PURE__ */ jsxs23(DrawerPrimitive6.Portal, { children: [
|
|
2064
|
-
/* @__PURE__ */
|
|
2147
|
+
/* @__PURE__ */ jsx26(DrawerPrimitive6.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
2065
2148
|
/* @__PURE__ */ jsxs23(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: [
|
|
2066
|
-
/* @__PURE__ */
|
|
2067
|
-
/* @__PURE__ */
|
|
2149
|
+
/* @__PURE__ */ jsx26(DrawerPrimitive6.Title, { className: "sr-only", children: label }),
|
|
2150
|
+
/* @__PURE__ */ jsx26("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
2068
2151
|
actions.map((action) => {
|
|
2069
2152
|
const cls = cn(
|
|
2070
2153
|
sheetItemClass2,
|
|
@@ -2074,7 +2157,7 @@ function RowActionsMenu({
|
|
|
2074
2157
|
action.icon,
|
|
2075
2158
|
action.label
|
|
2076
2159
|
] });
|
|
2077
|
-
return action.href ? /* @__PURE__ */
|
|
2160
|
+
return action.href ? /* @__PURE__ */ jsx26(
|
|
2078
2161
|
"span",
|
|
2079
2162
|
{
|
|
2080
2163
|
onClick: () => setOpen(false),
|
|
@@ -2086,7 +2169,7 @@ function RowActionsMenu({
|
|
|
2086
2169
|
})
|
|
2087
2170
|
},
|
|
2088
2171
|
action.label
|
|
2089
|
-
) : /* @__PURE__ */
|
|
2172
|
+
) : /* @__PURE__ */ jsx26(
|
|
2090
2173
|
"button",
|
|
2091
2174
|
{
|
|
2092
2175
|
type: "button",
|
|
@@ -2108,10 +2191,10 @@ function RowActionsMenu({
|
|
|
2108
2191
|
|
|
2109
2192
|
// src/components/search-input.tsx
|
|
2110
2193
|
import * as React10 from "react";
|
|
2111
|
-
import { jsx as
|
|
2194
|
+
import { jsx as jsx27, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2112
2195
|
var SearchInput = React10.forwardRef(
|
|
2113
2196
|
({ containerClassName, className, ...props }, ref) => {
|
|
2114
|
-
return /* @__PURE__ */ jsxs24("div", { className:
|
|
2197
|
+
return /* @__PURE__ */ jsxs24("div", { className: cn("relative flex-1", containerClassName), children: [
|
|
2115
2198
|
/* @__PURE__ */ jsxs24(
|
|
2116
2199
|
"svg",
|
|
2117
2200
|
{
|
|
@@ -2124,19 +2207,23 @@ var SearchInput = React10.forwardRef(
|
|
|
2124
2207
|
strokeWidth: "2",
|
|
2125
2208
|
strokeLinecap: "round",
|
|
2126
2209
|
strokeLinejoin: "round",
|
|
2210
|
+
"aria-hidden": "true",
|
|
2127
2211
|
className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground",
|
|
2128
2212
|
children: [
|
|
2129
|
-
/* @__PURE__ */
|
|
2130
|
-
/* @__PURE__ */
|
|
2213
|
+
/* @__PURE__ */ jsx27("circle", { cx: "11", cy: "11", r: "8" }),
|
|
2214
|
+
/* @__PURE__ */ jsx27("path", { d: "m21 21-4.3-4.3" })
|
|
2131
2215
|
]
|
|
2132
2216
|
}
|
|
2133
2217
|
),
|
|
2134
|
-
/* @__PURE__ */
|
|
2218
|
+
/* @__PURE__ */ jsx27(
|
|
2135
2219
|
"input",
|
|
2136
2220
|
{
|
|
2137
2221
|
ref,
|
|
2138
2222
|
type: "text",
|
|
2139
|
-
className:
|
|
2223
|
+
className: cn(
|
|
2224
|
+
"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",
|
|
2225
|
+
className
|
|
2226
|
+
),
|
|
2140
2227
|
...props
|
|
2141
2228
|
}
|
|
2142
2229
|
)
|
|
@@ -2146,30 +2233,30 @@ var SearchInput = React10.forwardRef(
|
|
|
2146
2233
|
SearchInput.displayName = "SearchInput";
|
|
2147
2234
|
|
|
2148
2235
|
// src/components/stat-card.tsx
|
|
2149
|
-
import { jsx as
|
|
2236
|
+
import { jsx as jsx28, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
2150
2237
|
function StatCard({ label, value, detail, icon, isLoading }) {
|
|
2151
2238
|
if (isLoading) {
|
|
2152
2239
|
return /* @__PURE__ */ jsxs25("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
|
|
2153
2240
|
/* @__PURE__ */ jsxs25("div", { className: "flex items-center justify-between pb-2", children: [
|
|
2154
|
-
/* @__PURE__ */
|
|
2155
|
-
/* @__PURE__ */
|
|
2241
|
+
/* @__PURE__ */ jsx28("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
|
|
2242
|
+
/* @__PURE__ */ jsx28("div", { className: "h-4 w-4 animate-pulse rounded bg-muted" })
|
|
2156
2243
|
] }),
|
|
2157
|
-
/* @__PURE__ */
|
|
2158
|
-
/* @__PURE__ */
|
|
2244
|
+
/* @__PURE__ */ jsx28("div", { className: "mt-2 h-7 w-16 animate-pulse rounded bg-muted" }),
|
|
2245
|
+
/* @__PURE__ */ jsx28("div", { className: "mt-1 h-4 w-20 animate-pulse rounded bg-muted" })
|
|
2159
2246
|
] });
|
|
2160
2247
|
}
|
|
2161
2248
|
return /* @__PURE__ */ jsxs25("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
|
|
2162
2249
|
/* @__PURE__ */ jsxs25("div", { className: "flex items-center justify-between pb-2", children: [
|
|
2163
|
-
/* @__PURE__ */
|
|
2164
|
-
icon && /* @__PURE__ */
|
|
2250
|
+
/* @__PURE__ */ jsx28("span", { className: "text-sm font-medium text-muted-foreground", children: label }),
|
|
2251
|
+
icon && /* @__PURE__ */ jsx28("span", { className: "text-muted-foreground", children: icon })
|
|
2165
2252
|
] }),
|
|
2166
|
-
/* @__PURE__ */
|
|
2167
|
-
detail && /* @__PURE__ */
|
|
2253
|
+
/* @__PURE__ */ jsx28("div", { className: "text-2xl font-bold", children: value }),
|
|
2254
|
+
detail && /* @__PURE__ */ jsx28("p", { className: "text-xs text-muted-foreground", children: detail })
|
|
2168
2255
|
] });
|
|
2169
2256
|
}
|
|
2170
2257
|
|
|
2171
2258
|
// src/components/status-badge.tsx
|
|
2172
|
-
import { jsx as
|
|
2259
|
+
import { jsx as jsx29, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
2173
2260
|
var variantClasses = {
|
|
2174
2261
|
neutral: {
|
|
2175
2262
|
badge: "bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300",
|
|
@@ -2204,7 +2291,7 @@ function StatusBadge({
|
|
|
2204
2291
|
{
|
|
2205
2292
|
className: `inline-flex items-center gap-1.5 rounded-md px-2 py-0.5 text-xs font-medium ${classes.badge} ${className ?? ""}`,
|
|
2206
2293
|
children: [
|
|
2207
|
-
dot && /* @__PURE__ */
|
|
2294
|
+
dot && /* @__PURE__ */ jsx29(
|
|
2208
2295
|
"span",
|
|
2209
2296
|
{
|
|
2210
2297
|
className: `inline-block h-1.5 w-1.5 shrink-0 rounded-full ${classes.dot}`
|
|
@@ -2217,31 +2304,31 @@ function StatusBadge({
|
|
|
2217
2304
|
}
|
|
2218
2305
|
|
|
2219
2306
|
// src/components/status-dot.tsx
|
|
2220
|
-
import { jsx as
|
|
2307
|
+
import { jsx as jsx30, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
2221
2308
|
function StatusDot({ active, label, className }) {
|
|
2222
2309
|
return /* @__PURE__ */ jsxs27("span", { className: `inline-flex items-center gap-2 ${className ?? ""}`, children: [
|
|
2223
|
-
/* @__PURE__ */
|
|
2310
|
+
/* @__PURE__ */ jsx30(
|
|
2224
2311
|
"span",
|
|
2225
2312
|
{
|
|
2226
2313
|
className: `h-2 w-2 rounded-full ${active ? "bg-green-500" : "bg-red-500"}`
|
|
2227
2314
|
}
|
|
2228
2315
|
),
|
|
2229
|
-
label && /* @__PURE__ */
|
|
2316
|
+
label && /* @__PURE__ */ jsx30("span", { children: label })
|
|
2230
2317
|
] });
|
|
2231
2318
|
}
|
|
2232
2319
|
|
|
2233
2320
|
// src/components/table-skeleton.tsx
|
|
2234
|
-
import { Fragment as Fragment7, jsx as
|
|
2321
|
+
import { Fragment as Fragment7, jsx as jsx31 } from "react/jsx-runtime";
|
|
2235
2322
|
function TableSkeleton({ rows = 5, columns = 4 }) {
|
|
2236
|
-
return /* @__PURE__ */
|
|
2323
|
+
return /* @__PURE__ */ jsx31(Fragment7, { children: Array.from({ length: rows }).map((_, i) => /* @__PURE__ */ jsx31("tr", { className: "border-b transition-colors", children: Array.from({ length: columns }).map((_2, j) => /* @__PURE__ */ jsx31("td", { className: "p-4 align-middle", children: /* @__PURE__ */ jsx31("div", { className: "h-5 w-full animate-pulse rounded bg-muted" }) }, j)) }, i)) });
|
|
2237
2324
|
}
|
|
2238
2325
|
|
|
2239
2326
|
// src/components/toaster.tsx
|
|
2240
2327
|
import { Toaster as Sonner } from "sonner";
|
|
2241
|
-
import { jsx as
|
|
2328
|
+
import { jsx as jsx32 } from "react/jsx-runtime";
|
|
2242
2329
|
function Toaster(props) {
|
|
2243
2330
|
const { theme = "system" } = useTheme();
|
|
2244
|
-
return /* @__PURE__ */
|
|
2331
|
+
return /* @__PURE__ */ jsx32(
|
|
2245
2332
|
Sonner,
|
|
2246
2333
|
{
|
|
2247
2334
|
theme,
|
|
@@ -2365,6 +2452,7 @@ export {
|
|
|
2365
2452
|
Pagination,
|
|
2366
2453
|
PasswordInput,
|
|
2367
2454
|
ProgressBar,
|
|
2455
|
+
Rating,
|
|
2368
2456
|
ResponsiveDataView,
|
|
2369
2457
|
RowActionsMenu,
|
|
2370
2458
|
SearchInput,
|