@motor-hero/ui-kit 0.25.1 → 0.27.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/base-dialog.d.ts +45 -0
- package/dist/components/base-dialog.d.ts.map +1 -0
- package/dist/components/form-dialog.d.ts +8 -26
- package/dist/components/form-dialog.d.ts.map +1 -1
- package/dist/index.cjs +310 -301
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +309 -301
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/base-dialog.tsx +126 -0
- package/src/components/form-dialog.tsx +20 -108
- package/src/index.ts +3 -1
package/dist/index.cjs
CHANGED
|
@@ -32,6 +32,7 @@ var index_exports = {};
|
|
|
32
32
|
__export(index_exports, {
|
|
33
33
|
AppShell: () => AppShell,
|
|
34
34
|
AuthCard: () => AuthCard,
|
|
35
|
+
BaseDialog: () => BaseDialog,
|
|
35
36
|
ColorPicker: () => ColorPicker,
|
|
36
37
|
Combobox: () => Combobox,
|
|
37
38
|
ConfirmDialog: () => ConfirmDialog,
|
|
@@ -443,10 +444,27 @@ function FormField({ label, htmlFor, error, required, children, className }) {
|
|
|
443
444
|
] });
|
|
444
445
|
}
|
|
445
446
|
|
|
446
|
-
// src/components/
|
|
447
|
+
// src/components/base-dialog.tsx
|
|
447
448
|
var Dialog = __toESM(require("@radix-ui/react-dialog"), 1);
|
|
448
449
|
var import_lucide_react2 = require("lucide-react");
|
|
450
|
+
var React2 = __toESM(require("react"), 1);
|
|
451
|
+
|
|
452
|
+
// src/hooks/use-is-desktop.ts
|
|
449
453
|
var React = __toESM(require("react"), 1);
|
|
454
|
+
var DESKTOP_QUERY = "(min-width: 640px)";
|
|
455
|
+
function useIsDesktop() {
|
|
456
|
+
const [isDesktop, setIsDesktop] = React.useState(
|
|
457
|
+
() => typeof window !== "undefined" ? window.matchMedia(DESKTOP_QUERY).matches : true
|
|
458
|
+
);
|
|
459
|
+
React.useEffect(() => {
|
|
460
|
+
const mql = window.matchMedia(DESKTOP_QUERY);
|
|
461
|
+
const onChange = () => setIsDesktop(mql.matches);
|
|
462
|
+
onChange();
|
|
463
|
+
mql.addEventListener("change", onChange);
|
|
464
|
+
return () => mql.removeEventListener("change", onChange);
|
|
465
|
+
}, []);
|
|
466
|
+
return isDesktop;
|
|
467
|
+
}
|
|
450
468
|
|
|
451
469
|
// src/lib/utils.ts
|
|
452
470
|
var import_clsx = require("clsx");
|
|
@@ -455,43 +473,8 @@ function cn(...inputs) {
|
|
|
455
473
|
return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
|
|
456
474
|
}
|
|
457
475
|
|
|
458
|
-
// src/components/
|
|
476
|
+
// src/components/base-dialog.tsx
|
|
459
477
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
460
|
-
function FormDialogLayout({
|
|
461
|
-
title,
|
|
462
|
-
children,
|
|
463
|
-
onSubmit,
|
|
464
|
-
submitLabel = "Salvar",
|
|
465
|
-
cancelLabel = "Cancelar",
|
|
466
|
-
onCancel,
|
|
467
|
-
isSubmitting = false,
|
|
468
|
-
isDisabled = false
|
|
469
|
-
}) {
|
|
470
|
-
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("form", { onSubmit, children: [
|
|
471
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex flex-col space-y-1.5 text-center sm:text-left", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h2", { className: "text-lg font-semibold leading-none tracking-tight", children: title }) }),
|
|
472
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "space-y-4 py-4", children }),
|
|
473
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
|
|
474
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
475
|
-
"button",
|
|
476
|
-
{
|
|
477
|
-
type: "button",
|
|
478
|
-
onClick: onCancel,
|
|
479
|
-
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 cursor-pointer disabled:pointer-events-none disabled:opacity-50",
|
|
480
|
-
children: cancelLabel
|
|
481
|
-
}
|
|
482
|
-
),
|
|
483
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
484
|
-
"button",
|
|
485
|
-
{
|
|
486
|
-
type: "submit",
|
|
487
|
-
disabled: isSubmitting || isDisabled,
|
|
488
|
-
className: "inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground shadow transition-colors hover:bg-primary/90 cursor-pointer disabled:pointer-events-none disabled:opacity-50",
|
|
489
|
-
children: isSubmitting ? "Salvando..." : submitLabel
|
|
490
|
-
}
|
|
491
|
-
)
|
|
492
|
-
] })
|
|
493
|
-
] });
|
|
494
|
-
}
|
|
495
478
|
var sizeClasses2 = {
|
|
496
479
|
sm: "sm:max-w-sm",
|
|
497
480
|
md: "sm:max-w-md",
|
|
@@ -499,18 +482,20 @@ var sizeClasses2 = {
|
|
|
499
482
|
xl: "sm:max-w-xl",
|
|
500
483
|
"2xl": "sm:max-w-2xl"
|
|
501
484
|
};
|
|
502
|
-
function
|
|
485
|
+
function BaseDialog({
|
|
503
486
|
open,
|
|
504
487
|
onOpenChange,
|
|
505
488
|
title,
|
|
506
489
|
description,
|
|
507
490
|
children,
|
|
508
491
|
footer,
|
|
509
|
-
onSubmit,
|
|
510
492
|
size = "lg",
|
|
511
|
-
className
|
|
493
|
+
className,
|
|
494
|
+
modal,
|
|
495
|
+
contentWrapper = (content) => content
|
|
512
496
|
}) {
|
|
513
|
-
|
|
497
|
+
const isDesktop = useIsDesktop();
|
|
498
|
+
React2.useEffect(() => {
|
|
514
499
|
if (open) return;
|
|
515
500
|
const id = window.setTimeout(() => {
|
|
516
501
|
if (document.body.style.pointerEvents === "none") {
|
|
@@ -537,7 +522,7 @@ function FormDialog({
|
|
|
537
522
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "min-h-0 flex-1 overflow-y-auto px-6 py-4", children }),
|
|
538
523
|
footer && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex shrink-0 flex-col-reverse gap-2 border-t px-6 py-3 sm:flex-row sm:justify-end", children: footer })
|
|
539
524
|
] });
|
|
540
|
-
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Dialog.Root, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Dialog.Portal, { children: [
|
|
525
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Dialog.Root, { open, onOpenChange, modal: modal ?? !isDesktop, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Dialog.Portal, { children: [
|
|
541
526
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Dialog.Overlay, { className: "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0" }),
|
|
542
527
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
543
528
|
Dialog.Content,
|
|
@@ -553,37 +538,77 @@ function FormDialog({
|
|
|
553
538
|
sizeClasses2[size],
|
|
554
539
|
className
|
|
555
540
|
),
|
|
556
|
-
children:
|
|
557
|
-
"form",
|
|
558
|
-
{
|
|
559
|
-
onSubmit,
|
|
560
|
-
className: "flex min-h-0 flex-1 flex-col",
|
|
561
|
-
children: body
|
|
562
|
-
}
|
|
563
|
-
) : body
|
|
541
|
+
children: contentWrapper(body)
|
|
564
542
|
}
|
|
565
543
|
)
|
|
566
544
|
] }) });
|
|
567
545
|
}
|
|
568
546
|
|
|
569
|
-
// src/components/
|
|
547
|
+
// src/components/form-dialog.tsx
|
|
570
548
|
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
549
|
+
function FormDialogLayout({
|
|
550
|
+
title,
|
|
551
|
+
children,
|
|
552
|
+
onSubmit,
|
|
553
|
+
submitLabel = "Salvar",
|
|
554
|
+
cancelLabel = "Cancelar",
|
|
555
|
+
onCancel,
|
|
556
|
+
isSubmitting = false,
|
|
557
|
+
isDisabled = false
|
|
558
|
+
}) {
|
|
559
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("form", { onSubmit, children: [
|
|
560
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex flex-col space-y-1.5 text-center sm:text-left", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("h2", { className: "text-lg font-semibold leading-none tracking-tight", children: title }) }),
|
|
561
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "space-y-4 py-4", children }),
|
|
562
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
|
|
563
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
564
|
+
"button",
|
|
565
|
+
{
|
|
566
|
+
type: "button",
|
|
567
|
+
onClick: onCancel,
|
|
568
|
+
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 cursor-pointer disabled:pointer-events-none disabled:opacity-50",
|
|
569
|
+
children: cancelLabel
|
|
570
|
+
}
|
|
571
|
+
),
|
|
572
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
573
|
+
"button",
|
|
574
|
+
{
|
|
575
|
+
type: "submit",
|
|
576
|
+
disabled: isSubmitting || isDisabled,
|
|
577
|
+
className: "inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground shadow transition-colors hover:bg-primary/90 cursor-pointer disabled:pointer-events-none disabled:opacity-50",
|
|
578
|
+
children: isSubmitting ? "Salvando..." : submitLabel
|
|
579
|
+
}
|
|
580
|
+
)
|
|
581
|
+
] })
|
|
582
|
+
] });
|
|
583
|
+
}
|
|
584
|
+
function FormDialog({ onSubmit, ...rest }) {
|
|
585
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
586
|
+
BaseDialog,
|
|
587
|
+
{
|
|
588
|
+
...rest,
|
|
589
|
+
contentWrapper: onSubmit ? (content) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("form", { onSubmit, className: "flex min-h-0 flex-1 flex-col", children: content }) : void 0
|
|
590
|
+
}
|
|
591
|
+
);
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
// src/components/auth-card.tsx
|
|
595
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
571
596
|
function AuthCard({ title, description, children, footer }) {
|
|
572
|
-
return /* @__PURE__ */ (0,
|
|
573
|
-
/* @__PURE__ */ (0,
|
|
574
|
-
/* @__PURE__ */ (0,
|
|
575
|
-
description && /* @__PURE__ */ (0,
|
|
597
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex min-h-screen items-center justify-center px-4", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "w-full max-w-sm rounded-lg border bg-card p-6 shadow-sm", children: [
|
|
598
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "mb-6 text-center", children: [
|
|
599
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("h1", { className: "text-2xl font-semibold tracking-tight", children: title }),
|
|
600
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: description })
|
|
576
601
|
] }),
|
|
577
|
-
/* @__PURE__ */ (0,
|
|
578
|
-
footer && /* @__PURE__ */ (0,
|
|
602
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "space-y-4", children }),
|
|
603
|
+
footer && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "mt-4", children: footer })
|
|
579
604
|
] }) });
|
|
580
605
|
}
|
|
581
606
|
|
|
582
607
|
// src/components/pagination.tsx
|
|
583
|
-
var
|
|
608
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
584
609
|
function Pagination({ page, onPageChange, hasNextPage, hasPreviousPage, className }) {
|
|
585
|
-
return /* @__PURE__ */ (0,
|
|
586
|
-
/* @__PURE__ */ (0,
|
|
610
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: `flex items-center justify-end gap-4 ${className ?? ""}`, children: [
|
|
611
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
587
612
|
"button",
|
|
588
613
|
{
|
|
589
614
|
type: "button",
|
|
@@ -593,11 +618,11 @@ function Pagination({ page, onPageChange, hasNextPage, hasPreviousPage, classNam
|
|
|
593
618
|
children: "Anterior"
|
|
594
619
|
}
|
|
595
620
|
),
|
|
596
|
-
/* @__PURE__ */ (0,
|
|
621
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "text-sm text-muted-foreground", children: [
|
|
597
622
|
"P\xE1gina ",
|
|
598
623
|
page
|
|
599
624
|
] }),
|
|
600
|
-
/* @__PURE__ */ (0,
|
|
625
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
601
626
|
"button",
|
|
602
627
|
{
|
|
603
628
|
type: "button",
|
|
@@ -611,18 +636,18 @@ function Pagination({ page, onPageChange, hasNextPage, hasPreviousPage, classNam
|
|
|
611
636
|
}
|
|
612
637
|
|
|
613
638
|
// src/components/table-skeleton.tsx
|
|
614
|
-
var
|
|
639
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
615
640
|
function TableSkeleton({ rows = 5, columns = 4 }) {
|
|
616
|
-
return /* @__PURE__ */ (0,
|
|
641
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_jsx_runtime14.Fragment, { children: Array.from({ length: rows }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("tr", { className: "border-b transition-colors", children: Array.from({ length: columns }).map((_2, j) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("td", { className: "p-4 align-middle", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "h-5 w-full animate-pulse rounded bg-muted" }) }, j)) }, i)) });
|
|
617
642
|
}
|
|
618
643
|
|
|
619
644
|
// src/components/search-input.tsx
|
|
620
|
-
var
|
|
621
|
-
var
|
|
622
|
-
var SearchInput =
|
|
645
|
+
var React3 = __toESM(require("react"), 1);
|
|
646
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
647
|
+
var SearchInput = React3.forwardRef(
|
|
623
648
|
({ containerClassName, className, ...props }, ref) => {
|
|
624
|
-
return /* @__PURE__ */ (0,
|
|
625
|
-
/* @__PURE__ */ (0,
|
|
649
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: `relative flex-1 ${containerClassName ?? ""}`, children: [
|
|
650
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
|
|
626
651
|
"svg",
|
|
627
652
|
{
|
|
628
653
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -636,12 +661,12 @@ var SearchInput = React2.forwardRef(
|
|
|
636
661
|
strokeLinejoin: "round",
|
|
637
662
|
className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground",
|
|
638
663
|
children: [
|
|
639
|
-
/* @__PURE__ */ (0,
|
|
640
|
-
/* @__PURE__ */ (0,
|
|
664
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("circle", { cx: "11", cy: "11", r: "8" }),
|
|
665
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("path", { d: "m21 21-4.3-4.3" })
|
|
641
666
|
]
|
|
642
667
|
}
|
|
643
668
|
),
|
|
644
|
-
/* @__PURE__ */ (0,
|
|
669
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
645
670
|
"input",
|
|
646
671
|
{
|
|
647
672
|
ref,
|
|
@@ -657,12 +682,12 @@ SearchInput.displayName = "SearchInput";
|
|
|
657
682
|
|
|
658
683
|
// src/components/password-input.tsx
|
|
659
684
|
var import_lucide_react3 = require("lucide-react");
|
|
660
|
-
var
|
|
661
|
-
var
|
|
662
|
-
var PasswordInput =
|
|
663
|
-
const [visible, setVisible] =
|
|
664
|
-
return /* @__PURE__ */ (0,
|
|
665
|
-
/* @__PURE__ */ (0,
|
|
685
|
+
var React4 = __toESM(require("react"), 1);
|
|
686
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
687
|
+
var PasswordInput = React4.forwardRef(({ containerClassName, className, ...props }, ref) => {
|
|
688
|
+
const [visible, setVisible] = React4.useState(false);
|
|
689
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: `relative ${containerClassName ?? ""}`, children: [
|
|
690
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
666
691
|
"input",
|
|
667
692
|
{
|
|
668
693
|
ref,
|
|
@@ -671,7 +696,7 @@ var PasswordInput = React3.forwardRef(({ containerClassName, className, ...props
|
|
|
671
696
|
...props
|
|
672
697
|
}
|
|
673
698
|
),
|
|
674
|
-
/* @__PURE__ */ (0,
|
|
699
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
675
700
|
"button",
|
|
676
701
|
{
|
|
677
702
|
type: "button",
|
|
@@ -679,7 +704,7 @@ var PasswordInput = React3.forwardRef(({ containerClassName, className, ...props
|
|
|
679
704
|
"aria-label": visible ? "Ocultar senha" : "Mostrar senha",
|
|
680
705
|
tabIndex: -1,
|
|
681
706
|
className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground transition-colors hover:text-foreground",
|
|
682
|
-
children: visible ? /* @__PURE__ */ (0,
|
|
707
|
+
children: visible ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react3.EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react3.Eye, { className: "h-4 w-4" })
|
|
683
708
|
}
|
|
684
709
|
)
|
|
685
710
|
] });
|
|
@@ -694,21 +719,21 @@ var React6 = __toESM(require("react"), 1);
|
|
|
694
719
|
var import_vaul = require("vaul");
|
|
695
720
|
|
|
696
721
|
// src/hooks/use-infinite-scroll-sentinel.ts
|
|
697
|
-
var
|
|
722
|
+
var React5 = __toESM(require("react"), 1);
|
|
698
723
|
function useInfiniteScrollSentinel({
|
|
699
724
|
enabled,
|
|
700
725
|
loading,
|
|
701
726
|
onLoadMore
|
|
702
727
|
}) {
|
|
703
|
-
const listRef =
|
|
704
|
-
const sentinelRef =
|
|
705
|
-
const loadingRef =
|
|
706
|
-
const onLoadMoreRef =
|
|
707
|
-
|
|
728
|
+
const listRef = React5.useRef(null);
|
|
729
|
+
const sentinelRef = React5.useRef(null);
|
|
730
|
+
const loadingRef = React5.useRef(loading);
|
|
731
|
+
const onLoadMoreRef = React5.useRef(onLoadMore);
|
|
732
|
+
React5.useEffect(() => {
|
|
708
733
|
loadingRef.current = loading;
|
|
709
734
|
onLoadMoreRef.current = onLoadMore;
|
|
710
735
|
});
|
|
711
|
-
|
|
736
|
+
React5.useEffect(() => {
|
|
712
737
|
if (!enabled) return;
|
|
713
738
|
const root = listRef.current;
|
|
714
739
|
const sentinel = sentinelRef.current;
|
|
@@ -727,25 +752,8 @@ function useInfiniteScrollSentinel({
|
|
|
727
752
|
return { listRef, sentinelRef };
|
|
728
753
|
}
|
|
729
754
|
|
|
730
|
-
// src/hooks/use-is-desktop.ts
|
|
731
|
-
var React5 = __toESM(require("react"), 1);
|
|
732
|
-
var DESKTOP_QUERY = "(min-width: 640px)";
|
|
733
|
-
function useIsDesktop() {
|
|
734
|
-
const [isDesktop, setIsDesktop] = React5.useState(
|
|
735
|
-
() => typeof window !== "undefined" ? window.matchMedia(DESKTOP_QUERY).matches : true
|
|
736
|
-
);
|
|
737
|
-
React5.useEffect(() => {
|
|
738
|
-
const mql = window.matchMedia(DESKTOP_QUERY);
|
|
739
|
-
const onChange = () => setIsDesktop(mql.matches);
|
|
740
|
-
onChange();
|
|
741
|
-
mql.addEventListener("change", onChange);
|
|
742
|
-
return () => mql.removeEventListener("change", onChange);
|
|
743
|
-
}, []);
|
|
744
|
-
return isDesktop;
|
|
745
|
-
}
|
|
746
|
-
|
|
747
755
|
// src/components/combobox.tsx
|
|
748
|
-
var
|
|
756
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
749
757
|
function Combobox({
|
|
750
758
|
options,
|
|
751
759
|
value,
|
|
@@ -792,7 +800,7 @@ function Combobox({
|
|
|
792
800
|
loading,
|
|
793
801
|
onLoadMore
|
|
794
802
|
});
|
|
795
|
-
const trigger = /* @__PURE__ */ (0,
|
|
803
|
+
const trigger = /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
796
804
|
"button",
|
|
797
805
|
{
|
|
798
806
|
type: "button",
|
|
@@ -807,20 +815,20 @@ function Combobox({
|
|
|
807
815
|
className
|
|
808
816
|
),
|
|
809
817
|
children: [
|
|
810
|
-
/* @__PURE__ */ (0,
|
|
811
|
-
/* @__PURE__ */ (0,
|
|
818
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: cn("truncate", !selected && "text-muted-foreground"), children: selected ? selected.label : placeholder }),
|
|
819
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50" })
|
|
812
820
|
]
|
|
813
821
|
}
|
|
814
822
|
);
|
|
815
|
-
const command = /* @__PURE__ */ (0,
|
|
823
|
+
const command = /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
816
824
|
import_cmdk.Command,
|
|
817
825
|
{
|
|
818
826
|
shouldFilter: !isServer,
|
|
819
827
|
className: "flex h-full w-full flex-col overflow-hidden",
|
|
820
828
|
children: [
|
|
821
|
-
/* @__PURE__ */ (0,
|
|
822
|
-
/* @__PURE__ */ (0,
|
|
823
|
-
/* @__PURE__ */ (0,
|
|
829
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center border-b px-3", children: [
|
|
830
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
|
|
831
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
824
832
|
import_cmdk.Command.Input,
|
|
825
833
|
{
|
|
826
834
|
placeholder: searchPlaceholder,
|
|
@@ -829,28 +837,28 @@ function Combobox({
|
|
|
829
837
|
}
|
|
830
838
|
)
|
|
831
839
|
] }),
|
|
832
|
-
/* @__PURE__ */ (0,
|
|
840
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
833
841
|
import_cmdk.Command.List,
|
|
834
842
|
{
|
|
835
843
|
ref: listRef,
|
|
836
844
|
className: "max-h-[50vh] overflow-y-auto overflow-x-hidden p-1 sm:max-h-60",
|
|
837
845
|
children: [
|
|
838
|
-
!isServer && !showCreate && /* @__PURE__ */ (0,
|
|
839
|
-
showCreate && /* @__PURE__ */ (0,
|
|
846
|
+
!isServer && !showCreate && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_cmdk.Command.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
|
|
847
|
+
showCreate && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
840
848
|
import_cmdk.Command.Item,
|
|
841
849
|
{
|
|
842
850
|
value: trimmedSearch,
|
|
843
851
|
onSelect: () => handleSelect(trimmedSearch),
|
|
844
852
|
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",
|
|
845
853
|
children: [
|
|
846
|
-
/* @__PURE__ */ (0,
|
|
847
|
-
/* @__PURE__ */ (0,
|
|
854
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.Plus, { className: "h-4 w-4 shrink-0" }),
|
|
855
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "truncate", children: (formatCreateLabel ?? ((text) => `Usar "${text}"`))(
|
|
848
856
|
trimmedSearch
|
|
849
857
|
) })
|
|
850
858
|
]
|
|
851
859
|
}
|
|
852
860
|
),
|
|
853
|
-
options.map((option) => /* @__PURE__ */ (0,
|
|
861
|
+
options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
854
862
|
import_cmdk.Command.Item,
|
|
855
863
|
{
|
|
856
864
|
value: isServer ? option.value : option.label,
|
|
@@ -858,7 +866,7 @@ function Combobox({
|
|
|
858
866
|
onSelect: () => handleSelect(option.value),
|
|
859
867
|
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",
|
|
860
868
|
children: [
|
|
861
|
-
/* @__PURE__ */ (0,
|
|
869
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
862
870
|
import_lucide_react4.Check,
|
|
863
871
|
{
|
|
864
872
|
className: cn(
|
|
@@ -867,14 +875,14 @@ function Combobox({
|
|
|
867
875
|
)
|
|
868
876
|
}
|
|
869
877
|
),
|
|
870
|
-
/* @__PURE__ */ (0,
|
|
878
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "truncate", children: option.label })
|
|
871
879
|
]
|
|
872
880
|
},
|
|
873
881
|
option.value
|
|
874
882
|
)),
|
|
875
|
-
isServer && !loading && options.length === 0 && /* @__PURE__ */ (0,
|
|
876
|
-
isServer && loading && /* @__PURE__ */ (0,
|
|
877
|
-
isServer && hasMore && /* @__PURE__ */ (0,
|
|
883
|
+
isServer && !loading && options.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
|
|
884
|
+
isServer && loading && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex items-center justify-center py-6", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.Loader2, { className: "h-4 w-4 animate-spin text-muted-foreground" }) }),
|
|
885
|
+
isServer && hasMore && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1" })
|
|
878
886
|
]
|
|
879
887
|
}
|
|
880
888
|
)
|
|
@@ -882,9 +890,9 @@ function Combobox({
|
|
|
882
890
|
}
|
|
883
891
|
);
|
|
884
892
|
if (isDesktop) {
|
|
885
|
-
return /* @__PURE__ */ (0,
|
|
886
|
-
/* @__PURE__ */ (0,
|
|
887
|
-
/* @__PURE__ */ (0,
|
|
893
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(PopoverPrimitive.Root, { open, onOpenChange: handleOpenChange, children: [
|
|
894
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(PopoverPrimitive.Trigger, { asChild: true, children: trigger }),
|
|
895
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(PopoverPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
888
896
|
PopoverPrimitive.Content,
|
|
889
897
|
{
|
|
890
898
|
align: "start",
|
|
@@ -896,13 +904,13 @@ function Combobox({
|
|
|
896
904
|
) })
|
|
897
905
|
] });
|
|
898
906
|
}
|
|
899
|
-
return /* @__PURE__ */ (0,
|
|
900
|
-
/* @__PURE__ */ (0,
|
|
901
|
-
/* @__PURE__ */ (0,
|
|
902
|
-
/* @__PURE__ */ (0,
|
|
903
|
-
/* @__PURE__ */ (0,
|
|
904
|
-
/* @__PURE__ */ (0,
|
|
905
|
-
/* @__PURE__ */ (0,
|
|
907
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_vaul.Drawer.Root, { open, onOpenChange: handleOpenChange, children: [
|
|
908
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_vaul.Drawer.Trigger, { asChild: true, children: trigger }),
|
|
909
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_vaul.Drawer.Portal, { children: [
|
|
910
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_vaul.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
911
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_vaul.Drawer.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85vh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
|
|
912
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_vaul.Drawer.Title, { className: "sr-only", children: placeholder }),
|
|
913
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
906
914
|
command
|
|
907
915
|
] })
|
|
908
916
|
] })
|
|
@@ -915,7 +923,7 @@ var import_cmdk2 = require("cmdk");
|
|
|
915
923
|
var import_lucide_react5 = require("lucide-react");
|
|
916
924
|
var React7 = __toESM(require("react"), 1);
|
|
917
925
|
var import_vaul2 = require("vaul");
|
|
918
|
-
var
|
|
926
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
919
927
|
function MultiCombobox({
|
|
920
928
|
options,
|
|
921
929
|
value,
|
|
@@ -956,7 +964,7 @@ function MultiCombobox({
|
|
|
956
964
|
const removeValue = (optionValue) => {
|
|
957
965
|
onChange(value.filter((v) => v !== optionValue));
|
|
958
966
|
};
|
|
959
|
-
const trigger = /* @__PURE__ */ (0,
|
|
967
|
+
const trigger = /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
960
968
|
"div",
|
|
961
969
|
{
|
|
962
970
|
id,
|
|
@@ -978,13 +986,13 @@ function MultiCombobox({
|
|
|
978
986
|
className
|
|
979
987
|
),
|
|
980
988
|
children: [
|
|
981
|
-
selected.length === 0 ? /* @__PURE__ */ (0,
|
|
989
|
+
selected.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-muted-foreground", children: placeholder }) : selected.map((option) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
982
990
|
"span",
|
|
983
991
|
{
|
|
984
992
|
className: "inline-flex items-center gap-1 rounded bg-secondary px-1.5 py-0.5 text-xs text-secondary-foreground",
|
|
985
993
|
children: [
|
|
986
994
|
option.label,
|
|
987
|
-
/* @__PURE__ */ (0,
|
|
995
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
988
996
|
"button",
|
|
989
997
|
{
|
|
990
998
|
type: "button",
|
|
@@ -996,26 +1004,26 @@ function MultiCombobox({
|
|
|
996
1004
|
},
|
|
997
1005
|
onPointerDown: (event) => event.stopPropagation(),
|
|
998
1006
|
className: "rounded-sm opacity-60 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
999
|
-
children: /* @__PURE__ */ (0,
|
|
1007
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.X, { className: "h-3 w-3" })
|
|
1000
1008
|
}
|
|
1001
1009
|
)
|
|
1002
1010
|
]
|
|
1003
1011
|
},
|
|
1004
1012
|
option.value
|
|
1005
1013
|
)),
|
|
1006
|
-
/* @__PURE__ */ (0,
|
|
1014
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.ChevronsUpDown, { className: "ml-auto h-4 w-4 shrink-0 opacity-50" })
|
|
1007
1015
|
]
|
|
1008
1016
|
}
|
|
1009
1017
|
);
|
|
1010
|
-
const command = /* @__PURE__ */ (0,
|
|
1018
|
+
const command = /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
1011
1019
|
import_cmdk2.Command,
|
|
1012
1020
|
{
|
|
1013
1021
|
shouldFilter: !isServer,
|
|
1014
1022
|
className: "flex h-full w-full flex-col overflow-hidden",
|
|
1015
1023
|
children: [
|
|
1016
|
-
/* @__PURE__ */ (0,
|
|
1017
|
-
/* @__PURE__ */ (0,
|
|
1018
|
-
/* @__PURE__ */ (0,
|
|
1024
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex items-center border-b px-3", children: [
|
|
1025
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
|
|
1026
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1019
1027
|
import_cmdk2.Command.Input,
|
|
1020
1028
|
{
|
|
1021
1029
|
placeholder: searchPlaceholder,
|
|
@@ -1024,14 +1032,14 @@ function MultiCombobox({
|
|
|
1024
1032
|
}
|
|
1025
1033
|
)
|
|
1026
1034
|
] }),
|
|
1027
|
-
/* @__PURE__ */ (0,
|
|
1035
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
1028
1036
|
import_cmdk2.Command.List,
|
|
1029
1037
|
{
|
|
1030
1038
|
ref: listRef,
|
|
1031
1039
|
className: "max-h-[50vh] overflow-y-auto overflow-x-hidden p-1 sm:max-h-60",
|
|
1032
1040
|
children: [
|
|
1033
|
-
!isServer && /* @__PURE__ */ (0,
|
|
1034
|
-
options.map((option) => /* @__PURE__ */ (0,
|
|
1041
|
+
!isServer && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_cmdk2.Command.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
|
|
1042
|
+
options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
1035
1043
|
import_cmdk2.Command.Item,
|
|
1036
1044
|
{
|
|
1037
1045
|
value: isServer ? option.value : option.label,
|
|
@@ -1039,7 +1047,7 @@ function MultiCombobox({
|
|
|
1039
1047
|
onSelect: () => toggleValue(option.value),
|
|
1040
1048
|
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",
|
|
1041
1049
|
children: [
|
|
1042
|
-
/* @__PURE__ */ (0,
|
|
1050
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1043
1051
|
import_lucide_react5.Check,
|
|
1044
1052
|
{
|
|
1045
1053
|
className: cn(
|
|
@@ -1048,14 +1056,14 @@ function MultiCombobox({
|
|
|
1048
1056
|
)
|
|
1049
1057
|
}
|
|
1050
1058
|
),
|
|
1051
|
-
/* @__PURE__ */ (0,
|
|
1059
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "truncate", children: option.label })
|
|
1052
1060
|
]
|
|
1053
1061
|
},
|
|
1054
1062
|
option.value
|
|
1055
1063
|
)),
|
|
1056
|
-
isServer && !loading && options.length === 0 && /* @__PURE__ */ (0,
|
|
1057
|
-
isServer && loading && /* @__PURE__ */ (0,
|
|
1058
|
-
isServer && hasMore && /* @__PURE__ */ (0,
|
|
1064
|
+
isServer && !loading && options.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
|
|
1065
|
+
isServer && loading && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "flex items-center justify-center py-6", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.Loader2, { className: "h-4 w-4 animate-spin text-muted-foreground" }) }),
|
|
1066
|
+
isServer && hasMore && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { ref: sentinelRef, "aria-hidden": true, className: "h-1" })
|
|
1059
1067
|
]
|
|
1060
1068
|
}
|
|
1061
1069
|
)
|
|
@@ -1063,9 +1071,9 @@ function MultiCombobox({
|
|
|
1063
1071
|
}
|
|
1064
1072
|
);
|
|
1065
1073
|
if (isDesktop) {
|
|
1066
|
-
return /* @__PURE__ */ (0,
|
|
1067
|
-
/* @__PURE__ */ (0,
|
|
1068
|
-
/* @__PURE__ */ (0,
|
|
1074
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(PopoverPrimitive2.Root, { open, onOpenChange: setOpen, children: [
|
|
1075
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(PopoverPrimitive2.Trigger, { asChild: true, disabled, children: trigger }),
|
|
1076
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(PopoverPrimitive2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1069
1077
|
PopoverPrimitive2.Content,
|
|
1070
1078
|
{
|
|
1071
1079
|
align: "start",
|
|
@@ -1077,13 +1085,13 @@ function MultiCombobox({
|
|
|
1077
1085
|
) })
|
|
1078
1086
|
] });
|
|
1079
1087
|
}
|
|
1080
|
-
return /* @__PURE__ */ (0,
|
|
1081
|
-
/* @__PURE__ */ (0,
|
|
1082
|
-
/* @__PURE__ */ (0,
|
|
1083
|
-
/* @__PURE__ */ (0,
|
|
1084
|
-
/* @__PURE__ */ (0,
|
|
1085
|
-
/* @__PURE__ */ (0,
|
|
1086
|
-
/* @__PURE__ */ (0,
|
|
1088
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_vaul2.Drawer.Root, { open, onOpenChange: setOpen, children: [
|
|
1089
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_vaul2.Drawer.Trigger, { asChild: true, disabled, children: trigger }),
|
|
1090
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_vaul2.Drawer.Portal, { children: [
|
|
1091
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_vaul2.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
1092
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_vaul2.Drawer.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85vh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
|
|
1093
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_vaul2.Drawer.Title, { className: "sr-only", children: placeholder }),
|
|
1094
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
1087
1095
|
command
|
|
1088
1096
|
] })
|
|
1089
1097
|
] })
|
|
@@ -1095,7 +1103,7 @@ var PopoverPrimitive3 = __toESM(require("@radix-ui/react-popover"), 1);
|
|
|
1095
1103
|
var import_lucide_react6 = require("lucide-react");
|
|
1096
1104
|
var React8 = __toESM(require("react"), 1);
|
|
1097
1105
|
var import_react_colorful = require("react-colorful");
|
|
1098
|
-
var
|
|
1106
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1099
1107
|
function ColorPicker({
|
|
1100
1108
|
value,
|
|
1101
1109
|
onChange,
|
|
@@ -1108,8 +1116,8 @@ function ColorPicker({
|
|
|
1108
1116
|
}) {
|
|
1109
1117
|
const [open, setOpen] = React8.useState(false);
|
|
1110
1118
|
const color = value || "";
|
|
1111
|
-
return /* @__PURE__ */ (0,
|
|
1112
|
-
/* @__PURE__ */ (0,
|
|
1119
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(PopoverPrimitive3.Root, { open, onOpenChange: setOpen, children: [
|
|
1120
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(PopoverPrimitive3.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
1113
1121
|
"button",
|
|
1114
1122
|
{
|
|
1115
1123
|
type: "button",
|
|
@@ -1122,8 +1130,8 @@ function ColorPicker({
|
|
|
1122
1130
|
className
|
|
1123
1131
|
),
|
|
1124
1132
|
children: [
|
|
1125
|
-
/* @__PURE__ */ (0,
|
|
1126
|
-
/* @__PURE__ */ (0,
|
|
1133
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { className: "flex items-center gap-2 truncate", children: [
|
|
1134
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1127
1135
|
"span",
|
|
1128
1136
|
{
|
|
1129
1137
|
"aria-hidden": true,
|
|
@@ -1136,23 +1144,23 @@ function ColorPicker({
|
|
|
1136
1144
|
}
|
|
1137
1145
|
}
|
|
1138
1146
|
),
|
|
1139
|
-
/* @__PURE__ */ (0,
|
|
1147
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: cn("truncate", !color && "text-muted-foreground"), children: color || placeholder })
|
|
1140
1148
|
] }),
|
|
1141
|
-
/* @__PURE__ */ (0,
|
|
1149
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react6.ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50" })
|
|
1142
1150
|
]
|
|
1143
1151
|
}
|
|
1144
1152
|
) }),
|
|
1145
|
-
/* @__PURE__ */ (0,
|
|
1153
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(PopoverPrimitive3.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1146
1154
|
PopoverPrimitive3.Content,
|
|
1147
1155
|
{
|
|
1148
1156
|
align: "start",
|
|
1149
1157
|
sideOffset: 4,
|
|
1150
1158
|
className: "z-50 w-56 rounded-md border bg-popover p-3 text-popover-foreground shadow-md",
|
|
1151
|
-
children: /* @__PURE__ */ (0,
|
|
1152
|
-
/* @__PURE__ */ (0,
|
|
1153
|
-
/* @__PURE__ */ (0,
|
|
1154
|
-
/* @__PURE__ */ (0,
|
|
1155
|
-
/* @__PURE__ */ (0,
|
|
1159
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "mh-color-picker flex flex-col gap-3", children: [
|
|
1160
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_colorful.HexColorPicker, { color, onChange }),
|
|
1161
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
1162
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "text-sm text-muted-foreground", children: "#" }),
|
|
1163
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1156
1164
|
import_react_colorful.HexColorInput,
|
|
1157
1165
|
{
|
|
1158
1166
|
color,
|
|
@@ -1169,30 +1177,30 @@ function ColorPicker({
|
|
|
1169
1177
|
}
|
|
1170
1178
|
|
|
1171
1179
|
// src/components/stat-card.tsx
|
|
1172
|
-
var
|
|
1180
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
1173
1181
|
function StatCard({ label, value, detail, icon, isLoading }) {
|
|
1174
1182
|
if (isLoading) {
|
|
1175
|
-
return /* @__PURE__ */ (0,
|
|
1176
|
-
/* @__PURE__ */ (0,
|
|
1177
|
-
/* @__PURE__ */ (0,
|
|
1178
|
-
/* @__PURE__ */ (0,
|
|
1183
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
|
|
1184
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex items-center justify-between pb-2", children: [
|
|
1185
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
|
|
1186
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "h-4 w-4 animate-pulse rounded bg-muted" })
|
|
1179
1187
|
] }),
|
|
1180
|
-
/* @__PURE__ */ (0,
|
|
1181
|
-
/* @__PURE__ */ (0,
|
|
1188
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "mt-2 h-7 w-16 animate-pulse rounded bg-muted" }),
|
|
1189
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "mt-1 h-4 w-20 animate-pulse rounded bg-muted" })
|
|
1182
1190
|
] });
|
|
1183
1191
|
}
|
|
1184
|
-
return /* @__PURE__ */ (0,
|
|
1185
|
-
/* @__PURE__ */ (0,
|
|
1186
|
-
/* @__PURE__ */ (0,
|
|
1187
|
-
icon && /* @__PURE__ */ (0,
|
|
1192
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
|
|
1193
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex items-center justify-between pb-2", children: [
|
|
1194
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-sm font-medium text-muted-foreground", children: label }),
|
|
1195
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-muted-foreground", children: icon })
|
|
1188
1196
|
] }),
|
|
1189
|
-
/* @__PURE__ */ (0,
|
|
1190
|
-
detail && /* @__PURE__ */ (0,
|
|
1197
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "text-2xl font-bold", children: value }),
|
|
1198
|
+
detail && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-xs text-muted-foreground", children: detail })
|
|
1191
1199
|
] });
|
|
1192
1200
|
}
|
|
1193
1201
|
|
|
1194
1202
|
// src/components/data-table-wrapper.tsx
|
|
1195
|
-
var
|
|
1203
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
1196
1204
|
function DataTableWrapper({
|
|
1197
1205
|
children,
|
|
1198
1206
|
isEmpty,
|
|
@@ -1205,15 +1213,15 @@ function DataTableWrapper({
|
|
|
1205
1213
|
hasNextPage = false,
|
|
1206
1214
|
hasPreviousPage = false
|
|
1207
1215
|
}) {
|
|
1208
|
-
return /* @__PURE__ */ (0,
|
|
1209
|
-
/* @__PURE__ */ (0,
|
|
1210
|
-
!isLoading && isEmpty && /* @__PURE__ */ (0,
|
|
1211
|
-
emptyIcon && /* @__PURE__ */ (0,
|
|
1212
|
-
/* @__PURE__ */ (0,
|
|
1213
|
-
emptyDescription && /* @__PURE__ */ (0,
|
|
1216
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-4", children: [
|
|
1217
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "overflow-x-auto rounded-md border", children }),
|
|
1218
|
+
!isLoading && isEmpty && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
|
|
1219
|
+
emptyIcon && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
|
|
1220
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
|
|
1221
|
+
emptyDescription && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
|
|
1214
1222
|
] }),
|
|
1215
|
-
page !== void 0 && onPageChange && /* @__PURE__ */ (0,
|
|
1216
|
-
/* @__PURE__ */ (0,
|
|
1223
|
+
page !== void 0 && onPageChange && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center justify-end gap-4", children: [
|
|
1224
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1217
1225
|
"button",
|
|
1218
1226
|
{
|
|
1219
1227
|
type: "button",
|
|
@@ -1223,11 +1231,11 @@ function DataTableWrapper({
|
|
|
1223
1231
|
children: "Anterior"
|
|
1224
1232
|
}
|
|
1225
1233
|
),
|
|
1226
|
-
/* @__PURE__ */ (0,
|
|
1234
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("span", { className: "text-sm text-muted-foreground", children: [
|
|
1227
1235
|
"P\xE1gina ",
|
|
1228
1236
|
page
|
|
1229
1237
|
] }),
|
|
1230
|
-
/* @__PURE__ */ (0,
|
|
1238
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1231
1239
|
"button",
|
|
1232
1240
|
{
|
|
1233
1241
|
type: "button",
|
|
@@ -1243,7 +1251,7 @@ function DataTableWrapper({
|
|
|
1243
1251
|
|
|
1244
1252
|
// src/components/mobile-card-list.tsx
|
|
1245
1253
|
var import_react4 = require("react");
|
|
1246
|
-
var
|
|
1254
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
1247
1255
|
var SCROLL_THRESHOLD = 8;
|
|
1248
1256
|
function MobileCardList({
|
|
1249
1257
|
data,
|
|
@@ -1274,26 +1282,26 @@ function MobileCardList({
|
|
|
1274
1282
|
}
|
|
1275
1283
|
};
|
|
1276
1284
|
if (isLoading) {
|
|
1277
|
-
return /* @__PURE__ */ (0,
|
|
1278
|
-
/* @__PURE__ */ (0,
|
|
1279
|
-
/* @__PURE__ */ (0,
|
|
1280
|
-
/* @__PURE__ */ (0,
|
|
1285
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: `space-y-3 ${className ?? ""}`, children: Array.from({ length: loadingCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "rounded-xl border p-4", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "space-y-3", children: [
|
|
1286
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex justify-between", children: [
|
|
1287
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "h-5 w-32 animate-pulse rounded bg-muted" }),
|
|
1288
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "h-5 w-16 animate-pulse rounded bg-muted" })
|
|
1281
1289
|
] }),
|
|
1282
|
-
/* @__PURE__ */ (0,
|
|
1283
|
-
/* @__PURE__ */ (0,
|
|
1284
|
-
/* @__PURE__ */ (0,
|
|
1285
|
-
/* @__PURE__ */ (0,
|
|
1290
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "h-4 w-48 animate-pulse rounded bg-muted" }),
|
|
1291
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex justify-between", children: [
|
|
1292
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
|
|
1293
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" })
|
|
1286
1294
|
] })
|
|
1287
1295
|
] }) }, i)) });
|
|
1288
1296
|
}
|
|
1289
|
-
return /* @__PURE__ */ (0,
|
|
1297
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
1290
1298
|
"div",
|
|
1291
1299
|
{
|
|
1292
1300
|
className: `space-y-3 ${className ?? ""}`,
|
|
1293
1301
|
onTouchStart,
|
|
1294
1302
|
onTouchMove,
|
|
1295
1303
|
onClickCapture,
|
|
1296
|
-
children: data.map((item, index) => /* @__PURE__ */ (0,
|
|
1304
|
+
children: data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
1297
1305
|
"div",
|
|
1298
1306
|
{
|
|
1299
1307
|
className: "rounded-xl border p-4 transition-all duration-150 hover:border-foreground/20 active:scale-[0.99]",
|
|
@@ -1306,7 +1314,7 @@ function MobileCardList({
|
|
|
1306
1314
|
}
|
|
1307
1315
|
|
|
1308
1316
|
// src/components/responsive-data-view.tsx
|
|
1309
|
-
var
|
|
1317
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
1310
1318
|
function ResponsiveDataView({
|
|
1311
1319
|
table,
|
|
1312
1320
|
cards,
|
|
@@ -1317,13 +1325,13 @@ function ResponsiveDataView({
|
|
|
1317
1325
|
emptyDescription,
|
|
1318
1326
|
pagination
|
|
1319
1327
|
}) {
|
|
1320
|
-
return /* @__PURE__ */ (0,
|
|
1321
|
-
/* @__PURE__ */ (0,
|
|
1322
|
-
/* @__PURE__ */ (0,
|
|
1323
|
-
!isLoading && isEmpty && /* @__PURE__ */ (0,
|
|
1324
|
-
emptyIcon && /* @__PURE__ */ (0,
|
|
1325
|
-
/* @__PURE__ */ (0,
|
|
1326
|
-
emptyDescription && /* @__PURE__ */ (0,
|
|
1328
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-4", children: [
|
|
1329
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "hidden overflow-x-auto rounded-md border md:block", children: table }),
|
|
1330
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "md:hidden", children: cards }),
|
|
1331
|
+
!isLoading && isEmpty && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
|
|
1332
|
+
emptyIcon && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
|
|
1333
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
|
|
1334
|
+
emptyDescription && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
|
|
1327
1335
|
] }),
|
|
1328
1336
|
pagination
|
|
1329
1337
|
] });
|
|
@@ -1331,10 +1339,10 @@ function ResponsiveDataView({
|
|
|
1331
1339
|
|
|
1332
1340
|
// src/components/toaster.tsx
|
|
1333
1341
|
var import_sonner = require("sonner");
|
|
1334
|
-
var
|
|
1342
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
1335
1343
|
function Toaster(props) {
|
|
1336
1344
|
const { theme = "system" } = useTheme();
|
|
1337
|
-
return /* @__PURE__ */ (0,
|
|
1345
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
1338
1346
|
import_sonner.Toaster,
|
|
1339
1347
|
{
|
|
1340
1348
|
theme,
|
|
@@ -1362,11 +1370,11 @@ var import_react7 = require("react");
|
|
|
1362
1370
|
var import_react5 = require("react");
|
|
1363
1371
|
|
|
1364
1372
|
// src/components/types.tsx
|
|
1365
|
-
var
|
|
1366
|
-
var defaultRenderLink = ({ children, ...props }) => /* @__PURE__ */ (0,
|
|
1373
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
1374
|
+
var defaultRenderLink = ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("a", { ...props, children });
|
|
1367
1375
|
|
|
1368
1376
|
// src/components/sidebar-nav.tsx
|
|
1369
|
-
var
|
|
1377
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
1370
1378
|
function defaultIsActive(item, activePath) {
|
|
1371
1379
|
if (item.href === "/") return activePath === "/";
|
|
1372
1380
|
return activePath === item.href || activePath.startsWith(item.href + "/");
|
|
@@ -1381,7 +1389,7 @@ function SidebarNav({
|
|
|
1381
1389
|
onNavigate
|
|
1382
1390
|
}) {
|
|
1383
1391
|
const visible = items.filter((item) => !item.adminOnly || isAdmin);
|
|
1384
|
-
return /* @__PURE__ */ (0,
|
|
1392
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("nav", { className: "flex flex-col gap-1", children: visible.map((item) => {
|
|
1385
1393
|
const active = isActive(item, activePath);
|
|
1386
1394
|
const link = renderLink({
|
|
1387
1395
|
href: item.href,
|
|
@@ -1393,12 +1401,12 @@ function SidebarNav({
|
|
|
1393
1401
|
active ? "bg-accent text-accent-foreground font-semibold" : "text-muted-foreground hover:bg-accent hover:text-accent-foreground",
|
|
1394
1402
|
isCollapsed && "justify-center px-2"
|
|
1395
1403
|
),
|
|
1396
|
-
children: /* @__PURE__ */ (0,
|
|
1397
|
-
item.icon && /* @__PURE__ */ (0,
|
|
1398
|
-
!isCollapsed && /* @__PURE__ */ (0,
|
|
1404
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
|
|
1405
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "shrink-0", children: item.icon }),
|
|
1406
|
+
!isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "truncate", children: item.label })
|
|
1399
1407
|
] })
|
|
1400
1408
|
});
|
|
1401
|
-
return /* @__PURE__ */ (0,
|
|
1409
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react5.Fragment, { children: link }, item.href);
|
|
1402
1410
|
}) });
|
|
1403
1411
|
}
|
|
1404
1412
|
|
|
@@ -1407,7 +1415,7 @@ var DropdownMenu2 = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
|
|
|
1407
1415
|
var import_lucide_react7 = require("lucide-react");
|
|
1408
1416
|
var import_react6 = require("react");
|
|
1409
1417
|
var import_vaul3 = require("vaul");
|
|
1410
|
-
var
|
|
1418
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
1411
1419
|
function initials(user) {
|
|
1412
1420
|
const source = user?.name?.trim() || user?.email?.trim();
|
|
1413
1421
|
if (!source) return "";
|
|
@@ -1428,50 +1436,50 @@ function UserMenu({
|
|
|
1428
1436
|
const isDesktop = useIsDesktop();
|
|
1429
1437
|
const [open, setOpen] = (0, import_react6.useState)(false);
|
|
1430
1438
|
const label = initials(user);
|
|
1431
|
-
const trigger = /* @__PURE__ */ (0,
|
|
1439
|
+
const trigger = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1432
1440
|
"button",
|
|
1433
1441
|
{
|
|
1434
1442
|
type: "button",
|
|
1435
1443
|
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",
|
|
1436
1444
|
"aria-label": "Menu do usu\xE1rio",
|
|
1437
1445
|
"data-testid": "user-menu",
|
|
1438
|
-
children: user?.avatarUrl ? /* @__PURE__ */ (0,
|
|
1446
|
+
children: user?.avatarUrl ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1439
1447
|
"img",
|
|
1440
1448
|
{
|
|
1441
1449
|
src: user.avatarUrl,
|
|
1442
1450
|
alt: user.name ?? user.email ?? "Avatar",
|
|
1443
1451
|
className: "h-full w-full object-cover"
|
|
1444
1452
|
}
|
|
1445
|
-
) : label ? /* @__PURE__ */ (0,
|
|
1453
|
+
) : label ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: label }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react7.User, { className: "h-4 w-4" })
|
|
1446
1454
|
}
|
|
1447
1455
|
);
|
|
1448
|
-
const userInfo = (user?.name || user?.email) && /* @__PURE__ */ (0,
|
|
1449
|
-
user.name && /* @__PURE__ */ (0,
|
|
1450
|
-
user.email && /* @__PURE__ */ (0,
|
|
1456
|
+
const userInfo = (user?.name || user?.email) && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "px-2 py-1.5", children: [
|
|
1457
|
+
user.name && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "truncate text-sm font-medium", children: user.name }),
|
|
1458
|
+
user.email && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "truncate text-xs text-muted-foreground", children: user.email })
|
|
1451
1459
|
] });
|
|
1452
1460
|
if (isDesktop) {
|
|
1453
|
-
return /* @__PURE__ */ (0,
|
|
1454
|
-
/* @__PURE__ */ (0,
|
|
1455
|
-
/* @__PURE__ */ (0,
|
|
1461
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(DropdownMenu2.Root, { open, onOpenChange: setOpen, children: [
|
|
1462
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenu2.Trigger, { asChild: true, children: trigger }),
|
|
1463
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenu2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
1456
1464
|
DropdownMenu2.Content,
|
|
1457
1465
|
{
|
|
1458
1466
|
align,
|
|
1459
1467
|
sideOffset: 6,
|
|
1460
1468
|
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",
|
|
1461
1469
|
children: [
|
|
1462
|
-
userInfo && /* @__PURE__ */ (0,
|
|
1470
|
+
userInfo && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
1463
1471
|
userInfo,
|
|
1464
|
-
/* @__PURE__ */ (0,
|
|
1472
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenu2.Separator, { className: "-mx-1 my-1 h-px bg-border" })
|
|
1465
1473
|
] }),
|
|
1466
1474
|
items.map(
|
|
1467
|
-
(item) => item.href ? /* @__PURE__ */ (0,
|
|
1475
|
+
(item) => item.href ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenu2.Item, { asChild: true, children: renderLink({
|
|
1468
1476
|
href: item.href,
|
|
1469
1477
|
className: itemClass,
|
|
1470
|
-
children: /* @__PURE__ */ (0,
|
|
1478
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
1471
1479
|
item.icon,
|
|
1472
1480
|
item.label
|
|
1473
1481
|
] })
|
|
1474
|
-
}) }, item.label) : /* @__PURE__ */ (0,
|
|
1482
|
+
}) }, item.label) : /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
1475
1483
|
DropdownMenu2.Item,
|
|
1476
1484
|
{
|
|
1477
1485
|
className: itemClass,
|
|
@@ -1484,9 +1492,9 @@ function UserMenu({
|
|
|
1484
1492
|
item.label
|
|
1485
1493
|
)
|
|
1486
1494
|
),
|
|
1487
|
-
onLogout && /* @__PURE__ */ (0,
|
|
1488
|
-
items.length > 0 && /* @__PURE__ */ (0,
|
|
1489
|
-
/* @__PURE__ */ (0,
|
|
1495
|
+
onLogout && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
1496
|
+
items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenu2.Separator, { className: "-mx-1 my-1 h-px bg-border" }),
|
|
1497
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
1490
1498
|
DropdownMenu2.Item,
|
|
1491
1499
|
{
|
|
1492
1500
|
className: cn(
|
|
@@ -1495,7 +1503,7 @@ function UserMenu({
|
|
|
1495
1503
|
),
|
|
1496
1504
|
onClick: onLogout,
|
|
1497
1505
|
children: [
|
|
1498
|
-
/* @__PURE__ */ (0,
|
|
1506
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react7.LogOut, { className: "h-4 w-4" }),
|
|
1499
1507
|
logoutLabel
|
|
1500
1508
|
]
|
|
1501
1509
|
}
|
|
@@ -1506,19 +1514,19 @@ function UserMenu({
|
|
|
1506
1514
|
) })
|
|
1507
1515
|
] });
|
|
1508
1516
|
}
|
|
1509
|
-
return /* @__PURE__ */ (0,
|
|
1510
|
-
/* @__PURE__ */ (0,
|
|
1511
|
-
/* @__PURE__ */ (0,
|
|
1512
|
-
/* @__PURE__ */ (0,
|
|
1513
|
-
/* @__PURE__ */ (0,
|
|
1514
|
-
/* @__PURE__ */ (0,
|
|
1515
|
-
/* @__PURE__ */ (0,
|
|
1516
|
-
userInfo && /* @__PURE__ */ (0,
|
|
1517
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_vaul3.Drawer.Root, { open, onOpenChange: setOpen, children: [
|
|
1518
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_vaul3.Drawer.Trigger, { asChild: true, children: trigger }),
|
|
1519
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_vaul3.Drawer.Portal, { children: [
|
|
1520
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_vaul3.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
1521
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_vaul3.Drawer.Content, { className: "fixed inset-x-0 bottom-0 z-50 flex flex-col rounded-t-2xl border bg-popover p-2 pb-[max(0.5rem,env(safe-area-inset-bottom))] text-popover-foreground outline-none", children: [
|
|
1522
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_vaul3.Drawer.Title, { className: "sr-only", children: "Menu do usu\xE1rio" }),
|
|
1523
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
1524
|
+
userInfo && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
1517
1525
|
userInfo,
|
|
1518
|
-
/* @__PURE__ */ (0,
|
|
1526
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "-mx-1 my-1 h-px bg-border" })
|
|
1519
1527
|
] }),
|
|
1520
1528
|
items.map(
|
|
1521
|
-
(item) => item.href ? /* @__PURE__ */ (0,
|
|
1529
|
+
(item) => item.href ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1522
1530
|
"span",
|
|
1523
1531
|
{
|
|
1524
1532
|
onClick: () => setOpen(false),
|
|
@@ -1526,14 +1534,14 @@ function UserMenu({
|
|
|
1526
1534
|
children: renderLink({
|
|
1527
1535
|
href: item.href,
|
|
1528
1536
|
className: sheetItemClass,
|
|
1529
|
-
children: /* @__PURE__ */ (0,
|
|
1537
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
1530
1538
|
item.icon,
|
|
1531
1539
|
item.label
|
|
1532
1540
|
] })
|
|
1533
1541
|
})
|
|
1534
1542
|
},
|
|
1535
1543
|
item.label
|
|
1536
|
-
) : /* @__PURE__ */ (0,
|
|
1544
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
1537
1545
|
"button",
|
|
1538
1546
|
{
|
|
1539
1547
|
type: "button",
|
|
@@ -1550,9 +1558,9 @@ function UserMenu({
|
|
|
1550
1558
|
item.label
|
|
1551
1559
|
)
|
|
1552
1560
|
),
|
|
1553
|
-
onLogout && /* @__PURE__ */ (0,
|
|
1554
|
-
items.length > 0 && /* @__PURE__ */ (0,
|
|
1555
|
-
/* @__PURE__ */ (0,
|
|
1561
|
+
onLogout && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
1562
|
+
items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "-mx-1 my-1 h-px bg-border" }),
|
|
1563
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
1556
1564
|
"button",
|
|
1557
1565
|
{
|
|
1558
1566
|
type: "button",
|
|
@@ -1562,7 +1570,7 @@ function UserMenu({
|
|
|
1562
1570
|
setOpen(false);
|
|
1563
1571
|
},
|
|
1564
1572
|
children: [
|
|
1565
|
-
/* @__PURE__ */ (0,
|
|
1573
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react7.LogOut, { className: "h-4 w-4" }),
|
|
1566
1574
|
logoutLabel
|
|
1567
1575
|
]
|
|
1568
1576
|
}
|
|
@@ -1574,7 +1582,7 @@ function UserMenu({
|
|
|
1574
1582
|
}
|
|
1575
1583
|
|
|
1576
1584
|
// src/components/app-shell.tsx
|
|
1577
|
-
var
|
|
1585
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
1578
1586
|
function AppShell({
|
|
1579
1587
|
brand,
|
|
1580
1588
|
brandCollapsed,
|
|
@@ -1593,7 +1601,7 @@ function AppShell({
|
|
|
1593
1601
|
}) {
|
|
1594
1602
|
const [collapsed, setCollapsed] = (0, import_react7.useState)(defaultCollapsed);
|
|
1595
1603
|
const [mobileOpen, setMobileOpen] = (0, import_react7.useState)(false);
|
|
1596
|
-
const nav = (isCollapsed, onNavigate) => /* @__PURE__ */ (0,
|
|
1604
|
+
const nav = (isCollapsed, onNavigate) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
1597
1605
|
SidebarNav,
|
|
1598
1606
|
{
|
|
1599
1607
|
items: navItems,
|
|
@@ -1605,8 +1613,8 @@ function AppShell({
|
|
|
1605
1613
|
onNavigate
|
|
1606
1614
|
}
|
|
1607
1615
|
);
|
|
1608
|
-
return /* @__PURE__ */ (0,
|
|
1609
|
-
/* @__PURE__ */ (0,
|
|
1616
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex h-screen overflow-hidden bg-background", children: [
|
|
1617
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
1610
1618
|
"aside",
|
|
1611
1619
|
{
|
|
1612
1620
|
className: cn(
|
|
@@ -1614,22 +1622,22 @@ function AppShell({
|
|
|
1614
1622
|
collapsed ? "w-16" : "w-60"
|
|
1615
1623
|
),
|
|
1616
1624
|
children: [
|
|
1617
|
-
/* @__PURE__ */ (0,
|
|
1618
|
-
/* @__PURE__ */ (0,
|
|
1619
|
-
collapsible && /* @__PURE__ */ (0,
|
|
1625
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex h-14 shrink-0 items-center border-b px-4", children: collapsed ? brandCollapsed ?? brand : brand }),
|
|
1626
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex-1 overflow-y-auto px-2 py-4", children: nav(collapsed) }),
|
|
1627
|
+
collapsible && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "border-t p-2", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
1620
1628
|
"button",
|
|
1621
1629
|
{
|
|
1622
1630
|
type: "button",
|
|
1623
1631
|
onClick: () => setCollapsed((v) => !v),
|
|
1624
1632
|
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",
|
|
1625
1633
|
"aria-label": collapsed ? "Expandir menu" : "Recolher menu",
|
|
1626
|
-
children: collapsed ? /* @__PURE__ */ (0,
|
|
1634
|
+
children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react8.ChevronRight, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react8.ChevronLeft, { className: "h-4 w-4" })
|
|
1627
1635
|
}
|
|
1628
1636
|
) })
|
|
1629
1637
|
]
|
|
1630
1638
|
}
|
|
1631
1639
|
),
|
|
1632
|
-
/* @__PURE__ */ (0,
|
|
1640
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
1633
1641
|
"div",
|
|
1634
1642
|
{
|
|
1635
1643
|
className: cn(
|
|
@@ -1638,8 +1646,8 @@ function AppShell({
|
|
|
1638
1646
|
),
|
|
1639
1647
|
onClick: () => setMobileOpen(false),
|
|
1640
1648
|
children: [
|
|
1641
|
-
/* @__PURE__ */ (0,
|
|
1642
|
-
/* @__PURE__ */ (0,
|
|
1649
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "absolute inset-0 bg-black/50" }),
|
|
1650
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
1643
1651
|
"div",
|
|
1644
1652
|
{
|
|
1645
1653
|
className: cn(
|
|
@@ -1648,32 +1656,32 @@ function AppShell({
|
|
|
1648
1656
|
),
|
|
1649
1657
|
onClick: (e) => e.stopPropagation(),
|
|
1650
1658
|
children: [
|
|
1651
|
-
/* @__PURE__ */ (0,
|
|
1652
|
-
/* @__PURE__ */ (0,
|
|
1659
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex h-14 shrink-0 items-center border-b px-4", children: brand }),
|
|
1660
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex-1 overflow-y-auto px-2 py-4", children: nav(false, () => setMobileOpen(false)) })
|
|
1653
1661
|
]
|
|
1654
1662
|
}
|
|
1655
1663
|
)
|
|
1656
1664
|
]
|
|
1657
1665
|
}
|
|
1658
1666
|
),
|
|
1659
|
-
/* @__PURE__ */ (0,
|
|
1660
|
-
/* @__PURE__ */ (0,
|
|
1661
|
-
/* @__PURE__ */ (0,
|
|
1667
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex flex-1 flex-col overflow-hidden", children: [
|
|
1668
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("header", { className: "flex h-14 shrink-0 items-center gap-2 border-b bg-background px-4", children: [
|
|
1669
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
1662
1670
|
"button",
|
|
1663
1671
|
{
|
|
1664
1672
|
type: "button",
|
|
1665
1673
|
onClick: () => setMobileOpen(true),
|
|
1666
1674
|
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",
|
|
1667
1675
|
"aria-label": "Abrir menu",
|
|
1668
|
-
children: /* @__PURE__ */ (0,
|
|
1676
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react8.Menu, { className: "h-4 w-4" })
|
|
1669
1677
|
}
|
|
1670
1678
|
),
|
|
1671
|
-
/* @__PURE__ */ (0,
|
|
1679
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "ml-auto flex items-center gap-2", children: [
|
|
1672
1680
|
headerActions,
|
|
1673
|
-
(user || onLogout) && /* @__PURE__ */ (0,
|
|
1681
|
+
(user || onLogout) && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(UserMenu, { user, items: userMenuItems, onLogout, renderLink })
|
|
1674
1682
|
] })
|
|
1675
1683
|
] }),
|
|
1676
|
-
/* @__PURE__ */ (0,
|
|
1684
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("main", { className: "flex-1 overflow-y-auto", children })
|
|
1677
1685
|
] })
|
|
1678
1686
|
] });
|
|
1679
1687
|
}
|
|
@@ -1683,7 +1691,7 @@ var DropdownMenu3 = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
|
|
|
1683
1691
|
var import_lucide_react9 = require("lucide-react");
|
|
1684
1692
|
var import_react8 = require("react");
|
|
1685
1693
|
var import_vaul4 = require("vaul");
|
|
1686
|
-
var
|
|
1694
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
1687
1695
|
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";
|
|
1688
1696
|
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";
|
|
1689
1697
|
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";
|
|
@@ -1697,20 +1705,20 @@ function RowActionsMenu({
|
|
|
1697
1705
|
const isDesktop = useIsDesktop();
|
|
1698
1706
|
const [open, setOpen] = (0, import_react8.useState)(false);
|
|
1699
1707
|
if (actions.length === 0) return null;
|
|
1700
|
-
const trigger = /* @__PURE__ */ (0,
|
|
1708
|
+
const trigger = /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1701
1709
|
"button",
|
|
1702
1710
|
{
|
|
1703
1711
|
type: "button",
|
|
1704
1712
|
disabled,
|
|
1705
1713
|
"aria-label": label,
|
|
1706
1714
|
className: triggerClass,
|
|
1707
|
-
children: /* @__PURE__ */ (0,
|
|
1715
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react9.MoreVertical, { className: "h-4 w-4" })
|
|
1708
1716
|
}
|
|
1709
1717
|
);
|
|
1710
1718
|
if (isDesktop) {
|
|
1711
|
-
return /* @__PURE__ */ (0,
|
|
1712
|
-
/* @__PURE__ */ (0,
|
|
1713
|
-
/* @__PURE__ */ (0,
|
|
1719
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(DropdownMenu3.Root, { open, onOpenChange: setOpen, modal: false, children: [
|
|
1720
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DropdownMenu3.Trigger, { asChild: true, children: trigger }),
|
|
1721
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DropdownMenu3.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1714
1722
|
DropdownMenu3.Content,
|
|
1715
1723
|
{
|
|
1716
1724
|
align,
|
|
@@ -1721,7 +1729,7 @@ function RowActionsMenu({
|
|
|
1721
1729
|
itemClass2,
|
|
1722
1730
|
action.destructive && "text-destructive focus:bg-destructive/10"
|
|
1723
1731
|
);
|
|
1724
|
-
return action.href ? /* @__PURE__ */ (0,
|
|
1732
|
+
return action.href ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1725
1733
|
DropdownMenu3.Item,
|
|
1726
1734
|
{
|
|
1727
1735
|
asChild: true,
|
|
@@ -1729,14 +1737,14 @@ function RowActionsMenu({
|
|
|
1729
1737
|
children: renderLink({
|
|
1730
1738
|
href: action.href,
|
|
1731
1739
|
className: cls,
|
|
1732
|
-
children: /* @__PURE__ */ (0,
|
|
1740
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
|
|
1733
1741
|
action.icon,
|
|
1734
1742
|
action.label
|
|
1735
1743
|
] })
|
|
1736
1744
|
})
|
|
1737
1745
|
},
|
|
1738
1746
|
action.label
|
|
1739
|
-
) : /* @__PURE__ */ (0,
|
|
1747
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
|
|
1740
1748
|
DropdownMenu3.Item,
|
|
1741
1749
|
{
|
|
1742
1750
|
className: cls,
|
|
@@ -1754,23 +1762,23 @@ function RowActionsMenu({
|
|
|
1754
1762
|
) })
|
|
1755
1763
|
] });
|
|
1756
1764
|
}
|
|
1757
|
-
return /* @__PURE__ */ (0,
|
|
1758
|
-
/* @__PURE__ */ (0,
|
|
1759
|
-
/* @__PURE__ */ (0,
|
|
1760
|
-
/* @__PURE__ */ (0,
|
|
1761
|
-
/* @__PURE__ */ (0,
|
|
1762
|
-
/* @__PURE__ */ (0,
|
|
1763
|
-
/* @__PURE__ */ (0,
|
|
1765
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_vaul4.Drawer.Root, { open, onOpenChange: setOpen, children: [
|
|
1766
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_vaul4.Drawer.Trigger, { asChild: true, children: trigger }),
|
|
1767
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_vaul4.Drawer.Portal, { children: [
|
|
1768
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_vaul4.Drawer.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
|
|
1769
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_vaul4.Drawer.Content, { className: "fixed inset-x-0 bottom-0 z-50 flex flex-col rounded-t-2xl border bg-popover p-2 pb-[max(0.5rem,env(safe-area-inset-bottom))] text-popover-foreground outline-none", children: [
|
|
1770
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_vaul4.Drawer.Title, { className: "sr-only", children: label }),
|
|
1771
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
|
|
1764
1772
|
actions.map((action) => {
|
|
1765
1773
|
const cls = cn(
|
|
1766
1774
|
sheetItemClass2,
|
|
1767
1775
|
action.destructive && "text-destructive"
|
|
1768
1776
|
);
|
|
1769
|
-
const inner = /* @__PURE__ */ (0,
|
|
1777
|
+
const inner = /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
|
|
1770
1778
|
action.icon,
|
|
1771
1779
|
action.label
|
|
1772
1780
|
] });
|
|
1773
|
-
return action.href ? /* @__PURE__ */ (0,
|
|
1781
|
+
return action.href ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1774
1782
|
"span",
|
|
1775
1783
|
{
|
|
1776
1784
|
onClick: () => setOpen(false),
|
|
@@ -1782,7 +1790,7 @@ function RowActionsMenu({
|
|
|
1782
1790
|
})
|
|
1783
1791
|
},
|
|
1784
1792
|
action.label
|
|
1785
|
-
) : /* @__PURE__ */ (0,
|
|
1793
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1786
1794
|
"button",
|
|
1787
1795
|
{
|
|
1788
1796
|
type: "button",
|
|
@@ -1850,6 +1858,7 @@ function useCustomToast() {
|
|
|
1850
1858
|
0 && (module.exports = {
|
|
1851
1859
|
AppShell,
|
|
1852
1860
|
AuthCard,
|
|
1861
|
+
BaseDialog,
|
|
1853
1862
|
ColorPicker,
|
|
1854
1863
|
Combobox,
|
|
1855
1864
|
ConfirmDialog,
|