@motor-hero/ui-kit 0.20.0 → 0.22.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/color-picker.d.ts +23 -0
- package/dist/components/color-picker.d.ts.map +1 -0
- package/dist/index.cjs +210 -130
- 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 +215 -136
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
- package/src/components/color-picker.tsx +100 -0
- package/src/index.ts +2 -0
package/dist/index.js
CHANGED
|
@@ -742,31 +742,109 @@ function Combobox({
|
|
|
742
742
|
] });
|
|
743
743
|
}
|
|
744
744
|
|
|
745
|
-
// src/components/
|
|
745
|
+
// src/components/color-picker.tsx
|
|
746
|
+
import * as PopoverPrimitive2 from "@radix-ui/react-popover";
|
|
747
|
+
import { ChevronsUpDown as ChevronsUpDown2 } from "lucide-react";
|
|
748
|
+
import * as React6 from "react";
|
|
749
|
+
import { HexColorInput, HexColorPicker } from "react-colorful";
|
|
746
750
|
import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
751
|
+
function ColorPicker({
|
|
752
|
+
value,
|
|
753
|
+
onChange,
|
|
754
|
+
placeholder = "Selecionar cor",
|
|
755
|
+
disabled,
|
|
756
|
+
id,
|
|
757
|
+
className,
|
|
758
|
+
"aria-invalid": ariaInvalid,
|
|
759
|
+
"aria-describedby": ariaDescribedby
|
|
760
|
+
}) {
|
|
761
|
+
const [open, setOpen] = React6.useState(false);
|
|
762
|
+
const color = value || "";
|
|
763
|
+
return /* @__PURE__ */ jsxs15(PopoverPrimitive2.Root, { open, onOpenChange: setOpen, modal: true, children: [
|
|
764
|
+
/* @__PURE__ */ jsx17(PopoverPrimitive2.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs15(
|
|
765
|
+
"button",
|
|
766
|
+
{
|
|
767
|
+
type: "button",
|
|
768
|
+
id,
|
|
769
|
+
"aria-invalid": ariaInvalid,
|
|
770
|
+
"aria-describedby": ariaDescribedby,
|
|
771
|
+
disabled,
|
|
772
|
+
className: cn(
|
|
773
|
+
"flex h-9 w-full cursor-pointer items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:focus-visible:ring-destructive",
|
|
774
|
+
className
|
|
775
|
+
),
|
|
776
|
+
children: [
|
|
777
|
+
/* @__PURE__ */ jsxs15("span", { className: "flex items-center gap-2 truncate", children: [
|
|
778
|
+
/* @__PURE__ */ jsx17(
|
|
779
|
+
"span",
|
|
780
|
+
{
|
|
781
|
+
"aria-hidden": true,
|
|
782
|
+
className: cn(
|
|
783
|
+
"h-5 w-5 shrink-0 rounded border border-border",
|
|
784
|
+
!color && "bg-[length:8px_8px] bg-[position:0_0,4px_4px]"
|
|
785
|
+
),
|
|
786
|
+
style: color ? { backgroundColor: color } : {
|
|
787
|
+
backgroundImage: "linear-gradient(45deg,var(--color-muted) 25%,transparent 25%,transparent 75%,var(--color-muted) 75%),linear-gradient(45deg,var(--color-muted) 25%,transparent 25%,transparent 75%,var(--color-muted) 75%)"
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
),
|
|
791
|
+
/* @__PURE__ */ jsx17("span", { className: cn("truncate", !color && "text-muted-foreground"), children: color || placeholder })
|
|
792
|
+
] }),
|
|
793
|
+
/* @__PURE__ */ jsx17(ChevronsUpDown2, { className: "h-4 w-4 shrink-0 opacity-50" })
|
|
794
|
+
]
|
|
795
|
+
}
|
|
796
|
+
) }),
|
|
797
|
+
/* @__PURE__ */ jsx17(PopoverPrimitive2.Portal, { children: /* @__PURE__ */ jsx17(
|
|
798
|
+
PopoverPrimitive2.Content,
|
|
799
|
+
{
|
|
800
|
+
align: "start",
|
|
801
|
+
sideOffset: 4,
|
|
802
|
+
className: "z-50 w-56 rounded-md border bg-popover p-3 text-popover-foreground shadow-md",
|
|
803
|
+
children: /* @__PURE__ */ jsxs15("div", { className: "mh-color-picker flex flex-col gap-3", children: [
|
|
804
|
+
/* @__PURE__ */ jsx17(HexColorPicker, { color, onChange }),
|
|
805
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2", children: [
|
|
806
|
+
/* @__PURE__ */ jsx17("span", { className: "text-sm text-muted-foreground", children: "#" }),
|
|
807
|
+
/* @__PURE__ */ jsx17(
|
|
808
|
+
HexColorInput,
|
|
809
|
+
{
|
|
810
|
+
color,
|
|
811
|
+
onChange,
|
|
812
|
+
prefixed: false,
|
|
813
|
+
className: "flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm uppercase shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
814
|
+
}
|
|
815
|
+
)
|
|
816
|
+
] })
|
|
817
|
+
] })
|
|
818
|
+
}
|
|
819
|
+
) })
|
|
820
|
+
] });
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
// src/components/stat-card.tsx
|
|
824
|
+
import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
747
825
|
function StatCard({ label, value, detail, icon, isLoading }) {
|
|
748
826
|
if (isLoading) {
|
|
749
|
-
return /* @__PURE__ */
|
|
750
|
-
/* @__PURE__ */
|
|
751
|
-
/* @__PURE__ */
|
|
752
|
-
/* @__PURE__ */
|
|
827
|
+
return /* @__PURE__ */ jsxs16("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
|
|
828
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between pb-2", children: [
|
|
829
|
+
/* @__PURE__ */ jsx18("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
|
|
830
|
+
/* @__PURE__ */ jsx18("div", { className: "h-4 w-4 animate-pulse rounded bg-muted" })
|
|
753
831
|
] }),
|
|
754
|
-
/* @__PURE__ */
|
|
755
|
-
/* @__PURE__ */
|
|
832
|
+
/* @__PURE__ */ jsx18("div", { className: "mt-2 h-7 w-16 animate-pulse rounded bg-muted" }),
|
|
833
|
+
/* @__PURE__ */ jsx18("div", { className: "mt-1 h-4 w-20 animate-pulse rounded bg-muted" })
|
|
756
834
|
] });
|
|
757
835
|
}
|
|
758
|
-
return /* @__PURE__ */
|
|
759
|
-
/* @__PURE__ */
|
|
760
|
-
/* @__PURE__ */
|
|
761
|
-
icon && /* @__PURE__ */
|
|
836
|
+
return /* @__PURE__ */ jsxs16("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
|
|
837
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between pb-2", children: [
|
|
838
|
+
/* @__PURE__ */ jsx18("span", { className: "text-sm font-medium text-muted-foreground", children: label }),
|
|
839
|
+
icon && /* @__PURE__ */ jsx18("span", { className: "text-muted-foreground", children: icon })
|
|
762
840
|
] }),
|
|
763
|
-
/* @__PURE__ */
|
|
764
|
-
detail && /* @__PURE__ */
|
|
841
|
+
/* @__PURE__ */ jsx18("div", { className: "text-2xl font-bold", children: value }),
|
|
842
|
+
detail && /* @__PURE__ */ jsx18("p", { className: "text-xs text-muted-foreground", children: detail })
|
|
765
843
|
] });
|
|
766
844
|
}
|
|
767
845
|
|
|
768
846
|
// src/components/data-table-wrapper.tsx
|
|
769
|
-
import { jsx as
|
|
847
|
+
import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
770
848
|
function DataTableWrapper({
|
|
771
849
|
children,
|
|
772
850
|
isEmpty,
|
|
@@ -779,15 +857,15 @@ function DataTableWrapper({
|
|
|
779
857
|
hasNextPage = false,
|
|
780
858
|
hasPreviousPage = false
|
|
781
859
|
}) {
|
|
782
|
-
return /* @__PURE__ */
|
|
783
|
-
/* @__PURE__ */
|
|
784
|
-
!isLoading && isEmpty && /* @__PURE__ */
|
|
785
|
-
emptyIcon && /* @__PURE__ */
|
|
786
|
-
/* @__PURE__ */
|
|
787
|
-
emptyDescription && /* @__PURE__ */
|
|
860
|
+
return /* @__PURE__ */ jsxs17("div", { className: "space-y-4", children: [
|
|
861
|
+
/* @__PURE__ */ jsx19("div", { className: "overflow-x-auto rounded-md border", children }),
|
|
862
|
+
!isLoading && isEmpty && /* @__PURE__ */ jsxs17("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
|
|
863
|
+
emptyIcon && /* @__PURE__ */ jsx19("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
|
|
864
|
+
/* @__PURE__ */ jsx19("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
|
|
865
|
+
emptyDescription && /* @__PURE__ */ jsx19("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
|
|
788
866
|
] }),
|
|
789
|
-
page !== void 0 && onPageChange && /* @__PURE__ */
|
|
790
|
-
/* @__PURE__ */
|
|
867
|
+
page !== void 0 && onPageChange && /* @__PURE__ */ jsxs17("div", { className: "flex items-center justify-end gap-4", children: [
|
|
868
|
+
/* @__PURE__ */ jsx19(
|
|
791
869
|
"button",
|
|
792
870
|
{
|
|
793
871
|
type: "button",
|
|
@@ -797,11 +875,11 @@ function DataTableWrapper({
|
|
|
797
875
|
children: "Anterior"
|
|
798
876
|
}
|
|
799
877
|
),
|
|
800
|
-
/* @__PURE__ */
|
|
878
|
+
/* @__PURE__ */ jsxs17("span", { className: "text-sm text-muted-foreground", children: [
|
|
801
879
|
"P\xE1gina ",
|
|
802
880
|
page
|
|
803
881
|
] }),
|
|
804
|
-
/* @__PURE__ */
|
|
882
|
+
/* @__PURE__ */ jsx19(
|
|
805
883
|
"button",
|
|
806
884
|
{
|
|
807
885
|
type: "button",
|
|
@@ -817,7 +895,7 @@ function DataTableWrapper({
|
|
|
817
895
|
|
|
818
896
|
// src/components/mobile-card-list.tsx
|
|
819
897
|
import { useRef } from "react";
|
|
820
|
-
import { jsx as
|
|
898
|
+
import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
821
899
|
var SCROLL_THRESHOLD = 8;
|
|
822
900
|
function MobileCardList({
|
|
823
901
|
data,
|
|
@@ -848,26 +926,26 @@ function MobileCardList({
|
|
|
848
926
|
}
|
|
849
927
|
};
|
|
850
928
|
if (isLoading) {
|
|
851
|
-
return /* @__PURE__ */
|
|
852
|
-
/* @__PURE__ */
|
|
853
|
-
/* @__PURE__ */
|
|
854
|
-
/* @__PURE__ */
|
|
929
|
+
return /* @__PURE__ */ jsx20("div", { className: `space-y-3 ${className ?? ""}`, children: Array.from({ length: loadingCount }).map((_, i) => /* @__PURE__ */ jsx20("div", { className: "rounded-xl border p-4", children: /* @__PURE__ */ jsxs18("div", { className: "space-y-3", children: [
|
|
930
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex justify-between", children: [
|
|
931
|
+
/* @__PURE__ */ jsx20("div", { className: "h-5 w-32 animate-pulse rounded bg-muted" }),
|
|
932
|
+
/* @__PURE__ */ jsx20("div", { className: "h-5 w-16 animate-pulse rounded bg-muted" })
|
|
855
933
|
] }),
|
|
856
|
-
/* @__PURE__ */
|
|
857
|
-
/* @__PURE__ */
|
|
858
|
-
/* @__PURE__ */
|
|
859
|
-
/* @__PURE__ */
|
|
934
|
+
/* @__PURE__ */ jsx20("div", { className: "h-4 w-48 animate-pulse rounded bg-muted" }),
|
|
935
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex justify-between", children: [
|
|
936
|
+
/* @__PURE__ */ jsx20("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
|
|
937
|
+
/* @__PURE__ */ jsx20("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" })
|
|
860
938
|
] })
|
|
861
939
|
] }) }, i)) });
|
|
862
940
|
}
|
|
863
|
-
return /* @__PURE__ */
|
|
941
|
+
return /* @__PURE__ */ jsx20(
|
|
864
942
|
"div",
|
|
865
943
|
{
|
|
866
944
|
className: `space-y-3 ${className ?? ""}`,
|
|
867
945
|
onTouchStart,
|
|
868
946
|
onTouchMove,
|
|
869
947
|
onClickCapture,
|
|
870
|
-
children: data.map((item, index) => /* @__PURE__ */
|
|
948
|
+
children: data.map((item, index) => /* @__PURE__ */ jsx20(
|
|
871
949
|
"div",
|
|
872
950
|
{
|
|
873
951
|
className: "rounded-xl border p-4 transition-all duration-150 hover:border-foreground/20 active:scale-[0.99]",
|
|
@@ -880,7 +958,7 @@ function MobileCardList({
|
|
|
880
958
|
}
|
|
881
959
|
|
|
882
960
|
// src/components/responsive-data-view.tsx
|
|
883
|
-
import { jsx as
|
|
961
|
+
import { jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
884
962
|
function ResponsiveDataView({
|
|
885
963
|
table,
|
|
886
964
|
cards,
|
|
@@ -891,13 +969,13 @@ function ResponsiveDataView({
|
|
|
891
969
|
emptyDescription,
|
|
892
970
|
pagination
|
|
893
971
|
}) {
|
|
894
|
-
return /* @__PURE__ */
|
|
895
|
-
/* @__PURE__ */
|
|
896
|
-
/* @__PURE__ */
|
|
897
|
-
!isLoading && isEmpty && /* @__PURE__ */
|
|
898
|
-
emptyIcon && /* @__PURE__ */
|
|
899
|
-
/* @__PURE__ */
|
|
900
|
-
emptyDescription && /* @__PURE__ */
|
|
972
|
+
return /* @__PURE__ */ jsxs19("div", { className: "space-y-4", children: [
|
|
973
|
+
/* @__PURE__ */ jsx21("div", { className: "hidden overflow-x-auto rounded-md border md:block", children: table }),
|
|
974
|
+
/* @__PURE__ */ jsx21("div", { className: "md:hidden", children: cards }),
|
|
975
|
+
!isLoading && isEmpty && /* @__PURE__ */ jsxs19("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
|
|
976
|
+
emptyIcon && /* @__PURE__ */ jsx21("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
|
|
977
|
+
/* @__PURE__ */ jsx21("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
|
|
978
|
+
emptyDescription && /* @__PURE__ */ jsx21("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
|
|
901
979
|
] }),
|
|
902
980
|
pagination
|
|
903
981
|
] });
|
|
@@ -905,10 +983,10 @@ function ResponsiveDataView({
|
|
|
905
983
|
|
|
906
984
|
// src/components/toaster.tsx
|
|
907
985
|
import { Toaster as Sonner } from "sonner";
|
|
908
|
-
import { jsx as
|
|
986
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
909
987
|
function Toaster(props) {
|
|
910
988
|
const { theme = "system" } = useTheme();
|
|
911
|
-
return /* @__PURE__ */
|
|
989
|
+
return /* @__PURE__ */ jsx22(
|
|
912
990
|
Sonner,
|
|
913
991
|
{
|
|
914
992
|
theme,
|
|
@@ -930,17 +1008,17 @@ function Toaster(props) {
|
|
|
930
1008
|
|
|
931
1009
|
// src/components/app-shell.tsx
|
|
932
1010
|
import { ChevronLeft, ChevronRight, Menu } from "lucide-react";
|
|
933
|
-
import { useState as
|
|
1011
|
+
import { useState as useState8 } from "react";
|
|
934
1012
|
|
|
935
1013
|
// src/components/sidebar-nav.tsx
|
|
936
1014
|
import { Fragment as Fragment3 } from "react";
|
|
937
1015
|
|
|
938
1016
|
// src/components/types.tsx
|
|
939
|
-
import { jsx as
|
|
940
|
-
var defaultRenderLink = ({ children, ...props }) => /* @__PURE__ */
|
|
1017
|
+
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
1018
|
+
var defaultRenderLink = ({ children, ...props }) => /* @__PURE__ */ jsx23("a", { ...props, children });
|
|
941
1019
|
|
|
942
1020
|
// src/components/sidebar-nav.tsx
|
|
943
|
-
import { Fragment as Fragment4, jsx as
|
|
1021
|
+
import { Fragment as Fragment4, jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
944
1022
|
function defaultIsActive(item, activePath) {
|
|
945
1023
|
if (item.href === "/") return activePath === "/";
|
|
946
1024
|
return activePath === item.href || activePath.startsWith(item.href + "/");
|
|
@@ -955,7 +1033,7 @@ function SidebarNav({
|
|
|
955
1033
|
onNavigate
|
|
956
1034
|
}) {
|
|
957
1035
|
const visible = items.filter((item) => !item.adminOnly || isAdmin);
|
|
958
|
-
return /* @__PURE__ */
|
|
1036
|
+
return /* @__PURE__ */ jsx24("nav", { className: "flex flex-col gap-1", children: visible.map((item) => {
|
|
959
1037
|
const active = isActive(item, activePath);
|
|
960
1038
|
const link = renderLink({
|
|
961
1039
|
href: item.href,
|
|
@@ -967,21 +1045,21 @@ function SidebarNav({
|
|
|
967
1045
|
active ? "bg-accent text-accent-foreground font-semibold" : "text-muted-foreground hover:bg-accent hover:text-accent-foreground",
|
|
968
1046
|
isCollapsed && "justify-center px-2"
|
|
969
1047
|
),
|
|
970
|
-
children: /* @__PURE__ */
|
|
971
|
-
item.icon && /* @__PURE__ */
|
|
972
|
-
!isCollapsed && /* @__PURE__ */
|
|
1048
|
+
children: /* @__PURE__ */ jsxs20(Fragment4, { children: [
|
|
1049
|
+
item.icon && /* @__PURE__ */ jsx24("span", { className: "shrink-0", children: item.icon }),
|
|
1050
|
+
!isCollapsed && /* @__PURE__ */ jsx24("span", { className: "truncate", children: item.label })
|
|
973
1051
|
] })
|
|
974
1052
|
});
|
|
975
|
-
return /* @__PURE__ */
|
|
1053
|
+
return /* @__PURE__ */ jsx24(Fragment3, { children: link }, item.href);
|
|
976
1054
|
}) });
|
|
977
1055
|
}
|
|
978
1056
|
|
|
979
1057
|
// src/components/user-menu.tsx
|
|
980
1058
|
import * as DropdownMenu2 from "@radix-ui/react-dropdown-menu";
|
|
981
1059
|
import { LogOut, User } from "lucide-react";
|
|
982
|
-
import { useState as
|
|
1060
|
+
import { useState as useState7 } from "react";
|
|
983
1061
|
import { Drawer as DrawerPrimitive2 } from "vaul";
|
|
984
|
-
import { Fragment as Fragment5, jsx as
|
|
1062
|
+
import { Fragment as Fragment5, jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
985
1063
|
function initials(user) {
|
|
986
1064
|
const source = user?.name?.trim() || user?.email?.trim();
|
|
987
1065
|
if (!source) return "";
|
|
@@ -1000,52 +1078,52 @@ function UserMenu({
|
|
|
1000
1078
|
align = "end"
|
|
1001
1079
|
}) {
|
|
1002
1080
|
const isDesktop = useIsDesktop();
|
|
1003
|
-
const [open, setOpen] =
|
|
1081
|
+
const [open, setOpen] = useState7(false);
|
|
1004
1082
|
const label = initials(user);
|
|
1005
|
-
const trigger = /* @__PURE__ */
|
|
1083
|
+
const trigger = /* @__PURE__ */ jsx25(
|
|
1006
1084
|
"button",
|
|
1007
1085
|
{
|
|
1008
1086
|
type: "button",
|
|
1009
1087
|
className: "inline-flex h-9 w-9 items-center justify-center overflow-hidden rounded-full border border-input bg-background text-xs font-semibold shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
1010
1088
|
"aria-label": "Menu do usu\xE1rio",
|
|
1011
1089
|
"data-testid": "user-menu",
|
|
1012
|
-
children: user?.avatarUrl ? /* @__PURE__ */
|
|
1090
|
+
children: user?.avatarUrl ? /* @__PURE__ */ jsx25(
|
|
1013
1091
|
"img",
|
|
1014
1092
|
{
|
|
1015
1093
|
src: user.avatarUrl,
|
|
1016
1094
|
alt: user.name ?? user.email ?? "Avatar",
|
|
1017
1095
|
className: "h-full w-full object-cover"
|
|
1018
1096
|
}
|
|
1019
|
-
) : label ? /* @__PURE__ */
|
|
1097
|
+
) : label ? /* @__PURE__ */ jsx25("span", { children: label }) : /* @__PURE__ */ jsx25(User, { className: "h-4 w-4" })
|
|
1020
1098
|
}
|
|
1021
1099
|
);
|
|
1022
|
-
const userInfo = (user?.name || user?.email) && /* @__PURE__ */
|
|
1023
|
-
user.name && /* @__PURE__ */
|
|
1024
|
-
user.email && /* @__PURE__ */
|
|
1100
|
+
const userInfo = (user?.name || user?.email) && /* @__PURE__ */ jsxs21("div", { className: "px-2 py-1.5", children: [
|
|
1101
|
+
user.name && /* @__PURE__ */ jsx25("p", { className: "truncate text-sm font-medium", children: user.name }),
|
|
1102
|
+
user.email && /* @__PURE__ */ jsx25("p", { className: "truncate text-xs text-muted-foreground", children: user.email })
|
|
1025
1103
|
] });
|
|
1026
1104
|
if (isDesktop) {
|
|
1027
|
-
return /* @__PURE__ */
|
|
1028
|
-
/* @__PURE__ */
|
|
1029
|
-
/* @__PURE__ */
|
|
1105
|
+
return /* @__PURE__ */ jsxs21(DropdownMenu2.Root, { open, onOpenChange: setOpen, children: [
|
|
1106
|
+
/* @__PURE__ */ jsx25(DropdownMenu2.Trigger, { asChild: true, children: trigger }),
|
|
1107
|
+
/* @__PURE__ */ jsx25(DropdownMenu2.Portal, { children: /* @__PURE__ */ jsxs21(
|
|
1030
1108
|
DropdownMenu2.Content,
|
|
1031
1109
|
{
|
|
1032
1110
|
align,
|
|
1033
1111
|
sideOffset: 6,
|
|
1034
1112
|
className: "z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95",
|
|
1035
1113
|
children: [
|
|
1036
|
-
userInfo && /* @__PURE__ */
|
|
1114
|
+
userInfo && /* @__PURE__ */ jsxs21(Fragment5, { children: [
|
|
1037
1115
|
userInfo,
|
|
1038
|
-
/* @__PURE__ */
|
|
1116
|
+
/* @__PURE__ */ jsx25(DropdownMenu2.Separator, { className: "-mx-1 my-1 h-px bg-border" })
|
|
1039
1117
|
] }),
|
|
1040
1118
|
items.map(
|
|
1041
|
-
(item) => item.href ? /* @__PURE__ */
|
|
1119
|
+
(item) => item.href ? /* @__PURE__ */ jsx25(DropdownMenu2.Item, { asChild: true, children: renderLink({
|
|
1042
1120
|
href: item.href,
|
|
1043
1121
|
className: itemClass,
|
|
1044
|
-
children: /* @__PURE__ */
|
|
1122
|
+
children: /* @__PURE__ */ jsxs21(Fragment5, { children: [
|
|
1045
1123
|
item.icon,
|
|
1046
1124
|
item.label
|
|
1047
1125
|
] })
|
|
1048
|
-
}) }, item.label) : /* @__PURE__ */
|
|
1126
|
+
}) }, item.label) : /* @__PURE__ */ jsxs21(
|
|
1049
1127
|
DropdownMenu2.Item,
|
|
1050
1128
|
{
|
|
1051
1129
|
className: itemClass,
|
|
@@ -1058,9 +1136,9 @@ function UserMenu({
|
|
|
1058
1136
|
item.label
|
|
1059
1137
|
)
|
|
1060
1138
|
),
|
|
1061
|
-
onLogout && /* @__PURE__ */
|
|
1062
|
-
items.length > 0 && /* @__PURE__ */
|
|
1063
|
-
/* @__PURE__ */
|
|
1139
|
+
onLogout && /* @__PURE__ */ jsxs21(Fragment5, { children: [
|
|
1140
|
+
items.length > 0 && /* @__PURE__ */ jsx25(DropdownMenu2.Separator, { className: "-mx-1 my-1 h-px bg-border" }),
|
|
1141
|
+
/* @__PURE__ */ jsxs21(
|
|
1064
1142
|
DropdownMenu2.Item,
|
|
1065
1143
|
{
|
|
1066
1144
|
className: cn(
|
|
@@ -1069,7 +1147,7 @@ function UserMenu({
|
|
|
1069
1147
|
),
|
|
1070
1148
|
onClick: onLogout,
|
|
1071
1149
|
children: [
|
|
1072
|
-
/* @__PURE__ */
|
|
1150
|
+
/* @__PURE__ */ jsx25(LogOut, { className: "h-4 w-4" }),
|
|
1073
1151
|
logoutLabel
|
|
1074
1152
|
]
|
|
1075
1153
|
}
|
|
@@ -1080,19 +1158,19 @@ function UserMenu({
|
|
|
1080
1158
|
) })
|
|
1081
1159
|
] });
|
|
1082
1160
|
}
|
|
1083
|
-
return /* @__PURE__ */
|
|
1084
|
-
/* @__PURE__ */
|
|
1085
|
-
/* @__PURE__ */
|
|
1086
|
-
/* @__PURE__ */
|
|
1087
|
-
/* @__PURE__ */
|
|
1088
|
-
/* @__PURE__ */
|
|
1089
|
-
/* @__PURE__ */
|
|
1090
|
-
userInfo && /* @__PURE__ */
|
|
1161
|
+
return /* @__PURE__ */ jsxs21(DrawerPrimitive2.Root, { open, onOpenChange: setOpen, children: [
|
|
1162
|
+
/* @__PURE__ */ jsx25(DrawerPrimitive2.Trigger, { asChild: true, children: trigger }),
|
|
1163
|
+
/* @__PURE__ */ jsxs21(DrawerPrimitive2.Portal, { children: [
|
|
1164
|
+
/* @__PURE__ */ jsx25(DrawerPrimitive2.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
1165
|
+
/* @__PURE__ */ jsxs21(DrawerPrimitive2.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: [
|
|
1166
|
+
/* @__PURE__ */ jsx25(DrawerPrimitive2.Title, { className: "sr-only", children: "Menu do usu\xE1rio" }),
|
|
1167
|
+
/* @__PURE__ */ jsx25("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
1168
|
+
userInfo && /* @__PURE__ */ jsxs21(Fragment5, { children: [
|
|
1091
1169
|
userInfo,
|
|
1092
|
-
/* @__PURE__ */
|
|
1170
|
+
/* @__PURE__ */ jsx25("div", { className: "-mx-1 my-1 h-px bg-border" })
|
|
1093
1171
|
] }),
|
|
1094
1172
|
items.map(
|
|
1095
|
-
(item) => item.href ? /* @__PURE__ */
|
|
1173
|
+
(item) => item.href ? /* @__PURE__ */ jsx25(
|
|
1096
1174
|
"span",
|
|
1097
1175
|
{
|
|
1098
1176
|
onClick: () => setOpen(false),
|
|
@@ -1100,14 +1178,14 @@ function UserMenu({
|
|
|
1100
1178
|
children: renderLink({
|
|
1101
1179
|
href: item.href,
|
|
1102
1180
|
className: sheetItemClass,
|
|
1103
|
-
children: /* @__PURE__ */
|
|
1181
|
+
children: /* @__PURE__ */ jsxs21(Fragment5, { children: [
|
|
1104
1182
|
item.icon,
|
|
1105
1183
|
item.label
|
|
1106
1184
|
] })
|
|
1107
1185
|
})
|
|
1108
1186
|
},
|
|
1109
1187
|
item.label
|
|
1110
|
-
) : /* @__PURE__ */
|
|
1188
|
+
) : /* @__PURE__ */ jsxs21(
|
|
1111
1189
|
"button",
|
|
1112
1190
|
{
|
|
1113
1191
|
type: "button",
|
|
@@ -1124,9 +1202,9 @@ function UserMenu({
|
|
|
1124
1202
|
item.label
|
|
1125
1203
|
)
|
|
1126
1204
|
),
|
|
1127
|
-
onLogout && /* @__PURE__ */
|
|
1128
|
-
items.length > 0 && /* @__PURE__ */
|
|
1129
|
-
/* @__PURE__ */
|
|
1205
|
+
onLogout && /* @__PURE__ */ jsxs21(Fragment5, { children: [
|
|
1206
|
+
items.length > 0 && /* @__PURE__ */ jsx25("div", { className: "-mx-1 my-1 h-px bg-border" }),
|
|
1207
|
+
/* @__PURE__ */ jsxs21(
|
|
1130
1208
|
"button",
|
|
1131
1209
|
{
|
|
1132
1210
|
type: "button",
|
|
@@ -1136,7 +1214,7 @@ function UserMenu({
|
|
|
1136
1214
|
setOpen(false);
|
|
1137
1215
|
},
|
|
1138
1216
|
children: [
|
|
1139
|
-
/* @__PURE__ */
|
|
1217
|
+
/* @__PURE__ */ jsx25(LogOut, { className: "h-4 w-4" }),
|
|
1140
1218
|
logoutLabel
|
|
1141
1219
|
]
|
|
1142
1220
|
}
|
|
@@ -1148,7 +1226,7 @@ function UserMenu({
|
|
|
1148
1226
|
}
|
|
1149
1227
|
|
|
1150
1228
|
// src/components/app-shell.tsx
|
|
1151
|
-
import { jsx as
|
|
1229
|
+
import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
1152
1230
|
function AppShell({
|
|
1153
1231
|
brand,
|
|
1154
1232
|
brandCollapsed,
|
|
@@ -1165,9 +1243,9 @@ function AppShell({
|
|
|
1165
1243
|
defaultCollapsed = false,
|
|
1166
1244
|
children
|
|
1167
1245
|
}) {
|
|
1168
|
-
const [collapsed, setCollapsed] =
|
|
1169
|
-
const [mobileOpen, setMobileOpen] =
|
|
1170
|
-
const nav = (isCollapsed, onNavigate) => /* @__PURE__ */
|
|
1246
|
+
const [collapsed, setCollapsed] = useState8(defaultCollapsed);
|
|
1247
|
+
const [mobileOpen, setMobileOpen] = useState8(false);
|
|
1248
|
+
const nav = (isCollapsed, onNavigate) => /* @__PURE__ */ jsx26(
|
|
1171
1249
|
SidebarNav,
|
|
1172
1250
|
{
|
|
1173
1251
|
items: navItems,
|
|
@@ -1179,8 +1257,8 @@ function AppShell({
|
|
|
1179
1257
|
onNavigate
|
|
1180
1258
|
}
|
|
1181
1259
|
);
|
|
1182
|
-
return /* @__PURE__ */
|
|
1183
|
-
/* @__PURE__ */
|
|
1260
|
+
return /* @__PURE__ */ jsxs22("div", { className: "flex h-screen overflow-hidden bg-background", children: [
|
|
1261
|
+
/* @__PURE__ */ jsxs22(
|
|
1184
1262
|
"aside",
|
|
1185
1263
|
{
|
|
1186
1264
|
className: cn(
|
|
@@ -1188,22 +1266,22 @@ function AppShell({
|
|
|
1188
1266
|
collapsed ? "w-16" : "w-60"
|
|
1189
1267
|
),
|
|
1190
1268
|
children: [
|
|
1191
|
-
/* @__PURE__ */
|
|
1192
|
-
/* @__PURE__ */
|
|
1193
|
-
collapsible && /* @__PURE__ */
|
|
1269
|
+
/* @__PURE__ */ jsx26("div", { className: "flex h-14 shrink-0 items-center border-b px-4", children: collapsed ? brandCollapsed ?? brand : brand }),
|
|
1270
|
+
/* @__PURE__ */ jsx26("div", { className: "flex-1 overflow-y-auto px-2 py-4", children: nav(collapsed) }),
|
|
1271
|
+
collapsible && /* @__PURE__ */ jsx26("div", { className: "border-t p-2", children: /* @__PURE__ */ jsx26(
|
|
1194
1272
|
"button",
|
|
1195
1273
|
{
|
|
1196
1274
|
type: "button",
|
|
1197
1275
|
onClick: () => setCollapsed((v) => !v),
|
|
1198
1276
|
className: "flex w-full items-center justify-center rounded-md px-2 py-2 text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground",
|
|
1199
1277
|
"aria-label": collapsed ? "Expandir menu" : "Recolher menu",
|
|
1200
|
-
children: collapsed ? /* @__PURE__ */
|
|
1278
|
+
children: collapsed ? /* @__PURE__ */ jsx26(ChevronRight, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx26(ChevronLeft, { className: "h-4 w-4" })
|
|
1201
1279
|
}
|
|
1202
1280
|
) })
|
|
1203
1281
|
]
|
|
1204
1282
|
}
|
|
1205
1283
|
),
|
|
1206
|
-
/* @__PURE__ */
|
|
1284
|
+
/* @__PURE__ */ jsxs22(
|
|
1207
1285
|
"div",
|
|
1208
1286
|
{
|
|
1209
1287
|
className: cn(
|
|
@@ -1212,8 +1290,8 @@ function AppShell({
|
|
|
1212
1290
|
),
|
|
1213
1291
|
onClick: () => setMobileOpen(false),
|
|
1214
1292
|
children: [
|
|
1215
|
-
/* @__PURE__ */
|
|
1216
|
-
/* @__PURE__ */
|
|
1293
|
+
/* @__PURE__ */ jsx26("div", { className: "absolute inset-0 bg-black/50" }),
|
|
1294
|
+
/* @__PURE__ */ jsxs22(
|
|
1217
1295
|
"div",
|
|
1218
1296
|
{
|
|
1219
1297
|
className: cn(
|
|
@@ -1222,32 +1300,32 @@ function AppShell({
|
|
|
1222
1300
|
),
|
|
1223
1301
|
onClick: (e) => e.stopPropagation(),
|
|
1224
1302
|
children: [
|
|
1225
|
-
/* @__PURE__ */
|
|
1226
|
-
/* @__PURE__ */
|
|
1303
|
+
/* @__PURE__ */ jsx26("div", { className: "flex h-14 shrink-0 items-center border-b px-4", children: brand }),
|
|
1304
|
+
/* @__PURE__ */ jsx26("div", { className: "flex-1 overflow-y-auto px-2 py-4", children: nav(false, () => setMobileOpen(false)) })
|
|
1227
1305
|
]
|
|
1228
1306
|
}
|
|
1229
1307
|
)
|
|
1230
1308
|
]
|
|
1231
1309
|
}
|
|
1232
1310
|
),
|
|
1233
|
-
/* @__PURE__ */
|
|
1234
|
-
/* @__PURE__ */
|
|
1235
|
-
/* @__PURE__ */
|
|
1311
|
+
/* @__PURE__ */ jsxs22("div", { className: "flex flex-1 flex-col overflow-hidden", children: [
|
|
1312
|
+
/* @__PURE__ */ jsxs22("header", { className: "flex h-14 shrink-0 items-center gap-2 border-b bg-background px-4", children: [
|
|
1313
|
+
/* @__PURE__ */ jsx26(
|
|
1236
1314
|
"button",
|
|
1237
1315
|
{
|
|
1238
1316
|
type: "button",
|
|
1239
1317
|
onClick: () => setMobileOpen(true),
|
|
1240
1318
|
className: "inline-flex h-9 w-9 items-center justify-center rounded-md border border-input bg-background shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground md:hidden",
|
|
1241
1319
|
"aria-label": "Abrir menu",
|
|
1242
|
-
children: /* @__PURE__ */
|
|
1320
|
+
children: /* @__PURE__ */ jsx26(Menu, { className: "h-4 w-4" })
|
|
1243
1321
|
}
|
|
1244
1322
|
),
|
|
1245
|
-
/* @__PURE__ */
|
|
1323
|
+
/* @__PURE__ */ jsxs22("div", { className: "ml-auto flex items-center gap-2", children: [
|
|
1246
1324
|
headerActions,
|
|
1247
|
-
(user || onLogout) && /* @__PURE__ */
|
|
1325
|
+
(user || onLogout) && /* @__PURE__ */ jsx26(UserMenu, { user, items: userMenuItems, onLogout, renderLink })
|
|
1248
1326
|
] })
|
|
1249
1327
|
] }),
|
|
1250
|
-
/* @__PURE__ */
|
|
1328
|
+
/* @__PURE__ */ jsx26("main", { className: "flex-1 overflow-y-auto", children })
|
|
1251
1329
|
] })
|
|
1252
1330
|
] });
|
|
1253
1331
|
}
|
|
@@ -1255,9 +1333,9 @@ function AppShell({
|
|
|
1255
1333
|
// src/components/row-actions-menu.tsx
|
|
1256
1334
|
import * as DropdownMenu3 from "@radix-ui/react-dropdown-menu";
|
|
1257
1335
|
import { MoreVertical } from "lucide-react";
|
|
1258
|
-
import { useState as
|
|
1336
|
+
import { useState as useState9 } from "react";
|
|
1259
1337
|
import { Drawer as DrawerPrimitive3 } from "vaul";
|
|
1260
|
-
import { Fragment as Fragment6, jsx as
|
|
1338
|
+
import { Fragment as Fragment6, jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
1261
1339
|
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";
|
|
1262
1340
|
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";
|
|
1263
1341
|
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";
|
|
@@ -1269,22 +1347,22 @@ function RowActionsMenu({
|
|
|
1269
1347
|
renderLink = defaultRenderLink
|
|
1270
1348
|
}) {
|
|
1271
1349
|
const isDesktop = useIsDesktop();
|
|
1272
|
-
const [open, setOpen] =
|
|
1350
|
+
const [open, setOpen] = useState9(false);
|
|
1273
1351
|
if (actions.length === 0) return null;
|
|
1274
|
-
const trigger = /* @__PURE__ */
|
|
1352
|
+
const trigger = /* @__PURE__ */ jsx27(
|
|
1275
1353
|
"button",
|
|
1276
1354
|
{
|
|
1277
1355
|
type: "button",
|
|
1278
1356
|
disabled,
|
|
1279
1357
|
"aria-label": label,
|
|
1280
1358
|
className: triggerClass,
|
|
1281
|
-
children: /* @__PURE__ */
|
|
1359
|
+
children: /* @__PURE__ */ jsx27(MoreVertical, { className: "h-4 w-4" })
|
|
1282
1360
|
}
|
|
1283
1361
|
);
|
|
1284
1362
|
if (isDesktop) {
|
|
1285
|
-
return /* @__PURE__ */
|
|
1286
|
-
/* @__PURE__ */
|
|
1287
|
-
/* @__PURE__ */
|
|
1363
|
+
return /* @__PURE__ */ jsxs23(DropdownMenu3.Root, { open, onOpenChange: setOpen, children: [
|
|
1364
|
+
/* @__PURE__ */ jsx27(DropdownMenu3.Trigger, { asChild: true, children: trigger }),
|
|
1365
|
+
/* @__PURE__ */ jsx27(DropdownMenu3.Portal, { children: /* @__PURE__ */ jsx27(
|
|
1288
1366
|
DropdownMenu3.Content,
|
|
1289
1367
|
{
|
|
1290
1368
|
align,
|
|
@@ -1295,7 +1373,7 @@ function RowActionsMenu({
|
|
|
1295
1373
|
itemClass2,
|
|
1296
1374
|
action.destructive && "text-destructive focus:bg-destructive/10"
|
|
1297
1375
|
);
|
|
1298
|
-
return action.href ? /* @__PURE__ */
|
|
1376
|
+
return action.href ? /* @__PURE__ */ jsx27(
|
|
1299
1377
|
DropdownMenu3.Item,
|
|
1300
1378
|
{
|
|
1301
1379
|
asChild: true,
|
|
@@ -1303,14 +1381,14 @@ function RowActionsMenu({
|
|
|
1303
1381
|
children: renderLink({
|
|
1304
1382
|
href: action.href,
|
|
1305
1383
|
className: cls,
|
|
1306
|
-
children: /* @__PURE__ */
|
|
1384
|
+
children: /* @__PURE__ */ jsxs23(Fragment6, { children: [
|
|
1307
1385
|
action.icon,
|
|
1308
1386
|
action.label
|
|
1309
1387
|
] })
|
|
1310
1388
|
})
|
|
1311
1389
|
},
|
|
1312
1390
|
action.label
|
|
1313
|
-
) : /* @__PURE__ */
|
|
1391
|
+
) : /* @__PURE__ */ jsxs23(
|
|
1314
1392
|
DropdownMenu3.Item,
|
|
1315
1393
|
{
|
|
1316
1394
|
className: cls,
|
|
@@ -1328,23 +1406,23 @@ function RowActionsMenu({
|
|
|
1328
1406
|
) })
|
|
1329
1407
|
] });
|
|
1330
1408
|
}
|
|
1331
|
-
return /* @__PURE__ */
|
|
1332
|
-
/* @__PURE__ */
|
|
1333
|
-
/* @__PURE__ */
|
|
1334
|
-
/* @__PURE__ */
|
|
1335
|
-
/* @__PURE__ */
|
|
1336
|
-
/* @__PURE__ */
|
|
1337
|
-
/* @__PURE__ */
|
|
1409
|
+
return /* @__PURE__ */ jsxs23(DrawerPrimitive3.Root, { open, onOpenChange: setOpen, children: [
|
|
1410
|
+
/* @__PURE__ */ jsx27(DrawerPrimitive3.Trigger, { asChild: true, children: trigger }),
|
|
1411
|
+
/* @__PURE__ */ jsxs23(DrawerPrimitive3.Portal, { children: [
|
|
1412
|
+
/* @__PURE__ */ jsx27(DrawerPrimitive3.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
1413
|
+
/* @__PURE__ */ jsxs23(DrawerPrimitive3.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: [
|
|
1414
|
+
/* @__PURE__ */ jsx27(DrawerPrimitive3.Title, { className: "sr-only", children: label }),
|
|
1415
|
+
/* @__PURE__ */ jsx27("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
1338
1416
|
actions.map((action) => {
|
|
1339
1417
|
const cls = cn(
|
|
1340
1418
|
sheetItemClass2,
|
|
1341
1419
|
action.destructive && "text-destructive"
|
|
1342
1420
|
);
|
|
1343
|
-
const inner = /* @__PURE__ */
|
|
1421
|
+
const inner = /* @__PURE__ */ jsxs23(Fragment6, { children: [
|
|
1344
1422
|
action.icon,
|
|
1345
1423
|
action.label
|
|
1346
1424
|
] });
|
|
1347
|
-
return action.href ? /* @__PURE__ */
|
|
1425
|
+
return action.href ? /* @__PURE__ */ jsx27(
|
|
1348
1426
|
"span",
|
|
1349
1427
|
{
|
|
1350
1428
|
onClick: () => setOpen(false),
|
|
@@ -1356,7 +1434,7 @@ function RowActionsMenu({
|
|
|
1356
1434
|
})
|
|
1357
1435
|
},
|
|
1358
1436
|
action.label
|
|
1359
|
-
) : /* @__PURE__ */
|
|
1437
|
+
) : /* @__PURE__ */ jsx27(
|
|
1360
1438
|
"button",
|
|
1361
1439
|
{
|
|
1362
1440
|
type: "button",
|
|
@@ -1386,9 +1464,9 @@ function extractApiError(err, fallbackMessage = "Ocorreu um erro inesperado.") {
|
|
|
1386
1464
|
}
|
|
1387
1465
|
|
|
1388
1466
|
// src/hooks/use-disclosure.ts
|
|
1389
|
-
import { useCallback, useState as
|
|
1467
|
+
import { useCallback, useState as useState10 } from "react";
|
|
1390
1468
|
function useDisclosure(initial = false) {
|
|
1391
|
-
const [open, setOpen] =
|
|
1469
|
+
const [open, setOpen] = useState10(initial);
|
|
1392
1470
|
const onOpen = useCallback(() => setOpen(true), []);
|
|
1393
1471
|
const onClose = useCallback(() => setOpen(false), []);
|
|
1394
1472
|
const onToggle = useCallback(() => setOpen((v) => !v), []);
|
|
@@ -1423,6 +1501,7 @@ function useCustomToast() {
|
|
|
1423
1501
|
export {
|
|
1424
1502
|
AppShell,
|
|
1425
1503
|
AuthCard,
|
|
1504
|
+
ColorPicker,
|
|
1426
1505
|
Combobox,
|
|
1427
1506
|
ConfirmDialog,
|
|
1428
1507
|
DataTableWrapper,
|