@mlw-packages/react-components 1.10.1 → 1.10.3
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.css +177 -13
- package/dist/index.d.mts +159 -30
- package/dist/index.d.ts +159 -30
- package/dist/index.js +861 -138
- package/dist/index.mjs +852 -141
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3689,6 +3689,15 @@ var CardFooterBase = React32__namespace.forwardRef(({ className, testid: dataTes
|
|
|
3689
3689
|
}
|
|
3690
3690
|
));
|
|
3691
3691
|
CardFooterBase.displayName = "CardFooter";
|
|
3692
|
+
var FileTypes = {
|
|
3693
|
+
Image: ["image/*", ".jpeg", ".jpg", ".png", ".gif", ".webp", ".svg"],
|
|
3694
|
+
Document: [".pdf", ".doc", ".docx", ".txt", ".rtf"],
|
|
3695
|
+
Spreadsheet: [".xls", ".xlsx", ".csv"],
|
|
3696
|
+
Presentation: [".ppt", ".pptx"],
|
|
3697
|
+
Video: ["video/*", ".mp4", ".webm", ".mkv", ".avi"],
|
|
3698
|
+
Audio: ["audio/*", ".mp3", ".wav", ".ogg"],
|
|
3699
|
+
All: []
|
|
3700
|
+
};
|
|
3692
3701
|
var formatFileSize = (bytes) => {
|
|
3693
3702
|
if (bytes === 0) return "0 Bytes";
|
|
3694
3703
|
const k = 1024;
|
|
@@ -3755,8 +3764,8 @@ var createImagePreview = (file) => {
|
|
|
3755
3764
|
var FileUploader = React32__namespace.forwardRef(
|
|
3756
3765
|
({
|
|
3757
3766
|
className,
|
|
3758
|
-
accept,
|
|
3759
|
-
maxSize,
|
|
3767
|
+
accept = FileTypes.All,
|
|
3768
|
+
maxSize = 10,
|
|
3760
3769
|
maxFiles = 1,
|
|
3761
3770
|
disabled = false,
|
|
3762
3771
|
value = [],
|
|
@@ -3786,8 +3795,9 @@ var FileUploader = React32__namespace.forwardRef(
|
|
|
3786
3795
|
};
|
|
3787
3796
|
}, [files]);
|
|
3788
3797
|
const validateFile = (file) => {
|
|
3789
|
-
|
|
3790
|
-
|
|
3798
|
+
const maxSizeBytes = maxSize * 1024 * 1024;
|
|
3799
|
+
if (file.size > maxSizeBytes) {
|
|
3800
|
+
return `Arquivo muito grande. M\xE1ximo: ${maxSize} MB`;
|
|
3791
3801
|
}
|
|
3792
3802
|
if (accept.length > 0) {
|
|
3793
3803
|
const fileExtension = `.${getFileExtension(file.name)}`;
|
|
@@ -3897,22 +3907,32 @@ var FileUploader = React32__namespace.forwardRef(
|
|
|
3897
3907
|
}
|
|
3898
3908
|
};
|
|
3899
3909
|
const acceptString = accept.join(",");
|
|
3900
|
-
const
|
|
3910
|
+
const getFormatText = () => {
|
|
3911
|
+
if (accept === FileTypes.All || accept.length === 0)
|
|
3912
|
+
return "Qualquer formato";
|
|
3913
|
+
if (accept === FileTypes.Image) return "Apenas imagens";
|
|
3914
|
+
if (accept === FileTypes.Document) return "Apenas documentos";
|
|
3915
|
+
if (accept === FileTypes.Video) return "Apenas v\xEDdeos";
|
|
3916
|
+
if (accept === FileTypes.Audio) return "Apenas \xE1udio";
|
|
3917
|
+
if (accept === FileTypes.Spreadsheet) return "Apenas planilhas";
|
|
3918
|
+
if (accept === FileTypes.Presentation) return "Apenas apresenta\xE7\xF5es";
|
|
3919
|
+
return "Formatos espec\xEDficos v\xE1lidos";
|
|
3920
|
+
};
|
|
3921
|
+
const defaultSubtext = dropzoneSubtext || `${getFormatText()} (M\xE1x: ${maxSize}MB)`;
|
|
3901
3922
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("w-full", className), ...props, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3902
3923
|
framerMotion.motion.div,
|
|
3903
3924
|
{
|
|
3904
3925
|
className: cn(
|
|
3905
|
-
"relative flex cursor-pointer flex-col items-center justify-center rounded-xl border-2 border-dashed p-
|
|
3926
|
+
"relative flex cursor-pointer flex-col items-center justify-center rounded-xl border-2 border-dashed p-5 transition-all duration-300 dark:shadow-black/20",
|
|
3906
3927
|
isDragging && "border-primary bg-primary/10 scale-[1.02]",
|
|
3907
3928
|
!isDragging && "border-border hover:border-primary/60 hover:bg-muted/50",
|
|
3908
|
-
disabled && "cursor-not-allowed opacity-50
|
|
3929
|
+
disabled && "cursor-not-allowed opacity-50"
|
|
3909
3930
|
),
|
|
3910
3931
|
onDragEnter: handleDragEnter,
|
|
3911
3932
|
onDragOver: handleDragOver,
|
|
3912
3933
|
onDragLeave: handleDragLeave,
|
|
3913
3934
|
onDrop: handleDrop,
|
|
3914
3935
|
onClick: handleClick,
|
|
3915
|
-
whileHover: !disabled ? { scale: 1.01 } : void 0,
|
|
3916
3936
|
whileTap: !disabled ? { scale: 0.99 } : void 0,
|
|
3917
3937
|
animate: isDragging ? {
|
|
3918
3938
|
borderColor: `hsl(var(--primary))`,
|
|
@@ -3972,7 +3992,7 @@ var FileUploader = React32__namespace.forwardRef(
|
|
|
3972
3992
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3973
3993
|
framerMotion.motion.p,
|
|
3974
3994
|
{
|
|
3975
|
-
className: "mb-2 text-
|
|
3995
|
+
className: "mb-2 text-xs font-semibold text-foreground",
|
|
3976
3996
|
initial: animate ? { opacity: 0, y: -10 } : false,
|
|
3977
3997
|
animate: { opacity: 1, y: 0 },
|
|
3978
3998
|
transition: { delay: 0.1 },
|
|
@@ -3982,63 +4002,29 @@ var FileUploader = React32__namespace.forwardRef(
|
|
|
3982
4002
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3983
4003
|
framerMotion.motion.p,
|
|
3984
4004
|
{
|
|
3985
|
-
className: "text-
|
|
4005
|
+
className: "text-xs text-muted-foreground",
|
|
3986
4006
|
initial: animate ? { opacity: 0, y: -10 } : false,
|
|
3987
4007
|
animate: { opacity: 1, y: 0 },
|
|
3988
4008
|
transition: { delay: 0.2 },
|
|
3989
4009
|
children: defaultSubtext
|
|
3990
4010
|
}
|
|
3991
4011
|
),
|
|
3992
|
-
/* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: files.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3993
|
-
framerMotion.motion.div,
|
|
3994
|
-
{
|
|
3995
|
-
initial: { opacity: 0, scale: 0.8, y: 10 },
|
|
3996
|
-
animate: {
|
|
3997
|
-
opacity: 1,
|
|
3998
|
-
scale: 1,
|
|
3999
|
-
y: 0,
|
|
4000
|
-
backgroundColor: `hsl(var(--primary) / 0.1)`,
|
|
4001
|
-
borderColor: `hsl(var(--primary) / 0.2)`
|
|
4002
|
-
},
|
|
4003
|
-
exit: { opacity: 0, scale: 0.8, y: 10 },
|
|
4004
|
-
className: cn(
|
|
4005
|
-
"mt-4 flex items-center gap-2 rounded-full border px-4 py-2 backdrop-blur-sm bg-primary/20 border-primary/30 shadow-lg"
|
|
4006
|
-
),
|
|
4007
|
-
transition: { duration: 0.3 },
|
|
4008
|
-
children: [
|
|
4009
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-4 text-primary flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(react.CheckIcon, { size: 16, className: "text-emerald-500" }) }),
|
|
4010
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4011
|
-
framerMotion.motion.span,
|
|
4012
|
-
{
|
|
4013
|
-
className: "text-sm font-semibold text-primary",
|
|
4014
|
-
animate: { color: `hsl(var(--primary))` },
|
|
4015
|
-
transition: { duration: 0.3 },
|
|
4016
|
-
children: [
|
|
4017
|
-
files.length,
|
|
4018
|
-
" ",
|
|
4019
|
-
files.length === 1 ? "arquivo selecionado" : "arquivos selecionados"
|
|
4020
|
-
]
|
|
4021
|
-
}
|
|
4022
|
-
)
|
|
4023
|
-
]
|
|
4024
|
-
}
|
|
4025
|
-
) }),
|
|
4026
4012
|
showPreview && files.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4027
4013
|
framerMotion.motion.div,
|
|
4028
4014
|
{
|
|
4029
|
-
className: "
|
|
4015
|
+
className: "py-2 w-full",
|
|
4030
4016
|
initial: animate ? { opacity: 0, y: 10 } : false,
|
|
4031
4017
|
animate: { opacity: 1, y: 0 },
|
|
4032
4018
|
transition: { delay: 0.3 },
|
|
4033
4019
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
4034
|
-
/* @__PURE__ */ jsxRuntime.jsxs("h4", { className: "
|
|
4020
|
+
/* @__PURE__ */ jsxRuntime.jsxs("h4", { className: "text-xs font-medium text-muted-foreground pb-0.5", children: [
|
|
4035
4021
|
"Arquivos selecionados (",
|
|
4036
4022
|
files.length,
|
|
4037
4023
|
"/",
|
|
4038
4024
|
maxFiles,
|
|
4039
4025
|
")"
|
|
4040
4026
|
] }),
|
|
4041
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2 overflow-y-auto max-h-
|
|
4027
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2 overflow-y-auto max-h-36", children: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "popLayout", children: files.map((file, index) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4042
4028
|
framerMotion.motion.div,
|
|
4043
4029
|
{
|
|
4044
4030
|
layout: true,
|
|
@@ -4054,24 +4040,18 @@ var FileUploader = React32__namespace.forwardRef(
|
|
|
4054
4040
|
layout: { duration: 0.2 }
|
|
4055
4041
|
},
|
|
4056
4042
|
className: cn(
|
|
4057
|
-
"flex items-center gap-3 rounded-md border p-
|
|
4043
|
+
"group flex items-center gap-3 rounded-md border p-2 transition-all duration-300",
|
|
4058
4044
|
file.error ? "border-destructive/50 bg-destructive/5" : "border-border bg-background/80 hover:bg-muted/50 hover:shadow-md hover:shadow-primary/10 hover:border-primary/30"
|
|
4059
4045
|
),
|
|
4060
4046
|
children: [
|
|
4061
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-12 w-12 shrink-0 items-center justify-center rounded-md bg-muted overflow-hidden", children: file.preview ? (
|
|
4062
|
-
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
}
|
|
4070
|
-
)
|
|
4071
|
-
) : (
|
|
4072
|
-
// Ícone baseado no tipo de arquivo
|
|
4073
|
-
getFileTypeIcon(file)
|
|
4074
|
-
) }),
|
|
4047
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-12 w-12 shrink-0 items-center justify-center rounded-md bg-muted overflow-hidden", children: file.preview ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
4048
|
+
"img",
|
|
4049
|
+
{
|
|
4050
|
+
src: file.preview,
|
|
4051
|
+
alt: file.name,
|
|
4052
|
+
className: "h-full w-full object-cover rounded-md"
|
|
4053
|
+
}
|
|
4054
|
+
) : getFileTypeIcon(file) }),
|
|
4075
4055
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
4076
4056
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4077
4057
|
"p",
|
|
@@ -4101,14 +4081,14 @@ var FileUploader = React32__namespace.forwardRef(
|
|
|
4101
4081
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4102
4082
|
ButtonBase,
|
|
4103
4083
|
{
|
|
4104
|
-
variant: "destructive",
|
|
4105
4084
|
size: "icon",
|
|
4085
|
+
variant: "ghost",
|
|
4106
4086
|
onClick: (e) => {
|
|
4107
4087
|
e?.stopPropagation();
|
|
4108
4088
|
handleRemoveFile(file.id);
|
|
4109
4089
|
},
|
|
4110
|
-
className: "",
|
|
4111
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(react.XIcon, { size: 12 })
|
|
4090
|
+
className: "opacity-0 transition-opacity group-hover:opacity-100",
|
|
4091
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(react.XIcon, { size: 12, className: "text-red-500" })
|
|
4112
4092
|
}
|
|
4113
4093
|
)
|
|
4114
4094
|
]
|
|
@@ -9741,7 +9721,7 @@ function DayViewAgenda({
|
|
|
9741
9721
|
const { currentTimePosition, currentTimeVisible } = useCurrentTimeIndicatorAgenda(currentDate, "day");
|
|
9742
9722
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "contents", "data-slot": "day-view", children: [
|
|
9743
9723
|
showAllDaySection && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-border/70 border-t bg-muted/50", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[3rem_1fr] sm:grid-cols-[4rem_1fr]", children: [
|
|
9744
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "
|
|
9724
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative border-border/70 border-r flex items-center justify-center p-1", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-center text-[10px] text-muted-foreground/70 sm:text-xs", children: "Todo Dia" }) }),
|
|
9745
9725
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative border-border/70 border-r p-1 last:border-r-0", children: allDayEvents.map((event) => {
|
|
9746
9726
|
const eventStart = getEventStartDate(event);
|
|
9747
9727
|
const eventEnd = getEventEndDate(event) ?? getEventStartDate(event);
|
|
@@ -10129,7 +10109,8 @@ function EventAgenda({
|
|
|
10129
10109
|
className,
|
|
10130
10110
|
initialView = "month",
|
|
10131
10111
|
initialDate,
|
|
10132
|
-
onClick
|
|
10112
|
+
onClick,
|
|
10113
|
+
showYearView = false
|
|
10133
10114
|
}) {
|
|
10134
10115
|
const [currentDate, setCurrentDate] = React32.useState(
|
|
10135
10116
|
initialDate && new Date(initialDate) || /* @__PURE__ */ new Date()
|
|
@@ -10142,6 +10123,7 @@ function EventAgenda({
|
|
|
10142
10123
|
else if (view === "day") setCurrentDate((d) => dateFns.addDays(d, -1));
|
|
10143
10124
|
else if (view === "agenda")
|
|
10144
10125
|
setCurrentDate((d) => dateFns.addDays(d, -AgendaDaysToShowAgenda));
|
|
10126
|
+
else if (view === "year") setCurrentDate((d) => dateFns.subYears(d, 1));
|
|
10145
10127
|
};
|
|
10146
10128
|
const goNext = () => {
|
|
10147
10129
|
if (view === "month") setCurrentDate((d) => dateFns.addMonths(d, 1));
|
|
@@ -10149,6 +10131,7 @@ function EventAgenda({
|
|
|
10149
10131
|
else if (view === "day") setCurrentDate((d) => dateFns.addDays(d, 1));
|
|
10150
10132
|
else if (view === "agenda")
|
|
10151
10133
|
setCurrentDate((d) => dateFns.addDays(d, AgendaDaysToShowAgenda));
|
|
10134
|
+
else if (view === "year") setCurrentDate((d) => dateFns.addYears(d, 1));
|
|
10152
10135
|
};
|
|
10153
10136
|
const handleEventSelect = (event, e) => {
|
|
10154
10137
|
try {
|
|
@@ -10186,7 +10169,8 @@ function EventAgenda({
|
|
|
10186
10169
|
month: { full: "M\xEAs", short: "M" },
|
|
10187
10170
|
week: { full: "Semana", short: "S" },
|
|
10188
10171
|
day: { full: "Dia", short: "D" },
|
|
10189
|
-
agenda: { full: "Agenda", short: "A" }
|
|
10172
|
+
agenda: { full: "Agenda", short: "A" },
|
|
10173
|
+
year: { full: "Ano", short: "An" }
|
|
10190
10174
|
};
|
|
10191
10175
|
const entry = labels[v] || { full: v, short: v };
|
|
10192
10176
|
return condensed ? entry.short : entry.full;
|
|
@@ -10210,12 +10194,18 @@ function EventAgenda({
|
|
|
10210
10194
|
const start = currentDate;
|
|
10211
10195
|
return capitalize2(dateFns.format(start, "MMMM yyyy", { locale: locale.ptBR }));
|
|
10212
10196
|
}
|
|
10197
|
+
if (view === "year") {
|
|
10198
|
+
return dateFns.format(currentDate, "yyyy");
|
|
10199
|
+
}
|
|
10213
10200
|
return capitalize2(dateFns.format(currentDate, "MMMM yyyy", { locale: locale.ptBR }));
|
|
10214
10201
|
}, [currentDate, view]);
|
|
10215
|
-
const
|
|
10216
|
-
|
|
10217
|
-
|
|
10218
|
-
|
|
10202
|
+
const availableViews = showYearView ? ["year", "month", "week", "day", "agenda"] : ["month", "week", "day", "agenda"];
|
|
10203
|
+
const selectItems = availableViews.map(
|
|
10204
|
+
(v) => ({
|
|
10205
|
+
label: viewLabel(v),
|
|
10206
|
+
value: v
|
|
10207
|
+
})
|
|
10208
|
+
);
|
|
10219
10209
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
10220
10210
|
"div",
|
|
10221
10211
|
{
|
|
@@ -10270,46 +10260,51 @@ function EventAgenda({
|
|
|
10270
10260
|
}
|
|
10271
10261
|
) })
|
|
10272
10262
|
] }),
|
|
10273
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
10274
|
-
"
|
|
10275
|
-
|
|
10276
|
-
|
|
10277
|
-
|
|
10278
|
-
|
|
10279
|
-
|
|
10280
|
-
|
|
10281
|
-
|
|
10282
|
-
|
|
10283
|
-
|
|
10284
|
-
|
|
10285
|
-
|
|
10286
|
-
|
|
10287
|
-
|
|
10288
|
-
|
|
10289
|
-
|
|
10290
|
-
|
|
10291
|
-
|
|
10292
|
-
|
|
10293
|
-
|
|
10294
|
-
|
|
10295
|
-
|
|
10296
|
-
|
|
10297
|
-
|
|
10298
|
-
|
|
10299
|
-
|
|
10300
|
-
|
|
10301
|
-
|
|
10302
|
-
|
|
10303
|
-
|
|
10304
|
-
|
|
10305
|
-
|
|
10306
|
-
|
|
10307
|
-
|
|
10308
|
-
|
|
10309
|
-
|
|
10310
|
-
|
|
10311
|
-
|
|
10312
|
-
|
|
10263
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col transition-all duration-200 ease-in-out", children: [
|
|
10264
|
+
view === "month" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
10265
|
+
MonthViewAgenda,
|
|
10266
|
+
{
|
|
10267
|
+
currentDate,
|
|
10268
|
+
events,
|
|
10269
|
+
onEventSelect: handleEventSelect
|
|
10270
|
+
}
|
|
10271
|
+
),
|
|
10272
|
+
view === "week" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
10273
|
+
WeekViewAgenda,
|
|
10274
|
+
{
|
|
10275
|
+
currentDate,
|
|
10276
|
+
events,
|
|
10277
|
+
onEventSelect: handleEventSelect
|
|
10278
|
+
}
|
|
10279
|
+
),
|
|
10280
|
+
view === "day" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
10281
|
+
DayViewAgenda,
|
|
10282
|
+
{
|
|
10283
|
+
currentDate,
|
|
10284
|
+
events,
|
|
10285
|
+
onEventSelect: handleEventSelect
|
|
10286
|
+
}
|
|
10287
|
+
),
|
|
10288
|
+
view === "agenda" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
10289
|
+
Agenda,
|
|
10290
|
+
{
|
|
10291
|
+
currentDate,
|
|
10292
|
+
events,
|
|
10293
|
+
onEventSelect: handleEventSelect
|
|
10294
|
+
}
|
|
10295
|
+
),
|
|
10296
|
+
view === "year" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
10297
|
+
YearViewAgenda,
|
|
10298
|
+
{
|
|
10299
|
+
currentDate,
|
|
10300
|
+
events,
|
|
10301
|
+
onMonthSelect: (monthDate) => {
|
|
10302
|
+
setCurrentDate(monthDate);
|
|
10303
|
+
setView("month");
|
|
10304
|
+
}
|
|
10305
|
+
}
|
|
10306
|
+
)
|
|
10307
|
+
] })
|
|
10313
10308
|
] }),
|
|
10314
10309
|
selectedEvent && React32__namespace.default.isValidElement(onClick) ? React32__namespace.default.cloneElement(onClick, {
|
|
10315
10310
|
event: selectedEvent,
|
|
@@ -10384,11 +10379,13 @@ function useEventVisibilityAgenda({
|
|
|
10384
10379
|
const getVisibleEventCount = React32.useMemo(() => {
|
|
10385
10380
|
return (totalEvents) => {
|
|
10386
10381
|
if (!contentHeight) return totalEvents;
|
|
10387
|
-
const
|
|
10388
|
-
|
|
10382
|
+
const availableHeight = contentHeight + eventGap + 4;
|
|
10383
|
+
const slotHeight = eventHeight + eventGap;
|
|
10384
|
+
const maxSlots = Math.floor(availableHeight / slotHeight);
|
|
10385
|
+
if (totalEvents <= maxSlots) {
|
|
10389
10386
|
return totalEvents;
|
|
10390
10387
|
}
|
|
10391
|
-
return
|
|
10388
|
+
return maxSlots > 0 ? maxSlots - 1 : 0;
|
|
10392
10389
|
};
|
|
10393
10390
|
}, [contentHeight, eventHeight, eventGap]);
|
|
10394
10391
|
return {
|
|
@@ -10705,7 +10702,7 @@ function MonthViewAgenda({
|
|
|
10705
10702
|
"div",
|
|
10706
10703
|
{
|
|
10707
10704
|
ref: isReferenceCell ? contentRef : null,
|
|
10708
|
-
className: "min-h-[calc((var(--event-height)+var(--event-gap))*2)] sm:min-h-[calc((var(--event-height)+var(--event-gap))*3)] lg:min-h-[calc((var(--event-height)+var(--event-gap))*4)] px-1 py-
|
|
10705
|
+
className: "flex-1 min-h-[calc((var(--event-height)+var(--event-gap))*2)] sm:min-h-[calc((var(--event-height)+var(--event-gap))*3)] lg:min-h-[calc((var(--event-height)+var(--event-gap))*4)] px-1 py-1",
|
|
10709
10706
|
children: [
|
|
10710
10707
|
Array.from({ length: dayMultiDayRowCount }).map(
|
|
10711
10708
|
(_, si) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -10766,7 +10763,7 @@ function MonthViewAgenda({
|
|
|
10766
10763
|
type: "button",
|
|
10767
10764
|
onClick: (e) => e.stopPropagation(),
|
|
10768
10765
|
"aria-label": `Mostrar mais ${remainingCount} eventos`,
|
|
10769
|
-
className: "mt-
|
|
10766
|
+
className: "mt-auto flex h-[var(--event-height)] w-full select-none items-center overflow-hidden px-2 text-left text-[10px] text-muted-foreground outline-none rounded-md transition hover:bg-muted/60 hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 sm:text-xs",
|
|
10770
10767
|
children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-semibold", children: [
|
|
10771
10768
|
"+ ",
|
|
10772
10769
|
remainingCount,
|
|
@@ -11109,7 +11106,7 @@ function WeekViewAgenda({
|
|
|
11109
11106
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full flex-col overflow-hidden", "data-slot": "week-view", children: [
|
|
11110
11107
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-auto", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-[600px] sm:min-w-full flex flex-col h-full", children: [
|
|
11111
11108
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sticky top-0 z-30 grid grid-cols-8 border-border/70 border-b bg-background", children: [
|
|
11112
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-2 text-center text-muted-foreground/70 text-[10px] sm:text-sm", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "
|
|
11109
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-2 text-center text-muted-foreground/70 text-[10px] sm:text-sm", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "", children: "Hor\xE1rios" }) }),
|
|
11113
11110
|
days.map((day) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
11114
11111
|
"div",
|
|
11115
11112
|
{
|
|
@@ -11122,7 +11119,7 @@ function WeekViewAgenda({
|
|
|
11122
11119
|
dateFns.format(day, "d", { locale: locale.ptBR })
|
|
11123
11120
|
] }),
|
|
11124
11121
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "hidden sm:inline md:hidden", children: dateFns.format(day, "EEE d", { locale: locale.ptBR }) }),
|
|
11125
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "
|
|
11122
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "hidden md:inline", children: dateFns.format(day, "EEE dd", { locale: locale.ptBR }) })
|
|
11126
11123
|
]
|
|
11127
11124
|
},
|
|
11128
11125
|
day.toString()
|
|
@@ -11130,7 +11127,7 @@ function WeekViewAgenda({
|
|
|
11130
11127
|
] }),
|
|
11131
11128
|
showAllDaySection && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-border/70 border-b bg-muted/50", children: [
|
|
11132
11129
|
trueAllDayEvents.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-8", children: [
|
|
11133
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative border-border/70 border-r", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "
|
|
11130
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative border-border/70 border-r flex items-center justify-center p-1", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-center text-[10px] text-muted-foreground/70 sm:text-xs", children: "Todo dia" }) }),
|
|
11134
11131
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
11135
11132
|
"div",
|
|
11136
11133
|
{
|
|
@@ -11210,7 +11207,7 @@ function WeekViewAgenda({
|
|
|
11210
11207
|
trueAllDayEvents.length > 0 && "border-t border-border/40"
|
|
11211
11208
|
),
|
|
11212
11209
|
children: [
|
|
11213
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative border-border/70 border-r", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "
|
|
11210
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative border-border/70 border-r flex items-center justify-center p-1", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-center text-[10px] text-muted-foreground/70 sm:text-xs", children: "Evento" }) }),
|
|
11214
11211
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
11215
11212
|
"div",
|
|
11216
11213
|
{
|
|
@@ -11429,6 +11426,86 @@ function WeekViewAgenda({
|
|
|
11429
11426
|
)
|
|
11430
11427
|
] });
|
|
11431
11428
|
}
|
|
11429
|
+
function YearViewAgenda({
|
|
11430
|
+
currentDate,
|
|
11431
|
+
events,
|
|
11432
|
+
onMonthSelect
|
|
11433
|
+
}) {
|
|
11434
|
+
const start = dateFns.startOfYear(currentDate);
|
|
11435
|
+
const end = dateFns.endOfYear(currentDate);
|
|
11436
|
+
const months = React32.useMemo(() => {
|
|
11437
|
+
return dateFns.eachMonthOfInterval({ start, end });
|
|
11438
|
+
}, [start, end]);
|
|
11439
|
+
const eventDates = React32.useMemo(() => {
|
|
11440
|
+
return new Set(
|
|
11441
|
+
events.map((e) => getEventStartDate(e)).filter((d) => !!d).map((d) => dateFns.format(d, "yyyy-MM-dd"))
|
|
11442
|
+
);
|
|
11443
|
+
}, [events]);
|
|
11444
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-1 overflow-y-auto max-h-[calc(100vh-200px)] lg:max-h-[750px] scrollbar-thin scrollbar-thumb-muted-foreground/20 scrollbar-track-transparent", children: months.map((month) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
11445
|
+
"div",
|
|
11446
|
+
{
|
|
11447
|
+
className: "flex flex-col p-4 rounded-lg border border-border/70 bg-card hover:bg-muted/5 transition-colors cursor-pointer group",
|
|
11448
|
+
onClick: () => onMonthSelect(month),
|
|
11449
|
+
children: [
|
|
11450
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between mb-2", children: [
|
|
11451
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-semibold text-sm capitalize text-foreground group-hover:text-primary transition-colors", children: dateFns.format(month, "MMMM", { locale: locale.ptBR }) }),
|
|
11452
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground/50 uppercase tracking-wider opacity-0 group-hover:opacity-100 transition-opacity", children: "Detalhes" })
|
|
11453
|
+
] }),
|
|
11454
|
+
/* @__PURE__ */ jsxRuntime.jsx(MonthMiniGrid, { month, eventDates })
|
|
11455
|
+
]
|
|
11456
|
+
},
|
|
11457
|
+
month.toString()
|
|
11458
|
+
)) });
|
|
11459
|
+
}
|
|
11460
|
+
function MonthMiniGrid({
|
|
11461
|
+
month,
|
|
11462
|
+
eventDates
|
|
11463
|
+
}) {
|
|
11464
|
+
const days = React32.useMemo(() => {
|
|
11465
|
+
const monthStart = dateFns.startOfMonth(month);
|
|
11466
|
+
const calendarStart = dateFns.startOfWeek(monthStart, { weekStartsOn: 0 });
|
|
11467
|
+
const daysArr = [];
|
|
11468
|
+
const curr = new Date(calendarStart);
|
|
11469
|
+
for (let i = 0; i < 42; i++) {
|
|
11470
|
+
daysArr.push(new Date(curr));
|
|
11471
|
+
curr.setDate(curr.getDate() + 1);
|
|
11472
|
+
}
|
|
11473
|
+
return daysArr;
|
|
11474
|
+
}, [month]);
|
|
11475
|
+
const weekdays = ["D", "S", "T", "Q", "Q", "S", "S"];
|
|
11476
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-7 gap-y-1 text-[11px]", children: [
|
|
11477
|
+
weekdays.map((wd, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
11478
|
+
"div",
|
|
11479
|
+
{
|
|
11480
|
+
className: "text-center font-medium text-muted-foreground/70 py-1",
|
|
11481
|
+
children: wd
|
|
11482
|
+
},
|
|
11483
|
+
`${wd}-${i}`
|
|
11484
|
+
)),
|
|
11485
|
+
days.map((day) => {
|
|
11486
|
+
const isCurrentMonth = day.getMonth() === month.getMonth();
|
|
11487
|
+
const dateStr = dateFns.format(day, "yyyy-MM-dd");
|
|
11488
|
+
const hasEvent = eventDates.has(dateStr);
|
|
11489
|
+
const isDayToday = dateFns.isToday(day);
|
|
11490
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
11491
|
+
"div",
|
|
11492
|
+
{
|
|
11493
|
+
className: cn(
|
|
11494
|
+
"relative flex items-center justify-center p-1 rounded-sm aspect-square transition-colors",
|
|
11495
|
+
!isCurrentMonth && "opacity-0 pointer-events-none",
|
|
11496
|
+
isDayToday && "bg-blue-500 text-white font-semibold rounded-lg",
|
|
11497
|
+
isCurrentMonth && !isDayToday && "hover:bg-muted/50 text-foreground"
|
|
11498
|
+
),
|
|
11499
|
+
children: [
|
|
11500
|
+
isCurrentMonth && dateFns.format(day, "d"),
|
|
11501
|
+
isCurrentMonth && hasEvent && !isDayToday && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-0.5 left-1/2 -translate-x-1/2 w-1 h-1 rounded-full bg-blue-500" })
|
|
11502
|
+
]
|
|
11503
|
+
},
|
|
11504
|
+
day.toString()
|
|
11505
|
+
);
|
|
11506
|
+
})
|
|
11507
|
+
] });
|
|
11508
|
+
}
|
|
11432
11509
|
var colorBannerMap = {
|
|
11433
11510
|
sky: "from-sky-400 via-sky-500 to-cyan-500",
|
|
11434
11511
|
amber: "from-amber-400 via-amber-500 to-orange-400",
|
|
@@ -14802,8 +14879,8 @@ var createValueFormatter = (customFormatter, formatBR) => {
|
|
|
14802
14879
|
});
|
|
14803
14880
|
const prefixFormats = ["R$", "$", "\u20AC", "\xA3"];
|
|
14804
14881
|
const suffixFormats = ["%", "kg", "km", "m", "L", "un", "t", "h", "min", "s"];
|
|
14805
|
-
const getFormattedValue = (baseValue,
|
|
14806
|
-
const trimmedFormat =
|
|
14882
|
+
const getFormattedValue = (baseValue, format21) => {
|
|
14883
|
+
const trimmedFormat = format21.trim();
|
|
14807
14884
|
if (prefixFormats.includes(trimmedFormat)) {
|
|
14808
14885
|
return `${trimmedFormat} ${baseValue}`;
|
|
14809
14886
|
}
|
|
@@ -14828,8 +14905,8 @@ var createValueFormatter = (customFormatter, formatBR) => {
|
|
|
14828
14905
|
num = Number.isNaN(parsed) ? NaN : parsed;
|
|
14829
14906
|
}
|
|
14830
14907
|
const baseFormatted = formatBR && !Number.isNaN(num) ? nf.format(num) : String(formattedValue ?? value ?? "");
|
|
14831
|
-
const
|
|
14832
|
-
return
|
|
14908
|
+
const format21 = propsDataKey && formatterMap[propsDataKey] ? formatterMap[propsDataKey] : "";
|
|
14909
|
+
return format21 ? getFormattedValue(baseFormatted, format21) : baseFormatted;
|
|
14833
14910
|
};
|
|
14834
14911
|
}
|
|
14835
14912
|
if (typeof customFormatter === "function") {
|
|
@@ -16481,8 +16558,578 @@ var SystemTooltip = ({
|
|
|
16481
16558
|
) });
|
|
16482
16559
|
};
|
|
16483
16560
|
var SystemTooltip_default = SystemTooltip;
|
|
16561
|
+
var useIsTruncated = (ref) => {
|
|
16562
|
+
const [truncated, setTruncated] = React32.useState(false);
|
|
16563
|
+
React32.useEffect(() => {
|
|
16564
|
+
const el = ref.current;
|
|
16565
|
+
if (!el) return;
|
|
16566
|
+
const check = () => setTruncated(el.scrollWidth > el.offsetWidth);
|
|
16567
|
+
check();
|
|
16568
|
+
const ro = new ResizeObserver(check);
|
|
16569
|
+
ro.observe(el);
|
|
16570
|
+
return () => ro.disconnect();
|
|
16571
|
+
}, [ref]);
|
|
16572
|
+
return truncated;
|
|
16573
|
+
};
|
|
16574
|
+
var NameTooltip = ({
|
|
16575
|
+
name,
|
|
16576
|
+
description
|
|
16577
|
+
}) => {
|
|
16578
|
+
const nameRef = React32.useRef(null);
|
|
16579
|
+
const descRef = React32.useRef(null);
|
|
16580
|
+
const isNameTruncated = useIsTruncated(nameRef);
|
|
16581
|
+
const isDescTruncated = useIsTruncated(descRef);
|
|
16582
|
+
const showTooltip = isNameTruncated || isDescTruncated;
|
|
16583
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TooltipProviderBase, { children: /* @__PURE__ */ jsxRuntime.jsxs(TooltipBase, { children: [
|
|
16584
|
+
/* @__PURE__ */ jsxRuntime.jsx(TooltipTriggerBase, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cursor-default", children: [
|
|
16585
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
16586
|
+
"h3",
|
|
16587
|
+
{
|
|
16588
|
+
ref: nameRef,
|
|
16589
|
+
className: "text-xl font-bold text-foreground tracking-tight truncate",
|
|
16590
|
+
children: name
|
|
16591
|
+
}
|
|
16592
|
+
),
|
|
16593
|
+
description && /* @__PURE__ */ jsxRuntime.jsx(
|
|
16594
|
+
"p",
|
|
16595
|
+
{
|
|
16596
|
+
ref: descRef,
|
|
16597
|
+
className: "text-xs text-foreground/70 truncate mt-0.5",
|
|
16598
|
+
children: description
|
|
16599
|
+
}
|
|
16600
|
+
)
|
|
16601
|
+
] }) }),
|
|
16602
|
+
showTooltip && /* @__PURE__ */ jsxRuntime.jsxs(TooltipContentBase, { sideOffset: 8, className: "z-[10001]", children: [
|
|
16603
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-semibold", children: name }),
|
|
16604
|
+
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-foreground/70 mt-0.5", children: description })
|
|
16605
|
+
] })
|
|
16606
|
+
] }) });
|
|
16607
|
+
};
|
|
16608
|
+
var SystemNode = ({ label }) => {
|
|
16609
|
+
const truncated = label.length > 9 ? label.substring(0, 9) + "\u2026" : label;
|
|
16610
|
+
const needsTooltip = label.length > 9;
|
|
16611
|
+
const circle = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-[76px] h-[76px] rounded-full bg-primary flex items-center justify-center shrink-0 z-10 cursor-default", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-bold text-primary-foreground text-center px-2 leading-tight select-none", children: truncated }) });
|
|
16612
|
+
if (!needsTooltip) return circle;
|
|
16613
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TooltipProviderBase, { children: /* @__PURE__ */ jsxRuntime.jsxs(TooltipBase, { children: [
|
|
16614
|
+
/* @__PURE__ */ jsxRuntime.jsx(TooltipTriggerBase, { asChild: true, children: circle }),
|
|
16615
|
+
/* @__PURE__ */ jsxRuntime.jsx(TooltipContentBase, { sideOffset: 8, className: "z-[10001]", children: label })
|
|
16616
|
+
] }) });
|
|
16617
|
+
};
|
|
16618
|
+
var Beam = ({ isInput, containerRef, leftRef, rightRef }) => {
|
|
16619
|
+
const gradientId = React32.useId();
|
|
16620
|
+
const [pathD, setPathD] = React32.useState("");
|
|
16621
|
+
const [svgSize, setSvgSize] = React32.useState({ w: 0, h: 0 });
|
|
16622
|
+
React32.useEffect(() => {
|
|
16623
|
+
let rafId;
|
|
16624
|
+
const update = () => {
|
|
16625
|
+
const container = containerRef.current;
|
|
16626
|
+
const left = leftRef.current;
|
|
16627
|
+
const right = rightRef.current;
|
|
16628
|
+
if (!container || !left || !right) return;
|
|
16629
|
+
const cr = container.getBoundingClientRect();
|
|
16630
|
+
const lr = left.getBoundingClientRect();
|
|
16631
|
+
const rr = right.getBoundingClientRect();
|
|
16632
|
+
const cx1 = lr.left - cr.left + lr.width / 2;
|
|
16633
|
+
const cy1 = lr.top - cr.top + lr.height / 2;
|
|
16634
|
+
const cx2 = rr.left - cr.left + rr.width / 2;
|
|
16635
|
+
const cy2 = rr.top - cr.top + rr.height / 2;
|
|
16636
|
+
const dx = cx2 - cx1, dy = cy2 - cy1;
|
|
16637
|
+
const dist = Math.sqrt(dx * dx + dy * dy);
|
|
16638
|
+
if (dist === 0) return;
|
|
16639
|
+
const ux = dx / dist, uy = dy / dist;
|
|
16640
|
+
const r1 = lr.width / 2;
|
|
16641
|
+
const r2 = rr.width / 2;
|
|
16642
|
+
setSvgSize({ w: cr.width, h: cr.height });
|
|
16643
|
+
setPathD(
|
|
16644
|
+
`M ${cx1 + ux * r1},${cy1 + uy * r1} L ${cx2 - ux * r2},${cy2 - uy * r2}`
|
|
16645
|
+
);
|
|
16646
|
+
};
|
|
16647
|
+
const schedule = () => {
|
|
16648
|
+
cancelAnimationFrame(rafId);
|
|
16649
|
+
rafId = requestAnimationFrame(update);
|
|
16650
|
+
};
|
|
16651
|
+
requestAnimationFrame(() => requestAnimationFrame(update));
|
|
16652
|
+
schedule();
|
|
16653
|
+
const ro = new ResizeObserver(schedule);
|
|
16654
|
+
if (containerRef.current) ro.observe(containerRef.current);
|
|
16655
|
+
if (leftRef.current) ro.observe(leftRef.current);
|
|
16656
|
+
if (rightRef.current) ro.observe(rightRef.current);
|
|
16657
|
+
const mo = new MutationObserver(schedule);
|
|
16658
|
+
mo.observe(document.documentElement, {
|
|
16659
|
+
attributes: true,
|
|
16660
|
+
attributeFilter: ["class", "style"]
|
|
16661
|
+
});
|
|
16662
|
+
mo.observe(document.body, {
|
|
16663
|
+
attributes: true,
|
|
16664
|
+
attributeFilter: ["class", "style"]
|
|
16665
|
+
});
|
|
16666
|
+
return () => {
|
|
16667
|
+
cancelAnimationFrame(rafId);
|
|
16668
|
+
ro.disconnect();
|
|
16669
|
+
mo.disconnect();
|
|
16670
|
+
};
|
|
16671
|
+
}, [containerRef, leftRef, rightRef]);
|
|
16672
|
+
const animX1 = isInput ? ["90%", "-10%"] : ["10%", "110%"];
|
|
16673
|
+
const animX2 = isInput ? ["100%", "0%"] : ["0%", "100%"];
|
|
16674
|
+
if (!pathD) return null;
|
|
16675
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
16676
|
+
"svg",
|
|
16677
|
+
{
|
|
16678
|
+
className: "pointer-events-none absolute left-0 top-0",
|
|
16679
|
+
width: svgSize.w,
|
|
16680
|
+
height: svgSize.h,
|
|
16681
|
+
fill: "none",
|
|
16682
|
+
children: [
|
|
16683
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
16684
|
+
"path",
|
|
16685
|
+
{
|
|
16686
|
+
d: pathD,
|
|
16687
|
+
className: "stroke-primary",
|
|
16688
|
+
strokeWidth: 2,
|
|
16689
|
+
strokeOpacity: 0.2,
|
|
16690
|
+
strokeLinecap: "round"
|
|
16691
|
+
}
|
|
16692
|
+
),
|
|
16693
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
16694
|
+
framerMotion.motion.path,
|
|
16695
|
+
{
|
|
16696
|
+
d: pathD,
|
|
16697
|
+
stroke: `url(#${gradientId})`,
|
|
16698
|
+
strokeWidth: 2,
|
|
16699
|
+
strokeLinecap: "round",
|
|
16700
|
+
initial: { strokeOpacity: 0 },
|
|
16701
|
+
animate: { strokeOpacity: 1 },
|
|
16702
|
+
transition: { duration: 1 }
|
|
16703
|
+
}
|
|
16704
|
+
),
|
|
16705
|
+
/* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
16706
|
+
framerMotion.motion.linearGradient,
|
|
16707
|
+
{
|
|
16708
|
+
id: gradientId,
|
|
16709
|
+
gradientUnits: "userSpaceOnUse",
|
|
16710
|
+
initial: { x1: "0%", x2: "0%", y1: "0%", y2: "0%" },
|
|
16711
|
+
animate: {
|
|
16712
|
+
x1: animX1,
|
|
16713
|
+
x2: animX2,
|
|
16714
|
+
y1: ["0%", "0%"],
|
|
16715
|
+
y2: ["0%", "0%"]
|
|
16716
|
+
},
|
|
16717
|
+
transition: {
|
|
16718
|
+
duration: 4,
|
|
16719
|
+
ease: [0.16, 1, 0.3, 1],
|
|
16720
|
+
repeat: Infinity,
|
|
16721
|
+
repeatDelay: 0
|
|
16722
|
+
},
|
|
16723
|
+
children: [
|
|
16724
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { stopColor: "hsl(var(--primary))", stopOpacity: "0" }),
|
|
16725
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { stopColor: "hsl(var(--primary))" }),
|
|
16726
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "32.5%", stopColor: "hsl(var(--primary))" }),
|
|
16727
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: "hsl(var(--primary))", stopOpacity: "0" })
|
|
16728
|
+
]
|
|
16729
|
+
}
|
|
16730
|
+
) })
|
|
16731
|
+
]
|
|
16732
|
+
}
|
|
16733
|
+
);
|
|
16734
|
+
};
|
|
16735
|
+
var SystemsDiagram = ({ isInput, currentSystem, externalSystem }) => {
|
|
16736
|
+
const containerRef = React32.useRef(null);
|
|
16737
|
+
const leftRef = React32.useRef(null);
|
|
16738
|
+
const rightRef = React32.useRef(null);
|
|
16739
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
16740
|
+
"div",
|
|
16741
|
+
{
|
|
16742
|
+
ref: containerRef,
|
|
16743
|
+
className: "relative flex items-center justify-between py-1 px-3",
|
|
16744
|
+
children: [
|
|
16745
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: leftRef, children: /* @__PURE__ */ jsxRuntime.jsx(SystemNode, { label: isInput ? externalSystem : currentSystem }) }),
|
|
16746
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: rightRef, children: /* @__PURE__ */ jsxRuntime.jsx(SystemNode, { label: isInput ? currentSystem : externalSystem }) }),
|
|
16747
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
16748
|
+
Beam,
|
|
16749
|
+
{
|
|
16750
|
+
isInput,
|
|
16751
|
+
containerRef,
|
|
16752
|
+
leftRef,
|
|
16753
|
+
rightRef
|
|
16754
|
+
}
|
|
16755
|
+
)
|
|
16756
|
+
]
|
|
16757
|
+
}
|
|
16758
|
+
);
|
|
16759
|
+
};
|
|
16760
|
+
var CopyData = ({ value }) => {
|
|
16761
|
+
const [copied, setCopied] = React32.useState(false);
|
|
16762
|
+
const handleCopy = React32.useCallback(() => {
|
|
16763
|
+
navigator.clipboard.writeText(value).then(() => {
|
|
16764
|
+
setCopied(true);
|
|
16765
|
+
setTimeout(() => setCopied(false), 1500);
|
|
16766
|
+
});
|
|
16767
|
+
}, [value]);
|
|
16768
|
+
return /* @__PURE__ */ jsxRuntime.jsx(TooltipProviderBase, { children: /* @__PURE__ */ jsxRuntime.jsxs(TooltipBase, { children: [
|
|
16769
|
+
/* @__PURE__ */ jsxRuntime.jsx(TooltipTriggerBase, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
16770
|
+
"button",
|
|
16771
|
+
{
|
|
16772
|
+
onClick: handleCopy,
|
|
16773
|
+
className: "shrink-0 p-0.5 rounded transition-colors text-muted-foreground/40 hover:text-foreground hover:bg-muted",
|
|
16774
|
+
style: { cursor: "pointer" },
|
|
16775
|
+
children: copied ? /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "12", height: "12", viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
16776
|
+
"path",
|
|
16777
|
+
{
|
|
16778
|
+
d: "M3 8l3.5 3.5L13 4.5",
|
|
16779
|
+
stroke: "currentColor",
|
|
16780
|
+
strokeWidth: "2",
|
|
16781
|
+
strokeLinecap: "round",
|
|
16782
|
+
strokeLinejoin: "round"
|
|
16783
|
+
}
|
|
16784
|
+
) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "12", height: "12", viewBox: "0 0 16 16", fill: "none", children: [
|
|
16785
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
16786
|
+
"rect",
|
|
16787
|
+
{
|
|
16788
|
+
x: "5",
|
|
16789
|
+
y: "5",
|
|
16790
|
+
width: "8",
|
|
16791
|
+
height: "9",
|
|
16792
|
+
rx: "1.5",
|
|
16793
|
+
stroke: "currentColor",
|
|
16794
|
+
strokeWidth: "1.5"
|
|
16795
|
+
}
|
|
16796
|
+
),
|
|
16797
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
16798
|
+
"path",
|
|
16799
|
+
{
|
|
16800
|
+
d: "M3 11V3.5A1.5 1.5 0 0 1 4.5 2H11",
|
|
16801
|
+
stroke: "currentColor",
|
|
16802
|
+
strokeWidth: "1.5",
|
|
16803
|
+
strokeLinecap: "round"
|
|
16804
|
+
}
|
|
16805
|
+
)
|
|
16806
|
+
] })
|
|
16807
|
+
}
|
|
16808
|
+
) }),
|
|
16809
|
+
/* @__PURE__ */ jsxRuntime.jsx(TooltipContentBase, { sideOffset: 6, className: "z-[10001]", children: copied ? "Copiado!" : "Copiar" })
|
|
16810
|
+
] }) });
|
|
16811
|
+
};
|
|
16812
|
+
var propertyLabels = {
|
|
16813
|
+
Nome: "Nome",
|
|
16814
|
+
tipo: "Tipo",
|
|
16815
|
+
Tipo: "Tipo",
|
|
16816
|
+
Protocolos: "Protocolos",
|
|
16817
|
+
Ambiente: "Ambiente",
|
|
16818
|
+
Setor: "Setor",
|
|
16819
|
+
Contato: "Contato",
|
|
16820
|
+
Sustentacao: "Sustenta\xE7\xE3o",
|
|
16821
|
+
Destino: "Destino",
|
|
16822
|
+
Origem: "Origem"
|
|
16823
|
+
};
|
|
16824
|
+
var IntegrationCard = ({ title, details }) => {
|
|
16825
|
+
const titleRef = React32.useRef(null);
|
|
16826
|
+
const isTitleTruncated = useIsTruncated(titleRef);
|
|
16827
|
+
const blackList = ["id", "elementId", "identity"];
|
|
16828
|
+
const entries = details ? Object.entries(details).filter(
|
|
16829
|
+
([key, value]) => value !== void 0 && value !== null && value !== "" && !blackList.includes(key)
|
|
16830
|
+
) : [];
|
|
16831
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-sm border border-border/40 bg-muted/20 overflow-hidden", children: [
|
|
16832
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 px-3 py-2 border-b border-border/30", children: [
|
|
16833
|
+
/* @__PURE__ */ jsxRuntime.jsx(TooltipProviderBase, { children: /* @__PURE__ */ jsxRuntime.jsxs(TooltipBase, { children: [
|
|
16834
|
+
/* @__PURE__ */ jsxRuntime.jsx(TooltipTriggerBase, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
16835
|
+
"span",
|
|
16836
|
+
{
|
|
16837
|
+
ref: titleRef,
|
|
16838
|
+
className: "text-sm font-bold text-foreground truncate flex-1 cursor-default",
|
|
16839
|
+
children: title
|
|
16840
|
+
}
|
|
16841
|
+
) }),
|
|
16842
|
+
isTitleTruncated && /* @__PURE__ */ jsxRuntime.jsx(TooltipContentBase, { sideOffset: 6, className: "z-[10001]", children: title })
|
|
16843
|
+
] }) }),
|
|
16844
|
+
entries.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
16845
|
+
CopyData,
|
|
16846
|
+
{
|
|
16847
|
+
value: entries.map(([k, v]) => `${propertyLabels[k] || k}: ${String(v)}`).join("\n")
|
|
16848
|
+
}
|
|
16849
|
+
)
|
|
16850
|
+
] }),
|
|
16851
|
+
entries.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-border/20", children: entries.map(([key, value]) => {
|
|
16852
|
+
const label = propertyLabels[key] || key;
|
|
16853
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 px-3 py-1.5", children: [
|
|
16854
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs font-semibold text-muted-foreground shrink-0 w-[40%] sm:w-[38%]", children: [
|
|
16855
|
+
label,
|
|
16856
|
+
":"
|
|
16857
|
+
] }),
|
|
16858
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-foreground break-all flex-1", children: String(value) })
|
|
16859
|
+
] }, key);
|
|
16860
|
+
}) })
|
|
16861
|
+
] });
|
|
16862
|
+
};
|
|
16863
|
+
var TooltipBodyComponent = ({ data, isLoading, connections, isInput, externalSystem }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-3 py-3 space-y-3 overflow-y-auto flex-1 [&::-webkit-scrollbar]:w-1 [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:bg-muted-foreground/20 [&::-webkit-scrollbar-thumb]:rounded-full hover:[&::-webkit-scrollbar-thumb]:bg-muted-foreground/40 transition-colors", children: [
|
|
16864
|
+
isLoading ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
|
|
16865
|
+
/* @__PURE__ */ jsxRuntime.jsx(SkeletonBase, { className: "h-6 w-3/4" }),
|
|
16866
|
+
/* @__PURE__ */ jsxRuntime.jsx(SkeletonBase, { className: "h-3.5 w-1/2" })
|
|
16867
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(NameTooltip, { name: data.name, description: data.description }),
|
|
16868
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t border-border/20" }),
|
|
16869
|
+
isLoading ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
|
|
16870
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between py-1", children: [
|
|
16871
|
+
/* @__PURE__ */ jsxRuntime.jsx(SkeletonBase, { className: "w-[76px] h-[76px] rounded-full" }),
|
|
16872
|
+
/* @__PURE__ */ jsxRuntime.jsx(SkeletonBase, { className: "w-[76px] h-[76px] rounded-full" })
|
|
16873
|
+
] }),
|
|
16874
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t border-border/20" }),
|
|
16875
|
+
[1, 2].map((i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
16876
|
+
"div",
|
|
16877
|
+
{
|
|
16878
|
+
className: "rounded-lg border border-border/20 overflow-hidden",
|
|
16879
|
+
children: [
|
|
16880
|
+
/* @__PURE__ */ jsxRuntime.jsx(SkeletonBase, { className: "h-8 w-full" }),
|
|
16881
|
+
[1, 2, 3].map((j) => /* @__PURE__ */ jsxRuntime.jsx(SkeletonBase, { className: "h-7 w-full mt-px" }, j))
|
|
16882
|
+
]
|
|
16883
|
+
},
|
|
16884
|
+
i
|
|
16885
|
+
))
|
|
16886
|
+
] }) : connections.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground text-center py-4", children: "Nenhuma conex\xE3o encontrada" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
16887
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
16888
|
+
SystemsDiagram,
|
|
16889
|
+
{
|
|
16890
|
+
isInput,
|
|
16891
|
+
currentSystem: data.name,
|
|
16892
|
+
externalSystem
|
|
16893
|
+
}
|
|
16894
|
+
),
|
|
16895
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t border-border/20" }),
|
|
16896
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-bold text-muted-foreground uppercase", children: isInput ? "Informa\xE7\xF5es de Entrada" : "Informa\xE7\xF5es de Sa\xEDda" }) }),
|
|
16897
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: connections.map((conn) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
16898
|
+
IntegrationCard,
|
|
16899
|
+
{
|
|
16900
|
+
title: conn.name,
|
|
16901
|
+
details: conn.integration
|
|
16902
|
+
},
|
|
16903
|
+
conn.id
|
|
16904
|
+
)) })
|
|
16905
|
+
] })
|
|
16906
|
+
] });
|
|
16907
|
+
var TooltipBody = React32__namespace.default.memo(TooltipBodyComponent);
|
|
16908
|
+
var tooltipVariants3 = {
|
|
16909
|
+
hidden: {
|
|
16910
|
+
opacity: 0,
|
|
16911
|
+
scale: 0.96,
|
|
16912
|
+
transition: { type: "spring", stiffness: 400, damping: 28 }
|
|
16913
|
+
},
|
|
16914
|
+
visible: {
|
|
16915
|
+
opacity: 1,
|
|
16916
|
+
scale: 1,
|
|
16917
|
+
transition: { type: "spring", stiffness: 300, damping: 28 }
|
|
16918
|
+
},
|
|
16919
|
+
exit: {
|
|
16920
|
+
opacity: 0,
|
|
16921
|
+
scale: 0.96,
|
|
16922
|
+
transition: { type: "spring", stiffness: 400, damping: 28 }
|
|
16923
|
+
}
|
|
16924
|
+
};
|
|
16925
|
+
var IntegrationTooltip = ({
|
|
16926
|
+
id,
|
|
16927
|
+
data,
|
|
16928
|
+
position,
|
|
16929
|
+
title = "Conex\xF5es",
|
|
16930
|
+
isLoading = false,
|
|
16931
|
+
systemName,
|
|
16932
|
+
onMouseDown,
|
|
16933
|
+
onClose,
|
|
16934
|
+
onPositionChange
|
|
16935
|
+
}) => {
|
|
16936
|
+
const isMobile = useIsMobile();
|
|
16937
|
+
const [localPos, setLocalPos] = React32.useState(position);
|
|
16938
|
+
const [dragging, setDragging] = React32.useState(false);
|
|
16939
|
+
const offsetRef = React32.useRef({ x: 0, y: 0 });
|
|
16940
|
+
const lastMouse = React32.useRef({ x: 0, y: 0 });
|
|
16941
|
+
React32.useEffect(() => setLocalPos(position), [position]);
|
|
16942
|
+
React32.useEffect(() => {
|
|
16943
|
+
let rafId = null;
|
|
16944
|
+
const handleMouseMove = (e) => {
|
|
16945
|
+
if (!dragging) return;
|
|
16946
|
+
lastMouse.current = { x: e.clientX, y: e.clientY };
|
|
16947
|
+
if (rafId) cancelAnimationFrame(rafId);
|
|
16948
|
+
rafId = requestAnimationFrame(() => {
|
|
16949
|
+
const newLeft = lastMouse.current.x - offsetRef.current.x;
|
|
16950
|
+
const newTop = lastMouse.current.y - offsetRef.current.y;
|
|
16951
|
+
const p = {
|
|
16952
|
+
top: Math.max(0, Math.min(newTop, window.innerHeight - 200)),
|
|
16953
|
+
left: Math.max(0, Math.min(newLeft, window.innerWidth - 320))
|
|
16954
|
+
};
|
|
16955
|
+
setLocalPos(p);
|
|
16956
|
+
onPositionChange?.(id, p);
|
|
16957
|
+
});
|
|
16958
|
+
};
|
|
16959
|
+
const handleMouseUp = () => {
|
|
16960
|
+
if (dragging) {
|
|
16961
|
+
setDragging(false);
|
|
16962
|
+
if (rafId) cancelAnimationFrame(rafId);
|
|
16963
|
+
}
|
|
16964
|
+
};
|
|
16965
|
+
if (dragging) {
|
|
16966
|
+
document.addEventListener("mousemove", handleMouseMove, {
|
|
16967
|
+
passive: true
|
|
16968
|
+
});
|
|
16969
|
+
document.addEventListener("mouseup", handleMouseUp);
|
|
16970
|
+
document.body.style.cursor = "grabbing";
|
|
16971
|
+
document.body.style.userSelect = "none";
|
|
16972
|
+
}
|
|
16973
|
+
return () => {
|
|
16974
|
+
if (rafId) cancelAnimationFrame(rafId);
|
|
16975
|
+
document.removeEventListener("mousemove", handleMouseMove);
|
|
16976
|
+
document.removeEventListener("mouseup", handleMouseUp);
|
|
16977
|
+
document.body.style.cursor = "";
|
|
16978
|
+
document.body.style.userSelect = "";
|
|
16979
|
+
};
|
|
16980
|
+
}, [dragging, id, onPositionChange]);
|
|
16981
|
+
const handleMouseDownLocal = React32.useCallback(
|
|
16982
|
+
(e) => {
|
|
16983
|
+
e.preventDefault();
|
|
16984
|
+
e.stopPropagation();
|
|
16985
|
+
const rect = e.currentTarget.closest(".fixed")?.getBoundingClientRect();
|
|
16986
|
+
if (!rect) return;
|
|
16987
|
+
offsetRef.current = { x: e.clientX - rect.left, y: e.clientY - rect.top };
|
|
16988
|
+
setDragging(true);
|
|
16989
|
+
onMouseDown?.(id, e);
|
|
16990
|
+
},
|
|
16991
|
+
[id, onMouseDown]
|
|
16992
|
+
);
|
|
16993
|
+
const handleTouchStartLocal = React32.useCallback(
|
|
16994
|
+
(e) => {
|
|
16995
|
+
e.stopPropagation();
|
|
16996
|
+
const touch = e.touches[0];
|
|
16997
|
+
if (!touch) return;
|
|
16998
|
+
const rect = e.currentTarget.closest(".fixed")?.getBoundingClientRect();
|
|
16999
|
+
if (!rect) return;
|
|
17000
|
+
offsetRef.current = {
|
|
17001
|
+
x: touch.clientX - rect.left,
|
|
17002
|
+
y: touch.clientY - rect.top
|
|
17003
|
+
};
|
|
17004
|
+
setDragging(true);
|
|
17005
|
+
onMouseDown?.(id, e);
|
|
17006
|
+
},
|
|
17007
|
+
[id, onMouseDown]
|
|
17008
|
+
);
|
|
17009
|
+
const inputConnections = React32.useMemo(
|
|
17010
|
+
() => data.connections.filter((c) => c.type === "entrada"),
|
|
17011
|
+
[data.connections]
|
|
17012
|
+
);
|
|
17013
|
+
const outputConnections = React32.useMemo(
|
|
17014
|
+
() => data.connections.filter((c) => c.type === "saida"),
|
|
17015
|
+
[data.connections]
|
|
17016
|
+
);
|
|
17017
|
+
const isInput = inputConnections.length > 0;
|
|
17018
|
+
const connections = isInput ? inputConnections : outputConnections;
|
|
17019
|
+
const externalSystem = systemName ?? connections[0]?.name ?? "Sistema";
|
|
17020
|
+
const header = /* @__PURE__ */ jsxRuntime.jsxs(
|
|
17021
|
+
"div",
|
|
17022
|
+
{
|
|
17023
|
+
className: "flex items-center justify-between py-1 border-b border-border/10 bg-muted/30 shrink-0",
|
|
17024
|
+
onMouseDown: handleMouseDownLocal,
|
|
17025
|
+
onTouchStart: handleTouchStartLocal,
|
|
17026
|
+
style: {
|
|
17027
|
+
touchAction: "none",
|
|
17028
|
+
cursor: dragging ? "grabbing" : "grab"
|
|
17029
|
+
},
|
|
17030
|
+
children: [
|
|
17031
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 px-3", children: [
|
|
17032
|
+
/* @__PURE__ */ jsxRuntime.jsx(react.DotsSixVerticalIcon, { size: 16, className: "text-primary" }),
|
|
17033
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider", children: title })
|
|
17034
|
+
] }),
|
|
17035
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17036
|
+
ButtonBase,
|
|
17037
|
+
{
|
|
17038
|
+
variant: "ghost",
|
|
17039
|
+
size: "icon",
|
|
17040
|
+
onClick: () => onClose(id),
|
|
17041
|
+
className: "text-muted-foreground hover:text-destructive transition-colors hover:bg-destructive/10 mr-1",
|
|
17042
|
+
style: { cursor: "pointer" },
|
|
17043
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(react.XIcon, { size: 16 })
|
|
17044
|
+
}
|
|
17045
|
+
)
|
|
17046
|
+
]
|
|
17047
|
+
}
|
|
17048
|
+
);
|
|
17049
|
+
const bodyProps = { data, isLoading, connections, isInput, externalSystem };
|
|
17050
|
+
if (isMobile) {
|
|
17051
|
+
return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
17052
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17053
|
+
framerMotion.motion.div,
|
|
17054
|
+
{
|
|
17055
|
+
className: "fixed inset-0 z-[9999] bg-black/40 backdrop-blur-[2px]",
|
|
17056
|
+
initial: { opacity: 0 },
|
|
17057
|
+
animate: { opacity: 1 },
|
|
17058
|
+
exit: { opacity: 0 },
|
|
17059
|
+
onClick: () => onClose(id)
|
|
17060
|
+
},
|
|
17061
|
+
`overlay-${id}`
|
|
17062
|
+
),
|
|
17063
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
17064
|
+
framerMotion.motion.div,
|
|
17065
|
+
{
|
|
17066
|
+
className: "fixed bottom-0 left-0 right-0 z-[10000] bg-card border-t border-border/50 rounded-t-2xl shadow-2xl flex flex-col",
|
|
17067
|
+
style: { maxHeight: "85dvh" },
|
|
17068
|
+
initial: { y: "100%" },
|
|
17069
|
+
animate: { y: 0 },
|
|
17070
|
+
exit: { y: "100%" },
|
|
17071
|
+
transition: { type: "spring", stiffness: 320, damping: 36 },
|
|
17072
|
+
onClick: (e) => e.stopPropagation(),
|
|
17073
|
+
children: [
|
|
17074
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center pt-2.5 pb-1 shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-10 h-1 rounded-full bg-border" }) }),
|
|
17075
|
+
header,
|
|
17076
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-y-auto flex-1 pb-[env(safe-area-inset-bottom)]", children: /* @__PURE__ */ jsxRuntime.jsx(TooltipBody, { ...bodyProps }) })
|
|
17077
|
+
]
|
|
17078
|
+
},
|
|
17079
|
+
`sheet-${id}`
|
|
17080
|
+
)
|
|
17081
|
+
] }) });
|
|
17082
|
+
}
|
|
17083
|
+
return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
17084
|
+
framerMotion.motion.div,
|
|
17085
|
+
{
|
|
17086
|
+
className: "fixed bg-card/95 backdrop-blur-md border border-border/50 rounded-lg shadow-2xl z-[10000] w-[calc(100vw-32px)] max-w-sm sm:w-80 overflow-hidden flex flex-col",
|
|
17087
|
+
variants: tooltipVariants3,
|
|
17088
|
+
initial: "hidden",
|
|
17089
|
+
animate: "visible",
|
|
17090
|
+
exit: "exit",
|
|
17091
|
+
style: { top: localPos.top, left: localPos.left },
|
|
17092
|
+
onClick: (e) => e.stopPropagation(),
|
|
17093
|
+
children: [
|
|
17094
|
+
header,
|
|
17095
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-[60vh] sm:max-h-[520px] overflow-hidden flex flex-col", children: /* @__PURE__ */ jsxRuntime.jsx(TooltipBody, { ...bodyProps }) })
|
|
17096
|
+
]
|
|
17097
|
+
},
|
|
17098
|
+
id
|
|
17099
|
+
) });
|
|
17100
|
+
};
|
|
17101
|
+
var IntegrationTooltip_default = IntegrationTooltip;
|
|
17102
|
+
|
|
17103
|
+
// src/components/ui/charts/components/tooltips/utils/integrationTooltipUtils.ts
|
|
17104
|
+
function processIntegrationData(integrations, targetSystemName) {
|
|
17105
|
+
const connections = [];
|
|
17106
|
+
integrations.forEach((integration) => {
|
|
17107
|
+
const origemNome = integration.origem.properties.nome;
|
|
17108
|
+
const destinoNome = integration.destino.properties.nome;
|
|
17109
|
+
if (origemNome === targetSystemName) {
|
|
17110
|
+
connections.push({
|
|
17111
|
+
id: integration.r.elementId,
|
|
17112
|
+
name: destinoNome,
|
|
17113
|
+
type: "saida",
|
|
17114
|
+
integration: integration.r.properties
|
|
17115
|
+
});
|
|
17116
|
+
}
|
|
17117
|
+
if (destinoNome === targetSystemName) {
|
|
17118
|
+
connections.push({
|
|
17119
|
+
id: integration.r.elementId,
|
|
17120
|
+
name: origemNome,
|
|
17121
|
+
type: "entrada",
|
|
17122
|
+
integration: integration.r.properties
|
|
17123
|
+
});
|
|
17124
|
+
}
|
|
17125
|
+
});
|
|
17126
|
+
return {
|
|
17127
|
+
name: targetSystemName,
|
|
17128
|
+
connections
|
|
17129
|
+
};
|
|
17130
|
+
}
|
|
16484
17131
|
|
|
16485
|
-
// src/components/ui/charts/components/tooltips/systemTooltipUtils.ts
|
|
17132
|
+
// src/components/ui/charts/components/tooltips/utils/systemTooltipUtils.ts
|
|
16486
17133
|
function processNeo4jData(integrations, targetSystemName) {
|
|
16487
17134
|
const connections = [];
|
|
16488
17135
|
integrations.forEach((integration) => {
|
|
@@ -19647,6 +20294,44 @@ var Lens = ({
|
|
|
19647
20294
|
}
|
|
19648
20295
|
);
|
|
19649
20296
|
};
|
|
20297
|
+
var carouselThemes = {
|
|
20298
|
+
malwee: {
|
|
20299
|
+
foreground: "text-[#222222]",
|
|
20300
|
+
primary: "bg-[#0b5430]",
|
|
20301
|
+
primaryForeground: "text-white",
|
|
20302
|
+
muted: "bg-[#f0eacc]",
|
|
20303
|
+
mutedForeground: "text-[#6b665c]",
|
|
20304
|
+
border: "!border-[#0b5430]",
|
|
20305
|
+
font: "font-[family-name:var(--font-playfair)]"
|
|
20306
|
+
},
|
|
20307
|
+
enfim: {
|
|
20308
|
+
foreground: "text-black",
|
|
20309
|
+
primary: "bg-black",
|
|
20310
|
+
primaryForeground: "text-white",
|
|
20311
|
+
muted: "bg-gray-100",
|
|
20312
|
+
mutedForeground: "text-gray-600",
|
|
20313
|
+
border: "!border-black",
|
|
20314
|
+
font: "font-[family-name:var(--font-libre-caslon)]"
|
|
20315
|
+
},
|
|
20316
|
+
carinhoso: {
|
|
20317
|
+
foreground: "text-[#222222]",
|
|
20318
|
+
primary: "bg-[#d9d0c0]",
|
|
20319
|
+
primaryForeground: "text-[#222222]",
|
|
20320
|
+
muted: "bg-[#e2ddd6]",
|
|
20321
|
+
mutedForeground: "text-[#5e5b56]",
|
|
20322
|
+
border: "!border-[#d9d0c0]",
|
|
20323
|
+
font: "font-[family-name:var(--font-josefin)]"
|
|
20324
|
+
},
|
|
20325
|
+
"malwee-kids": {
|
|
20326
|
+
foreground: "text-[#005bbf]",
|
|
20327
|
+
primary: "bg-[#005bbf]",
|
|
20328
|
+
primaryForeground: "text-white",
|
|
20329
|
+
muted: "bg-[#fcf5c2]",
|
|
20330
|
+
mutedForeground: "text-[#004a9e]",
|
|
20331
|
+
border: "!border-[#005bbf]",
|
|
20332
|
+
font: "font-[family-name:var(--font-poppins)]"
|
|
20333
|
+
}
|
|
20334
|
+
};
|
|
19650
20335
|
function CarouselSkeleton({ className }) {
|
|
19651
20336
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full h-full lg:p-10 sm:p-4 p-2", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-3 h-full", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative overflow-hidden rounded-lg h-full", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full h-full min-h-[300px] bg-muted rounded-lg overflow-hidden relative", children: [
|
|
19652
20337
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -19726,7 +20411,8 @@ function CarouselBase({
|
|
|
19726
20411
|
autoPlayInterval = 3e3,
|
|
19727
20412
|
zoomEffect = null,
|
|
19728
20413
|
download = false,
|
|
19729
|
-
isLoading = false
|
|
20414
|
+
isLoading = false,
|
|
20415
|
+
onChange
|
|
19730
20416
|
}) {
|
|
19731
20417
|
const isMobile = useIsMobile();
|
|
19732
20418
|
const [index, setIndex] = React32.useState(0);
|
|
@@ -19737,7 +20423,9 @@ function CarouselBase({
|
|
|
19737
20423
|
React32.useEffect(() => {
|
|
19738
20424
|
if (!emblaApi) return;
|
|
19739
20425
|
const onSelect = () => {
|
|
19740
|
-
|
|
20426
|
+
const newIndex = emblaApi.selectedScrollSnap();
|
|
20427
|
+
setIndex(newIndex);
|
|
20428
|
+
onChange?.(newIndex);
|
|
19741
20429
|
};
|
|
19742
20430
|
emblaApi.on("select", onSelect);
|
|
19743
20431
|
emblaApi.on("reInit", onSelect);
|
|
@@ -19745,7 +20433,10 @@ function CarouselBase({
|
|
|
19745
20433
|
emblaApi.off("select", onSelect);
|
|
19746
20434
|
emblaApi.off("reInit", onSelect);
|
|
19747
20435
|
};
|
|
19748
|
-
}, [emblaApi]);
|
|
20436
|
+
}, [emblaApi, onChange]);
|
|
20437
|
+
const currentItem = items[index];
|
|
20438
|
+
const themeKey = currentItem?.theme || "malwee";
|
|
20439
|
+
const currentTheme = carouselThemes[themeKey] || carouselThemes.malwee;
|
|
19749
20440
|
React32.useEffect(() => {
|
|
19750
20441
|
if (!autoPlay || items.length <= 1 || !emblaApi) return;
|
|
19751
20442
|
const interval = setInterval(() => {
|
|
@@ -19757,14 +20448,14 @@ function CarouselBase({
|
|
|
19757
20448
|
if (isDownloading) return;
|
|
19758
20449
|
setIsDownloading(true);
|
|
19759
20450
|
setDownloadSuccess(false);
|
|
19760
|
-
const
|
|
20451
|
+
const currentItem2 = items[index];
|
|
19761
20452
|
try {
|
|
19762
|
-
const response = await fetch(
|
|
20453
|
+
const response = await fetch(currentItem2.url);
|
|
19763
20454
|
const blob = await response.blob();
|
|
19764
20455
|
const url = window.URL.createObjectURL(blob);
|
|
19765
20456
|
const link = document.createElement("a");
|
|
19766
20457
|
link.href = url;
|
|
19767
|
-
link.download =
|
|
20458
|
+
link.download = currentItem2.title || "image";
|
|
19768
20459
|
document.body.appendChild(link);
|
|
19769
20460
|
link.click();
|
|
19770
20461
|
document.body.removeChild(link);
|
|
@@ -19798,7 +20489,12 @@ function CarouselBase({
|
|
|
19798
20489
|
initial: { opacity: 0 },
|
|
19799
20490
|
animate: { opacity: 1 },
|
|
19800
20491
|
transition: { duration: 0.4 },
|
|
19801
|
-
className: cn(
|
|
20492
|
+
className: cn(
|
|
20493
|
+
"w-full lg:p-10 sm:p-4 p-2 transition-colors duration-500",
|
|
20494
|
+
currentTheme.foreground,
|
|
20495
|
+
currentTheme.font,
|
|
20496
|
+
className
|
|
20497
|
+
),
|
|
19802
20498
|
style: { width },
|
|
19803
20499
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-3 h-full", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative h-full", containerClassName), children: [
|
|
19804
20500
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -19933,8 +20629,12 @@ function CarouselBase({
|
|
|
19933
20629
|
onPointerDown: (e) => e.stopPropagation(),
|
|
19934
20630
|
onTouchStart: (e) => e.stopPropagation(),
|
|
19935
20631
|
onMouseDown: (e) => e.stopPropagation(),
|
|
19936
|
-
className:
|
|
19937
|
-
|
|
20632
|
+
className: cn(
|
|
20633
|
+
"absolute left-4 top-1/2 -translate-y-1/2 w-10 h-10 rounded-full flex items-center justify-center shadow-lg transition-all z-50",
|
|
20634
|
+
!emblaApi?.canScrollPrev() ? "opacity-40 cursor-not-allowed" : "hover:scale-110 hover:opacity-100 opacity-70",
|
|
20635
|
+
currentTheme.primary,
|
|
20636
|
+
currentTheme.primaryForeground
|
|
20637
|
+
),
|
|
19938
20638
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
19939
20639
|
"svg",
|
|
19940
20640
|
{
|
|
@@ -19963,8 +20663,12 @@ function CarouselBase({
|
|
|
19963
20663
|
onPointerDown: (e) => e.stopPropagation(),
|
|
19964
20664
|
onTouchStart: (e) => e.stopPropagation(),
|
|
19965
20665
|
onMouseDown: (e) => e.stopPropagation(),
|
|
19966
|
-
className:
|
|
19967
|
-
|
|
20666
|
+
className: cn(
|
|
20667
|
+
"absolute right-4 top-1/2 -translate-y-1/2 w-10 h-10 rounded-full flex items-center justify-center shadow-lg transition-all z-50",
|
|
20668
|
+
!emblaApi?.canScrollNext() ? "opacity-40 cursor-not-allowed" : "hover:scale-110 hover:opacity-100 opacity-70",
|
|
20669
|
+
currentTheme.primary,
|
|
20670
|
+
currentTheme.primaryForeground
|
|
20671
|
+
),
|
|
19968
20672
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
19969
20673
|
"svg",
|
|
19970
20674
|
{
|
|
@@ -19993,7 +20697,14 @@ function CarouselBase({
|
|
|
19993
20697
|
onPointerDown: (e) => e.stopPropagation(),
|
|
19994
20698
|
onTouchStart: (e) => e.stopPropagation(),
|
|
19995
20699
|
onMouseDown: (e) => e.stopPropagation(),
|
|
19996
|
-
className:
|
|
20700
|
+
className: cn(
|
|
20701
|
+
"h-2 rounded-full transition-all duration-300",
|
|
20702
|
+
i === index ? cn("w-8", currentTheme.primary) : cn(
|
|
20703
|
+
"w-2 hover:opacity-80",
|
|
20704
|
+
currentTheme.primary,
|
|
20705
|
+
"opacity-40"
|
|
20706
|
+
)
|
|
20707
|
+
)
|
|
19997
20708
|
},
|
|
19998
20709
|
i
|
|
19999
20710
|
)) })
|
|
@@ -20385,6 +21096,7 @@ exports.AvatarFallbackBase = AvatarFallbackBase;
|
|
|
20385
21096
|
exports.AvatarImageBase = AvatarImageBase;
|
|
20386
21097
|
exports.BackButton = BackButton;
|
|
20387
21098
|
exports.Badge = Badge;
|
|
21099
|
+
exports.Beam = Beam;
|
|
20388
21100
|
exports.BreadcrumbBase = BreadcrumbBase;
|
|
20389
21101
|
exports.BreadcrumbEllipsisBase = BreadcrumbEllipsisBase;
|
|
20390
21102
|
exports.BreadcrumbItemBase = BreadcrumbItemBase;
|
|
@@ -20448,6 +21160,7 @@ exports.ContextMenuSubTriggerBase = ContextMenuSubTriggerBase;
|
|
|
20448
21160
|
exports.ContextMenuTriggerBase = ContextMenuTriggerBase;
|
|
20449
21161
|
exports.ControlledCombobox = ControlledCombobox;
|
|
20450
21162
|
exports.CopyButton = CopyButton;
|
|
21163
|
+
exports.CopyData = CopyData;
|
|
20451
21164
|
exports.DateTimePicker = DateTimePicker;
|
|
20452
21165
|
exports.DayView = DayView;
|
|
20453
21166
|
exports.DayViewAgenda = DayViewAgenda;
|
|
@@ -20513,6 +21226,7 @@ exports.EventItem = EventItem;
|
|
|
20513
21226
|
exports.EventItemAgenda = EventItemAgenda;
|
|
20514
21227
|
exports.EventsPopup = EventsPopup;
|
|
20515
21228
|
exports.FavoriteButton = FavoriteButton;
|
|
21229
|
+
exports.FileTypes = FileTypes;
|
|
20516
21230
|
exports.FileUploader = FileUploader;
|
|
20517
21231
|
exports.FilterButton = FilterButton;
|
|
20518
21232
|
exports.HideButton = HideButton;
|
|
@@ -20528,6 +21242,8 @@ exports.InputOTPBase = InputOTPBase;
|
|
|
20528
21242
|
exports.InputOTPGroupBase = InputOTPGroupBase;
|
|
20529
21243
|
exports.InputOTPSeparatorBase = InputOTPSeparatorBase;
|
|
20530
21244
|
exports.InputOTPSlotBase = InputOTPSlotBase;
|
|
21245
|
+
exports.IntegrationCard = IntegrationCard;
|
|
21246
|
+
exports.IntegrationTooltip = IntegrationTooltip_default;
|
|
20531
21247
|
exports.LabelBase = LabelBase_default;
|
|
20532
21248
|
exports.Leaderboard = Leaderboard;
|
|
20533
21249
|
exports.LikeButton = LikeButton;
|
|
@@ -20557,6 +21273,7 @@ exports.MultiSelectItemBase = MultiSelectItemBase;
|
|
|
20557
21273
|
exports.MultiSelectSeparatorBase = MultiSelectSeparatorBase;
|
|
20558
21274
|
exports.MultiSelectTriggerBase = MultiSelectTriggerBase;
|
|
20559
21275
|
exports.MultiSelectValueBase = MultiSelectValueBase;
|
|
21276
|
+
exports.NameTooltip = NameTooltip;
|
|
20560
21277
|
exports.NavigationMenuBase = NavigationMenuBase;
|
|
20561
21278
|
exports.NavigationMenuContentBase = NavigationMenuContentBase;
|
|
20562
21279
|
exports.NavigationMenuIndicatorBase = NavigationMenuIndicatorBase;
|
|
@@ -20638,7 +21355,9 @@ exports.StartHour = StartHour;
|
|
|
20638
21355
|
exports.StartHourAgenda = StartHourAgenda;
|
|
20639
21356
|
exports.StatusIndicator = StatusIndicator;
|
|
20640
21357
|
exports.SwitchBase = SwitchBase;
|
|
21358
|
+
exports.SystemNode = SystemNode;
|
|
20641
21359
|
exports.SystemTooltip = SystemTooltip_default;
|
|
21360
|
+
exports.SystemsDiagram = SystemsDiagram;
|
|
20642
21361
|
exports.TableBase = TableBase;
|
|
20643
21362
|
exports.TableBodyBase = TableBodyBase;
|
|
20644
21363
|
exports.TableCaptionBase = TableCaptionBase;
|
|
@@ -20658,6 +21377,7 @@ exports.TimePickerInput = TimePickerInput;
|
|
|
20658
21377
|
exports.TimeSeries = TimeSeries_default;
|
|
20659
21378
|
exports.Toaster = Toaster;
|
|
20660
21379
|
exports.TooltipBase = TooltipBase;
|
|
21380
|
+
exports.TooltipBody = TooltipBody;
|
|
20661
21381
|
exports.TooltipContentBase = TooltipContentBase;
|
|
20662
21382
|
exports.TooltipProviderBase = TooltipProviderBase;
|
|
20663
21383
|
exports.TooltipSimple = TooltipSimple_default;
|
|
@@ -20675,6 +21395,7 @@ exports.WeekCellsHeight = WeekCellsHeight;
|
|
|
20675
21395
|
exports.WeekCellsHeightAgenda = WeekCellsHeightAgenda;
|
|
20676
21396
|
exports.WeekView = WeekView;
|
|
20677
21397
|
exports.WeekViewAgenda = WeekViewAgenda;
|
|
21398
|
+
exports.YearViewAgenda = YearViewAgenda;
|
|
20678
21399
|
exports.adaptDataForTooltip = adaptDataForTooltip;
|
|
20679
21400
|
exports.addHoursToDate = addHoursToDate;
|
|
20680
21401
|
exports.addHoursToDateAgenda = addHoursToDateAgenda;
|
|
@@ -20732,6 +21453,7 @@ exports.isValidHour = isValidHour;
|
|
|
20732
21453
|
exports.isValidMinuteOrSecond = isValidMinuteOrSecond;
|
|
20733
21454
|
exports.niceCeil = niceCeil;
|
|
20734
21455
|
exports.normalizeAttendDate = normalizeAttendDate;
|
|
21456
|
+
exports.processIntegrationData = processIntegrationData;
|
|
20735
21457
|
exports.processNeo4jData = processNeo4jData;
|
|
20736
21458
|
exports.renderInsideBarLabel = renderInsideBarLabel;
|
|
20737
21459
|
exports.renderPillLabel = pillLabelRenderer_default;
|
|
@@ -20760,6 +21482,7 @@ exports.useDrag = useDrag;
|
|
|
20760
21482
|
exports.useEventVisibility = useEventVisibility;
|
|
20761
21483
|
exports.useEventVisibilityAgenda = useEventVisibilityAgenda;
|
|
20762
21484
|
exports.useIsMobile = useIsMobile;
|
|
21485
|
+
exports.useIsTruncated = useIsTruncated;
|
|
20763
21486
|
exports.useOpenTooltipForPeriod = useOpenTooltipForPeriod;
|
|
20764
21487
|
exports.useProcessedData = useProcessedData;
|
|
20765
21488
|
exports.useSeriesOpacity = useSeriesOpacity;
|