@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.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
- if (file.size > maxSize) {
3790
- return `Arquivo muito grande. M\xE1ximo: ${formatFileSize(maxSize)}`;
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 defaultSubtext = dropzoneSubtext || `Formatos: ${accept.join(", ")}. M\xE1ximo: ${formatFileSize(maxSize)}`;
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-10 transition-all duration-300 dark:shadow-black/20",
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 hover:scale-100"
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-base font-semibold text-foreground",
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-sm text-muted-foreground",
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: "mt-6 w-full",
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: "mb-3 text-sm font-medium text-muted-foreground", children: [
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-44", children: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "popLayout", children: files.map((file, index) => /* @__PURE__ */ jsxRuntime.jsxs(
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-3 transition-all duration-300",
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
- // Preview de imagem
4063
- /* @__PURE__ */ jsxRuntime.jsx(
4064
- "img",
4065
- {
4066
- src: file.preview,
4067
- alt: file.name,
4068
- className: "h-full w-full object-cover rounded-md"
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: "absolute bottom-0 left-0 h-6 w-16 max-w-full pe-2 text-right text-[10px] text-muted-foreground/70 sm:pe-4 sm:text-xs", children: "All day" }) }),
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 selectItems = ["month", "week", "day", "agenda"].map((v) => ({
10216
- label: viewLabel(v),
10217
- value: v
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
- "div",
10275
- {
10276
- className: "flex flex-col transition-all duration-200 ease-in-out",
10277
- children: [
10278
- view === "month" && /* @__PURE__ */ jsxRuntime.jsx(
10279
- MonthViewAgenda,
10280
- {
10281
- currentDate,
10282
- events,
10283
- onEventSelect: handleEventSelect
10284
- }
10285
- ),
10286
- view === "week" && /* @__PURE__ */ jsxRuntime.jsx(
10287
- WeekViewAgenda,
10288
- {
10289
- currentDate,
10290
- events,
10291
- onEventSelect: handleEventSelect
10292
- }
10293
- ),
10294
- view === "day" && /* @__PURE__ */ jsxRuntime.jsx(
10295
- DayViewAgenda,
10296
- {
10297
- currentDate,
10298
- events,
10299
- onEventSelect: handleEventSelect
10300
- }
10301
- ),
10302
- view === "agenda" && /* @__PURE__ */ jsxRuntime.jsx(
10303
- Agenda,
10304
- {
10305
- currentDate,
10306
- events,
10307
- onEventSelect: handleEventSelect
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 maxEvents = Math.floor(contentHeight / (eventHeight + eventGap));
10388
- if (totalEvents <= maxEvents) {
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 maxEvents > 0 ? maxEvents - 1 : 0;
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-0.5 sm:py-1",
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-[var(--event-gap)] 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",
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: "max-[479px]:sr-only", children: dateFns.format(/* @__PURE__ */ new Date(), "O") }) }),
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: "max-md:hidden", children: dateFns.format(day, "EEE dd", { locale: locale.ptBR }) })
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: "absolute bottom-0 left-0 h-6 w-16 max-w-full pe-2 text-right text-[10px] text-muted-foreground/70 sm:pe-4 sm:text-xs", children: "Todo dia" }) }),
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: "absolute bottom-0 left-0 h-6 w-16 max-w-full px-1 text-muted-foreground/70 sm:text-xs", children: "Evento" }) }),
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, format20) => {
14806
- const trimmedFormat = format20.trim();
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 format20 = propsDataKey && formatterMap[propsDataKey] ? formatterMap[propsDataKey] : "";
14832
- return format20 ? getFormattedValue(baseFormatted, format20) : baseFormatted;
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
- setIndex(emblaApi.selectedScrollSnap());
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 currentItem = items[index];
20451
+ const currentItem2 = items[index];
19761
20452
  try {
19762
- const response = await fetch(currentItem.url);
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 = currentItem.title || "image";
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("w-full lg:p-10 sm:p-4 p-2", className),
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: `absolute left-4 top-1/2 -translate-y-1/2 w-10 h-10 rounded-full flex items-center justify-center shadow-lg transition-transform z-50
19937
- ${!emblaApi?.canScrollPrev() ? "opacity-40 cursor-not-allowed" : "bg-secondary hover:scale-110 hover:opacity-100 opacity-70"}`,
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: `absolute right-4 top-1/2 -translate-y-1/2 w-10 h-10 rounded-full flex items-center justify-center shadow-lg transition-transform z-50
19967
- ${!emblaApi?.canScrollNext() ? "opacity-40 cursor-not-allowed" : "bg-secondary hover:scale-110 hover:opacity-100 opacity-70"}`,
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: `h-2 rounded-full transition-all ${i === index ? "w-8 bg-white" : "w-2 bg-white/50"}`
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;