@iclips/ui 0.0.16 → 0.0.18
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/index.cjs +1099 -137
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +278 -421
- package/dist/index.d.cts +371 -2
- package/dist/index.d.ts +371 -2
- package/dist/index.js +1086 -136
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as AccordionPrimitive from '@radix-ui/react-accordion';
|
|
2
|
-
import { MoreVertical, AlertCircle, Calendar, CheckSquare, MessageSquare, Paperclip, ChevronDownIcon, Home, Folder, Users, BarChart3, Settings, Pin, Plus, LayoutGrid, FileText, Star, Download, Sparkles, ChevronRight, Zap, PanelLeftClose, PanelLeft, Bell, MoreHorizontal, ChevronLeft, ArrowLeft, ArrowRight, Check, CheckIcon, CircleIcon, ChevronRightIcon, XIcon, SearchIcon, MinusIcon, ChevronLeftIcon, MoreHorizontalIcon, GripVerticalIcon, ChevronUpIcon, PanelLeftIcon } from 'lucide-react';
|
|
2
|
+
import { MoreVertical, AlertCircle, Calendar, CheckSquare, MessageSquare, Paperclip, ChevronDownIcon, Home, Folder, Users, BarChart3, Settings, Pin, Plus, LayoutGrid, FileText, Star, Download, Sparkles, ChevronRight, Zap, PanelLeftClose, PanelLeft, Bell, MoreHorizontal, Printer, Eye, ChevronLeft, ArrowLeft, ArrowRight, Check, CheckIcon, CircleIcon, ChevronRightIcon, XIcon, SearchIcon, MinusIcon, ChevronLeftIcon, MoreHorizontalIcon, GripVerticalIcon, ChevronUpIcon, PanelLeftIcon } from 'lucide-react';
|
|
3
3
|
import { clsx } from 'clsx';
|
|
4
4
|
import { twMerge } from 'tailwind-merge';
|
|
5
5
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
6
|
-
import * as
|
|
6
|
+
import * as React7 from 'react';
|
|
7
7
|
import { useState } from 'react';
|
|
8
8
|
import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
|
|
9
9
|
import { Slot } from '@radix-ui/react-slot';
|
|
@@ -127,7 +127,7 @@ var buttonVariants = cva(
|
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
);
|
|
130
|
-
var Button =
|
|
130
|
+
var Button = React7.forwardRef(({ className, variant, size, asChild = false, ...props }, ref) => {
|
|
131
131
|
const Comp = asChild ? Slot : "button";
|
|
132
132
|
return /* @__PURE__ */ jsx(
|
|
133
133
|
Comp,
|
|
@@ -155,7 +155,7 @@ function AlertDialogPortal({
|
|
|
155
155
|
}) {
|
|
156
156
|
return /* @__PURE__ */ jsx(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
|
|
157
157
|
}
|
|
158
|
-
var AlertDialogOverlay =
|
|
158
|
+
var AlertDialogOverlay = React7.forwardRef(({ className, ...props }, ref) => {
|
|
159
159
|
return /* @__PURE__ */ jsx(
|
|
160
160
|
AlertDialogPrimitive.Overlay,
|
|
161
161
|
{
|
|
@@ -395,7 +395,7 @@ var badgeVariants = cva(
|
|
|
395
395
|
}
|
|
396
396
|
}
|
|
397
397
|
);
|
|
398
|
-
var Badge =
|
|
398
|
+
var Badge = React7.forwardRef(({ className, variant, asChild = false, ...props }, ref) => {
|
|
399
399
|
const Comp = asChild ? Slot : "span";
|
|
400
400
|
return /* @__PURE__ */ jsx(
|
|
401
401
|
Comp,
|
|
@@ -540,10 +540,10 @@ function AppLayout({
|
|
|
540
540
|
defaultPrimaryNavPinned = false,
|
|
541
541
|
defaultSecondaryNavOpen = true
|
|
542
542
|
}) {
|
|
543
|
-
const [isPrimaryNavPinned, setIsPrimaryNavPinned] =
|
|
544
|
-
const [isPrimaryNavHovered, setIsPrimaryNavHovered] =
|
|
545
|
-
const [isSecondaryNavOpen, setIsSecondaryNavOpen] =
|
|
546
|
-
const [activeItem, setActiveItem] =
|
|
543
|
+
const [isPrimaryNavPinned, setIsPrimaryNavPinned] = React7.useState(defaultPrimaryNavPinned);
|
|
544
|
+
const [isPrimaryNavHovered, setIsPrimaryNavHovered] = React7.useState(false);
|
|
545
|
+
const [isSecondaryNavOpen, setIsSecondaryNavOpen] = React7.useState(defaultSecondaryNavOpen);
|
|
546
|
+
const [activeItem, setActiveItem] = React7.useState(activePrimaryItem || primaryNavItems[0]?.id);
|
|
547
547
|
const isPrimaryNavExpanded = isPrimaryNavPinned || isPrimaryNavHovered;
|
|
548
548
|
const handlePrimaryItemClick = (id) => {
|
|
549
549
|
setActiveItem(id);
|
|
@@ -815,61 +815,6 @@ function BreadcrumbEllipsis({
|
|
|
815
815
|
}
|
|
816
816
|
);
|
|
817
817
|
}
|
|
818
|
-
function Calendar2({
|
|
819
|
-
className,
|
|
820
|
-
classNames,
|
|
821
|
-
showOutsideDays = true,
|
|
822
|
-
...props
|
|
823
|
-
}) {
|
|
824
|
-
return /* @__PURE__ */ jsx(
|
|
825
|
-
DayPicker,
|
|
826
|
-
{
|
|
827
|
-
showOutsideDays,
|
|
828
|
-
className: cn("p-3", className),
|
|
829
|
-
classNames: {
|
|
830
|
-
months: "flex flex-col sm:flex-row gap-2",
|
|
831
|
-
month: "flex flex-col gap-4",
|
|
832
|
-
caption: "flex justify-center pt-1 relative items-center w-full",
|
|
833
|
-
caption_label: "text-sm font-medium",
|
|
834
|
-
nav: "flex items-center gap-1",
|
|
835
|
-
nav_button: cn(
|
|
836
|
-
buttonVariants({ variant: "outline" }),
|
|
837
|
-
"size-7 bg-transparent p-0 opacity-50 hover:opacity-100"
|
|
838
|
-
),
|
|
839
|
-
nav_button_previous: "absolute left-1",
|
|
840
|
-
nav_button_next: "absolute right-1",
|
|
841
|
-
table: "w-full border-collapse space-x-1",
|
|
842
|
-
head_row: "flex",
|
|
843
|
-
head_cell: "text-muted-foreground rounded-md w-8 font-normal text-[0.8rem]",
|
|
844
|
-
row: "flex w-full mt-2",
|
|
845
|
-
cell: cn(
|
|
846
|
-
"relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-range-end)]:rounded-r-md",
|
|
847
|
-
props.mode === "range" ? "[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md" : "[&:has([aria-selected])]:rounded-md"
|
|
848
|
-
),
|
|
849
|
-
day: cn(
|
|
850
|
-
buttonVariants({ variant: "ghost" }),
|
|
851
|
-
"size-8 p-0 font-normal aria-selected:opacity-100"
|
|
852
|
-
),
|
|
853
|
-
day_range_start: "day-range-start aria-selected:bg-primary aria-selected:text-primary-foreground",
|
|
854
|
-
day_range_end: "day-range-end aria-selected:bg-primary aria-selected:text-primary-foreground",
|
|
855
|
-
day_selected: "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground",
|
|
856
|
-
day_today: "bg-accent text-accent-foreground",
|
|
857
|
-
day_outside: "day-outside text-muted-foreground aria-selected:text-muted-foreground",
|
|
858
|
-
day_disabled: "text-muted-foreground opacity-50",
|
|
859
|
-
day_range_middle: "aria-selected:bg-accent aria-selected:text-accent-foreground",
|
|
860
|
-
day_hidden: "invisible",
|
|
861
|
-
...classNames
|
|
862
|
-
},
|
|
863
|
-
components: {
|
|
864
|
-
Chevron: ({ orientation, ...props2 }) => {
|
|
865
|
-
const Icon2 = orientation === "left" ? ChevronLeft : ChevronRight;
|
|
866
|
-
return /* @__PURE__ */ jsx(Icon2, { className: "size-4", ...props2 });
|
|
867
|
-
}
|
|
868
|
-
},
|
|
869
|
-
...props
|
|
870
|
-
}
|
|
871
|
-
);
|
|
872
|
-
}
|
|
873
818
|
function Card({ className, ...props }) {
|
|
874
819
|
return /* @__PURE__ */ jsx(
|
|
875
820
|
"div",
|
|
@@ -936,9 +881,863 @@ function CardFooter({ className, ...props }) {
|
|
|
936
881
|
}
|
|
937
882
|
);
|
|
938
883
|
}
|
|
939
|
-
var
|
|
884
|
+
var ERROR_IMG_SRC = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBvcGFjaXR5PSIuMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIzLjciPjxyZWN0IHg9IjE2IiB5PSIxNiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiByeD0iNiIvPjxwYXRoIGQ9Im0xNiA1OCAxNi0xOCAzMiAzMiIvPjxjaXJjbGUgY3g9IjUzIiBjeT0iMzUiIHI9IjciLz48L3N2Zz4KCg==";
|
|
885
|
+
function ImageWithFallback(props) {
|
|
886
|
+
const [didError, setDidError] = useState(false);
|
|
887
|
+
const handleError = () => {
|
|
888
|
+
setDidError(true);
|
|
889
|
+
};
|
|
890
|
+
const { src, alt, style, className, ...rest } = props;
|
|
891
|
+
return didError ? /* @__PURE__ */ jsx(
|
|
892
|
+
"div",
|
|
893
|
+
{
|
|
894
|
+
className: `inline-block bg-gray-100 text-center align-middle ${className ?? ""}`,
|
|
895
|
+
style,
|
|
896
|
+
children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center w-full h-full", children: /* @__PURE__ */ jsx("img", { src: ERROR_IMG_SRC, alt: "Error loading image", ...rest, "data-original-url": src }) })
|
|
897
|
+
}
|
|
898
|
+
) : /* @__PURE__ */ jsx("img", { src, alt, className, style, ...rest, onError: handleError });
|
|
899
|
+
}
|
|
900
|
+
function PrintHeader({
|
|
901
|
+
logo,
|
|
902
|
+
companyName = "iClips",
|
|
903
|
+
contactInfo,
|
|
904
|
+
documentType,
|
|
905
|
+
documentNumber,
|
|
906
|
+
issueDate
|
|
907
|
+
}) {
|
|
908
|
+
return /* @__PURE__ */ jsx("div", { className: "print-header border-b-2 border-primary pb-6 mb-8", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between", children: [
|
|
909
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-4", children: [
|
|
910
|
+
logo && /* @__PURE__ */ jsx("div", { className: "w-24 h-24 flex-shrink-0", children: /* @__PURE__ */ jsx(
|
|
911
|
+
ImageWithFallback,
|
|
912
|
+
{
|
|
913
|
+
src: logo,
|
|
914
|
+
alt: `${companyName} Logo`,
|
|
915
|
+
className: "w-full h-full object-contain"
|
|
916
|
+
}
|
|
917
|
+
) }),
|
|
918
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
919
|
+
/* @__PURE__ */ jsx("h2", { className: "text-xl font-semibold text-primary", children: companyName }),
|
|
920
|
+
contactInfo && /* @__PURE__ */ jsxs("div", { className: "text-xs text-gray-600 space-y-0.5", children: [
|
|
921
|
+
contactInfo.address && /* @__PURE__ */ jsx("p", { children: contactInfo.address }),
|
|
922
|
+
contactInfo.phone && /* @__PURE__ */ jsxs("p", { children: [
|
|
923
|
+
"Tel: ",
|
|
924
|
+
contactInfo.phone
|
|
925
|
+
] }),
|
|
926
|
+
contactInfo.email && /* @__PURE__ */ jsxs("p", { children: [
|
|
927
|
+
"Email: ",
|
|
928
|
+
contactInfo.email
|
|
929
|
+
] }),
|
|
930
|
+
contactInfo.website && /* @__PURE__ */ jsxs("p", { children: [
|
|
931
|
+
"Site: ",
|
|
932
|
+
contactInfo.website
|
|
933
|
+
] })
|
|
934
|
+
] })
|
|
935
|
+
] })
|
|
936
|
+
] }),
|
|
937
|
+
(documentType || documentNumber || issueDate) && /* @__PURE__ */ jsxs("div", { className: "text-right space-y-1", children: [
|
|
938
|
+
documentType && /* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold text-gray-900", children: documentType }),
|
|
939
|
+
documentNumber && /* @__PURE__ */ jsxs("p", { className: "text-sm text-gray-600", children: [
|
|
940
|
+
"N\xBA ",
|
|
941
|
+
documentNumber
|
|
942
|
+
] }),
|
|
943
|
+
issueDate && /* @__PURE__ */ jsxs("p", { className: "text-xs text-gray-500", children: [
|
|
944
|
+
"Emitido em: ",
|
|
945
|
+
issueDate
|
|
946
|
+
] })
|
|
947
|
+
] })
|
|
948
|
+
] }) });
|
|
949
|
+
}
|
|
950
|
+
function PrintFooter({
|
|
951
|
+
pageNumber,
|
|
952
|
+
totalPages,
|
|
953
|
+
footerText,
|
|
954
|
+
showGeneratedDate = true
|
|
955
|
+
}) {
|
|
956
|
+
const currentDate = (/* @__PURE__ */ new Date()).toLocaleDateString("pt-BR", {
|
|
957
|
+
year: "numeric",
|
|
958
|
+
month: "long",
|
|
959
|
+
day: "numeric"
|
|
960
|
+
});
|
|
961
|
+
return /* @__PURE__ */ jsx("div", { className: "print-footer mt-12 pt-6 border-t border-gray-200", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-xs text-gray-500", children: [
|
|
962
|
+
/* @__PURE__ */ jsx("div", { children: footerText ? /* @__PURE__ */ jsx("p", { children: footerText }) : showGeneratedDate ? /* @__PURE__ */ jsxs("p", { children: [
|
|
963
|
+
"Documento gerado em ",
|
|
964
|
+
currentDate
|
|
965
|
+
] }) : null }),
|
|
966
|
+
pageNumber && totalPages && /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs("p", { children: [
|
|
967
|
+
"P\xE1gina ",
|
|
968
|
+
pageNumber,
|
|
969
|
+
" de ",
|
|
970
|
+
totalPages
|
|
971
|
+
] }) })
|
|
972
|
+
] }) });
|
|
973
|
+
}
|
|
974
|
+
function PrintSection({
|
|
975
|
+
title,
|
|
976
|
+
subtitle,
|
|
977
|
+
children,
|
|
978
|
+
className,
|
|
979
|
+
avoidBreak = false,
|
|
980
|
+
pageBreak = false
|
|
981
|
+
}) {
|
|
982
|
+
return /* @__PURE__ */ jsxs(
|
|
983
|
+
"div",
|
|
984
|
+
{
|
|
985
|
+
className: cn(
|
|
986
|
+
"print-section mb-8",
|
|
987
|
+
avoidBreak && "avoid-break",
|
|
988
|
+
pageBreak && "page-break",
|
|
989
|
+
className
|
|
990
|
+
),
|
|
991
|
+
children: [
|
|
992
|
+
title && /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
|
|
993
|
+
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold text-gray-900 border-b-2 border-primary pb-2", children: title }),
|
|
994
|
+
subtitle && /* @__PURE__ */ jsx("p", { className: "text-sm text-gray-600 mt-1", children: subtitle })
|
|
995
|
+
] }),
|
|
996
|
+
/* @__PURE__ */ jsx("div", { className: "text-sm text-gray-700 leading-relaxed", children })
|
|
997
|
+
]
|
|
998
|
+
}
|
|
999
|
+
);
|
|
1000
|
+
}
|
|
1001
|
+
function PrintInfoGrid({
|
|
1002
|
+
items,
|
|
1003
|
+
columns = 2,
|
|
1004
|
+
className
|
|
1005
|
+
}) {
|
|
1006
|
+
const gridClass = {
|
|
1007
|
+
1: "grid-cols-1",
|
|
1008
|
+
2: "grid-cols-2",
|
|
1009
|
+
3: "grid-cols-3",
|
|
1010
|
+
4: "grid-cols-4"
|
|
1011
|
+
}[columns];
|
|
1012
|
+
return /* @__PURE__ */ jsx("div", { className: cn("print-info-grid", className), children: /* @__PURE__ */ jsx("div", { className: cn("grid gap-4", gridClass), children: items.map((item, index) => /* @__PURE__ */ jsxs(
|
|
1013
|
+
"div",
|
|
1014
|
+
{
|
|
1015
|
+
className: cn(
|
|
1016
|
+
"info-item",
|
|
1017
|
+
item.highlight && "bg-gray-50 p-3 rounded border border-gray-200"
|
|
1018
|
+
),
|
|
1019
|
+
children: [
|
|
1020
|
+
/* @__PURE__ */ jsx("dt", { className: "text-xs font-medium text-gray-500 uppercase tracking-wide mb-1", children: item.label }),
|
|
1021
|
+
/* @__PURE__ */ jsx(
|
|
1022
|
+
"dd",
|
|
1023
|
+
{
|
|
1024
|
+
className: cn(
|
|
1025
|
+
"text-sm text-gray-900",
|
|
1026
|
+
item.highlight && "font-semibold"
|
|
1027
|
+
),
|
|
1028
|
+
children: item.value
|
|
1029
|
+
}
|
|
1030
|
+
)
|
|
1031
|
+
]
|
|
1032
|
+
},
|
|
1033
|
+
index
|
|
1034
|
+
)) }) });
|
|
1035
|
+
}
|
|
1036
|
+
function PrintTable({
|
|
1037
|
+
columns,
|
|
1038
|
+
data,
|
|
1039
|
+
title,
|
|
1040
|
+
striped = true,
|
|
1041
|
+
bordered = true,
|
|
1042
|
+
density = "normal"
|
|
1043
|
+
}) {
|
|
1044
|
+
const paddingClass = {
|
|
1045
|
+
compact: "px-2 py-1",
|
|
1046
|
+
normal: "px-3 py-2",
|
|
1047
|
+
comfortable: "px-4 py-3"
|
|
1048
|
+
}[density];
|
|
1049
|
+
return /* @__PURE__ */ jsxs("div", { className: "print-table-container avoid-break", children: [
|
|
1050
|
+
title && /* @__PURE__ */ jsx("h3", { className: "text-base font-semibold text-gray-900 mb-3", children: title }),
|
|
1051
|
+
/* @__PURE__ */ jsxs(
|
|
1052
|
+
"table",
|
|
1053
|
+
{
|
|
1054
|
+
className: cn(
|
|
1055
|
+
"w-full text-sm",
|
|
1056
|
+
bordered && "border border-gray-300"
|
|
1057
|
+
),
|
|
1058
|
+
children: [
|
|
1059
|
+
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { className: "bg-gray-100", children: columns.map((column, index) => /* @__PURE__ */ jsx(
|
|
1060
|
+
"th",
|
|
1061
|
+
{
|
|
1062
|
+
className: cn(
|
|
1063
|
+
paddingClass,
|
|
1064
|
+
"font-semibold text-gray-900 border-b-2 border-gray-300",
|
|
1065
|
+
column.align === "center" && "text-center",
|
|
1066
|
+
column.align === "right" && "text-right"
|
|
1067
|
+
),
|
|
1068
|
+
style: { width: column.width },
|
|
1069
|
+
children: column.header
|
|
1070
|
+
},
|
|
1071
|
+
index
|
|
1072
|
+
)) }) }),
|
|
1073
|
+
/* @__PURE__ */ jsx("tbody", { children: data.map((row, rowIndex) => /* @__PURE__ */ jsx(
|
|
1074
|
+
"tr",
|
|
1075
|
+
{
|
|
1076
|
+
className: cn(
|
|
1077
|
+
striped && rowIndex % 2 === 0 && "bg-gray-50",
|
|
1078
|
+
"avoid-break"
|
|
1079
|
+
),
|
|
1080
|
+
children: columns.map((column, colIndex) => {
|
|
1081
|
+
const value = row[column.key];
|
|
1082
|
+
const displayValue = column.render ? column.render(value, row) : value;
|
|
1083
|
+
return /* @__PURE__ */ jsx(
|
|
1084
|
+
"td",
|
|
1085
|
+
{
|
|
1086
|
+
className: cn(
|
|
1087
|
+
paddingClass,
|
|
1088
|
+
"border-b border-gray-200",
|
|
1089
|
+
column.align === "center" && "text-center",
|
|
1090
|
+
column.align === "right" && "text-right"
|
|
1091
|
+
),
|
|
1092
|
+
children: displayValue
|
|
1093
|
+
},
|
|
1094
|
+
colIndex
|
|
1095
|
+
);
|
|
1096
|
+
})
|
|
1097
|
+
},
|
|
1098
|
+
rowIndex
|
|
1099
|
+
)) })
|
|
1100
|
+
]
|
|
1101
|
+
}
|
|
1102
|
+
)
|
|
1103
|
+
] });
|
|
1104
|
+
}
|
|
1105
|
+
function PrintSignature({
|
|
1106
|
+
signatures,
|
|
1107
|
+
layout = "horizontal",
|
|
1108
|
+
showLine = true,
|
|
1109
|
+
instructionText
|
|
1110
|
+
}) {
|
|
1111
|
+
return /* @__PURE__ */ jsxs("div", { className: "print-signature mt-12 page-break avoid-break", children: [
|
|
1112
|
+
instructionText && /* @__PURE__ */ jsx("p", { className: "text-sm text-gray-600 mb-6", children: instructionText }),
|
|
1113
|
+
/* @__PURE__ */ jsx(
|
|
1114
|
+
"div",
|
|
1115
|
+
{
|
|
1116
|
+
className: layout === "horizontal" ? "grid grid-cols-2 gap-8" : "space-y-12",
|
|
1117
|
+
children: signatures.map((signature, index) => /* @__PURE__ */ jsxs("div", { className: "signature-field", children: [
|
|
1118
|
+
/* @__PURE__ */ jsx("div", { className: "h-20 mb-2" }),
|
|
1119
|
+
showLine && /* @__PURE__ */ jsx("div", { className: "border-t-2 border-gray-900 mb-2" }),
|
|
1120
|
+
/* @__PURE__ */ jsxs("div", { className: "text-sm", children: [
|
|
1121
|
+
/* @__PURE__ */ jsx("p", { className: "font-semibold text-gray-900", children: signature.label }),
|
|
1122
|
+
signature.name && /* @__PURE__ */ jsx("p", { className: "text-gray-600", children: signature.name }),
|
|
1123
|
+
signature.role && /* @__PURE__ */ jsx("p", { className: "text-gray-500 text-xs", children: signature.role }),
|
|
1124
|
+
signature.date && /* @__PURE__ */ jsxs("p", { className: "text-gray-500 text-xs mt-1", children: [
|
|
1125
|
+
"Data: ",
|
|
1126
|
+
signature.date
|
|
1127
|
+
] })
|
|
1128
|
+
] })
|
|
1129
|
+
] }, index))
|
|
1130
|
+
}
|
|
1131
|
+
)
|
|
1132
|
+
] });
|
|
1133
|
+
}
|
|
1134
|
+
function ContractTemplate({
|
|
1135
|
+
data,
|
|
1136
|
+
showPreview = false,
|
|
1137
|
+
logo,
|
|
1138
|
+
showServices = true
|
|
1139
|
+
}) {
|
|
1140
|
+
const formatCurrency = (value) => {
|
|
1141
|
+
return new Intl.NumberFormat("pt-BR", {
|
|
1142
|
+
style: "currency",
|
|
1143
|
+
currency: "BRL"
|
|
1144
|
+
}).format(value);
|
|
1145
|
+
};
|
|
1146
|
+
const formatDate = (dateStr) => {
|
|
1147
|
+
return new Date(dateStr).toLocaleDateString("pt-BR", {
|
|
1148
|
+
year: "numeric",
|
|
1149
|
+
month: "long",
|
|
1150
|
+
day: "numeric"
|
|
1151
|
+
});
|
|
1152
|
+
};
|
|
1153
|
+
return /* @__PURE__ */ jsxs(
|
|
1154
|
+
"div",
|
|
1155
|
+
{
|
|
1156
|
+
className: cn(
|
|
1157
|
+
"contract-template bg-white text-black",
|
|
1158
|
+
showPreview ? "shadow-lg rounded-lg p-8 max-w-5xl mx-auto my-8" : "p-0"
|
|
1159
|
+
),
|
|
1160
|
+
style: {
|
|
1161
|
+
fontFamily: "system-ui, -apple-system, sans-serif",
|
|
1162
|
+
fontSize: "12pt",
|
|
1163
|
+
lineHeight: "1.6"
|
|
1164
|
+
},
|
|
1165
|
+
children: [
|
|
1166
|
+
/* @__PURE__ */ jsx(
|
|
1167
|
+
PrintHeader,
|
|
1168
|
+
{
|
|
1169
|
+
logo,
|
|
1170
|
+
companyName: data.agencia.nome,
|
|
1171
|
+
contactInfo: {
|
|
1172
|
+
address: data.agencia.endereco,
|
|
1173
|
+
phone: data.agencia.telefone,
|
|
1174
|
+
email: data.agencia.email
|
|
1175
|
+
},
|
|
1176
|
+
documentType: "Contrato de Fee Mensal",
|
|
1177
|
+
documentNumber: data.numeroContrato,
|
|
1178
|
+
issueDate: formatDate(data.dataEmissao)
|
|
1179
|
+
}
|
|
1180
|
+
),
|
|
1181
|
+
/* @__PURE__ */ jsx(PrintSection, { title: "Informa\xE7\xF5es do Contrato", children: /* @__PURE__ */ jsx(
|
|
1182
|
+
PrintInfoGrid,
|
|
1183
|
+
{
|
|
1184
|
+
columns: 2,
|
|
1185
|
+
items: [
|
|
1186
|
+
{
|
|
1187
|
+
label: "N\xFAmero do Contrato",
|
|
1188
|
+
value: data.numeroContrato,
|
|
1189
|
+
highlight: true
|
|
1190
|
+
},
|
|
1191
|
+
{
|
|
1192
|
+
label: "Data de Emiss\xE3o",
|
|
1193
|
+
value: formatDate(data.dataEmissao)
|
|
1194
|
+
},
|
|
1195
|
+
{
|
|
1196
|
+
label: "Vig\xEAncia - In\xEDcio",
|
|
1197
|
+
value: formatDate(data.dataInicio)
|
|
1198
|
+
},
|
|
1199
|
+
{
|
|
1200
|
+
label: "Vig\xEAncia - T\xE9rmino",
|
|
1201
|
+
value: formatDate(data.dataTermino)
|
|
1202
|
+
},
|
|
1203
|
+
{
|
|
1204
|
+
label: "Valor do Fee Mensal",
|
|
1205
|
+
value: formatCurrency(data.valorFee),
|
|
1206
|
+
highlight: true
|
|
1207
|
+
},
|
|
1208
|
+
{
|
|
1209
|
+
label: "Total de Horas",
|
|
1210
|
+
value: `${data.totalHoras}h/m\xEAs`
|
|
1211
|
+
}
|
|
1212
|
+
]
|
|
1213
|
+
}
|
|
1214
|
+
) }),
|
|
1215
|
+
/* @__PURE__ */ jsxs(PrintSection, { title: "Partes Contratantes", className: "grid grid-cols-2 gap-6", children: [
|
|
1216
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
1217
|
+
/* @__PURE__ */ jsx("h3", { className: "font-semibold text-sm mb-3 text-primary", children: "CONTRATANTE" }),
|
|
1218
|
+
/* @__PURE__ */ jsx(
|
|
1219
|
+
PrintInfoGrid,
|
|
1220
|
+
{
|
|
1221
|
+
columns: 1,
|
|
1222
|
+
items: [
|
|
1223
|
+
{ label: "Raz\xE3o Social", value: data.cliente.nome },
|
|
1224
|
+
...data.cliente.cnpj ? [{ label: "CNPJ", value: data.cliente.cnpj }] : [],
|
|
1225
|
+
...data.cliente.endereco ? [{ label: "Endere\xE7o", value: data.cliente.endereco }] : [],
|
|
1226
|
+
...data.cliente.representante ? [
|
|
1227
|
+
{
|
|
1228
|
+
label: "Representante Legal",
|
|
1229
|
+
value: data.cliente.representante
|
|
1230
|
+
}
|
|
1231
|
+
] : [],
|
|
1232
|
+
...data.cliente.email ? [{ label: "E-mail", value: data.cliente.email }] : [],
|
|
1233
|
+
...data.cliente.telefone ? [{ label: "Telefone", value: data.cliente.telefone }] : []
|
|
1234
|
+
]
|
|
1235
|
+
}
|
|
1236
|
+
)
|
|
1237
|
+
] }),
|
|
1238
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
1239
|
+
/* @__PURE__ */ jsx("h3", { className: "font-semibold text-sm mb-3 text-primary", children: "CONTRATADA" }),
|
|
1240
|
+
/* @__PURE__ */ jsx(
|
|
1241
|
+
PrintInfoGrid,
|
|
1242
|
+
{
|
|
1243
|
+
columns: 1,
|
|
1244
|
+
items: [
|
|
1245
|
+
{ label: "Raz\xE3o Social", value: data.agencia.nome },
|
|
1246
|
+
...data.agencia.cnpj ? [{ label: "CNPJ", value: data.agencia.cnpj }] : [],
|
|
1247
|
+
...data.agencia.endereco ? [{ label: "Endere\xE7o", value: data.agencia.endereco }] : [],
|
|
1248
|
+
...data.agencia.representante ? [
|
|
1249
|
+
{
|
|
1250
|
+
label: "Representante Legal",
|
|
1251
|
+
value: data.agencia.representante
|
|
1252
|
+
}
|
|
1253
|
+
] : [],
|
|
1254
|
+
...data.agencia.email ? [{ label: "E-mail", value: data.agencia.email }] : [],
|
|
1255
|
+
...data.agencia.telefone ? [{ label: "Telefone", value: data.agencia.telefone }] : []
|
|
1256
|
+
]
|
|
1257
|
+
}
|
|
1258
|
+
)
|
|
1259
|
+
] })
|
|
1260
|
+
] }),
|
|
1261
|
+
showServices && data.servicos && data.servicos.length > 0 && /* @__PURE__ */ jsx(PrintSection, { title: "Escopo dos Servi\xE7os", children: /* @__PURE__ */ jsx(
|
|
1262
|
+
PrintTable,
|
|
1263
|
+
{
|
|
1264
|
+
columns: [
|
|
1265
|
+
{ header: "Servi\xE7o", key: "nome", width: "40%" },
|
|
1266
|
+
{ header: "Descri\xE7\xE3o", key: "descricao", width: "45%" },
|
|
1267
|
+
{
|
|
1268
|
+
header: "Horas Est.",
|
|
1269
|
+
key: "horasEstimadas",
|
|
1270
|
+
align: "center",
|
|
1271
|
+
width: "15%",
|
|
1272
|
+
render: (value) => value ? `${value}h` : "-"
|
|
1273
|
+
}
|
|
1274
|
+
],
|
|
1275
|
+
data: data.servicos,
|
|
1276
|
+
striped: true,
|
|
1277
|
+
density: "comfortable"
|
|
1278
|
+
}
|
|
1279
|
+
) }),
|
|
1280
|
+
/* @__PURE__ */ jsx(PrintSection, { title: "Condi\xE7\xF5es Comerciais", children: /* @__PURE__ */ jsx(
|
|
1281
|
+
PrintInfoGrid,
|
|
1282
|
+
{
|
|
1283
|
+
columns: 2,
|
|
1284
|
+
items: [
|
|
1285
|
+
{
|
|
1286
|
+
label: "Valor do Fee Mensal",
|
|
1287
|
+
value: formatCurrency(data.valorFee),
|
|
1288
|
+
highlight: true
|
|
1289
|
+
},
|
|
1290
|
+
{
|
|
1291
|
+
label: "Total de Horas Mensais",
|
|
1292
|
+
value: `${data.totalHoras} horas`
|
|
1293
|
+
},
|
|
1294
|
+
...data.valorHora ? [
|
|
1295
|
+
{
|
|
1296
|
+
label: "Valor da Hora Adicional",
|
|
1297
|
+
value: formatCurrency(data.valorHora)
|
|
1298
|
+
}
|
|
1299
|
+
] : [],
|
|
1300
|
+
{
|
|
1301
|
+
label: "Condi\xE7\xF5es de Pagamento",
|
|
1302
|
+
value: data.condicoesPagamento
|
|
1303
|
+
},
|
|
1304
|
+
...data.formaPagamento ? [
|
|
1305
|
+
{
|
|
1306
|
+
label: "Forma de Pagamento",
|
|
1307
|
+
value: data.formaPagamento
|
|
1308
|
+
}
|
|
1309
|
+
] : []
|
|
1310
|
+
]
|
|
1311
|
+
}
|
|
1312
|
+
) }),
|
|
1313
|
+
data.clausulas && data.clausulas.length > 0 && /* @__PURE__ */ jsx(PrintSection, { title: "Cl\xE1usulas Contratuais", pageBreak: true, children: /* @__PURE__ */ jsx("div", { className: "space-y-6", children: data.clausulas.map((clause, index) => /* @__PURE__ */ jsxs("div", { className: "clause avoid-break", children: [
|
|
1314
|
+
/* @__PURE__ */ jsxs("h4", { className: "font-semibold text-sm mb-2", children: [
|
|
1315
|
+
"Cl\xE1usula ",
|
|
1316
|
+
index + 1,
|
|
1317
|
+
"\xAA - ",
|
|
1318
|
+
clause.titulo
|
|
1319
|
+
] }),
|
|
1320
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-gray-700 leading-relaxed pl-4", children: clause.conteudo })
|
|
1321
|
+
] }, index)) }) }),
|
|
1322
|
+
data.observacoes && /* @__PURE__ */ jsx(PrintSection, { title: "Observa\xE7\xF5es", children: /* @__PURE__ */ jsx("p", { className: "text-sm text-gray-700 leading-relaxed", children: data.observacoes }) }),
|
|
1323
|
+
/* @__PURE__ */ jsx(
|
|
1324
|
+
PrintSignature,
|
|
1325
|
+
{
|
|
1326
|
+
signatures: [
|
|
1327
|
+
{
|
|
1328
|
+
label: "CONTRATANTE",
|
|
1329
|
+
name: data.cliente.nome,
|
|
1330
|
+
role: data.cliente.representante
|
|
1331
|
+
},
|
|
1332
|
+
{
|
|
1333
|
+
label: "CONTRATADA",
|
|
1334
|
+
name: data.agencia.nome,
|
|
1335
|
+
role: data.agencia.representante
|
|
1336
|
+
}
|
|
1337
|
+
],
|
|
1338
|
+
instructionText: "As partes, estando de acordo com os termos e condi\xE7\xF5es estabelecidos neste contrato, assinam o presente instrumento em duas vias de igual teor e forma."
|
|
1339
|
+
}
|
|
1340
|
+
),
|
|
1341
|
+
/* @__PURE__ */ jsx(PrintFooter, { pageNumber: 1, totalPages: 1 })
|
|
1342
|
+
]
|
|
1343
|
+
}
|
|
1344
|
+
);
|
|
1345
|
+
}
|
|
1346
|
+
var dadosContratoExemplo = {
|
|
1347
|
+
numeroContrato: "FEE-2024-001",
|
|
1348
|
+
dataEmissao: "2024-01-15",
|
|
1349
|
+
dataInicio: "2024-02-01",
|
|
1350
|
+
dataTermino: "2025-01-31",
|
|
1351
|
+
cliente: {
|
|
1352
|
+
nome: "Coca-Cola Brasil Ltda.",
|
|
1353
|
+
cnpj: "00.000.000/0001-00",
|
|
1354
|
+
endereco: "Av. Paulista, 1000 - S\xE3o Paulo, SP - CEP 01310-100",
|
|
1355
|
+
representante: "Jo\xE3o da Silva",
|
|
1356
|
+
email: "joao.silva@cocacola.com.br",
|
|
1357
|
+
telefone: "(11) 3000-0000"
|
|
1358
|
+
},
|
|
1359
|
+
agencia: {
|
|
1360
|
+
nome: "iClips Publicidade e Marketing",
|
|
1361
|
+
cnpj: "11.111.111/0001-11",
|
|
1362
|
+
endereco: "Rua das Flores, 500 - S\xE3o Paulo, SP - CEP 04567-890",
|
|
1363
|
+
representante: "Maria Santos",
|
|
1364
|
+
email: "contato@iclips.com.br",
|
|
1365
|
+
telefone: "(11) 4000-0000"
|
|
1366
|
+
},
|
|
1367
|
+
valorFee: 15e3,
|
|
1368
|
+
totalHoras: 160,
|
|
1369
|
+
valorHora: 150,
|
|
1370
|
+
condicoesPagamento: "At\xE9 o 5\xBA dia \xFAtil do m\xEAs subsequente",
|
|
1371
|
+
formaPagamento: "Transfer\xEAncia banc\xE1ria",
|
|
1372
|
+
servicos: [
|
|
1373
|
+
{
|
|
1374
|
+
nome: "Gest\xE3o de M\xEDdias Sociais",
|
|
1375
|
+
descricao: "Planejamento, cria\xE7\xE3o de conte\xFAdo e publica\xE7\xE3o em redes sociais",
|
|
1376
|
+
horasEstimadas: 60
|
|
1377
|
+
},
|
|
1378
|
+
{
|
|
1379
|
+
nome: "Cria\xE7\xE3o de Campanhas",
|
|
1380
|
+
descricao: "Desenvolvimento de campanhas publicit\xE1rias integradas",
|
|
1381
|
+
horasEstimadas: 50
|
|
1382
|
+
},
|
|
1383
|
+
{
|
|
1384
|
+
nome: "Produ\xE7\xE3o de Conte\xFAdo",
|
|
1385
|
+
descricao: "Cria\xE7\xE3o de textos, imagens e v\xEDdeos para diversos canais",
|
|
1386
|
+
horasEstimadas: 30
|
|
1387
|
+
},
|
|
1388
|
+
{
|
|
1389
|
+
nome: "Atendimento e Planejamento",
|
|
1390
|
+
descricao: "Reuni\xF5es de alinhamento, relat\xF3rios e planejamento estrat\xE9gico",
|
|
1391
|
+
horasEstimadas: 20
|
|
1392
|
+
}
|
|
1393
|
+
],
|
|
1394
|
+
clausulas: [
|
|
1395
|
+
{
|
|
1396
|
+
titulo: "Do Objeto",
|
|
1397
|
+
conteudo: "O presente contrato tem por objeto a presta\xE7\xE3o de servi\xE7os de publicidade e marketing pela CONTRATADA \xE0 CONTRATANTE, compreendendo as atividades descritas no escopo dos servi\xE7os, mediante o pagamento do fee mensal estabelecido."
|
|
1398
|
+
},
|
|
1399
|
+
{
|
|
1400
|
+
titulo: "Do Valor e Forma de Pagamento",
|
|
1401
|
+
conteudo: "Pelos servi\xE7os prestados, a CONTRATANTE pagar\xE1 \xE0 CONTRATADA o valor mensal de R$ 15.000,00 (quinze mil reais), que dever\xE1 ser pago at\xE9 o 5\xBA dia \xFAtil do m\xEAs subsequente \xE0 presta\xE7\xE3o dos servi\xE7os, mediante transfer\xEAncia banc\xE1ria para a conta indicada pela CONTRATADA."
|
|
1402
|
+
},
|
|
1403
|
+
{
|
|
1404
|
+
titulo: "Das Horas de Trabalho",
|
|
1405
|
+
conteudo: "O fee mensal inclui at\xE9 160 (cento e sessenta) horas de trabalho. Horas excedentes ser\xE3o cobradas separadamente ao valor de R$ 150,00 (cento e cinquenta reais) por hora, mediante aprova\xE7\xE3o pr\xE9via da CONTRATANTE."
|
|
1406
|
+
},
|
|
1407
|
+
{
|
|
1408
|
+
titulo: "Da Vig\xEAncia",
|
|
1409
|
+
conteudo: "O presente contrato ter\xE1 vig\xEAncia de 12 (doze) meses, iniciando-se em 01 de fevereiro de 2024 e encerrando-se em 31 de janeiro de 2025, podendo ser renovado mediante acordo entre as partes."
|
|
1410
|
+
},
|
|
1411
|
+
{
|
|
1412
|
+
titulo: "Da Rescis\xE3o",
|
|
1413
|
+
conteudo: "Qualquer das partes poder\xE1 rescindir o presente contrato mediante comunica\xE7\xE3o por escrito com anteced\xEAncia m\xEDnima de 30 (trinta) dias, sem preju\xEDzo das obriga\xE7\xF5es j\xE1 assumidas at\xE9 a data da rescis\xE3o."
|
|
1414
|
+
},
|
|
1415
|
+
{
|
|
1416
|
+
titulo: "Da Confidencialidade",
|
|
1417
|
+
conteudo: "As partes se comprometem a manter sigilo sobre todas as informa\xE7\xF5es confidenciais a que tiverem acesso em decorr\xEAncia deste contrato, n\xE3o podendo divulg\xE1-las a terceiros sem pr\xE9via autoriza\xE7\xE3o por escrito da outra parte."
|
|
1418
|
+
},
|
|
1419
|
+
{
|
|
1420
|
+
titulo: "Da Propriedade Intelectual",
|
|
1421
|
+
conteudo: "Todos os materiais criados pela CONTRATADA no \xE2mbito deste contrato ser\xE3o de propriedade da CONTRATANTE ap\xF3s o pagamento integral dos valores devidos, sendo permitido \xE0 CONTRATADA utilizar tais materiais em seu portf\xF3lio."
|
|
1422
|
+
},
|
|
1423
|
+
{
|
|
1424
|
+
titulo: "Do Foro",
|
|
1425
|
+
conteudo: "As partes elegem o foro da Comarca de S\xE3o Paulo, Estado de S\xE3o Paulo, para dirimir quaisquer d\xFAvidas ou quest\xF5es oriundas do presente contrato, com ren\xFAncia expressa a qualquer outro, por mais privilegiado que seja."
|
|
1426
|
+
}
|
|
1427
|
+
],
|
|
1428
|
+
observacoes: "Este contrato substitui e cancela todos os acordos anteriores, sejam verbais ou escritos, entre as partes. Qualquer altera\xE7\xE3o dever\xE1 ser feita por escrito e assinada por ambas as partes."
|
|
1429
|
+
};
|
|
1430
|
+
|
|
1431
|
+
// components/ui/use-print-contract.ts
|
|
1432
|
+
function usePrintContract(contentRef, contractNumber, options = {}) {
|
|
1433
|
+
const {
|
|
1434
|
+
onPrintStart,
|
|
1435
|
+
onPrintSuccess,
|
|
1436
|
+
onPrintError,
|
|
1437
|
+
onDownloadStart,
|
|
1438
|
+
onDownloadSuccess,
|
|
1439
|
+
onDownloadError
|
|
1440
|
+
} = options;
|
|
1441
|
+
const printContract = () => {
|
|
1442
|
+
try {
|
|
1443
|
+
const content = contentRef.current;
|
|
1444
|
+
if (!content) {
|
|
1445
|
+
throw new Error("Ref do conte\xFAdo n\xE3o est\xE1 dispon\xEDvel");
|
|
1446
|
+
}
|
|
1447
|
+
onPrintStart?.();
|
|
1448
|
+
const printWindow = window.open("", "_blank");
|
|
1449
|
+
if (!printWindow) {
|
|
1450
|
+
throw new Error("N\xE3o foi poss\xEDvel abrir janela de impress\xE3o");
|
|
1451
|
+
}
|
|
1452
|
+
const title = contractNumber ? `Contrato-${contractNumber}` : "Contrato";
|
|
1453
|
+
printWindow.document.write(`
|
|
1454
|
+
<!DOCTYPE html>
|
|
1455
|
+
<html>
|
|
1456
|
+
<head>
|
|
1457
|
+
<title>${title}</title>
|
|
1458
|
+
<meta charset="utf-8">
|
|
1459
|
+
<style>
|
|
1460
|
+
@page {
|
|
1461
|
+
size: A4;
|
|
1462
|
+
margin: 10mm;
|
|
1463
|
+
}
|
|
1464
|
+
|
|
1465
|
+
body {
|
|
1466
|
+
margin: 0;
|
|
1467
|
+
padding: 0;
|
|
1468
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
1469
|
+
font-size: 12pt;
|
|
1470
|
+
line-height: 1.6;
|
|
1471
|
+
color: #000;
|
|
1472
|
+
}
|
|
1473
|
+
|
|
1474
|
+
.container {
|
|
1475
|
+
padding: 10mm;
|
|
1476
|
+
}
|
|
1477
|
+
|
|
1478
|
+
/* Evitar quebras de p\xE1gina inadequadas */
|
|
1479
|
+
.avoid-break {
|
|
1480
|
+
page-break-inside: avoid !important;
|
|
1481
|
+
}
|
|
1482
|
+
|
|
1483
|
+
/* For\xE7ar quebra de p\xE1gina */
|
|
1484
|
+
.page-break {
|
|
1485
|
+
page-break-before: always !important;
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
/* Ocultar elementos com classe no-print */
|
|
1489
|
+
.no-print {
|
|
1490
|
+
display: none !important;
|
|
1491
|
+
}
|
|
1492
|
+
|
|
1493
|
+
/* Garantir que cores sejam preservadas */
|
|
1494
|
+
* {
|
|
1495
|
+
-webkit-print-color-adjust: exact !important;
|
|
1496
|
+
print-color-adjust: exact !important;
|
|
1497
|
+
}
|
|
1498
|
+
</style>
|
|
1499
|
+
</head>
|
|
1500
|
+
<body>
|
|
1501
|
+
<div class="container">
|
|
1502
|
+
${content.innerHTML}
|
|
1503
|
+
</div>
|
|
1504
|
+
</body>
|
|
1505
|
+
</html>
|
|
1506
|
+
`);
|
|
1507
|
+
printWindow.document.close();
|
|
1508
|
+
printWindow.onload = () => {
|
|
1509
|
+
setTimeout(() => {
|
|
1510
|
+
printWindow.print();
|
|
1511
|
+
printWindow.close();
|
|
1512
|
+
onPrintSuccess?.();
|
|
1513
|
+
}, 250);
|
|
1514
|
+
};
|
|
1515
|
+
} catch (error) {
|
|
1516
|
+
onPrintError?.(error);
|
|
1517
|
+
console.error("Erro ao imprimir contrato:", error);
|
|
1518
|
+
}
|
|
1519
|
+
};
|
|
1520
|
+
const downloadPDF = () => {
|
|
1521
|
+
try {
|
|
1522
|
+
onDownloadStart?.();
|
|
1523
|
+
setTimeout(() => {
|
|
1524
|
+
console.log("PDF gerado (simulado):", {
|
|
1525
|
+
contractNumber,
|
|
1526
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
1527
|
+
});
|
|
1528
|
+
onDownloadSuccess?.();
|
|
1529
|
+
}, 1500);
|
|
1530
|
+
console.info(
|
|
1531
|
+
"usePrintContract: downloadPDF \xE9 uma implementa\xE7\xE3o simulada. Para gerar PDFs reais, integre com html2pdf.js ou jsPDF. Veja a documenta\xE7\xE3o do hook para exemplos."
|
|
1532
|
+
);
|
|
1533
|
+
} catch (error) {
|
|
1534
|
+
onDownloadError?.(error);
|
|
1535
|
+
console.error("Erro ao gerar PDF:", error);
|
|
1536
|
+
}
|
|
1537
|
+
};
|
|
1538
|
+
return {
|
|
1539
|
+
/** Imprime o contrato em nova janela */
|
|
1540
|
+
printContract,
|
|
1541
|
+
/** Gera e baixa PDF do contrato (implementação simulada) */
|
|
1542
|
+
downloadPDF
|
|
1543
|
+
};
|
|
1544
|
+
}
|
|
1545
|
+
function ContractPrint({
|
|
1546
|
+
data,
|
|
1547
|
+
logo,
|
|
1548
|
+
showActions = true,
|
|
1549
|
+
showSummary = true,
|
|
1550
|
+
showServices = true,
|
|
1551
|
+
showInfo = false,
|
|
1552
|
+
className,
|
|
1553
|
+
onPrintStart,
|
|
1554
|
+
onPrintSuccess,
|
|
1555
|
+
onPrintError,
|
|
1556
|
+
onDownloadStart,
|
|
1557
|
+
onDownloadSuccess,
|
|
1558
|
+
onDownloadError
|
|
1559
|
+
}) {
|
|
1560
|
+
const printRef = React7.useRef(null);
|
|
1561
|
+
const { printContract, downloadPDF } = usePrintContract(
|
|
1562
|
+
printRef,
|
|
1563
|
+
data.numeroContrato,
|
|
1564
|
+
{
|
|
1565
|
+
onPrintStart,
|
|
1566
|
+
onPrintSuccess,
|
|
1567
|
+
onPrintError,
|
|
1568
|
+
onDownloadStart,
|
|
1569
|
+
onDownloadSuccess,
|
|
1570
|
+
onDownloadError
|
|
1571
|
+
}
|
|
1572
|
+
);
|
|
1573
|
+
const formatCurrency = (value) => {
|
|
1574
|
+
return new Intl.NumberFormat("pt-BR", {
|
|
1575
|
+
style: "currency",
|
|
1576
|
+
currency: "BRL"
|
|
1577
|
+
}).format(value);
|
|
1578
|
+
};
|
|
1579
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("space-y-6", className), children: [
|
|
1580
|
+
showActions && /* @__PURE__ */ jsxs(Card, { className: "no-print", children: [
|
|
1581
|
+
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, { className: "flex items-center justify-between", children: [
|
|
1582
|
+
/* @__PURE__ */ jsx("span", { children: "A\xE7\xF5es do Documento" }),
|
|
1583
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
|
|
1584
|
+
/* @__PURE__ */ jsxs(
|
|
1585
|
+
Button,
|
|
1586
|
+
{
|
|
1587
|
+
variant: "outline",
|
|
1588
|
+
size: "sm",
|
|
1589
|
+
onClick: downloadPDF,
|
|
1590
|
+
className: "gap-2",
|
|
1591
|
+
children: [
|
|
1592
|
+
/* @__PURE__ */ jsx(Download, { className: "h-4 w-4" }),
|
|
1593
|
+
"Download PDF"
|
|
1594
|
+
]
|
|
1595
|
+
}
|
|
1596
|
+
),
|
|
1597
|
+
/* @__PURE__ */ jsxs(
|
|
1598
|
+
Button,
|
|
1599
|
+
{
|
|
1600
|
+
variant: "default",
|
|
1601
|
+
size: "sm",
|
|
1602
|
+
onClick: printContract,
|
|
1603
|
+
className: "gap-2",
|
|
1604
|
+
children: [
|
|
1605
|
+
/* @__PURE__ */ jsx(Printer, { className: "h-4 w-4" }),
|
|
1606
|
+
"Imprimir"
|
|
1607
|
+
]
|
|
1608
|
+
}
|
|
1609
|
+
)
|
|
1610
|
+
] })
|
|
1611
|
+
] }) }),
|
|
1612
|
+
showSummary && /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-3 gap-4 text-sm", children: [
|
|
1613
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
1614
|
+
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground mb-1", children: "N\xBA do Contrato" }),
|
|
1615
|
+
/* @__PURE__ */ jsx("p", { className: "font-semibold", children: data.numeroContrato })
|
|
1616
|
+
] }),
|
|
1617
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
1618
|
+
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground mb-1", children: "Cliente" }),
|
|
1619
|
+
/* @__PURE__ */ jsx("p", { className: "font-semibold", children: data.cliente.nome })
|
|
1620
|
+
] }),
|
|
1621
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
1622
|
+
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground mb-1", children: "Valor do Fee" }),
|
|
1623
|
+
/* @__PURE__ */ jsx("p", { className: "font-semibold", children: formatCurrency(data.valorFee) })
|
|
1624
|
+
] })
|
|
1625
|
+
] }) })
|
|
1626
|
+
] }),
|
|
1627
|
+
/* @__PURE__ */ jsx("div", { className: "bg-white rounded-lg shadow-sm p-8", children: /* @__PURE__ */ jsx("div", { ref: printRef, children: /* @__PURE__ */ jsx(
|
|
1628
|
+
ContractTemplate,
|
|
1629
|
+
{
|
|
1630
|
+
data,
|
|
1631
|
+
showPreview: true,
|
|
1632
|
+
logo,
|
|
1633
|
+
showServices
|
|
1634
|
+
}
|
|
1635
|
+
) }) }),
|
|
1636
|
+
showInfo && /* @__PURE__ */ jsxs(Card, { className: "no-print", children: [
|
|
1637
|
+
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, { className: "flex items-center gap-2", children: [
|
|
1638
|
+
/* @__PURE__ */ jsx(Eye, { className: "h-5 w-5" }),
|
|
1639
|
+
"Sobre este Template"
|
|
1640
|
+
] }) }),
|
|
1641
|
+
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs("div", { className: "space-y-2 text-sm text-muted-foreground", children: [
|
|
1642
|
+
/* @__PURE__ */ jsxs("p", { children: [
|
|
1643
|
+
"\u2705 ",
|
|
1644
|
+
/* @__PURE__ */ jsx("strong", { children: "Design System:" }),
|
|
1645
|
+
" Utiliza a paleta de cores e tipografia do iClips"
|
|
1646
|
+
] }),
|
|
1647
|
+
/* @__PURE__ */ jsxs("p", { children: [
|
|
1648
|
+
"\u2705 ",
|
|
1649
|
+
/* @__PURE__ */ jsx("strong", { children: "Impress\xE3o Otimizada:" }),
|
|
1650
|
+
" Layout preparado para impress\xE3o em A4"
|
|
1651
|
+
] }),
|
|
1652
|
+
/* @__PURE__ */ jsxs("p", { children: [
|
|
1653
|
+
"\u2705 ",
|
|
1654
|
+
/* @__PURE__ */ jsx("strong", { children: "Componentes Reutiliz\xE1veis:" }),
|
|
1655
|
+
" PrintHeader, PrintFooter, PrintTable, PrintSignature"
|
|
1656
|
+
] }),
|
|
1657
|
+
/* @__PURE__ */ jsxs("p", { children: [
|
|
1658
|
+
"\u2705 ",
|
|
1659
|
+
/* @__PURE__ */ jsx("strong", { children: "Quebras de P\xE1gina:" }),
|
|
1660
|
+
" Configuradas automaticamente para evitar cortes"
|
|
1661
|
+
] }),
|
|
1662
|
+
/* @__PURE__ */ jsxs("p", { children: [
|
|
1663
|
+
"\u2705 ",
|
|
1664
|
+
/* @__PURE__ */ jsx("strong", { children: "Profissional:" }),
|
|
1665
|
+
" Layout clean e adequado para documentos legais"
|
|
1666
|
+
] })
|
|
1667
|
+
] }) })
|
|
1668
|
+
] })
|
|
1669
|
+
] });
|
|
1670
|
+
}
|
|
1671
|
+
var ContractPrintPreview = React7.forwardRef(({ data, logo, showServices = true, className }, ref) => {
|
|
1672
|
+
return /* @__PURE__ */ jsx("div", { className: cn("bg-white rounded-lg shadow-sm p-8", className), ref, children: /* @__PURE__ */ jsx(
|
|
1673
|
+
ContractTemplate,
|
|
1674
|
+
{
|
|
1675
|
+
data,
|
|
1676
|
+
showPreview: true,
|
|
1677
|
+
logo,
|
|
1678
|
+
showServices
|
|
1679
|
+
}
|
|
1680
|
+
) });
|
|
1681
|
+
});
|
|
1682
|
+
ContractPrintPreview.displayName = "ContractPrintPreview";
|
|
1683
|
+
function Calendar2({
|
|
1684
|
+
className,
|
|
1685
|
+
classNames,
|
|
1686
|
+
showOutsideDays = true,
|
|
1687
|
+
...props
|
|
1688
|
+
}) {
|
|
1689
|
+
return /* @__PURE__ */ jsx(
|
|
1690
|
+
DayPicker,
|
|
1691
|
+
{
|
|
1692
|
+
showOutsideDays,
|
|
1693
|
+
className: cn("p-3", className),
|
|
1694
|
+
classNames: {
|
|
1695
|
+
months: "flex flex-col sm:flex-row gap-2",
|
|
1696
|
+
month: "flex flex-col gap-4",
|
|
1697
|
+
caption: "flex justify-center pt-1 relative items-center w-full",
|
|
1698
|
+
caption_label: "text-sm font-medium",
|
|
1699
|
+
nav: "flex items-center gap-1",
|
|
1700
|
+
nav_button: cn(
|
|
1701
|
+
buttonVariants({ variant: "outline" }),
|
|
1702
|
+
"size-7 bg-transparent p-0 opacity-50 hover:opacity-100"
|
|
1703
|
+
),
|
|
1704
|
+
nav_button_previous: "absolute left-1",
|
|
1705
|
+
nav_button_next: "absolute right-1",
|
|
1706
|
+
table: "w-full border-collapse space-x-1",
|
|
1707
|
+
head_row: "flex",
|
|
1708
|
+
head_cell: "text-muted-foreground rounded-md w-8 font-normal text-[0.8rem]",
|
|
1709
|
+
row: "flex w-full mt-2",
|
|
1710
|
+
cell: cn(
|
|
1711
|
+
"relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-range-end)]:rounded-r-md",
|
|
1712
|
+
props.mode === "range" ? "[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md" : "[&:has([aria-selected])]:rounded-md"
|
|
1713
|
+
),
|
|
1714
|
+
day: cn(
|
|
1715
|
+
buttonVariants({ variant: "ghost" }),
|
|
1716
|
+
"size-8 p-0 font-normal aria-selected:opacity-100"
|
|
1717
|
+
),
|
|
1718
|
+
day_range_start: "day-range-start aria-selected:bg-primary aria-selected:text-primary-foreground",
|
|
1719
|
+
day_range_end: "day-range-end aria-selected:bg-primary aria-selected:text-primary-foreground",
|
|
1720
|
+
day_selected: "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground",
|
|
1721
|
+
day_today: "bg-accent text-accent-foreground",
|
|
1722
|
+
day_outside: "day-outside text-muted-foreground aria-selected:text-muted-foreground",
|
|
1723
|
+
day_disabled: "text-muted-foreground opacity-50",
|
|
1724
|
+
day_range_middle: "aria-selected:bg-accent aria-selected:text-accent-foreground",
|
|
1725
|
+
day_hidden: "invisible",
|
|
1726
|
+
...classNames
|
|
1727
|
+
},
|
|
1728
|
+
components: {
|
|
1729
|
+
Chevron: ({ orientation, ...props2 }) => {
|
|
1730
|
+
const Icon2 = orientation === "left" ? ChevronLeft : ChevronRight;
|
|
1731
|
+
return /* @__PURE__ */ jsx(Icon2, { className: "size-4", ...props2 });
|
|
1732
|
+
}
|
|
1733
|
+
},
|
|
1734
|
+
...props
|
|
1735
|
+
}
|
|
1736
|
+
);
|
|
1737
|
+
}
|
|
1738
|
+
var CarouselContext = React7.createContext(null);
|
|
940
1739
|
function useCarousel() {
|
|
941
|
-
const context =
|
|
1740
|
+
const context = React7.useContext(CarouselContext);
|
|
942
1741
|
if (!context) {
|
|
943
1742
|
throw new Error("useCarousel must be used within a <Carousel />");
|
|
944
1743
|
}
|
|
@@ -960,20 +1759,20 @@ function Carousel({
|
|
|
960
1759
|
},
|
|
961
1760
|
plugins
|
|
962
1761
|
);
|
|
963
|
-
const [canScrollPrev, setCanScrollPrev] =
|
|
964
|
-
const [canScrollNext, setCanScrollNext] =
|
|
965
|
-
const onSelect =
|
|
1762
|
+
const [canScrollPrev, setCanScrollPrev] = React7.useState(false);
|
|
1763
|
+
const [canScrollNext, setCanScrollNext] = React7.useState(false);
|
|
1764
|
+
const onSelect = React7.useCallback((api2) => {
|
|
966
1765
|
if (!api2) return;
|
|
967
1766
|
setCanScrollPrev(api2.canScrollPrev());
|
|
968
1767
|
setCanScrollNext(api2.canScrollNext());
|
|
969
1768
|
}, []);
|
|
970
|
-
const scrollPrev =
|
|
1769
|
+
const scrollPrev = React7.useCallback(() => {
|
|
971
1770
|
api?.scrollPrev();
|
|
972
1771
|
}, [api]);
|
|
973
|
-
const scrollNext =
|
|
1772
|
+
const scrollNext = React7.useCallback(() => {
|
|
974
1773
|
api?.scrollNext();
|
|
975
1774
|
}, [api]);
|
|
976
|
-
const handleKeyDown =
|
|
1775
|
+
const handleKeyDown = React7.useCallback(
|
|
977
1776
|
(event) => {
|
|
978
1777
|
if (event.key === "ArrowLeft") {
|
|
979
1778
|
event.preventDefault();
|
|
@@ -985,11 +1784,11 @@ function Carousel({
|
|
|
985
1784
|
},
|
|
986
1785
|
[scrollPrev, scrollNext]
|
|
987
1786
|
);
|
|
988
|
-
|
|
1787
|
+
React7.useEffect(() => {
|
|
989
1788
|
if (!api || !setApi) return;
|
|
990
1789
|
setApi(api);
|
|
991
1790
|
}, [api, setApi]);
|
|
992
|
-
|
|
1791
|
+
React7.useEffect(() => {
|
|
993
1792
|
if (!api) return;
|
|
994
1793
|
onSelect(api);
|
|
995
1794
|
api.on("reInit", onSelect);
|
|
@@ -1122,9 +1921,9 @@ function CarouselNext({
|
|
|
1122
1921
|
);
|
|
1123
1922
|
}
|
|
1124
1923
|
var THEMES = { light: "", dark: ".dark" };
|
|
1125
|
-
var ChartContext =
|
|
1924
|
+
var ChartContext = React7.createContext(null);
|
|
1126
1925
|
function useChart() {
|
|
1127
|
-
const context =
|
|
1926
|
+
const context = React7.useContext(ChartContext);
|
|
1128
1927
|
if (!context) {
|
|
1129
1928
|
throw new Error("useChart must be used within a <ChartContainer />");
|
|
1130
1929
|
}
|
|
@@ -1137,7 +1936,7 @@ function ChartContainer({
|
|
|
1137
1936
|
config,
|
|
1138
1937
|
...props
|
|
1139
1938
|
}) {
|
|
1140
|
-
const uniqueId =
|
|
1939
|
+
const uniqueId = React7.useId();
|
|
1141
1940
|
const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
|
|
1142
1941
|
return /* @__PURE__ */ jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs(
|
|
1143
1942
|
"div",
|
|
@@ -1198,7 +1997,7 @@ function ChartTooltipContent({
|
|
|
1198
1997
|
labelKey
|
|
1199
1998
|
}) {
|
|
1200
1999
|
const { config } = useChart();
|
|
1201
|
-
const tooltipLabel =
|
|
2000
|
+
const tooltipLabel = React7.useMemo(() => {
|
|
1202
2001
|
if (hideLabel || !payload?.length) {
|
|
1203
2002
|
return null;
|
|
1204
2003
|
}
|
|
@@ -1380,11 +2179,11 @@ function Popover({
|
|
|
1380
2179
|
}) {
|
|
1381
2180
|
return /* @__PURE__ */ jsx(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
|
|
1382
2181
|
}
|
|
1383
|
-
var PopoverTrigger =
|
|
2182
|
+
var PopoverTrigger = React7.forwardRef((props, ref) => {
|
|
1384
2183
|
return /* @__PURE__ */ jsx(PopoverPrimitive.Trigger, { ref, "data-slot": "popover-trigger", ...props });
|
|
1385
2184
|
});
|
|
1386
2185
|
PopoverTrigger.displayName = PopoverPrimitive.Trigger.displayName;
|
|
1387
|
-
var PopoverContent =
|
|
2186
|
+
var PopoverContent = React7.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => {
|
|
1388
2187
|
return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
1389
2188
|
PopoverPrimitive.Content,
|
|
1390
2189
|
{
|
|
@@ -1401,7 +2200,7 @@ var PopoverContent = React5.forwardRef(({ className, align = "center", sideOffse
|
|
|
1401
2200
|
) });
|
|
1402
2201
|
});
|
|
1403
2202
|
PopoverContent.displayName = PopoverPrimitive.Content.displayName;
|
|
1404
|
-
var PopoverAnchor =
|
|
2203
|
+
var PopoverAnchor = React7.forwardRef((props, ref) => {
|
|
1405
2204
|
return /* @__PURE__ */ jsx(PopoverPrimitive.Anchor, { ref, "data-slot": "popover-anchor", ...props });
|
|
1406
2205
|
});
|
|
1407
2206
|
PopoverAnchor.displayName = PopoverPrimitive.Anchor.displayName;
|
|
@@ -1446,7 +2245,7 @@ function ColorPicker({
|
|
|
1446
2245
|
}) {
|
|
1447
2246
|
const [color, setColor] = useState(value);
|
|
1448
2247
|
const [open, setOpen] = useState(false);
|
|
1449
|
-
|
|
2248
|
+
React7.useEffect(() => {
|
|
1450
2249
|
setColor(value);
|
|
1451
2250
|
}, [value]);
|
|
1452
2251
|
const handleColorChange = (newColor) => {
|
|
@@ -1616,13 +2415,13 @@ function TimePicker({
|
|
|
1616
2415
|
className,
|
|
1617
2416
|
disabled = false
|
|
1618
2417
|
}) {
|
|
1619
|
-
const [hours, setHours] =
|
|
2418
|
+
const [hours, setHours] = React7.useState(
|
|
1620
2419
|
date ? String(date.getHours()).padStart(2, "0") : "00"
|
|
1621
2420
|
);
|
|
1622
|
-
const [minutes, setMinutes] =
|
|
2421
|
+
const [minutes, setMinutes] = React7.useState(
|
|
1623
2422
|
date ? String(date.getMinutes()).padStart(2, "0") : "00"
|
|
1624
2423
|
);
|
|
1625
|
-
|
|
2424
|
+
React7.useEffect(() => {
|
|
1626
2425
|
if (date) {
|
|
1627
2426
|
setHours(String(date.getHours()).padStart(2, "0"));
|
|
1628
2427
|
setMinutes(String(date.getMinutes()).padStart(2, "0"));
|
|
@@ -1717,9 +2516,9 @@ function DateTimePicker({
|
|
|
1717
2516
|
className,
|
|
1718
2517
|
disabled = false
|
|
1719
2518
|
}) {
|
|
1720
|
-
const [open, setOpen] =
|
|
1721
|
-
const [selectedDate, setSelectedDate] =
|
|
1722
|
-
|
|
2519
|
+
const [open, setOpen] = React7.useState(false);
|
|
2520
|
+
const [selectedDate, setSelectedDate] = React7.useState(date);
|
|
2521
|
+
React7.useEffect(() => {
|
|
1723
2522
|
setSelectedDate(date);
|
|
1724
2523
|
}, [date]);
|
|
1725
2524
|
const handleDateSelect = (newDate) => {
|
|
@@ -1835,9 +2634,9 @@ function DateRangePicker({
|
|
|
1835
2634
|
disabled = false,
|
|
1836
2635
|
withTime = false
|
|
1837
2636
|
}) {
|
|
1838
|
-
const [open, setOpen] =
|
|
1839
|
-
const [range, setRange] =
|
|
1840
|
-
|
|
2637
|
+
const [open, setOpen] = React7.useState(false);
|
|
2638
|
+
const [range, setRange] = React7.useState(dateRange);
|
|
2639
|
+
React7.useEffect(() => {
|
|
1841
2640
|
setRange(dateRange);
|
|
1842
2641
|
}, [dateRange]);
|
|
1843
2642
|
const handleRangeSelect = (newRange) => {
|
|
@@ -2226,7 +3025,7 @@ var priorityConfig = {
|
|
|
2226
3025
|
bgColor: "bg-red-50 dark:bg-red-950/20"
|
|
2227
3026
|
}
|
|
2228
3027
|
};
|
|
2229
|
-
var KanbanCard =
|
|
3028
|
+
var KanbanCard = React7.forwardRef(
|
|
2230
3029
|
({
|
|
2231
3030
|
title,
|
|
2232
3031
|
description,
|
|
@@ -2484,7 +3283,7 @@ function DialogClose({
|
|
|
2484
3283
|
}) {
|
|
2485
3284
|
return /* @__PURE__ */ jsx(DialogPrimitive.Close, { "data-slot": "dialog-close", ...props });
|
|
2486
3285
|
}
|
|
2487
|
-
var DialogOverlay =
|
|
3286
|
+
var DialogOverlay = React7.forwardRef(({ className, ...props }, ref) => {
|
|
2488
3287
|
return /* @__PURE__ */ jsx(
|
|
2489
3288
|
DialogPrimitive.Overlay,
|
|
2490
3289
|
{
|
|
@@ -2927,7 +3726,7 @@ function Drawer({
|
|
|
2927
3726
|
}) {
|
|
2928
3727
|
return /* @__PURE__ */ jsx(Drawer$1.Root, { "data-slot": "drawer", ...props });
|
|
2929
3728
|
}
|
|
2930
|
-
var DrawerTrigger =
|
|
3729
|
+
var DrawerTrigger = React7.forwardRef(({ ...props }, ref) => {
|
|
2931
3730
|
return /* @__PURE__ */ jsx(Drawer$1.Trigger, { ref, "data-slot": "drawer-trigger", ...props });
|
|
2932
3731
|
});
|
|
2933
3732
|
DrawerTrigger.displayName = "DrawerTrigger";
|
|
@@ -2936,11 +3735,11 @@ function DrawerPortal({
|
|
|
2936
3735
|
}) {
|
|
2937
3736
|
return /* @__PURE__ */ jsx(Drawer$1.Portal, { "data-slot": "drawer-portal", ...props });
|
|
2938
3737
|
}
|
|
2939
|
-
var DrawerClose =
|
|
3738
|
+
var DrawerClose = React7.forwardRef(({ ...props }, ref) => {
|
|
2940
3739
|
return /* @__PURE__ */ jsx(Drawer$1.Close, { ref, "data-slot": "drawer-close", ...props });
|
|
2941
3740
|
});
|
|
2942
3741
|
DrawerClose.displayName = "DrawerClose";
|
|
2943
|
-
var DrawerOverlay =
|
|
3742
|
+
var DrawerOverlay = React7.forwardRef(({ className, ...props }, ref) => {
|
|
2944
3743
|
return /* @__PURE__ */ jsx(
|
|
2945
3744
|
Drawer$1.Overlay,
|
|
2946
3745
|
{
|
|
@@ -2955,7 +3754,7 @@ var DrawerOverlay = React5.forwardRef(({ className, ...props }, ref) => {
|
|
|
2955
3754
|
);
|
|
2956
3755
|
});
|
|
2957
3756
|
DrawerOverlay.displayName = "DrawerOverlay";
|
|
2958
|
-
var DrawerContent =
|
|
3757
|
+
var DrawerContent = React7.forwardRef(({ className, children, ...props }, ref) => {
|
|
2959
3758
|
return /* @__PURE__ */ jsxs(DrawerPortal, { "data-slot": "drawer-portal", children: [
|
|
2960
3759
|
/* @__PURE__ */ jsx(DrawerOverlay, {}),
|
|
2961
3760
|
/* @__PURE__ */ jsxs(
|
|
@@ -3001,7 +3800,7 @@ function DrawerFooter({ className, ...props }) {
|
|
|
3001
3800
|
}
|
|
3002
3801
|
);
|
|
3003
3802
|
}
|
|
3004
|
-
var DrawerTitle =
|
|
3803
|
+
var DrawerTitle = React7.forwardRef(({ className, ...props }, ref) => {
|
|
3005
3804
|
return /* @__PURE__ */ jsx(
|
|
3006
3805
|
Drawer$1.Title,
|
|
3007
3806
|
{
|
|
@@ -3013,7 +3812,7 @@ var DrawerTitle = React5.forwardRef(({ className, ...props }, ref) => {
|
|
|
3013
3812
|
);
|
|
3014
3813
|
});
|
|
3015
3814
|
DrawerTitle.displayName = "DrawerTitle";
|
|
3016
|
-
var DrawerDescription =
|
|
3815
|
+
var DrawerDescription = React7.forwardRef(({ className, ...props }, ref) => {
|
|
3017
3816
|
return /* @__PURE__ */ jsx(
|
|
3018
3817
|
Drawer$1.Description,
|
|
3019
3818
|
{
|
|
@@ -3026,7 +3825,7 @@ var DrawerDescription = React5.forwardRef(({ className, ...props }, ref) => {
|
|
|
3026
3825
|
});
|
|
3027
3826
|
DrawerDescription.displayName = "DrawerDescription";
|
|
3028
3827
|
var Form = FormProvider;
|
|
3029
|
-
var FormFieldContext =
|
|
3828
|
+
var FormFieldContext = React7.createContext(
|
|
3030
3829
|
{}
|
|
3031
3830
|
);
|
|
3032
3831
|
var FormField = ({
|
|
@@ -3035,8 +3834,8 @@ var FormField = ({
|
|
|
3035
3834
|
return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, { ...props }) });
|
|
3036
3835
|
};
|
|
3037
3836
|
var useFormField = () => {
|
|
3038
|
-
const fieldContext =
|
|
3039
|
-
const itemContext =
|
|
3837
|
+
const fieldContext = React7.useContext(FormFieldContext);
|
|
3838
|
+
const itemContext = React7.useContext(FormItemContext);
|
|
3040
3839
|
const { getFieldState } = useFormContext();
|
|
3041
3840
|
const formState = useFormState({ name: fieldContext.name });
|
|
3042
3841
|
const fieldState = getFieldState(fieldContext.name, formState);
|
|
@@ -3053,11 +3852,11 @@ var useFormField = () => {
|
|
|
3053
3852
|
...fieldState
|
|
3054
3853
|
};
|
|
3055
3854
|
};
|
|
3056
|
-
var FormItemContext =
|
|
3855
|
+
var FormItemContext = React7.createContext(
|
|
3057
3856
|
{}
|
|
3058
3857
|
);
|
|
3059
3858
|
function FormItem({ className, ...props }) {
|
|
3060
|
-
const id =
|
|
3859
|
+
const id = React7.useId();
|
|
3061
3860
|
return /* @__PURE__ */ jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx(
|
|
3062
3861
|
"div",
|
|
3063
3862
|
{
|
|
@@ -3188,7 +3987,7 @@ function InputOTPSlot({
|
|
|
3188
3987
|
className,
|
|
3189
3988
|
...props
|
|
3190
3989
|
}) {
|
|
3191
|
-
const inputOTPContext =
|
|
3990
|
+
const inputOTPContext = React7.useContext(OTPInputContext);
|
|
3192
3991
|
const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
|
|
3193
3992
|
return /* @__PURE__ */ jsxs(
|
|
3194
3993
|
"div",
|
|
@@ -3928,7 +4727,7 @@ function SheetPortal({
|
|
|
3928
4727
|
}) {
|
|
3929
4728
|
return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
|
|
3930
4729
|
}
|
|
3931
|
-
var SheetOverlay =
|
|
4730
|
+
var SheetOverlay = React7.forwardRef(({ className, ...props }, ref) => {
|
|
3932
4731
|
return /* @__PURE__ */ jsx(
|
|
3933
4732
|
DialogPrimitive.Overlay,
|
|
3934
4733
|
{
|
|
@@ -4023,10 +4822,10 @@ function SheetDescription({
|
|
|
4023
4822
|
}
|
|
4024
4823
|
var MOBILE_BREAKPOINT = 768;
|
|
4025
4824
|
function useIsMobile() {
|
|
4026
|
-
const [isMobile, setIsMobile] =
|
|
4825
|
+
const [isMobile, setIsMobile] = React7.useState(
|
|
4027
4826
|
void 0
|
|
4028
4827
|
);
|
|
4029
|
-
|
|
4828
|
+
React7.useEffect(() => {
|
|
4030
4829
|
const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
|
|
4031
4830
|
const onChange = () => {
|
|
4032
4831
|
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
@@ -4099,9 +4898,9 @@ var SIDEBAR_WIDTH = "16rem";
|
|
|
4099
4898
|
var SIDEBAR_WIDTH_MOBILE = "18rem";
|
|
4100
4899
|
var SIDEBAR_WIDTH_ICON = "3rem";
|
|
4101
4900
|
var SIDEBAR_KEYBOARD_SHORTCUT = "b";
|
|
4102
|
-
var SidebarContext =
|
|
4901
|
+
var SidebarContext = React7.createContext(null);
|
|
4103
4902
|
function useSidebar() {
|
|
4104
|
-
const context =
|
|
4903
|
+
const context = React7.useContext(SidebarContext);
|
|
4105
4904
|
if (!context) {
|
|
4106
4905
|
throw new Error("useSidebar must be used within a SidebarProvider.");
|
|
4107
4906
|
}
|
|
@@ -4117,10 +4916,10 @@ function SidebarProvider({
|
|
|
4117
4916
|
...props
|
|
4118
4917
|
}) {
|
|
4119
4918
|
const isMobile = useIsMobile();
|
|
4120
|
-
const [openMobile, setOpenMobile] =
|
|
4121
|
-
const [_open, _setOpen] =
|
|
4919
|
+
const [openMobile, setOpenMobile] = React7.useState(false);
|
|
4920
|
+
const [_open, _setOpen] = React7.useState(defaultOpen);
|
|
4122
4921
|
const open = openProp ?? _open;
|
|
4123
|
-
const setOpen =
|
|
4922
|
+
const setOpen = React7.useCallback(
|
|
4124
4923
|
(value) => {
|
|
4125
4924
|
const openState = typeof value === "function" ? value(open) : value;
|
|
4126
4925
|
if (setOpenProp) {
|
|
@@ -4132,10 +4931,10 @@ function SidebarProvider({
|
|
|
4132
4931
|
},
|
|
4133
4932
|
[setOpenProp, open]
|
|
4134
4933
|
);
|
|
4135
|
-
const toggleSidebar =
|
|
4934
|
+
const toggleSidebar = React7.useCallback(() => {
|
|
4136
4935
|
return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
|
|
4137
4936
|
}, [isMobile, setOpen, setOpenMobile]);
|
|
4138
|
-
|
|
4937
|
+
React7.useEffect(() => {
|
|
4139
4938
|
const handleKeyDown = (event) => {
|
|
4140
4939
|
if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
|
|
4141
4940
|
event.preventDefault();
|
|
@@ -4146,7 +4945,7 @@ function SidebarProvider({
|
|
|
4146
4945
|
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
4147
4946
|
}, [toggleSidebar]);
|
|
4148
4947
|
const state = open ? "expanded" : "collapsed";
|
|
4149
|
-
const contextValue =
|
|
4948
|
+
const contextValue = React7.useMemo(
|
|
4150
4949
|
() => ({
|
|
4151
4950
|
state,
|
|
4152
4951
|
open,
|
|
@@ -4590,7 +5389,7 @@ function SidebarMenuSkeleton({
|
|
|
4590
5389
|
showIcon = false,
|
|
4591
5390
|
...props
|
|
4592
5391
|
}) {
|
|
4593
|
-
const width =
|
|
5392
|
+
const width = React7.useMemo(() => {
|
|
4594
5393
|
return `${Math.floor(Math.random() * 40) + 50}%`;
|
|
4595
5394
|
}, []);
|
|
4596
5395
|
return /* @__PURE__ */ jsxs(
|
|
@@ -4686,7 +5485,7 @@ function Slider({
|
|
|
4686
5485
|
max = 100,
|
|
4687
5486
|
...props
|
|
4688
5487
|
}) {
|
|
4689
|
-
const _values =
|
|
5488
|
+
const _values = React7.useMemo(
|
|
4690
5489
|
() => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],
|
|
4691
5490
|
[value, defaultValue, min, max]
|
|
4692
5491
|
);
|
|
@@ -4825,7 +5624,7 @@ function TableFooter({ className, ...props }) {
|
|
|
4825
5624
|
}
|
|
4826
5625
|
);
|
|
4827
5626
|
}
|
|
4828
|
-
var TableRow =
|
|
5627
|
+
var TableRow = React7.forwardRef(({ className, ...props }, ref) => {
|
|
4829
5628
|
return /* @__PURE__ */ jsx(
|
|
4830
5629
|
"tr",
|
|
4831
5630
|
{
|
|
@@ -4937,9 +5736,9 @@ function TabsContent({
|
|
|
4937
5736
|
}
|
|
4938
5737
|
);
|
|
4939
5738
|
}
|
|
4940
|
-
var UnderlineTabsContext =
|
|
5739
|
+
var UnderlineTabsContext = React7.createContext(void 0);
|
|
4941
5740
|
function useUnderlineTabs() {
|
|
4942
|
-
const context =
|
|
5741
|
+
const context = React7.useContext(UnderlineTabsContext);
|
|
4943
5742
|
if (!context) {
|
|
4944
5743
|
throw new Error("UnderlineTabs components must be used within UnderlineTabs");
|
|
4945
5744
|
}
|
|
@@ -4952,7 +5751,7 @@ function UnderlineTabs({
|
|
|
4952
5751
|
children,
|
|
4953
5752
|
className
|
|
4954
5753
|
}) {
|
|
4955
|
-
const [internalValue, setInternalValue] =
|
|
5754
|
+
const [internalValue, setInternalValue] = React7.useState(defaultValue || "");
|
|
4956
5755
|
const value = controlledValue !== void 0 ? controlledValue : internalValue;
|
|
4957
5756
|
const handleValueChange = (newValue) => {
|
|
4958
5757
|
if (controlledValue === void 0) {
|
|
@@ -5060,7 +5859,7 @@ function Toggle({
|
|
|
5060
5859
|
}
|
|
5061
5860
|
);
|
|
5062
5861
|
}
|
|
5063
|
-
var ToggleGroupContext =
|
|
5862
|
+
var ToggleGroupContext = React7.createContext({
|
|
5064
5863
|
size: "default",
|
|
5065
5864
|
variant: "default"
|
|
5066
5865
|
});
|
|
@@ -5093,7 +5892,7 @@ function ToggleGroupItem({
|
|
|
5093
5892
|
size,
|
|
5094
5893
|
...props
|
|
5095
5894
|
}) {
|
|
5096
|
-
const context =
|
|
5895
|
+
const context = React7.useContext(ToggleGroupContext);
|
|
5097
5896
|
return /* @__PURE__ */ jsx(
|
|
5098
5897
|
ToggleGroupPrimitive.Item,
|
|
5099
5898
|
{
|
|
@@ -5113,23 +5912,174 @@ function ToggleGroupItem({
|
|
|
5113
5912
|
}
|
|
5114
5913
|
);
|
|
5115
5914
|
}
|
|
5116
|
-
|
|
5117
|
-
|
|
5118
|
-
|
|
5119
|
-
|
|
5120
|
-
|
|
5915
|
+
function ProposalTemplate({
|
|
5916
|
+
data,
|
|
5917
|
+
showPreview = false,
|
|
5918
|
+
logo
|
|
5919
|
+
}) {
|
|
5920
|
+
const formatCurrency = (value) => {
|
|
5921
|
+
return new Intl.NumberFormat("pt-BR", {
|
|
5922
|
+
style: "currency",
|
|
5923
|
+
currency: "BRL"
|
|
5924
|
+
}).format(value);
|
|
5121
5925
|
};
|
|
5122
|
-
const
|
|
5123
|
-
|
|
5926
|
+
const formatDate = (dateStr) => {
|
|
5927
|
+
return new Date(dateStr).toLocaleDateString("pt-BR", {
|
|
5928
|
+
year: "numeric",
|
|
5929
|
+
month: "long",
|
|
5930
|
+
day: "numeric"
|
|
5931
|
+
});
|
|
5932
|
+
};
|
|
5933
|
+
return /* @__PURE__ */ jsxs(
|
|
5124
5934
|
"div",
|
|
5125
5935
|
{
|
|
5126
|
-
className:
|
|
5127
|
-
|
|
5128
|
-
|
|
5936
|
+
className: cn(
|
|
5937
|
+
"proposal-template bg-white text-black",
|
|
5938
|
+
showPreview ? "shadow-lg rounded-lg p-8 max-w-5xl mx-auto my-8" : "p-0"
|
|
5939
|
+
),
|
|
5940
|
+
style: {
|
|
5941
|
+
fontFamily: "system-ui, -apple-system, sans-serif",
|
|
5942
|
+
fontSize: "12pt",
|
|
5943
|
+
lineHeight: "1.6"
|
|
5944
|
+
},
|
|
5945
|
+
children: [
|
|
5946
|
+
/* @__PURE__ */ jsx(
|
|
5947
|
+
PrintHeader,
|
|
5948
|
+
{
|
|
5949
|
+
logo,
|
|
5950
|
+
companyName: data.agency.name,
|
|
5951
|
+
contactInfo: {
|
|
5952
|
+
email: data.agency.email,
|
|
5953
|
+
phone: data.agency.phone
|
|
5954
|
+
},
|
|
5955
|
+
documentType: "Proposta Comercial",
|
|
5956
|
+
documentNumber: data.proposalNumber,
|
|
5957
|
+
issueDate: formatDate(data.issueDate)
|
|
5958
|
+
}
|
|
5959
|
+
),
|
|
5960
|
+
/* @__PURE__ */ jsx(PrintSection, { children: /* @__PURE__ */ jsx(
|
|
5961
|
+
PrintInfoGrid,
|
|
5962
|
+
{
|
|
5963
|
+
columns: 2,
|
|
5964
|
+
items: [
|
|
5965
|
+
{
|
|
5966
|
+
label: "N\xBA da Proposta",
|
|
5967
|
+
value: data.proposalNumber,
|
|
5968
|
+
highlight: true
|
|
5969
|
+
},
|
|
5970
|
+
{
|
|
5971
|
+
label: "Validade",
|
|
5972
|
+
value: formatDate(data.validUntil)
|
|
5973
|
+
},
|
|
5974
|
+
{
|
|
5975
|
+
label: "Cliente",
|
|
5976
|
+
value: data.client.name,
|
|
5977
|
+
highlight: true
|
|
5978
|
+
},
|
|
5979
|
+
...data.client.contact ? [{ label: "Contato", value: data.client.contact }] : []
|
|
5980
|
+
]
|
|
5981
|
+
}
|
|
5982
|
+
) }),
|
|
5983
|
+
/* @__PURE__ */ jsxs(PrintSection, { title: "Projeto", children: [
|
|
5984
|
+
/* @__PURE__ */ jsx("h3", { className: "text-base font-semibold text-primary mb-3", children: data.projectTitle }),
|
|
5985
|
+
data.projectDescription && /* @__PURE__ */ jsx("p", { className: "text-sm text-gray-700 leading-relaxed", children: data.projectDescription })
|
|
5986
|
+
] }),
|
|
5987
|
+
data.objectives && data.objectives.length > 0 && /* @__PURE__ */ jsx(PrintSection, { title: "Objetivos", children: /* @__PURE__ */ jsx("ul", { className: "list-disc list-inside space-y-2", children: data.objectives.map((objective, index) => /* @__PURE__ */ jsx("li", { className: "text-sm text-gray-700", children: objective }, index)) }) }),
|
|
5988
|
+
/* @__PURE__ */ jsxs(PrintSection, { title: "Escopo e Investimento", children: [
|
|
5989
|
+
/* @__PURE__ */ jsx(
|
|
5990
|
+
PrintTable,
|
|
5991
|
+
{
|
|
5992
|
+
columns: [
|
|
5993
|
+
{ header: "Item", key: "name", width: "35%" },
|
|
5994
|
+
{ header: "Descri\xE7\xE3o", key: "description", width: "30%" },
|
|
5995
|
+
{
|
|
5996
|
+
header: "Qtd.",
|
|
5997
|
+
key: "quantity",
|
|
5998
|
+
align: "center",
|
|
5999
|
+
width: "10%",
|
|
6000
|
+
render: (value) => value || "-"
|
|
6001
|
+
},
|
|
6002
|
+
{
|
|
6003
|
+
header: "Valor Unit.",
|
|
6004
|
+
key: "unitPrice",
|
|
6005
|
+
align: "right",
|
|
6006
|
+
width: "12.5%",
|
|
6007
|
+
render: (value) => value ? formatCurrency(value) : "-"
|
|
6008
|
+
},
|
|
6009
|
+
{
|
|
6010
|
+
header: "Valor Total",
|
|
6011
|
+
key: "totalPrice",
|
|
6012
|
+
align: "right",
|
|
6013
|
+
width: "12.5%",
|
|
6014
|
+
render: (value) => formatCurrency(value)
|
|
6015
|
+
}
|
|
6016
|
+
],
|
|
6017
|
+
data: data.items,
|
|
6018
|
+
striped: true,
|
|
6019
|
+
density: "comfortable"
|
|
6020
|
+
}
|
|
6021
|
+
),
|
|
6022
|
+
/* @__PURE__ */ jsx("div", { className: "mt-6 flex justify-end", children: /* @__PURE__ */ jsxs("div", { className: "w-80 space-y-2", children: [
|
|
6023
|
+
/* @__PURE__ */ jsxs("div", { className: "flex justify-between text-sm", children: [
|
|
6024
|
+
/* @__PURE__ */ jsx("span", { className: "text-gray-600", children: "Subtotal:" }),
|
|
6025
|
+
/* @__PURE__ */ jsx("span", { className: "font-semibold", children: formatCurrency(data.subtotal) })
|
|
6026
|
+
] }),
|
|
6027
|
+
data.discount && data.discount > 0 && /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-sm", children: [
|
|
6028
|
+
/* @__PURE__ */ jsx("span", { className: "text-gray-600", children: "Desconto:" }),
|
|
6029
|
+
/* @__PURE__ */ jsxs("span", { className: "font-semibold text-green-600", children: [
|
|
6030
|
+
"- ",
|
|
6031
|
+
formatCurrency(data.discount)
|
|
6032
|
+
] })
|
|
6033
|
+
] }),
|
|
6034
|
+
/* @__PURE__ */ jsxs("div", { className: "border-t-2 border-primary pt-2 flex justify-between", children: [
|
|
6035
|
+
/* @__PURE__ */ jsx("span", { className: "font-semibold text-base", children: "Total:" }),
|
|
6036
|
+
/* @__PURE__ */ jsx("span", { className: "font-semibold text-lg text-primary", children: formatCurrency(data.total) })
|
|
6037
|
+
] })
|
|
6038
|
+
] }) })
|
|
6039
|
+
] }),
|
|
6040
|
+
(data.paymentConditions || data.deliveryTime) && /* @__PURE__ */ jsx(PrintSection, { title: "Condi\xE7\xF5es Comerciais", children: /* @__PURE__ */ jsx(
|
|
6041
|
+
PrintInfoGrid,
|
|
6042
|
+
{
|
|
6043
|
+
columns: 1,
|
|
6044
|
+
items: [
|
|
6045
|
+
...data.paymentConditions ? [
|
|
6046
|
+
{
|
|
6047
|
+
label: "Forma de Pagamento",
|
|
6048
|
+
value: data.paymentConditions
|
|
6049
|
+
}
|
|
6050
|
+
] : [],
|
|
6051
|
+
...data.deliveryTime ? [{ label: "Prazo de Entrega", value: data.deliveryTime }] : []
|
|
6052
|
+
]
|
|
6053
|
+
}
|
|
6054
|
+
) }),
|
|
6055
|
+
data.notes && /* @__PURE__ */ jsx(PrintSection, { title: "Observa\xE7\xF5es", children: /* @__PURE__ */ jsx("p", { className: "text-sm text-gray-700 leading-relaxed", children: data.notes }) }),
|
|
6056
|
+
/* @__PURE__ */ jsx(
|
|
6057
|
+
PrintSignature,
|
|
6058
|
+
{
|
|
6059
|
+
signatures: [
|
|
6060
|
+
{
|
|
6061
|
+
label: "APROVA\xC7\xC3O DO CLIENTE",
|
|
6062
|
+
name: data.client.name,
|
|
6063
|
+
role: data.client.contact
|
|
6064
|
+
}
|
|
6065
|
+
],
|
|
6066
|
+
layout: "vertical",
|
|
6067
|
+
instructionText: "Para aprovar esta proposta, assine abaixo e retorne para o e-mail indicado no cabe\xE7alho."
|
|
6068
|
+
}
|
|
6069
|
+
),
|
|
6070
|
+
/* @__PURE__ */ jsx(
|
|
6071
|
+
PrintFooter,
|
|
6072
|
+
{
|
|
6073
|
+
pageNumber: 1,
|
|
6074
|
+
totalPages: 1,
|
|
6075
|
+
footerText: `Proposta v\xE1lida at\xE9 ${formatDate(data.validUntil)}`
|
|
6076
|
+
}
|
|
6077
|
+
)
|
|
6078
|
+
]
|
|
5129
6079
|
}
|
|
5130
|
-
)
|
|
6080
|
+
);
|
|
5131
6081
|
}
|
|
5132
6082
|
|
|
5133
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppLayout, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Calendar2 as Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, ColorPicker, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DateRangePicker, DateTimePicker, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, ImageWithFallback, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, KanbanCard, Label, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverTrigger, Progress, RadioGroup4 as RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Toaster as Sonner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, TimePicker, Toggle, ToggleGroup, ToggleGroupItem, Tooltip2 as Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UnderlineTabs, UnderlineTabsContent, UnderlineTabsList, UnderlineTabsTrigger, badgeVariants, buttonVariants, cn, navigationMenuTriggerStyle, toggleVariants, useFormField, useIsMobile, useSidebar };
|
|
6083
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppLayout, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Calendar2 as Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, ColorPicker, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, ContractPrint, ContractPrintPreview, ContractTemplate, DateRangePicker, DateTimePicker, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, ImageWithFallback, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, KanbanCard, Label, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverTrigger, PrintFooter, PrintHeader, PrintInfoGrid, PrintSection, PrintSignature, PrintTable, Progress, ProposalTemplate, RadioGroup4 as RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Toaster as Sonner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, TimePicker, Toggle, ToggleGroup, ToggleGroupItem, Tooltip2 as Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UnderlineTabs, UnderlineTabsContent, UnderlineTabsList, UnderlineTabsTrigger, badgeVariants, buttonVariants, cn, dadosContratoExemplo, navigationMenuTriggerStyle, toggleVariants, useFormField, useIsMobile, usePrintContract, useSidebar };
|
|
5134
6084
|
//# sourceMappingURL=index.js.map
|
|
5135
6085
|
//# sourceMappingURL=index.js.map
|