@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.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import './index.css';
2
2
  import * as React32 from 'react';
3
- import React32__default, { forwardRef, useState, useEffect, createContext, useMemo, useRef, useCallback, useContext, useId, useLayoutEffect } from 'react';
3
+ import React32__default, { forwardRef, useState, useEffect, createContext, useMemo, useRef, useCallback, useId, useContext, useLayoutEffect } from 'react';
4
4
  import { Slot } from '@radix-ui/react-slot';
5
5
  import { cva } from 'class-variance-authority';
6
6
  import { clsx } from 'clsx';
@@ -35,7 +35,7 @@ import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
35
35
  import { Drawer } from 'vaul';
36
36
  import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
37
37
  import { Prism } from 'react-syntax-highlighter';
38
- import { format, startOfMonth, endOfMonth, eachDayOfInterval, isToday, isSameDay, differenceInCalendarDays, differenceInMinutes, isPast, startOfDay, eachHourOfInterval, addHours, getHours, getMinutes, areIntervalsOverlapping, startOfWeek, endOfWeek, isSameMonth, addDays, differenceInDays, isBefore, addMinutes, subMonths, subWeeks, addMonths, addWeeks, isWithinInterval, add, max, min } from 'date-fns';
38
+ import { format, startOfMonth, endOfMonth, eachDayOfInterval, isToday, isSameDay, differenceInCalendarDays, differenceInMinutes, isPast, startOfDay, eachHourOfInterval, addHours, getHours, getMinutes, areIntervalsOverlapping, startOfWeek, endOfWeek, isSameMonth, addDays, startOfYear, endOfYear, eachMonthOfInterval, differenceInDays, isBefore, addMinutes, subMonths, subWeeks, subYears, addMonths, addWeeks, addYears, isWithinInterval, add, max, min } from 'date-fns';
39
39
  import { ptBR } from 'date-fns/locale';
40
40
  import ptBR3 from 'date-fns/locale/pt-BR';
41
41
  import { useSensors, useSensor, MouseSensor, TouchSensor, PointerSensor, DndContext, DragOverlay, useDroppable, useDraggable } from '@dnd-kit/core';
@@ -3646,6 +3646,15 @@ var CardFooterBase = React32.forwardRef(({ className, testid: dataTestId = "card
3646
3646
  }
3647
3647
  ));
3648
3648
  CardFooterBase.displayName = "CardFooter";
3649
+ var FileTypes = {
3650
+ Image: ["image/*", ".jpeg", ".jpg", ".png", ".gif", ".webp", ".svg"],
3651
+ Document: [".pdf", ".doc", ".docx", ".txt", ".rtf"],
3652
+ Spreadsheet: [".xls", ".xlsx", ".csv"],
3653
+ Presentation: [".ppt", ".pptx"],
3654
+ Video: ["video/*", ".mp4", ".webm", ".mkv", ".avi"],
3655
+ Audio: ["audio/*", ".mp3", ".wav", ".ogg"],
3656
+ All: []
3657
+ };
3649
3658
  var formatFileSize = (bytes) => {
3650
3659
  if (bytes === 0) return "0 Bytes";
3651
3660
  const k = 1024;
@@ -3712,8 +3721,8 @@ var createImagePreview = (file) => {
3712
3721
  var FileUploader = React32.forwardRef(
3713
3722
  ({
3714
3723
  className,
3715
- accept,
3716
- maxSize,
3724
+ accept = FileTypes.All,
3725
+ maxSize = 10,
3717
3726
  maxFiles = 1,
3718
3727
  disabled = false,
3719
3728
  value = [],
@@ -3743,8 +3752,9 @@ var FileUploader = React32.forwardRef(
3743
3752
  };
3744
3753
  }, [files]);
3745
3754
  const validateFile = (file) => {
3746
- if (file.size > maxSize) {
3747
- return `Arquivo muito grande. M\xE1ximo: ${formatFileSize(maxSize)}`;
3755
+ const maxSizeBytes = maxSize * 1024 * 1024;
3756
+ if (file.size > maxSizeBytes) {
3757
+ return `Arquivo muito grande. M\xE1ximo: ${maxSize} MB`;
3748
3758
  }
3749
3759
  if (accept.length > 0) {
3750
3760
  const fileExtension = `.${getFileExtension(file.name)}`;
@@ -3854,22 +3864,32 @@ var FileUploader = React32.forwardRef(
3854
3864
  }
3855
3865
  };
3856
3866
  const acceptString = accept.join(",");
3857
- const defaultSubtext = dropzoneSubtext || `Formatos: ${accept.join(", ")}. M\xE1ximo: ${formatFileSize(maxSize)}`;
3867
+ const getFormatText = () => {
3868
+ if (accept === FileTypes.All || accept.length === 0)
3869
+ return "Qualquer formato";
3870
+ if (accept === FileTypes.Image) return "Apenas imagens";
3871
+ if (accept === FileTypes.Document) return "Apenas documentos";
3872
+ if (accept === FileTypes.Video) return "Apenas v\xEDdeos";
3873
+ if (accept === FileTypes.Audio) return "Apenas \xE1udio";
3874
+ if (accept === FileTypes.Spreadsheet) return "Apenas planilhas";
3875
+ if (accept === FileTypes.Presentation) return "Apenas apresenta\xE7\xF5es";
3876
+ return "Formatos espec\xEDficos v\xE1lidos";
3877
+ };
3878
+ const defaultSubtext = dropzoneSubtext || `${getFormatText()} (M\xE1x: ${maxSize}MB)`;
3858
3879
  return /* @__PURE__ */ jsx("div", { ref, className: cn("w-full", className), ...props, children: /* @__PURE__ */ jsxs(
3859
3880
  motion.div,
3860
3881
  {
3861
3882
  className: cn(
3862
- "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",
3883
+ "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",
3863
3884
  isDragging && "border-primary bg-primary/10 scale-[1.02]",
3864
3885
  !isDragging && "border-border hover:border-primary/60 hover:bg-muted/50",
3865
- disabled && "cursor-not-allowed opacity-50 hover:scale-100"
3886
+ disabled && "cursor-not-allowed opacity-50"
3866
3887
  ),
3867
3888
  onDragEnter: handleDragEnter,
3868
3889
  onDragOver: handleDragOver,
3869
3890
  onDragLeave: handleDragLeave,
3870
3891
  onDrop: handleDrop,
3871
3892
  onClick: handleClick,
3872
- whileHover: !disabled ? { scale: 1.01 } : void 0,
3873
3893
  whileTap: !disabled ? { scale: 0.99 } : void 0,
3874
3894
  animate: isDragging ? {
3875
3895
  borderColor: `hsl(var(--primary))`,
@@ -3929,7 +3949,7 @@ var FileUploader = React32.forwardRef(
3929
3949
  /* @__PURE__ */ jsx(
3930
3950
  motion.p,
3931
3951
  {
3932
- className: "mb-2 text-base font-semibold text-foreground",
3952
+ className: "mb-2 text-xs font-semibold text-foreground",
3933
3953
  initial: animate ? { opacity: 0, y: -10 } : false,
3934
3954
  animate: { opacity: 1, y: 0 },
3935
3955
  transition: { delay: 0.1 },
@@ -3939,63 +3959,29 @@ var FileUploader = React32.forwardRef(
3939
3959
  /* @__PURE__ */ jsx(
3940
3960
  motion.p,
3941
3961
  {
3942
- className: "text-sm text-muted-foreground",
3962
+ className: "text-xs text-muted-foreground",
3943
3963
  initial: animate ? { opacity: 0, y: -10 } : false,
3944
3964
  animate: { opacity: 1, y: 0 },
3945
3965
  transition: { delay: 0.2 },
3946
3966
  children: defaultSubtext
3947
3967
  }
3948
3968
  ),
3949
- /* @__PURE__ */ jsx(AnimatePresence, { children: files.length > 0 && /* @__PURE__ */ jsxs(
3950
- motion.div,
3951
- {
3952
- initial: { opacity: 0, scale: 0.8, y: 10 },
3953
- animate: {
3954
- opacity: 1,
3955
- scale: 1,
3956
- y: 0,
3957
- backgroundColor: `hsl(var(--primary) / 0.1)`,
3958
- borderColor: `hsl(var(--primary) / 0.2)`
3959
- },
3960
- exit: { opacity: 0, scale: 0.8, y: 10 },
3961
- className: cn(
3962
- "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"
3963
- ),
3964
- transition: { duration: 0.3 },
3965
- children: [
3966
- /* @__PURE__ */ jsx("div", { className: "h-4 w-4 text-primary flex items-center justify-center", children: /* @__PURE__ */ jsx(CheckIcon, { size: 16, className: "text-emerald-500" }) }),
3967
- /* @__PURE__ */ jsxs(
3968
- motion.span,
3969
- {
3970
- className: "text-sm font-semibold text-primary",
3971
- animate: { color: `hsl(var(--primary))` },
3972
- transition: { duration: 0.3 },
3973
- children: [
3974
- files.length,
3975
- " ",
3976
- files.length === 1 ? "arquivo selecionado" : "arquivos selecionados"
3977
- ]
3978
- }
3979
- )
3980
- ]
3981
- }
3982
- ) }),
3983
3969
  showPreview && files.length > 0 && /* @__PURE__ */ jsx(
3984
3970
  motion.div,
3985
3971
  {
3986
- className: "mt-6 w-full",
3972
+ className: "py-2 w-full",
3987
3973
  initial: animate ? { opacity: 0, y: 10 } : false,
3988
3974
  animate: { opacity: 1, y: 0 },
3989
3975
  transition: { delay: 0.3 },
3990
3976
  children: /* @__PURE__ */ jsxs("div", { children: [
3991
- /* @__PURE__ */ jsxs("h4", { className: "mb-3 text-sm font-medium text-muted-foreground", children: [
3977
+ /* @__PURE__ */ jsxs("h4", { className: "text-xs font-medium text-muted-foreground pb-0.5", children: [
3992
3978
  "Arquivos selecionados (",
3993
3979
  files.length,
3994
3980
  "/",
3995
3981
  maxFiles,
3996
3982
  ")"
3997
3983
  ] }),
3998
- /* @__PURE__ */ jsx("div", { className: "space-y-2 overflow-y-auto max-h-44", children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "popLayout", children: files.map((file, index) => /* @__PURE__ */ jsxs(
3984
+ /* @__PURE__ */ jsx("div", { className: "space-y-2 overflow-y-auto max-h-36", children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "popLayout", children: files.map((file, index) => /* @__PURE__ */ jsxs(
3999
3985
  motion.div,
4000
3986
  {
4001
3987
  layout: true,
@@ -4011,24 +3997,18 @@ var FileUploader = React32.forwardRef(
4011
3997
  layout: { duration: 0.2 }
4012
3998
  },
4013
3999
  className: cn(
4014
- "flex items-center gap-3 rounded-md border p-3 transition-all duration-300",
4000
+ "group flex items-center gap-3 rounded-md border p-2 transition-all duration-300",
4015
4001
  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"
4016
4002
  ),
4017
4003
  children: [
4018
- /* @__PURE__ */ jsx("div", { className: "flex h-12 w-12 shrink-0 items-center justify-center rounded-md bg-muted overflow-hidden", children: file.preview ? (
4019
- // Preview de imagem
4020
- /* @__PURE__ */ jsx(
4021
- "img",
4022
- {
4023
- src: file.preview,
4024
- alt: file.name,
4025
- className: "h-full w-full object-cover rounded-md"
4026
- }
4027
- )
4028
- ) : (
4029
- // Ícone baseado no tipo de arquivo
4030
- getFileTypeIcon(file)
4031
- ) }),
4004
+ /* @__PURE__ */ jsx("div", { className: "flex h-12 w-12 shrink-0 items-center justify-center rounded-md bg-muted overflow-hidden", children: file.preview ? /* @__PURE__ */ jsx(
4005
+ "img",
4006
+ {
4007
+ src: file.preview,
4008
+ alt: file.name,
4009
+ className: "h-full w-full object-cover rounded-md"
4010
+ }
4011
+ ) : getFileTypeIcon(file) }),
4032
4012
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
4033
4013
  /* @__PURE__ */ jsx(
4034
4014
  "p",
@@ -4058,14 +4038,14 @@ var FileUploader = React32.forwardRef(
4058
4038
  /* @__PURE__ */ jsx(
4059
4039
  ButtonBase,
4060
4040
  {
4061
- variant: "destructive",
4062
4041
  size: "icon",
4042
+ variant: "ghost",
4063
4043
  onClick: (e) => {
4064
4044
  e?.stopPropagation();
4065
4045
  handleRemoveFile(file.id);
4066
4046
  },
4067
- className: "",
4068
- children: /* @__PURE__ */ jsx(XIcon, { size: 12 })
4047
+ className: "opacity-0 transition-opacity group-hover:opacity-100",
4048
+ children: /* @__PURE__ */ jsx(XIcon, { size: 12, className: "text-red-500" })
4069
4049
  }
4070
4050
  )
4071
4051
  ]
@@ -9698,7 +9678,7 @@ function DayViewAgenda({
9698
9678
  const { currentTimePosition, currentTimeVisible } = useCurrentTimeIndicatorAgenda(currentDate, "day");
9699
9679
  return /* @__PURE__ */ jsxs("div", { className: "contents", "data-slot": "day-view", children: [
9700
9680
  showAllDaySection && /* @__PURE__ */ jsx("div", { className: "border-border/70 border-t bg-muted/50", children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[3rem_1fr] sm:grid-cols-[4rem_1fr]", children: [
9701
- /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ 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" }) }),
9681
+ /* @__PURE__ */ jsx("div", { className: "relative border-border/70 border-r flex items-center justify-center p-1", children: /* @__PURE__ */ jsx("span", { className: "text-center text-[10px] text-muted-foreground/70 sm:text-xs", children: "Todo Dia" }) }),
9702
9682
  /* @__PURE__ */ jsx("div", { className: "relative border-border/70 border-r p-1 last:border-r-0", children: allDayEvents.map((event) => {
9703
9683
  const eventStart = getEventStartDate(event);
9704
9684
  const eventEnd = getEventEndDate(event) ?? getEventStartDate(event);
@@ -10086,7 +10066,8 @@ function EventAgenda({
10086
10066
  className,
10087
10067
  initialView = "month",
10088
10068
  initialDate,
10089
- onClick
10069
+ onClick,
10070
+ showYearView = false
10090
10071
  }) {
10091
10072
  const [currentDate, setCurrentDate] = useState(
10092
10073
  initialDate && new Date(initialDate) || /* @__PURE__ */ new Date()
@@ -10099,6 +10080,7 @@ function EventAgenda({
10099
10080
  else if (view === "day") setCurrentDate((d) => addDays(d, -1));
10100
10081
  else if (view === "agenda")
10101
10082
  setCurrentDate((d) => addDays(d, -AgendaDaysToShowAgenda));
10083
+ else if (view === "year") setCurrentDate((d) => subYears(d, 1));
10102
10084
  };
10103
10085
  const goNext = () => {
10104
10086
  if (view === "month") setCurrentDate((d) => addMonths(d, 1));
@@ -10106,6 +10088,7 @@ function EventAgenda({
10106
10088
  else if (view === "day") setCurrentDate((d) => addDays(d, 1));
10107
10089
  else if (view === "agenda")
10108
10090
  setCurrentDate((d) => addDays(d, AgendaDaysToShowAgenda));
10091
+ else if (view === "year") setCurrentDate((d) => addYears(d, 1));
10109
10092
  };
10110
10093
  const handleEventSelect = (event, e) => {
10111
10094
  try {
@@ -10143,7 +10126,8 @@ function EventAgenda({
10143
10126
  month: { full: "M\xEAs", short: "M" },
10144
10127
  week: { full: "Semana", short: "S" },
10145
10128
  day: { full: "Dia", short: "D" },
10146
- agenda: { full: "Agenda", short: "A" }
10129
+ agenda: { full: "Agenda", short: "A" },
10130
+ year: { full: "Ano", short: "An" }
10147
10131
  };
10148
10132
  const entry = labels[v] || { full: v, short: v };
10149
10133
  return condensed ? entry.short : entry.full;
@@ -10167,12 +10151,18 @@ function EventAgenda({
10167
10151
  const start = currentDate;
10168
10152
  return capitalize2(format(start, "MMMM yyyy", { locale: ptBR }));
10169
10153
  }
10154
+ if (view === "year") {
10155
+ return format(currentDate, "yyyy");
10156
+ }
10170
10157
  return capitalize2(format(currentDate, "MMMM yyyy", { locale: ptBR }));
10171
10158
  }, [currentDate, view]);
10172
- const selectItems = ["month", "week", "day", "agenda"].map((v) => ({
10173
- label: viewLabel(v),
10174
- value: v
10175
- }));
10159
+ const availableViews = showYearView ? ["year", "month", "week", "day", "agenda"] : ["month", "week", "day", "agenda"];
10160
+ const selectItems = availableViews.map(
10161
+ (v) => ({
10162
+ label: viewLabel(v),
10163
+ value: v
10164
+ })
10165
+ );
10176
10166
  return /* @__PURE__ */ jsxs(
10177
10167
  "div",
10178
10168
  {
@@ -10227,46 +10217,51 @@ function EventAgenda({
10227
10217
  }
10228
10218
  ) })
10229
10219
  ] }),
10230
- /* @__PURE__ */ jsxs(
10231
- "div",
10232
- {
10233
- className: "flex flex-col transition-all duration-200 ease-in-out",
10234
- children: [
10235
- view === "month" && /* @__PURE__ */ jsx(
10236
- MonthViewAgenda,
10237
- {
10238
- currentDate,
10239
- events,
10240
- onEventSelect: handleEventSelect
10241
- }
10242
- ),
10243
- view === "week" && /* @__PURE__ */ jsx(
10244
- WeekViewAgenda,
10245
- {
10246
- currentDate,
10247
- events,
10248
- onEventSelect: handleEventSelect
10249
- }
10250
- ),
10251
- view === "day" && /* @__PURE__ */ jsx(
10252
- DayViewAgenda,
10253
- {
10254
- currentDate,
10255
- events,
10256
- onEventSelect: handleEventSelect
10257
- }
10258
- ),
10259
- view === "agenda" && /* @__PURE__ */ jsx(
10260
- Agenda,
10261
- {
10262
- currentDate,
10263
- events,
10264
- onEventSelect: handleEventSelect
10265
- }
10266
- )
10267
- ]
10268
- }
10269
- )
10220
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col transition-all duration-200 ease-in-out", children: [
10221
+ view === "month" && /* @__PURE__ */ jsx(
10222
+ MonthViewAgenda,
10223
+ {
10224
+ currentDate,
10225
+ events,
10226
+ onEventSelect: handleEventSelect
10227
+ }
10228
+ ),
10229
+ view === "week" && /* @__PURE__ */ jsx(
10230
+ WeekViewAgenda,
10231
+ {
10232
+ currentDate,
10233
+ events,
10234
+ onEventSelect: handleEventSelect
10235
+ }
10236
+ ),
10237
+ view === "day" && /* @__PURE__ */ jsx(
10238
+ DayViewAgenda,
10239
+ {
10240
+ currentDate,
10241
+ events,
10242
+ onEventSelect: handleEventSelect
10243
+ }
10244
+ ),
10245
+ view === "agenda" && /* @__PURE__ */ jsx(
10246
+ Agenda,
10247
+ {
10248
+ currentDate,
10249
+ events,
10250
+ onEventSelect: handleEventSelect
10251
+ }
10252
+ ),
10253
+ view === "year" && /* @__PURE__ */ jsx(
10254
+ YearViewAgenda,
10255
+ {
10256
+ currentDate,
10257
+ events,
10258
+ onMonthSelect: (monthDate) => {
10259
+ setCurrentDate(monthDate);
10260
+ setView("month");
10261
+ }
10262
+ }
10263
+ )
10264
+ ] })
10270
10265
  ] }),
10271
10266
  selectedEvent && React32__default.isValidElement(onClick) ? React32__default.cloneElement(onClick, {
10272
10267
  event: selectedEvent,
@@ -10341,11 +10336,13 @@ function useEventVisibilityAgenda({
10341
10336
  const getVisibleEventCount = useMemo(() => {
10342
10337
  return (totalEvents) => {
10343
10338
  if (!contentHeight) return totalEvents;
10344
- const maxEvents = Math.floor(contentHeight / (eventHeight + eventGap));
10345
- if (totalEvents <= maxEvents) {
10339
+ const availableHeight = contentHeight + eventGap + 4;
10340
+ const slotHeight = eventHeight + eventGap;
10341
+ const maxSlots = Math.floor(availableHeight / slotHeight);
10342
+ if (totalEvents <= maxSlots) {
10346
10343
  return totalEvents;
10347
10344
  }
10348
- return maxEvents > 0 ? maxEvents - 1 : 0;
10345
+ return maxSlots > 0 ? maxSlots - 1 : 0;
10349
10346
  };
10350
10347
  }, [contentHeight, eventHeight, eventGap]);
10351
10348
  return {
@@ -10662,7 +10659,7 @@ function MonthViewAgenda({
10662
10659
  "div",
10663
10660
  {
10664
10661
  ref: isReferenceCell ? contentRef : null,
10665
- 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",
10662
+ 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",
10666
10663
  children: [
10667
10664
  Array.from({ length: dayMultiDayRowCount }).map(
10668
10665
  (_, si) => /* @__PURE__ */ jsx(
@@ -10723,7 +10720,7 @@ function MonthViewAgenda({
10723
10720
  type: "button",
10724
10721
  onClick: (e) => e.stopPropagation(),
10725
10722
  "aria-label": `Mostrar mais ${remainingCount} eventos`,
10726
- 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",
10723
+ 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",
10727
10724
  children: /* @__PURE__ */ jsxs("span", { className: "font-semibold", children: [
10728
10725
  "+ ",
10729
10726
  remainingCount,
@@ -11066,7 +11063,7 @@ function WeekViewAgenda({
11066
11063
  return /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col overflow-hidden", "data-slot": "week-view", children: [
11067
11064
  /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-auto", children: /* @__PURE__ */ jsxs("div", { className: "min-w-[600px] sm:min-w-full flex flex-col h-full", children: [
11068
11065
  /* @__PURE__ */ jsxs("div", { className: "sticky top-0 z-30 grid grid-cols-8 border-border/70 border-b bg-background", children: [
11069
- /* @__PURE__ */ jsx("div", { className: "py-2 text-center text-muted-foreground/70 text-[10px] sm:text-sm", children: /* @__PURE__ */ jsx("span", { className: "max-[479px]:sr-only", children: format(/* @__PURE__ */ new Date(), "O") }) }),
11066
+ /* @__PURE__ */ jsx("div", { className: "py-2 text-center text-muted-foreground/70 text-[10px] sm:text-sm", children: /* @__PURE__ */ jsx("span", { className: "", children: "Hor\xE1rios" }) }),
11070
11067
  days.map((day) => /* @__PURE__ */ jsxs(
11071
11068
  "div",
11072
11069
  {
@@ -11079,7 +11076,7 @@ function WeekViewAgenda({
11079
11076
  format(day, "d", { locale: ptBR })
11080
11077
  ] }),
11081
11078
  /* @__PURE__ */ jsx("span", { className: "hidden sm:inline md:hidden", children: format(day, "EEE d", { locale: ptBR }) }),
11082
- /* @__PURE__ */ jsx("span", { className: "max-md:hidden", children: format(day, "EEE dd", { locale: ptBR }) })
11079
+ /* @__PURE__ */ jsx("span", { className: "hidden md:inline", children: format(day, "EEE dd", { locale: ptBR }) })
11083
11080
  ]
11084
11081
  },
11085
11082
  day.toString()
@@ -11087,7 +11084,7 @@ function WeekViewAgenda({
11087
11084
  ] }),
11088
11085
  showAllDaySection && /* @__PURE__ */ jsxs("div", { className: "border-border/70 border-b bg-muted/50", children: [
11089
11086
  trueAllDayEvents.length > 0 && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-8", children: [
11090
- /* @__PURE__ */ jsx("div", { className: "relative border-border/70 border-r", children: /* @__PURE__ */ 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" }) }),
11087
+ /* @__PURE__ */ jsx("div", { className: "relative border-border/70 border-r flex items-center justify-center p-1", children: /* @__PURE__ */ jsx("span", { className: "text-center text-[10px] text-muted-foreground/70 sm:text-xs", children: "Todo dia" }) }),
11091
11088
  /* @__PURE__ */ jsxs(
11092
11089
  "div",
11093
11090
  {
@@ -11167,7 +11164,7 @@ function WeekViewAgenda({
11167
11164
  trueAllDayEvents.length > 0 && "border-t border-border/40"
11168
11165
  ),
11169
11166
  children: [
11170
- /* @__PURE__ */ jsx("div", { className: "relative border-border/70 border-r", children: /* @__PURE__ */ 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" }) }),
11167
+ /* @__PURE__ */ jsx("div", { className: "relative border-border/70 border-r flex items-center justify-center p-1", children: /* @__PURE__ */ jsx("span", { className: "text-center text-[10px] text-muted-foreground/70 sm:text-xs", children: "Evento" }) }),
11171
11168
  /* @__PURE__ */ jsxs(
11172
11169
  "div",
11173
11170
  {
@@ -11386,6 +11383,86 @@ function WeekViewAgenda({
11386
11383
  )
11387
11384
  ] });
11388
11385
  }
11386
+ function YearViewAgenda({
11387
+ currentDate,
11388
+ events,
11389
+ onMonthSelect
11390
+ }) {
11391
+ const start = startOfYear(currentDate);
11392
+ const end = endOfYear(currentDate);
11393
+ const months = useMemo(() => {
11394
+ return eachMonthOfInterval({ start, end });
11395
+ }, [start, end]);
11396
+ const eventDates = useMemo(() => {
11397
+ return new Set(
11398
+ events.map((e) => getEventStartDate(e)).filter((d) => !!d).map((d) => format(d, "yyyy-MM-dd"))
11399
+ );
11400
+ }, [events]);
11401
+ return /* @__PURE__ */ 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__ */ jsxs(
11402
+ "div",
11403
+ {
11404
+ className: "flex flex-col p-4 rounded-lg border border-border/70 bg-card hover:bg-muted/5 transition-colors cursor-pointer group",
11405
+ onClick: () => onMonthSelect(month),
11406
+ children: [
11407
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-2", children: [
11408
+ /* @__PURE__ */ jsx("h3", { className: "font-semibold text-sm capitalize text-foreground group-hover:text-primary transition-colors", children: format(month, "MMMM", { locale: ptBR }) }),
11409
+ /* @__PURE__ */ jsx("span", { className: "text-[10px] text-muted-foreground/50 uppercase tracking-wider opacity-0 group-hover:opacity-100 transition-opacity", children: "Detalhes" })
11410
+ ] }),
11411
+ /* @__PURE__ */ jsx(MonthMiniGrid, { month, eventDates })
11412
+ ]
11413
+ },
11414
+ month.toString()
11415
+ )) });
11416
+ }
11417
+ function MonthMiniGrid({
11418
+ month,
11419
+ eventDates
11420
+ }) {
11421
+ const days = useMemo(() => {
11422
+ const monthStart = startOfMonth(month);
11423
+ const calendarStart = startOfWeek(monthStart, { weekStartsOn: 0 });
11424
+ const daysArr = [];
11425
+ const curr = new Date(calendarStart);
11426
+ for (let i = 0; i < 42; i++) {
11427
+ daysArr.push(new Date(curr));
11428
+ curr.setDate(curr.getDate() + 1);
11429
+ }
11430
+ return daysArr;
11431
+ }, [month]);
11432
+ const weekdays = ["D", "S", "T", "Q", "Q", "S", "S"];
11433
+ return /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-7 gap-y-1 text-[11px]", children: [
11434
+ weekdays.map((wd, i) => /* @__PURE__ */ jsx(
11435
+ "div",
11436
+ {
11437
+ className: "text-center font-medium text-muted-foreground/70 py-1",
11438
+ children: wd
11439
+ },
11440
+ `${wd}-${i}`
11441
+ )),
11442
+ days.map((day) => {
11443
+ const isCurrentMonth = day.getMonth() === month.getMonth();
11444
+ const dateStr = format(day, "yyyy-MM-dd");
11445
+ const hasEvent = eventDates.has(dateStr);
11446
+ const isDayToday = isToday(day);
11447
+ return /* @__PURE__ */ jsxs(
11448
+ "div",
11449
+ {
11450
+ className: cn(
11451
+ "relative flex items-center justify-center p-1 rounded-sm aspect-square transition-colors",
11452
+ !isCurrentMonth && "opacity-0 pointer-events-none",
11453
+ isDayToday && "bg-blue-500 text-white font-semibold rounded-lg",
11454
+ isCurrentMonth && !isDayToday && "hover:bg-muted/50 text-foreground"
11455
+ ),
11456
+ children: [
11457
+ isCurrentMonth && format(day, "d"),
11458
+ isCurrentMonth && hasEvent && !isDayToday && /* @__PURE__ */ jsx("div", { className: "absolute bottom-0.5 left-1/2 -translate-x-1/2 w-1 h-1 rounded-full bg-blue-500" })
11459
+ ]
11460
+ },
11461
+ day.toString()
11462
+ );
11463
+ })
11464
+ ] });
11465
+ }
11389
11466
  var colorBannerMap = {
11390
11467
  sky: "from-sky-400 via-sky-500 to-cyan-500",
11391
11468
  amber: "from-amber-400 via-amber-500 to-orange-400",
@@ -14759,8 +14836,8 @@ var createValueFormatter = (customFormatter, formatBR) => {
14759
14836
  });
14760
14837
  const prefixFormats = ["R$", "$", "\u20AC", "\xA3"];
14761
14838
  const suffixFormats = ["%", "kg", "km", "m", "L", "un", "t", "h", "min", "s"];
14762
- const getFormattedValue = (baseValue, format20) => {
14763
- const trimmedFormat = format20.trim();
14839
+ const getFormattedValue = (baseValue, format21) => {
14840
+ const trimmedFormat = format21.trim();
14764
14841
  if (prefixFormats.includes(trimmedFormat)) {
14765
14842
  return `${trimmedFormat} ${baseValue}`;
14766
14843
  }
@@ -14785,8 +14862,8 @@ var createValueFormatter = (customFormatter, formatBR) => {
14785
14862
  num = Number.isNaN(parsed) ? NaN : parsed;
14786
14863
  }
14787
14864
  const baseFormatted = formatBR && !Number.isNaN(num) ? nf.format(num) : String(formattedValue ?? value ?? "");
14788
- const format20 = propsDataKey && formatterMap[propsDataKey] ? formatterMap[propsDataKey] : "";
14789
- return format20 ? getFormattedValue(baseFormatted, format20) : baseFormatted;
14865
+ const format21 = propsDataKey && formatterMap[propsDataKey] ? formatterMap[propsDataKey] : "";
14866
+ return format21 ? getFormattedValue(baseFormatted, format21) : baseFormatted;
14790
14867
  };
14791
14868
  }
14792
14869
  if (typeof customFormatter === "function") {
@@ -16438,8 +16515,578 @@ var SystemTooltip = ({
16438
16515
  ) });
16439
16516
  };
16440
16517
  var SystemTooltip_default = SystemTooltip;
16518
+ var useIsTruncated = (ref) => {
16519
+ const [truncated, setTruncated] = useState(false);
16520
+ useEffect(() => {
16521
+ const el = ref.current;
16522
+ if (!el) return;
16523
+ const check = () => setTruncated(el.scrollWidth > el.offsetWidth);
16524
+ check();
16525
+ const ro = new ResizeObserver(check);
16526
+ ro.observe(el);
16527
+ return () => ro.disconnect();
16528
+ }, [ref]);
16529
+ return truncated;
16530
+ };
16531
+ var NameTooltip = ({
16532
+ name,
16533
+ description
16534
+ }) => {
16535
+ const nameRef = useRef(null);
16536
+ const descRef = useRef(null);
16537
+ const isNameTruncated = useIsTruncated(nameRef);
16538
+ const isDescTruncated = useIsTruncated(descRef);
16539
+ const showTooltip = isNameTruncated || isDescTruncated;
16540
+ return /* @__PURE__ */ jsx(TooltipProviderBase, { children: /* @__PURE__ */ jsxs(TooltipBase, { children: [
16541
+ /* @__PURE__ */ jsx(TooltipTriggerBase, { asChild: true, children: /* @__PURE__ */ jsxs("div", { className: "cursor-default", children: [
16542
+ /* @__PURE__ */ jsx(
16543
+ "h3",
16544
+ {
16545
+ ref: nameRef,
16546
+ className: "text-xl font-bold text-foreground tracking-tight truncate",
16547
+ children: name
16548
+ }
16549
+ ),
16550
+ description && /* @__PURE__ */ jsx(
16551
+ "p",
16552
+ {
16553
+ ref: descRef,
16554
+ className: "text-xs text-foreground/70 truncate mt-0.5",
16555
+ children: description
16556
+ }
16557
+ )
16558
+ ] }) }),
16559
+ showTooltip && /* @__PURE__ */ jsxs(TooltipContentBase, { sideOffset: 8, className: "z-[10001]", children: [
16560
+ /* @__PURE__ */ jsx("p", { className: "font-semibold", children: name }),
16561
+ description && /* @__PURE__ */ jsx("p", { className: "text-xs text-foreground/70 mt-0.5", children: description })
16562
+ ] })
16563
+ ] }) });
16564
+ };
16565
+ var SystemNode = ({ label }) => {
16566
+ const truncated = label.length > 9 ? label.substring(0, 9) + "\u2026" : label;
16567
+ const needsTooltip = label.length > 9;
16568
+ const circle = /* @__PURE__ */ jsx("div", { className: "w-[76px] h-[76px] rounded-full bg-primary flex items-center justify-center shrink-0 z-10 cursor-default", children: /* @__PURE__ */ jsx("span", { className: "text-[10px] font-bold text-primary-foreground text-center px-2 leading-tight select-none", children: truncated }) });
16569
+ if (!needsTooltip) return circle;
16570
+ return /* @__PURE__ */ jsx(TooltipProviderBase, { children: /* @__PURE__ */ jsxs(TooltipBase, { children: [
16571
+ /* @__PURE__ */ jsx(TooltipTriggerBase, { asChild: true, children: circle }),
16572
+ /* @__PURE__ */ jsx(TooltipContentBase, { sideOffset: 8, className: "z-[10001]", children: label })
16573
+ ] }) });
16574
+ };
16575
+ var Beam = ({ isInput, containerRef, leftRef, rightRef }) => {
16576
+ const gradientId = useId();
16577
+ const [pathD, setPathD] = useState("");
16578
+ const [svgSize, setSvgSize] = useState({ w: 0, h: 0 });
16579
+ useEffect(() => {
16580
+ let rafId;
16581
+ const update = () => {
16582
+ const container = containerRef.current;
16583
+ const left = leftRef.current;
16584
+ const right = rightRef.current;
16585
+ if (!container || !left || !right) return;
16586
+ const cr = container.getBoundingClientRect();
16587
+ const lr = left.getBoundingClientRect();
16588
+ const rr = right.getBoundingClientRect();
16589
+ const cx1 = lr.left - cr.left + lr.width / 2;
16590
+ const cy1 = lr.top - cr.top + lr.height / 2;
16591
+ const cx2 = rr.left - cr.left + rr.width / 2;
16592
+ const cy2 = rr.top - cr.top + rr.height / 2;
16593
+ const dx = cx2 - cx1, dy = cy2 - cy1;
16594
+ const dist = Math.sqrt(dx * dx + dy * dy);
16595
+ if (dist === 0) return;
16596
+ const ux = dx / dist, uy = dy / dist;
16597
+ const r1 = lr.width / 2;
16598
+ const r2 = rr.width / 2;
16599
+ setSvgSize({ w: cr.width, h: cr.height });
16600
+ setPathD(
16601
+ `M ${cx1 + ux * r1},${cy1 + uy * r1} L ${cx2 - ux * r2},${cy2 - uy * r2}`
16602
+ );
16603
+ };
16604
+ const schedule = () => {
16605
+ cancelAnimationFrame(rafId);
16606
+ rafId = requestAnimationFrame(update);
16607
+ };
16608
+ requestAnimationFrame(() => requestAnimationFrame(update));
16609
+ schedule();
16610
+ const ro = new ResizeObserver(schedule);
16611
+ if (containerRef.current) ro.observe(containerRef.current);
16612
+ if (leftRef.current) ro.observe(leftRef.current);
16613
+ if (rightRef.current) ro.observe(rightRef.current);
16614
+ const mo = new MutationObserver(schedule);
16615
+ mo.observe(document.documentElement, {
16616
+ attributes: true,
16617
+ attributeFilter: ["class", "style"]
16618
+ });
16619
+ mo.observe(document.body, {
16620
+ attributes: true,
16621
+ attributeFilter: ["class", "style"]
16622
+ });
16623
+ return () => {
16624
+ cancelAnimationFrame(rafId);
16625
+ ro.disconnect();
16626
+ mo.disconnect();
16627
+ };
16628
+ }, [containerRef, leftRef, rightRef]);
16629
+ const animX1 = isInput ? ["90%", "-10%"] : ["10%", "110%"];
16630
+ const animX2 = isInput ? ["100%", "0%"] : ["0%", "100%"];
16631
+ if (!pathD) return null;
16632
+ return /* @__PURE__ */ jsxs(
16633
+ "svg",
16634
+ {
16635
+ className: "pointer-events-none absolute left-0 top-0",
16636
+ width: svgSize.w,
16637
+ height: svgSize.h,
16638
+ fill: "none",
16639
+ children: [
16640
+ /* @__PURE__ */ jsx(
16641
+ "path",
16642
+ {
16643
+ d: pathD,
16644
+ className: "stroke-primary",
16645
+ strokeWidth: 2,
16646
+ strokeOpacity: 0.2,
16647
+ strokeLinecap: "round"
16648
+ }
16649
+ ),
16650
+ /* @__PURE__ */ jsx(
16651
+ motion.path,
16652
+ {
16653
+ d: pathD,
16654
+ stroke: `url(#${gradientId})`,
16655
+ strokeWidth: 2,
16656
+ strokeLinecap: "round",
16657
+ initial: { strokeOpacity: 0 },
16658
+ animate: { strokeOpacity: 1 },
16659
+ transition: { duration: 1 }
16660
+ }
16661
+ ),
16662
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
16663
+ motion.linearGradient,
16664
+ {
16665
+ id: gradientId,
16666
+ gradientUnits: "userSpaceOnUse",
16667
+ initial: { x1: "0%", x2: "0%", y1: "0%", y2: "0%" },
16668
+ animate: {
16669
+ x1: animX1,
16670
+ x2: animX2,
16671
+ y1: ["0%", "0%"],
16672
+ y2: ["0%", "0%"]
16673
+ },
16674
+ transition: {
16675
+ duration: 4,
16676
+ ease: [0.16, 1, 0.3, 1],
16677
+ repeat: Infinity,
16678
+ repeatDelay: 0
16679
+ },
16680
+ children: [
16681
+ /* @__PURE__ */ jsx("stop", { stopColor: "hsl(var(--primary))", stopOpacity: "0" }),
16682
+ /* @__PURE__ */ jsx("stop", { stopColor: "hsl(var(--primary))" }),
16683
+ /* @__PURE__ */ jsx("stop", { offset: "32.5%", stopColor: "hsl(var(--primary))" }),
16684
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "hsl(var(--primary))", stopOpacity: "0" })
16685
+ ]
16686
+ }
16687
+ ) })
16688
+ ]
16689
+ }
16690
+ );
16691
+ };
16692
+ var SystemsDiagram = ({ isInput, currentSystem, externalSystem }) => {
16693
+ const containerRef = useRef(null);
16694
+ const leftRef = useRef(null);
16695
+ const rightRef = useRef(null);
16696
+ return /* @__PURE__ */ jsxs(
16697
+ "div",
16698
+ {
16699
+ ref: containerRef,
16700
+ className: "relative flex items-center justify-between py-1 px-3",
16701
+ children: [
16702
+ /* @__PURE__ */ jsx("div", { ref: leftRef, children: /* @__PURE__ */ jsx(SystemNode, { label: isInput ? externalSystem : currentSystem }) }),
16703
+ /* @__PURE__ */ jsx("div", { ref: rightRef, children: /* @__PURE__ */ jsx(SystemNode, { label: isInput ? currentSystem : externalSystem }) }),
16704
+ /* @__PURE__ */ jsx(
16705
+ Beam,
16706
+ {
16707
+ isInput,
16708
+ containerRef,
16709
+ leftRef,
16710
+ rightRef
16711
+ }
16712
+ )
16713
+ ]
16714
+ }
16715
+ );
16716
+ };
16717
+ var CopyData = ({ value }) => {
16718
+ const [copied, setCopied] = useState(false);
16719
+ const handleCopy = useCallback(() => {
16720
+ navigator.clipboard.writeText(value).then(() => {
16721
+ setCopied(true);
16722
+ setTimeout(() => setCopied(false), 1500);
16723
+ });
16724
+ }, [value]);
16725
+ return /* @__PURE__ */ jsx(TooltipProviderBase, { children: /* @__PURE__ */ jsxs(TooltipBase, { children: [
16726
+ /* @__PURE__ */ jsx(TooltipTriggerBase, { asChild: true, children: /* @__PURE__ */ jsx(
16727
+ "button",
16728
+ {
16729
+ onClick: handleCopy,
16730
+ className: "shrink-0 p-0.5 rounded transition-colors text-muted-foreground/40 hover:text-foreground hover:bg-muted",
16731
+ style: { cursor: "pointer" },
16732
+ children: copied ? /* @__PURE__ */ jsx("svg", { width: "12", height: "12", viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ jsx(
16733
+ "path",
16734
+ {
16735
+ d: "M3 8l3.5 3.5L13 4.5",
16736
+ stroke: "currentColor",
16737
+ strokeWidth: "2",
16738
+ strokeLinecap: "round",
16739
+ strokeLinejoin: "round"
16740
+ }
16741
+ ) }) : /* @__PURE__ */ jsxs("svg", { width: "12", height: "12", viewBox: "0 0 16 16", fill: "none", children: [
16742
+ /* @__PURE__ */ jsx(
16743
+ "rect",
16744
+ {
16745
+ x: "5",
16746
+ y: "5",
16747
+ width: "8",
16748
+ height: "9",
16749
+ rx: "1.5",
16750
+ stroke: "currentColor",
16751
+ strokeWidth: "1.5"
16752
+ }
16753
+ ),
16754
+ /* @__PURE__ */ jsx(
16755
+ "path",
16756
+ {
16757
+ d: "M3 11V3.5A1.5 1.5 0 0 1 4.5 2H11",
16758
+ stroke: "currentColor",
16759
+ strokeWidth: "1.5",
16760
+ strokeLinecap: "round"
16761
+ }
16762
+ )
16763
+ ] })
16764
+ }
16765
+ ) }),
16766
+ /* @__PURE__ */ jsx(TooltipContentBase, { sideOffset: 6, className: "z-[10001]", children: copied ? "Copiado!" : "Copiar" })
16767
+ ] }) });
16768
+ };
16769
+ var propertyLabels = {
16770
+ Nome: "Nome",
16771
+ tipo: "Tipo",
16772
+ Tipo: "Tipo",
16773
+ Protocolos: "Protocolos",
16774
+ Ambiente: "Ambiente",
16775
+ Setor: "Setor",
16776
+ Contato: "Contato",
16777
+ Sustentacao: "Sustenta\xE7\xE3o",
16778
+ Destino: "Destino",
16779
+ Origem: "Origem"
16780
+ };
16781
+ var IntegrationCard = ({ title, details }) => {
16782
+ const titleRef = useRef(null);
16783
+ const isTitleTruncated = useIsTruncated(titleRef);
16784
+ const blackList = ["id", "elementId", "identity"];
16785
+ const entries = details ? Object.entries(details).filter(
16786
+ ([key, value]) => value !== void 0 && value !== null && value !== "" && !blackList.includes(key)
16787
+ ) : [];
16788
+ return /* @__PURE__ */ jsxs("div", { className: "rounded-sm border border-border/40 bg-muted/20 overflow-hidden", children: [
16789
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-3 py-2 border-b border-border/30", children: [
16790
+ /* @__PURE__ */ jsx(TooltipProviderBase, { children: /* @__PURE__ */ jsxs(TooltipBase, { children: [
16791
+ /* @__PURE__ */ jsx(TooltipTriggerBase, { asChild: true, children: /* @__PURE__ */ jsx(
16792
+ "span",
16793
+ {
16794
+ ref: titleRef,
16795
+ className: "text-sm font-bold text-foreground truncate flex-1 cursor-default",
16796
+ children: title
16797
+ }
16798
+ ) }),
16799
+ isTitleTruncated && /* @__PURE__ */ jsx(TooltipContentBase, { sideOffset: 6, className: "z-[10001]", children: title })
16800
+ ] }) }),
16801
+ entries.length > 0 && /* @__PURE__ */ jsx(
16802
+ CopyData,
16803
+ {
16804
+ value: entries.map(([k, v]) => `${propertyLabels[k] || k}: ${String(v)}`).join("\n")
16805
+ }
16806
+ )
16807
+ ] }),
16808
+ entries.length > 0 && /* @__PURE__ */ jsx("div", { className: "divide-y divide-border/20", children: entries.map(([key, value]) => {
16809
+ const label = propertyLabels[key] || key;
16810
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-3 py-1.5", children: [
16811
+ /* @__PURE__ */ jsxs("span", { className: "text-xs font-semibold text-muted-foreground shrink-0 w-[40%] sm:w-[38%]", children: [
16812
+ label,
16813
+ ":"
16814
+ ] }),
16815
+ /* @__PURE__ */ jsx("span", { className: "text-xs text-foreground break-all flex-1", children: String(value) })
16816
+ ] }, key);
16817
+ }) })
16818
+ ] });
16819
+ };
16820
+ var TooltipBodyComponent = ({ data, isLoading, connections, isInput, externalSystem }) => /* @__PURE__ */ 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: [
16821
+ isLoading ? /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
16822
+ /* @__PURE__ */ jsx(SkeletonBase, { className: "h-6 w-3/4" }),
16823
+ /* @__PURE__ */ jsx(SkeletonBase, { className: "h-3.5 w-1/2" })
16824
+ ] }) : /* @__PURE__ */ jsx(NameTooltip, { name: data.name, description: data.description }),
16825
+ /* @__PURE__ */ jsx("div", { className: "border-t border-border/20" }),
16826
+ isLoading ? /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
16827
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between py-1", children: [
16828
+ /* @__PURE__ */ jsx(SkeletonBase, { className: "w-[76px] h-[76px] rounded-full" }),
16829
+ /* @__PURE__ */ jsx(SkeletonBase, { className: "w-[76px] h-[76px] rounded-full" })
16830
+ ] }),
16831
+ /* @__PURE__ */ jsx("div", { className: "border-t border-border/20" }),
16832
+ [1, 2].map((i) => /* @__PURE__ */ jsxs(
16833
+ "div",
16834
+ {
16835
+ className: "rounded-lg border border-border/20 overflow-hidden",
16836
+ children: [
16837
+ /* @__PURE__ */ jsx(SkeletonBase, { className: "h-8 w-full" }),
16838
+ [1, 2, 3].map((j) => /* @__PURE__ */ jsx(SkeletonBase, { className: "h-7 w-full mt-px" }, j))
16839
+ ]
16840
+ },
16841
+ i
16842
+ ))
16843
+ ] }) : connections.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground text-center py-4", children: "Nenhuma conex\xE3o encontrada" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
16844
+ /* @__PURE__ */ jsx(
16845
+ SystemsDiagram,
16846
+ {
16847
+ isInput,
16848
+ currentSystem: data.name,
16849
+ externalSystem
16850
+ }
16851
+ ),
16852
+ /* @__PURE__ */ jsx("div", { className: "border-t border-border/20" }),
16853
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-", children: /* @__PURE__ */ jsx("span", { className: "text-[10px] font-bold text-muted-foreground uppercase", children: isInput ? "Informa\xE7\xF5es de Entrada" : "Informa\xE7\xF5es de Sa\xEDda" }) }),
16854
+ /* @__PURE__ */ jsx("div", { className: "space-y-2", children: connections.map((conn) => /* @__PURE__ */ jsx(
16855
+ IntegrationCard,
16856
+ {
16857
+ title: conn.name,
16858
+ details: conn.integration
16859
+ },
16860
+ conn.id
16861
+ )) })
16862
+ ] })
16863
+ ] });
16864
+ var TooltipBody = React32__default.memo(TooltipBodyComponent);
16865
+ var tooltipVariants3 = {
16866
+ hidden: {
16867
+ opacity: 0,
16868
+ scale: 0.96,
16869
+ transition: { type: "spring", stiffness: 400, damping: 28 }
16870
+ },
16871
+ visible: {
16872
+ opacity: 1,
16873
+ scale: 1,
16874
+ transition: { type: "spring", stiffness: 300, damping: 28 }
16875
+ },
16876
+ exit: {
16877
+ opacity: 0,
16878
+ scale: 0.96,
16879
+ transition: { type: "spring", stiffness: 400, damping: 28 }
16880
+ }
16881
+ };
16882
+ var IntegrationTooltip = ({
16883
+ id,
16884
+ data,
16885
+ position,
16886
+ title = "Conex\xF5es",
16887
+ isLoading = false,
16888
+ systemName,
16889
+ onMouseDown,
16890
+ onClose,
16891
+ onPositionChange
16892
+ }) => {
16893
+ const isMobile = useIsMobile();
16894
+ const [localPos, setLocalPos] = useState(position);
16895
+ const [dragging, setDragging] = useState(false);
16896
+ const offsetRef = useRef({ x: 0, y: 0 });
16897
+ const lastMouse = useRef({ x: 0, y: 0 });
16898
+ useEffect(() => setLocalPos(position), [position]);
16899
+ useEffect(() => {
16900
+ let rafId = null;
16901
+ const handleMouseMove = (e) => {
16902
+ if (!dragging) return;
16903
+ lastMouse.current = { x: e.clientX, y: e.clientY };
16904
+ if (rafId) cancelAnimationFrame(rafId);
16905
+ rafId = requestAnimationFrame(() => {
16906
+ const newLeft = lastMouse.current.x - offsetRef.current.x;
16907
+ const newTop = lastMouse.current.y - offsetRef.current.y;
16908
+ const p = {
16909
+ top: Math.max(0, Math.min(newTop, window.innerHeight - 200)),
16910
+ left: Math.max(0, Math.min(newLeft, window.innerWidth - 320))
16911
+ };
16912
+ setLocalPos(p);
16913
+ onPositionChange?.(id, p);
16914
+ });
16915
+ };
16916
+ const handleMouseUp = () => {
16917
+ if (dragging) {
16918
+ setDragging(false);
16919
+ if (rafId) cancelAnimationFrame(rafId);
16920
+ }
16921
+ };
16922
+ if (dragging) {
16923
+ document.addEventListener("mousemove", handleMouseMove, {
16924
+ passive: true
16925
+ });
16926
+ document.addEventListener("mouseup", handleMouseUp);
16927
+ document.body.style.cursor = "grabbing";
16928
+ document.body.style.userSelect = "none";
16929
+ }
16930
+ return () => {
16931
+ if (rafId) cancelAnimationFrame(rafId);
16932
+ document.removeEventListener("mousemove", handleMouseMove);
16933
+ document.removeEventListener("mouseup", handleMouseUp);
16934
+ document.body.style.cursor = "";
16935
+ document.body.style.userSelect = "";
16936
+ };
16937
+ }, [dragging, id, onPositionChange]);
16938
+ const handleMouseDownLocal = useCallback(
16939
+ (e) => {
16940
+ e.preventDefault();
16941
+ e.stopPropagation();
16942
+ const rect = e.currentTarget.closest(".fixed")?.getBoundingClientRect();
16943
+ if (!rect) return;
16944
+ offsetRef.current = { x: e.clientX - rect.left, y: e.clientY - rect.top };
16945
+ setDragging(true);
16946
+ onMouseDown?.(id, e);
16947
+ },
16948
+ [id, onMouseDown]
16949
+ );
16950
+ const handleTouchStartLocal = useCallback(
16951
+ (e) => {
16952
+ e.stopPropagation();
16953
+ const touch = e.touches[0];
16954
+ if (!touch) return;
16955
+ const rect = e.currentTarget.closest(".fixed")?.getBoundingClientRect();
16956
+ if (!rect) return;
16957
+ offsetRef.current = {
16958
+ x: touch.clientX - rect.left,
16959
+ y: touch.clientY - rect.top
16960
+ };
16961
+ setDragging(true);
16962
+ onMouseDown?.(id, e);
16963
+ },
16964
+ [id, onMouseDown]
16965
+ );
16966
+ const inputConnections = useMemo(
16967
+ () => data.connections.filter((c) => c.type === "entrada"),
16968
+ [data.connections]
16969
+ );
16970
+ const outputConnections = useMemo(
16971
+ () => data.connections.filter((c) => c.type === "saida"),
16972
+ [data.connections]
16973
+ );
16974
+ const isInput = inputConnections.length > 0;
16975
+ const connections = isInput ? inputConnections : outputConnections;
16976
+ const externalSystem = systemName ?? connections[0]?.name ?? "Sistema";
16977
+ const header = /* @__PURE__ */ jsxs(
16978
+ "div",
16979
+ {
16980
+ className: "flex items-center justify-between py-1 border-b border-border/10 bg-muted/30 shrink-0",
16981
+ onMouseDown: handleMouseDownLocal,
16982
+ onTouchStart: handleTouchStartLocal,
16983
+ style: {
16984
+ touchAction: "none",
16985
+ cursor: dragging ? "grabbing" : "grab"
16986
+ },
16987
+ children: [
16988
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-3", children: [
16989
+ /* @__PURE__ */ jsx(DotsSixVerticalIcon, { size: 16, className: "text-primary" }),
16990
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider", children: title })
16991
+ ] }),
16992
+ /* @__PURE__ */ jsx(
16993
+ ButtonBase,
16994
+ {
16995
+ variant: "ghost",
16996
+ size: "icon",
16997
+ onClick: () => onClose(id),
16998
+ className: "text-muted-foreground hover:text-destructive transition-colors hover:bg-destructive/10 mr-1",
16999
+ style: { cursor: "pointer" },
17000
+ children: /* @__PURE__ */ jsx(XIcon, { size: 16 })
17001
+ }
17002
+ )
17003
+ ]
17004
+ }
17005
+ );
17006
+ const bodyProps = { data, isLoading, connections, isInput, externalSystem };
17007
+ if (isMobile) {
17008
+ return /* @__PURE__ */ jsx(AnimatePresence, { children: /* @__PURE__ */ jsxs(Fragment, { children: [
17009
+ /* @__PURE__ */ jsx(
17010
+ motion.div,
17011
+ {
17012
+ className: "fixed inset-0 z-[9999] bg-black/40 backdrop-blur-[2px]",
17013
+ initial: { opacity: 0 },
17014
+ animate: { opacity: 1 },
17015
+ exit: { opacity: 0 },
17016
+ onClick: () => onClose(id)
17017
+ },
17018
+ `overlay-${id}`
17019
+ ),
17020
+ /* @__PURE__ */ jsxs(
17021
+ motion.div,
17022
+ {
17023
+ 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",
17024
+ style: { maxHeight: "85dvh" },
17025
+ initial: { y: "100%" },
17026
+ animate: { y: 0 },
17027
+ exit: { y: "100%" },
17028
+ transition: { type: "spring", stiffness: 320, damping: 36 },
17029
+ onClick: (e) => e.stopPropagation(),
17030
+ children: [
17031
+ /* @__PURE__ */ jsx("div", { className: "flex justify-center pt-2.5 pb-1 shrink-0", children: /* @__PURE__ */ jsx("div", { className: "w-10 h-1 rounded-full bg-border" }) }),
17032
+ header,
17033
+ /* @__PURE__ */ jsx("div", { className: "overflow-y-auto flex-1 pb-[env(safe-area-inset-bottom)]", children: /* @__PURE__ */ jsx(TooltipBody, { ...bodyProps }) })
17034
+ ]
17035
+ },
17036
+ `sheet-${id}`
17037
+ )
17038
+ ] }) });
17039
+ }
17040
+ return /* @__PURE__ */ jsx(AnimatePresence, { children: /* @__PURE__ */ jsxs(
17041
+ motion.div,
17042
+ {
17043
+ 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",
17044
+ variants: tooltipVariants3,
17045
+ initial: "hidden",
17046
+ animate: "visible",
17047
+ exit: "exit",
17048
+ style: { top: localPos.top, left: localPos.left },
17049
+ onClick: (e) => e.stopPropagation(),
17050
+ children: [
17051
+ header,
17052
+ /* @__PURE__ */ jsx("div", { className: "max-h-[60vh] sm:max-h-[520px] overflow-hidden flex flex-col", children: /* @__PURE__ */ jsx(TooltipBody, { ...bodyProps }) })
17053
+ ]
17054
+ },
17055
+ id
17056
+ ) });
17057
+ };
17058
+ var IntegrationTooltip_default = IntegrationTooltip;
17059
+
17060
+ // src/components/ui/charts/components/tooltips/utils/integrationTooltipUtils.ts
17061
+ function processIntegrationData(integrations, targetSystemName) {
17062
+ const connections = [];
17063
+ integrations.forEach((integration) => {
17064
+ const origemNome = integration.origem.properties.nome;
17065
+ const destinoNome = integration.destino.properties.nome;
17066
+ if (origemNome === targetSystemName) {
17067
+ connections.push({
17068
+ id: integration.r.elementId,
17069
+ name: destinoNome,
17070
+ type: "saida",
17071
+ integration: integration.r.properties
17072
+ });
17073
+ }
17074
+ if (destinoNome === targetSystemName) {
17075
+ connections.push({
17076
+ id: integration.r.elementId,
17077
+ name: origemNome,
17078
+ type: "entrada",
17079
+ integration: integration.r.properties
17080
+ });
17081
+ }
17082
+ });
17083
+ return {
17084
+ name: targetSystemName,
17085
+ connections
17086
+ };
17087
+ }
16441
17088
 
16442
- // src/components/ui/charts/components/tooltips/systemTooltipUtils.ts
17089
+ // src/components/ui/charts/components/tooltips/utils/systemTooltipUtils.ts
16443
17090
  function processNeo4jData(integrations, targetSystemName) {
16444
17091
  const connections = [];
16445
17092
  integrations.forEach((integration) => {
@@ -19604,6 +20251,44 @@ var Lens = ({
19604
20251
  }
19605
20252
  );
19606
20253
  };
20254
+ var carouselThemes = {
20255
+ malwee: {
20256
+ foreground: "text-[#222222]",
20257
+ primary: "bg-[#0b5430]",
20258
+ primaryForeground: "text-white",
20259
+ muted: "bg-[#f0eacc]",
20260
+ mutedForeground: "text-[#6b665c]",
20261
+ border: "!border-[#0b5430]",
20262
+ font: "font-[family-name:var(--font-playfair)]"
20263
+ },
20264
+ enfim: {
20265
+ foreground: "text-black",
20266
+ primary: "bg-black",
20267
+ primaryForeground: "text-white",
20268
+ muted: "bg-gray-100",
20269
+ mutedForeground: "text-gray-600",
20270
+ border: "!border-black",
20271
+ font: "font-[family-name:var(--font-libre-caslon)]"
20272
+ },
20273
+ carinhoso: {
20274
+ foreground: "text-[#222222]",
20275
+ primary: "bg-[#d9d0c0]",
20276
+ primaryForeground: "text-[#222222]",
20277
+ muted: "bg-[#e2ddd6]",
20278
+ mutedForeground: "text-[#5e5b56]",
20279
+ border: "!border-[#d9d0c0]",
20280
+ font: "font-[family-name:var(--font-josefin)]"
20281
+ },
20282
+ "malwee-kids": {
20283
+ foreground: "text-[#005bbf]",
20284
+ primary: "bg-[#005bbf]",
20285
+ primaryForeground: "text-white",
20286
+ muted: "bg-[#fcf5c2]",
20287
+ mutedForeground: "text-[#004a9e]",
20288
+ border: "!border-[#005bbf]",
20289
+ font: "font-[family-name:var(--font-poppins)]"
20290
+ }
20291
+ };
19607
20292
  function CarouselSkeleton({ className }) {
19608
20293
  return /* @__PURE__ */ jsx("div", { className: cn("w-full h-full lg:p-10 sm:p-4 p-2", className), children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-3 h-full", children: /* @__PURE__ */ jsx("div", { className: "relative overflow-hidden rounded-lg h-full", children: /* @__PURE__ */ jsxs("div", { className: "w-full h-full min-h-[300px] bg-muted rounded-lg overflow-hidden relative", children: [
19609
20294
  /* @__PURE__ */ jsx(
@@ -19683,7 +20368,8 @@ function CarouselBase({
19683
20368
  autoPlayInterval = 3e3,
19684
20369
  zoomEffect = null,
19685
20370
  download = false,
19686
- isLoading = false
20371
+ isLoading = false,
20372
+ onChange
19687
20373
  }) {
19688
20374
  const isMobile = useIsMobile();
19689
20375
  const [index, setIndex] = useState(0);
@@ -19694,7 +20380,9 @@ function CarouselBase({
19694
20380
  useEffect(() => {
19695
20381
  if (!emblaApi) return;
19696
20382
  const onSelect = () => {
19697
- setIndex(emblaApi.selectedScrollSnap());
20383
+ const newIndex = emblaApi.selectedScrollSnap();
20384
+ setIndex(newIndex);
20385
+ onChange?.(newIndex);
19698
20386
  };
19699
20387
  emblaApi.on("select", onSelect);
19700
20388
  emblaApi.on("reInit", onSelect);
@@ -19702,7 +20390,10 @@ function CarouselBase({
19702
20390
  emblaApi.off("select", onSelect);
19703
20391
  emblaApi.off("reInit", onSelect);
19704
20392
  };
19705
- }, [emblaApi]);
20393
+ }, [emblaApi, onChange]);
20394
+ const currentItem = items[index];
20395
+ const themeKey = currentItem?.theme || "malwee";
20396
+ const currentTheme = carouselThemes[themeKey] || carouselThemes.malwee;
19706
20397
  useEffect(() => {
19707
20398
  if (!autoPlay || items.length <= 1 || !emblaApi) return;
19708
20399
  const interval = setInterval(() => {
@@ -19714,14 +20405,14 @@ function CarouselBase({
19714
20405
  if (isDownloading) return;
19715
20406
  setIsDownloading(true);
19716
20407
  setDownloadSuccess(false);
19717
- const currentItem = items[index];
20408
+ const currentItem2 = items[index];
19718
20409
  try {
19719
- const response = await fetch(currentItem.url);
20410
+ const response = await fetch(currentItem2.url);
19720
20411
  const blob = await response.blob();
19721
20412
  const url = window.URL.createObjectURL(blob);
19722
20413
  const link = document.createElement("a");
19723
20414
  link.href = url;
19724
- link.download = currentItem.title || "image";
20415
+ link.download = currentItem2.title || "image";
19725
20416
  document.body.appendChild(link);
19726
20417
  link.click();
19727
20418
  document.body.removeChild(link);
@@ -19755,7 +20446,12 @@ function CarouselBase({
19755
20446
  initial: { opacity: 0 },
19756
20447
  animate: { opacity: 1 },
19757
20448
  transition: { duration: 0.4 },
19758
- className: cn("w-full lg:p-10 sm:p-4 p-2", className),
20449
+ className: cn(
20450
+ "w-full lg:p-10 sm:p-4 p-2 transition-colors duration-500",
20451
+ currentTheme.foreground,
20452
+ currentTheme.font,
20453
+ className
20454
+ ),
19759
20455
  style: { width },
19760
20456
  children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-3 h-full", children: /* @__PURE__ */ jsxs("div", { className: cn("relative h-full", containerClassName), children: [
19761
20457
  /* @__PURE__ */ jsx(
@@ -19890,8 +20586,12 @@ function CarouselBase({
19890
20586
  onPointerDown: (e) => e.stopPropagation(),
19891
20587
  onTouchStart: (e) => e.stopPropagation(),
19892
20588
  onMouseDown: (e) => e.stopPropagation(),
19893
- 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
19894
- ${!emblaApi?.canScrollPrev() ? "opacity-40 cursor-not-allowed" : "bg-secondary hover:scale-110 hover:opacity-100 opacity-70"}`,
20589
+ className: cn(
20590
+ "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",
20591
+ !emblaApi?.canScrollPrev() ? "opacity-40 cursor-not-allowed" : "hover:scale-110 hover:opacity-100 opacity-70",
20592
+ currentTheme.primary,
20593
+ currentTheme.primaryForeground
20594
+ ),
19895
20595
  children: /* @__PURE__ */ jsx(
19896
20596
  "svg",
19897
20597
  {
@@ -19920,8 +20620,12 @@ function CarouselBase({
19920
20620
  onPointerDown: (e) => e.stopPropagation(),
19921
20621
  onTouchStart: (e) => e.stopPropagation(),
19922
20622
  onMouseDown: (e) => e.stopPropagation(),
19923
- 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
19924
- ${!emblaApi?.canScrollNext() ? "opacity-40 cursor-not-allowed" : "bg-secondary hover:scale-110 hover:opacity-100 opacity-70"}`,
20623
+ className: cn(
20624
+ "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",
20625
+ !emblaApi?.canScrollNext() ? "opacity-40 cursor-not-allowed" : "hover:scale-110 hover:opacity-100 opacity-70",
20626
+ currentTheme.primary,
20627
+ currentTheme.primaryForeground
20628
+ ),
19925
20629
  children: /* @__PURE__ */ jsx(
19926
20630
  "svg",
19927
20631
  {
@@ -19950,7 +20654,14 @@ function CarouselBase({
19950
20654
  onPointerDown: (e) => e.stopPropagation(),
19951
20655
  onTouchStart: (e) => e.stopPropagation(),
19952
20656
  onMouseDown: (e) => e.stopPropagation(),
19953
- className: `h-2 rounded-full transition-all ${i === index ? "w-8 bg-white" : "w-2 bg-white/50"}`
20657
+ className: cn(
20658
+ "h-2 rounded-full transition-all duration-300",
20659
+ i === index ? cn("w-8", currentTheme.primary) : cn(
20660
+ "w-2 hover:opacity-80",
20661
+ currentTheme.primary,
20662
+ "opacity-40"
20663
+ )
20664
+ )
19954
20665
  },
19955
20666
  i
19956
20667
  )) })
@@ -20320,4 +21031,4 @@ function ControlledCombobox({
20320
21031
  );
20321
21032
  }
20322
21033
 
20323
- export { AddButton, Agenda, AgendaDaysToShow, AgendaDaysToShowAgenda, AgendaView, AlertDialogActionBase, AlertDialogBase, AlertDialogCancelBase, AlertDialogContentBase, AlertDialogDescriptionBase, AlertDialogFooterBase, AlertDialogHeaderBase, AlertDialogOverlayBase, AlertDialogPortalBase, AlertDialogTitleBase, AlertDialogTriggerBase, AvatarBase, AvatarCombobox, AvatarFallbackBase, AvatarImageBase, BackButton, Badge, BreadcrumbBase, BreadcrumbEllipsisBase, BreadcrumbItemBase, BreadcrumbLinkBase, BreadcrumbListBase, BreadcrumbPageBase, BreadcrumbSeparatorBase, Brush_default as Brush, ButtonBase, ButtonGroupBase, CENTER_INDEX, CalendarBase, CalendarDndProvider, CalendarDndProviderAgenda, CardBase, CardContentBase, CardDescriptionBase, CardFooterBase, CardHeaderBase, CardTitleBase, CarouselBase, ChangeButton, Chart_default as Chart, ChartControls, ChartHeader, ChartTotalLegend_default as ChartTotalLegend, CheckButton, CheckboxBase, CheckboxTree, CloseAllButton_default as CloseAllButton, CloseButton, CodeBlock, CollapsibleBase, CollapsibleContentBase, CollapsibleTriggerBase, Combobox, CommandBase, CommandDebouncedInputBase, CommandDialogBase, CommandEmptyBase, CommandGroupBase, CommandInputBase, CommandItemBase, CommandListBase, CommandSeparatorBase, CommandShortcutBase, ContextMenuBase, ContextMenuCheckboxItemBase, ContextMenuContentBase, ContextMenuGroupBase, ContextMenuItemBase, ContextMenuLabelBase, ContextMenuPortalBase, ContextMenuRadioGroupBase, ContextMenuRadioItemBase, ContextMenuSeparatorBase, ContextMenuShortcutBase, ContextMenuSubBase, ContextMenuSubContentBase, ContextMenuSubTriggerBase, ContextMenuTriggerBase, ControlledCombobox, CopyButton, DateTimePicker, DayView, DayViewAgenda, DebouncedInput, DefaultEndHour, DefaultEndHourAgenda, DefaultStartHour, DefaultStartHourAgenda, DestructiveDialog, DialogBase, DialogCloseBase, DialogContentBase, DialogDescriptionBase, DialogFooterBase, DialogHeaderBase, DialogOverlayBase, DialogPortalBase, DialogTitleBase, DialogTriggerBase, DownloadButton, DraggableEvent2 as DraggableEvent, DraggableTooltip_default as DraggableTooltip, DrawerBase, DrawerCloseBase, DrawerContentBase, DrawerDescriptionBase, DrawerFooterBase, DrawerHeaderBase, DrawerOverlayBase, DrawerPortalBase, DrawerTitleBase, DrawerTriggerBase, DropDownMenuBase, DropDownMenuCheckboxItemBase, DropDownMenuContentBase, DropDownMenuGroupBase, DropDownMenuItemBase, DropDownMenuLabelBase, DropDownMenuPortalBase, DropDownMenuRadioGroupBase, DropDownMenuRadioItemBase, DropDownMenuSeparatorBase, DropDownMenuShortcutBase, DropDownMenuSubBase, DropDownMenuSubContentBase, DropDownMenuSubTriggerBase, DropDownMenuTriggerBase, DroppableCell, DroppableCellAgenda, EditButton, EndHour, EndHourAgenda, ErrorMessage_default as ErrorMessage, EventAgenda, EventCalendar, EventDetailModalAgenda, EventDialog, EventGap, EventGapAgenda, EventHeight, EventHeightAgenda, EventItem, EventItemAgenda, EventsPopup, FavoriteButton, FileUploader, FilterButton, HideButton, Highlights_default as Highlights, HorizontalChart_default as HorizontalChart, HorizontalLegend_default as HorizontalLegend, HoverCardBase, HoverCardContentBase, HoverCardTriggerBase, ITEM_HEIGHT, InputBase, InputOTPBase, InputOTPGroupBase, InputOTPSeparatorBase, InputOTPSlotBase, LabelBase_default as LabelBase, Leaderboard, LikeButton, LoadingBase, LockButton, ModalBase, ModalCloseBase, ModalContentBase, ModalDescriptionBase, ModalFooterBase, ModalHeaderBase, ModalOverlayBase, ModalPortalBase, ModalTitleBase, ModalTriggerBase, ModeToggleBase, MonthView, MonthViewAgenda, MoreButton, MultiCombobox, MultiDayOverlay, MultiSelect, MultiSelectBase, MultiSelectContentBase, MultiSelectGroupBase, MultiSelectItemBase, MultiSelectSeparatorBase, MultiSelectTriggerBase, MultiSelectValueBase, NavigationMenuBase, NavigationMenuContentBase, NavigationMenuIndicatorBase, NavigationMenuItemBase, NavigationMenuLinkBase, NavigationMenuListBase, NavigationMenuTriggerBase, NavigationMenuViewportBase, NoData_default as NoData, NotificationButton, NumericInput, PeriodsDropdown_default as PeriodsDropdown, PopoverAnchorBase, PopoverBase, PopoverContentBase, PopoverTriggerBase, ProgressBase, ProgressCirclesBase, ProgressPanelsBase, ProgressSegmentsBase, RadialMenu, RangePicker, RefreshButton, SaveButton, ScrollAreaBase, ScrollBarBase, SearchButton, Select, SelectBase, SelectContentBase, SelectEmpty, SelectGroupBase, SelectItemBase, SelectLabelBase, SelectScrollDownButtonBase, SelectScrollUpButtonBase, SelectSeparatorBase, SelectTriggerBase, SelectValueBase, SeparatorBase, SettingsButton, SheetBase, SheetCloseBase, SheetContentBase, SheetDescriptionBase, SheetFooterBase, SheetHeaderBase, SheetOverlayBase, SheetPortalBase, SheetTitleBase, SheetTriggerBase, ShowOnly_default as ShowOnly, SidebarBase, SidebarContentBase, SidebarFooterBase, SidebarGroupActionBase, SidebarGroupBase, SidebarGroupContentBase, SidebarGroupLabelBase, SidebarHeaderBase, SidebarInputBase, SidebarInsetBase, SidebarMenuActionBase, SidebarMenuBadgeBase, SidebarMenuBase, SidebarMenuButtonBase, SidebarMenuItemBase, SidebarMenuSkeletonBase, SidebarMenuSubBase, SidebarMenuSubButtonBase, SidebarMenuSubItemBase, SidebarProviderBase, SidebarRailBase, SidebarSeparatorBase, SidebarTriggerBase, SkeletonBase, SlideBase, StartHour, StartHourAgenda, StatusIndicator, SwitchBase, SystemTooltip_default as SystemTooltip, TableBase, TableBodyBase, TableCaptionBase, TableCellBase, TableFooterBase, TableHeadBase, TableHeaderBase, TableRowBase, TabsBase, TabsContentBase, TabsListBase, TabsTriggerBase, TextAreaBase, ThemeProviderBase, TimePicker, TimePickerInput, TimeSeries_default as TimeSeries, Toaster, TooltipBase, TooltipContentBase, TooltipProviderBase, TooltipSimple_default as TooltipSimple, TooltipTriggerBase, TooltipWithTotal_default as TooltipWithTotal, UndatedEvents, UniversalTooltipRenderer, UnlockButton, UploadButton, UseSideBarBase, VISIBLE_ITEMS, ViewButton, VisibilityButton, WeekCellsHeight, WeekCellsHeightAgenda, WeekView, WeekViewAgenda, adaptDataForTooltip, addHoursToDate, addHoursToDateAgenda, addMinutesToDateAgenda, badgeVariants, buttonVariantsBase, compactTick, computeChartWidth, computeNiceMax, computeYAxisTickWidth, convert12HourTo24Hour, createValueFormatter, createYTickFormatter, detectDataFields, detectXAxis, display12HourValue, formatDurationAgenda, formatDurationAgendaDays, formatFieldName, formatLinePercentage, generateAdditionalColors, generateColorMap, getAgendaEventsForDay, getAgendaEventsForDayAgenda, getAllEventsForDay, getAllEventsForDayAgenda, getArrowByType, getAutoColorAgenda, getBorderRadiusClasses, getBorderRadiusClassesAgenda, getDateByType, getEventColorClasses, getEventColorClassesAgenda, getEventEndDate, getEventStartDate, getEventsForDay, getEventsForDayAgenda, getItems, getMaxDataValue, getMinDataValue, getSpanningEventsForDay, getSpanningEventsForDayAgenda, getValid12Hour, getValidArrow12Hour, getValidArrowHour, getValidArrowMinuteOrSecond, getValidArrowNumber, getValidHour, getValidMinuteOrSecond, getValidNumber, isMultiDayEvent, isMultiDayEventAgenda, isValid12Hour, isValidHour, isValidMinuteOrSecond, niceCeil, normalizeAttendDate, processNeo4jData, renderInsideBarLabel, pillLabelRenderer_default as renderPillLabel, resolveChartMargins, resolveContainerPaddingLeft, set12Hours, setDateByType, setHours, setMinutes, setSeconds, sortEvents, sortEventsAgenda, toast, useBiaxial, useCalendarDnd, useCalendarDndAgenda, useChartClick, useChartDimensions, useChartHighlights, useChartLayout, useChartMinMax, useChartTooltips, useCurrentTimeIndicator, useCurrentTimeIndicatorAgenda, useDrag, useEventVisibility, useEventVisibilityAgenda, useIsMobile, useOpenTooltipForPeriod, useProcessedData, useSeriesOpacity, useTheme, useTimeSeriesRange, visualForItem };
21034
+ export { AddButton, Agenda, AgendaDaysToShow, AgendaDaysToShowAgenda, AgendaView, AlertDialogActionBase, AlertDialogBase, AlertDialogCancelBase, AlertDialogContentBase, AlertDialogDescriptionBase, AlertDialogFooterBase, AlertDialogHeaderBase, AlertDialogOverlayBase, AlertDialogPortalBase, AlertDialogTitleBase, AlertDialogTriggerBase, AvatarBase, AvatarCombobox, AvatarFallbackBase, AvatarImageBase, BackButton, Badge, Beam, BreadcrumbBase, BreadcrumbEllipsisBase, BreadcrumbItemBase, BreadcrumbLinkBase, BreadcrumbListBase, BreadcrumbPageBase, BreadcrumbSeparatorBase, Brush_default as Brush, ButtonBase, ButtonGroupBase, CENTER_INDEX, CalendarBase, CalendarDndProvider, CalendarDndProviderAgenda, CardBase, CardContentBase, CardDescriptionBase, CardFooterBase, CardHeaderBase, CardTitleBase, CarouselBase, ChangeButton, Chart_default as Chart, ChartControls, ChartHeader, ChartTotalLegend_default as ChartTotalLegend, CheckButton, CheckboxBase, CheckboxTree, CloseAllButton_default as CloseAllButton, CloseButton, CodeBlock, CollapsibleBase, CollapsibleContentBase, CollapsibleTriggerBase, Combobox, CommandBase, CommandDebouncedInputBase, CommandDialogBase, CommandEmptyBase, CommandGroupBase, CommandInputBase, CommandItemBase, CommandListBase, CommandSeparatorBase, CommandShortcutBase, ContextMenuBase, ContextMenuCheckboxItemBase, ContextMenuContentBase, ContextMenuGroupBase, ContextMenuItemBase, ContextMenuLabelBase, ContextMenuPortalBase, ContextMenuRadioGroupBase, ContextMenuRadioItemBase, ContextMenuSeparatorBase, ContextMenuShortcutBase, ContextMenuSubBase, ContextMenuSubContentBase, ContextMenuSubTriggerBase, ContextMenuTriggerBase, ControlledCombobox, CopyButton, CopyData, DateTimePicker, DayView, DayViewAgenda, DebouncedInput, DefaultEndHour, DefaultEndHourAgenda, DefaultStartHour, DefaultStartHourAgenda, DestructiveDialog, DialogBase, DialogCloseBase, DialogContentBase, DialogDescriptionBase, DialogFooterBase, DialogHeaderBase, DialogOverlayBase, DialogPortalBase, DialogTitleBase, DialogTriggerBase, DownloadButton, DraggableEvent2 as DraggableEvent, DraggableTooltip_default as DraggableTooltip, DrawerBase, DrawerCloseBase, DrawerContentBase, DrawerDescriptionBase, DrawerFooterBase, DrawerHeaderBase, DrawerOverlayBase, DrawerPortalBase, DrawerTitleBase, DrawerTriggerBase, DropDownMenuBase, DropDownMenuCheckboxItemBase, DropDownMenuContentBase, DropDownMenuGroupBase, DropDownMenuItemBase, DropDownMenuLabelBase, DropDownMenuPortalBase, DropDownMenuRadioGroupBase, DropDownMenuRadioItemBase, DropDownMenuSeparatorBase, DropDownMenuShortcutBase, DropDownMenuSubBase, DropDownMenuSubContentBase, DropDownMenuSubTriggerBase, DropDownMenuTriggerBase, DroppableCell, DroppableCellAgenda, EditButton, EndHour, EndHourAgenda, ErrorMessage_default as ErrorMessage, EventAgenda, EventCalendar, EventDetailModalAgenda, EventDialog, EventGap, EventGapAgenda, EventHeight, EventHeightAgenda, EventItem, EventItemAgenda, EventsPopup, FavoriteButton, FileTypes, FileUploader, FilterButton, HideButton, Highlights_default as Highlights, HorizontalChart_default as HorizontalChart, HorizontalLegend_default as HorizontalLegend, HoverCardBase, HoverCardContentBase, HoverCardTriggerBase, ITEM_HEIGHT, InputBase, InputOTPBase, InputOTPGroupBase, InputOTPSeparatorBase, InputOTPSlotBase, IntegrationCard, IntegrationTooltip_default as IntegrationTooltip, LabelBase_default as LabelBase, Leaderboard, LikeButton, LoadingBase, LockButton, ModalBase, ModalCloseBase, ModalContentBase, ModalDescriptionBase, ModalFooterBase, ModalHeaderBase, ModalOverlayBase, ModalPortalBase, ModalTitleBase, ModalTriggerBase, ModeToggleBase, MonthView, MonthViewAgenda, MoreButton, MultiCombobox, MultiDayOverlay, MultiSelect, MultiSelectBase, MultiSelectContentBase, MultiSelectGroupBase, MultiSelectItemBase, MultiSelectSeparatorBase, MultiSelectTriggerBase, MultiSelectValueBase, NameTooltip, NavigationMenuBase, NavigationMenuContentBase, NavigationMenuIndicatorBase, NavigationMenuItemBase, NavigationMenuLinkBase, NavigationMenuListBase, NavigationMenuTriggerBase, NavigationMenuViewportBase, NoData_default as NoData, NotificationButton, NumericInput, PeriodsDropdown_default as PeriodsDropdown, PopoverAnchorBase, PopoverBase, PopoverContentBase, PopoverTriggerBase, ProgressBase, ProgressCirclesBase, ProgressPanelsBase, ProgressSegmentsBase, RadialMenu, RangePicker, RefreshButton, SaveButton, ScrollAreaBase, ScrollBarBase, SearchButton, Select, SelectBase, SelectContentBase, SelectEmpty, SelectGroupBase, SelectItemBase, SelectLabelBase, SelectScrollDownButtonBase, SelectScrollUpButtonBase, SelectSeparatorBase, SelectTriggerBase, SelectValueBase, SeparatorBase, SettingsButton, SheetBase, SheetCloseBase, SheetContentBase, SheetDescriptionBase, SheetFooterBase, SheetHeaderBase, SheetOverlayBase, SheetPortalBase, SheetTitleBase, SheetTriggerBase, ShowOnly_default as ShowOnly, SidebarBase, SidebarContentBase, SidebarFooterBase, SidebarGroupActionBase, SidebarGroupBase, SidebarGroupContentBase, SidebarGroupLabelBase, SidebarHeaderBase, SidebarInputBase, SidebarInsetBase, SidebarMenuActionBase, SidebarMenuBadgeBase, SidebarMenuBase, SidebarMenuButtonBase, SidebarMenuItemBase, SidebarMenuSkeletonBase, SidebarMenuSubBase, SidebarMenuSubButtonBase, SidebarMenuSubItemBase, SidebarProviderBase, SidebarRailBase, SidebarSeparatorBase, SidebarTriggerBase, SkeletonBase, SlideBase, StartHour, StartHourAgenda, StatusIndicator, SwitchBase, SystemNode, SystemTooltip_default as SystemTooltip, SystemsDiagram, TableBase, TableBodyBase, TableCaptionBase, TableCellBase, TableFooterBase, TableHeadBase, TableHeaderBase, TableRowBase, TabsBase, TabsContentBase, TabsListBase, TabsTriggerBase, TextAreaBase, ThemeProviderBase, TimePicker, TimePickerInput, TimeSeries_default as TimeSeries, Toaster, TooltipBase, TooltipBody, TooltipContentBase, TooltipProviderBase, TooltipSimple_default as TooltipSimple, TooltipTriggerBase, TooltipWithTotal_default as TooltipWithTotal, UndatedEvents, UniversalTooltipRenderer, UnlockButton, UploadButton, UseSideBarBase, VISIBLE_ITEMS, ViewButton, VisibilityButton, WeekCellsHeight, WeekCellsHeightAgenda, WeekView, WeekViewAgenda, YearViewAgenda, adaptDataForTooltip, addHoursToDate, addHoursToDateAgenda, addMinutesToDateAgenda, badgeVariants, buttonVariantsBase, compactTick, computeChartWidth, computeNiceMax, computeYAxisTickWidth, convert12HourTo24Hour, createValueFormatter, createYTickFormatter, detectDataFields, detectXAxis, display12HourValue, formatDurationAgenda, formatDurationAgendaDays, formatFieldName, formatLinePercentage, generateAdditionalColors, generateColorMap, getAgendaEventsForDay, getAgendaEventsForDayAgenda, getAllEventsForDay, getAllEventsForDayAgenda, getArrowByType, getAutoColorAgenda, getBorderRadiusClasses, getBorderRadiusClassesAgenda, getDateByType, getEventColorClasses, getEventColorClassesAgenda, getEventEndDate, getEventStartDate, getEventsForDay, getEventsForDayAgenda, getItems, getMaxDataValue, getMinDataValue, getSpanningEventsForDay, getSpanningEventsForDayAgenda, getValid12Hour, getValidArrow12Hour, getValidArrowHour, getValidArrowMinuteOrSecond, getValidArrowNumber, getValidHour, getValidMinuteOrSecond, getValidNumber, isMultiDayEvent, isMultiDayEventAgenda, isValid12Hour, isValidHour, isValidMinuteOrSecond, niceCeil, normalizeAttendDate, processIntegrationData, processNeo4jData, renderInsideBarLabel, pillLabelRenderer_default as renderPillLabel, resolveChartMargins, resolveContainerPaddingLeft, set12Hours, setDateByType, setHours, setMinutes, setSeconds, sortEvents, sortEventsAgenda, toast, useBiaxial, useCalendarDnd, useCalendarDndAgenda, useChartClick, useChartDimensions, useChartHighlights, useChartLayout, useChartMinMax, useChartTooltips, useCurrentTimeIndicator, useCurrentTimeIndicatorAgenda, useDrag, useEventVisibility, useEventVisibilityAgenda, useIsMobile, useIsTruncated, useOpenTooltipForPeriod, useProcessedData, useSeriesOpacity, useTheme, useTimeSeriesRange, visualForItem };