@lv-x-software-house/x_view 1.2.5-dev.29 → 1.2.5-dev.30

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.
Files changed (3) hide show
  1. package/dist/index.js +581 -450
  2. package/dist/index.mjs +524 -381
  3. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/XViewScene.jsx
2
- import React26, {
2
+ import React27, {
3
3
  useCallback as useCallback4,
4
4
  useEffect as useEffect22,
5
5
  useRef as useRef19,
@@ -3612,11 +3612,32 @@ function useResizablePanel({ initialWidth, minWidth, maxWidth }) {
3612
3612
  );
3613
3613
  return { width, isResizing, handlePointerDown, setWidth };
3614
3614
  }
3615
+ function createTimelineEntry(actorId, description, type = "comment", extras = {}) {
3616
+ const { links = [], images = [], metadata = {} } = extras;
3617
+ return {
3618
+ id: v4_default(),
3619
+ type,
3620
+ timestamp: Date.now(),
3621
+ actorId,
3622
+ description,
3623
+ links: links.map((l) => ({
3624
+ id: l.id || v4_default(),
3625
+ name: l.name || "",
3626
+ value: l.value || ""
3627
+ })),
3628
+ images: images.map((img) => ({
3629
+ id: img.id || v4_default(),
3630
+ name: img.name || "",
3631
+ value: img.value || ""
3632
+ })),
3633
+ metadata
3634
+ };
3635
+ }
3615
3636
 
3616
3637
  // src/components/CustomPropertyDisplay.jsx
3617
3638
  import React3, { useState as useState4, useRef as useRef3, useEffect as useEffect3 } from "react";
3618
- import { FiCheck, FiX, FiEdit3, FiTrash2, FiExternalLink, FiFileText, FiChevronDown, FiUpload, FiLoader } from "react-icons/fi";
3619
- function CustomPropertyDisplay({
3639
+ import { FiCheck as FiCheck2, FiX as FiX2, FiEdit3, FiTrash2, FiExternalLink, FiFileText, FiChevronDown as FiChevronDown2, FiUpload, FiLoader as FiLoader2 } from "react-icons/fi";
3640
+ function CustomPropertyDisplay2({
3620
3641
  prop,
3621
3642
  onUpdate,
3622
3643
  onRemove,
@@ -3782,7 +3803,7 @@ function CustomPropertyDisplay({
3782
3803
  className: "w-full flex items-center justify-between gap-2 bg-slate-800/70 p-2 text-sm rounded-lg border border-white/10 focus:outline-none focus:ring-1 focus:ring-indigo-400/60 hover:bg-slate-700/70 transition-colors"
3783
3804
  },
3784
3805
  /* @__PURE__ */ React3.createElement("span", { className: "truncate" }, currentTypeLabel),
3785
- /* @__PURE__ */ React3.createElement(FiChevronDown, { className: `text-slate-400 transition-transform ${isTypeDropdownOpen ? "rotate-180" : ""}` })
3806
+ /* @__PURE__ */ React3.createElement(FiChevronDown2, { className: `text-slate-400 transition-transform ${isTypeDropdownOpen ? "rotate-180" : ""}` })
3786
3807
  ), isTypeDropdownOpen && /* @__PURE__ */ React3.createElement("ul", { className: "absolute right-0 top-full mt-1 z-50 w-32 bg-slate-800 border border-white/10 rounded-lg shadow-xl overflow-y-auto max-h-48 custom-scrollbar py-1" }, availableOptions.map((opt) => /* @__PURE__ */ React3.createElement("li", { key: opt.value }, /* @__PURE__ */ React3.createElement(
3787
3808
  "button",
3788
3809
  {
@@ -3901,12 +3922,12 @@ function CustomPropertyDisplay({
3901
3922
  className: "flex-shrink-0 w-7 h-7 grid place-items-center bg-indigo-600/60 hover:bg-indigo-600 rounded-lg text-white text-xs transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
3902
3923
  title: "Upload de Arquivo"
3903
3924
  },
3904
- uploadingItemIndex === itemIndex ? /* @__PURE__ */ React3.createElement(FiLoader, { className: "animate-spin" }) : /* @__PURE__ */ React3.createElement(FiUpload, { size: 12 })
3925
+ uploadingItemIndex === itemIndex ? /* @__PURE__ */ React3.createElement(FiLoader2, { className: "animate-spin" }) : /* @__PURE__ */ React3.createElement(FiUpload, { size: 12 })
3905
3926
  ), /* @__PURE__ */ React3.createElement("button", { type: "button", onClick: () => handleRemoveListItem(itemIndex), className: "flex-shrink-0 w-7 h-7 grid place-items-center bg-red-600/60 hover:bg-red-600 rounded-full text-xs font-bold transition-colors", "aria-label": "Remover item" }, "\xD7"))), /* @__PURE__ */ React3.createElement("button", { type: "button", onClick: () => handleAddListItem(), className: "mt-1 w-full px-2 py-1.5 bg-slate-700/70 hover:bg-slate-600 rounded-md transition-colors text-xs" }, "Adicionar Item"));
3906
3927
  default:
3907
3928
  return /* @__PURE__ */ React3.createElement("input", { type: "text", placeholder: "Valor", value: tempProp.value, onChange: (e) => handlePropChange("value", e.target.value), className: baseInput });
3908
3929
  }
3909
- })()), /* @__PURE__ */ React3.createElement("div", { className: "flex justify-end items-center gap-2 pt-1" }, /* @__PURE__ */ React3.createElement("button", { onClick: handleCancel, type: "button", className: "w-8 h-8 grid place-items-center rounded-lg hover:bg-white/10 transition-colors" }, /* @__PURE__ */ React3.createElement(FiX, { className: "text-red-400" })), /* @__PURE__ */ React3.createElement("button", { onClick: handleSave, type: "button", className: "w-8 h-8 grid place-items-center rounded-lg hover:bg-white/10 transition-colors" }, /* @__PURE__ */ React3.createElement(FiCheck, { className: "text-green-400" }))));
3930
+ })()), /* @__PURE__ */ React3.createElement("div", { className: "flex justify-end items-center gap-2 pt-1" }, /* @__PURE__ */ React3.createElement("button", { onClick: handleCancel, type: "button", className: "w-8 h-8 grid place-items-center rounded-lg hover:bg-white/10 transition-colors" }, /* @__PURE__ */ React3.createElement(FiX2, { className: "text-red-400" })), /* @__PURE__ */ React3.createElement("button", { onClick: handleSave, type: "button", className: "w-8 h-8 grid place-items-center rounded-lg hover:bg-white/10 transition-colors" }, /* @__PURE__ */ React3.createElement(FiCheck2, { className: "text-green-400" }))));
3910
3931
  };
3911
3932
  const renderDisplayView = () => /* @__PURE__ */ React3.createElement("div", { className: "w-full space-y-2 text-sm" }, /* @__PURE__ */ React3.createElement("div", { className: "flex justify-between items-center" }, /* @__PURE__ */ React3.createElement("p", { className: "font-semibold text-slate-200" }, prop.key), /* @__PURE__ */ React3.createElement("span", { className: "text-xs capitalize bg-slate-700/50 px-2 py-0.5 rounded text-slate-400" }, prop.type)), /* @__PURE__ */ React3.createElement("div", { className: "text-slate-300 pl-1" }, (() => {
3912
3933
  switch (prop.type) {
@@ -3941,7 +3962,7 @@ function CustomPropertyDisplay({
3941
3962
  style: { backgroundImage: `url(${item.value})` },
3942
3963
  title: isTextureMode ? "Usar esta imagem no node" : `Ver imagem: ${item.name}`
3943
3964
  }
3944
- ), isSelected && /* @__PURE__ */ React3.createElement("div", { className: "absolute -top-2 -right-2 bg-green-500 text-white rounded-full p-0.5 shadow-sm" }, /* @__PURE__ */ React3.createElement(FiCheck, { size: 12 })));
3965
+ ), isSelected && /* @__PURE__ */ React3.createElement("div", { className: "absolute -top-2 -right-2 bg-green-500 text-white rounded-full p-0.5 shadow-sm" }, /* @__PURE__ */ React3.createElement(FiCheck2, { size: 12 })));
3945
3966
  }));
3946
3967
  case "links":
3947
3968
  return /* @__PURE__ */ React3.createElement("ul", { className: "space-y-1.5 max-h-40 overflow-y-auto custom-scrollbar" }, Array.isArray(prop.value) && prop.value.map((item) => /* @__PURE__ */ React3.createElement("li", { key: item.id }, /* @__PURE__ */ React3.createElement("a", { href: item.value, target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-2 text-indigo-400 hover:text-indigo-300 hover:underline transition-colors" }, item.name, /* @__PURE__ */ React3.createElement(FiExternalLink, { className: "opacity-60", size: 12 })))));
@@ -3977,15 +3998,15 @@ function CustomPropertyDisplay({
3977
3998
  }
3978
3999
 
3979
4000
  // src/components/AncestryRelationshipPanel.jsx
3980
- import { FiPlus, FiEdit2 as FiEdit22, FiBookOpen } from "react-icons/fi";
4001
+ import { FiPlus as FiPlus2, FiEdit2 as FiEdit23, FiBookOpen as FiBookOpen2 } from "react-icons/fi";
3981
4002
 
3982
4003
  // src/components/DescriptionEditModal.jsx
3983
4004
  import React5, { useState as useState6, useEffect as useEffect5, useRef as useRef5, useMemo as useMemo4 } from "react";
3984
- import { FiType, FiList, FiCode, FiLink as FiLink2, FiAtSign, FiSearch as FiSearch2, FiHexagon as FiHexagon2, FiGlobe, FiImage, FiCheckSquare } from "react-icons/fi";
4005
+ import { FiType, FiList, FiCode, FiLink as FiLink3, FiAtSign, FiSearch as FiSearch3, FiHexagon as FiHexagon2, FiGlobe, FiImage, FiCheckSquare } from "react-icons/fi";
3985
4006
 
3986
4007
  // src/components/SectionImportModal.jsx
3987
4008
  import React4, { useState as useState5, useMemo as useMemo3, useRef as useRef4, useEffect as useEffect4 } from "react";
3988
- import { FiSearch, FiLayers as FiLayers2, FiHexagon, FiClock, FiCheck as FiCheck2, FiCopy, FiTerminal, FiChevronDown as FiChevronDown2, FiChevronRight, FiDownload, FiLink } from "react-icons/fi";
4009
+ import { FiSearch as FiSearch2, FiLayers as FiLayers2, FiHexagon, FiClock, FiCheck as FiCheck3, FiCopy, FiTerminal, FiChevronDown as FiChevronDown3, FiChevronRight, FiDownload, FiLink as FiLink2 } from "react-icons/fi";
3989
4010
  var CodeBlock = ({ content, isActive, onClick }) => {
3990
4011
  const [isExpanded, setIsExpanded] = useState5(false);
3991
4012
  const [copied, setCopied] = useState5(false);
@@ -4016,7 +4037,7 @@ var CodeBlock = ({ content, isActive, onClick }) => {
4016
4037
  className: "flex items-center gap-2 cursor-pointer opacity-80 hover:opacity-100 transition-opacity",
4017
4038
  onClick: toggleExpand
4018
4039
  },
4019
- isLongCode ? isExpanded ? /* @__PURE__ */ React4.createElement(FiChevronDown2, { size: 14 }) : /* @__PURE__ */ React4.createElement(FiChevronRight, { size: 14 }) : /* @__PURE__ */ React4.createElement(FiTerminal, { size: 14 }),
4040
+ isLongCode ? isExpanded ? /* @__PURE__ */ React4.createElement(FiChevronDown3, { size: 14 }) : /* @__PURE__ */ React4.createElement(FiChevronRight, { size: 14 }) : /* @__PURE__ */ React4.createElement(FiTerminal, { size: 14 }),
4020
4041
  /* @__PURE__ */ React4.createElement("span", { className: "text-xs font-mono font-medium text-slate-400" }, "Code")
4021
4042
  ), /* @__PURE__ */ React4.createElement(
4022
4043
  "button",
@@ -4025,7 +4046,7 @@ var CodeBlock = ({ content, isActive, onClick }) => {
4025
4046
  className: "flex items-center gap-1.5 px-2 py-1 rounded hover:bg-white/10 transition-colors text-xs text-slate-400 hover:text-white",
4026
4047
  title: "Copiar c\xF3digo"
4027
4048
  },
4028
- copied ? /* @__PURE__ */ React4.createElement(FiCheck2, { size: 12, className: "text-emerald-400" }) : /* @__PURE__ */ React4.createElement(FiCopy, { size: 12 }),
4049
+ copied ? /* @__PURE__ */ React4.createElement(FiCheck3, { size: 12, className: "text-emerald-400" }) : /* @__PURE__ */ React4.createElement(FiCopy, { size: 12 }),
4029
4050
  copied ? /* @__PURE__ */ React4.createElement("span", { className: "text-emerald-400" }, "Copiado") : /* @__PURE__ */ React4.createElement("span", null, "Copiar")
4030
4051
  )),
4031
4052
  /* @__PURE__ */ React4.createElement("div", { className: `relative ${!isExpanded && isLongCode ? "max-h-24 overflow-hidden" : ""}` }, /* @__PURE__ */ React4.createElement("pre", { className: "p-3 text-xs sm:text-sm font-mono text-slate-300 overflow-x-auto custom-scrollbar" }, /* @__PURE__ */ React4.createElement("code", null, cleanContent)), !isExpanded && isLongCode && /* @__PURE__ */ React4.createElement(
@@ -4218,10 +4239,10 @@ function SectionImportModal({ isOpen, onClose, onSelect, availableNodes = [], av
4218
4239
  if (isRef) {
4219
4240
  const resolved = resolveDescriptionReference(trimmed, availableNodes, availableAncestries);
4220
4241
  if (resolved == null ? void 0 : resolved.error) {
4221
- return /* @__PURE__ */ React4.createElement("div", { className: "my-2 p-3 rounded border border-red-500/30 bg-red-500/10 text-red-200 text-xs flex gap-2 items-center" }, /* @__PURE__ */ React4.createElement(FiLink, null), " Erro na refer\xEAncia: ", resolved.error);
4242
+ return /* @__PURE__ */ React4.createElement("div", { className: "my-2 p-3 rounded border border-red-500/30 bg-red-500/10 text-red-200 text-xs flex gap-2 items-center" }, /* @__PURE__ */ React4.createElement(FiLink2, null), " Erro na refer\xEAncia: ", resolved.error);
4222
4243
  }
4223
4244
  if (resolved) {
4224
- return /* @__PURE__ */ React4.createElement("div", { className: "my-2 relative group" }, /* @__PURE__ */ React4.createElement("div", { className: "absolute -left-3 top-0 bottom-0 w-1 bg-emerald-500/50 rounded-full" }), /* @__PURE__ */ React4.createElement("div", { className: "pl-2" }, /* @__PURE__ */ React4.createElement("div", { className: "text-[10px] text-emerald-400 mb-1 flex items-center gap-1 opacity-70 select-none" }, /* @__PURE__ */ React4.createElement(FiLink, null), " Vinculado de: ", /* @__PURE__ */ React4.createElement("span", { className: "font-semibold" }, resolved.sourceName)), /* @__PURE__ */ React4.createElement("div", { className: "text-slate-300 opacity-90" }, resolved.content.split("\n").map((line, i) => /* @__PURE__ */ React4.createElement("div", { key: i }, formatLineContent(line))))));
4245
+ return /* @__PURE__ */ React4.createElement("div", { className: "my-2 relative group" }, /* @__PURE__ */ React4.createElement("div", { className: "absolute -left-3 top-0 bottom-0 w-1 bg-emerald-500/50 rounded-full" }), /* @__PURE__ */ React4.createElement("div", { className: "pl-2" }, /* @__PURE__ */ React4.createElement("div", { className: "text-[10px] text-emerald-400 mb-1 flex items-center gap-1 opacity-70 select-none" }, /* @__PURE__ */ React4.createElement(FiLink2, null), " Vinculado de: ", /* @__PURE__ */ React4.createElement("span", { className: "font-semibold" }, resolved.sourceName)), /* @__PURE__ */ React4.createElement("div", { className: "text-slate-300 opacity-90" }, resolved.content.split("\n").map((line, i) => /* @__PURE__ */ React4.createElement("div", { key: i }, formatLineContent(line))))));
4225
4246
  }
4226
4247
  }
4227
4248
  return null;
@@ -4235,7 +4256,7 @@ function SectionImportModal({ isOpen, onClose, onSelect, availableNodes = [], av
4235
4256
  onClick: swallow
4236
4257
  },
4237
4258
  /* @__PURE__ */ React4.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4 border-b border-white/5 bg-white/5" }, /* @__PURE__ */ React4.createElement("div", null, /* @__PURE__ */ React4.createElement("h2", { className: "text-xl font-semibold tracking-tight" }, "Biblioteca de Se\xE7\xF5es"), /* @__PURE__ */ React4.createElement("p", { className: "text-xs text-slate-400" }, "Navegue e importe conte\xFAdo de outros Nodes ou Ancestralidades.")), /* @__PURE__ */ React4.createElement("button", { onClick: onClose, className: "w-9 h-9 grid place-content-center rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-xl" }, "\xD7")),
4238
- /* @__PURE__ */ React4.createElement("div", { className: "flex flex-1 overflow-hidden relative" }, /* @__PURE__ */ React4.createElement("div", { className: "w-1/3 min-w-[280px] border-r border-white/10 flex flex-col bg-slate-900/50 relative z-20" }, /* @__PURE__ */ React4.createElement("div", { className: "p-3 border-b border-white/5" }, /* @__PURE__ */ React4.createElement("div", { className: "relative" }, /* @__PURE__ */ React4.createElement(FiSearch, { className: "absolute left-3 top-1/2 -translate-y-1/2 text-slate-500" }), /* @__PURE__ */ React4.createElement(
4259
+ /* @__PURE__ */ React4.createElement("div", { className: "flex flex-1 overflow-hidden relative" }, /* @__PURE__ */ React4.createElement("div", { className: "w-1/3 min-w-[280px] border-r border-white/10 flex flex-col bg-slate-900/50 relative z-20" }, /* @__PURE__ */ React4.createElement("div", { className: "p-3 border-b border-white/5" }, /* @__PURE__ */ React4.createElement("div", { className: "relative" }, /* @__PURE__ */ React4.createElement(FiSearch2, { className: "absolute left-3 top-1/2 -translate-y-1/2 text-slate-500" }), /* @__PURE__ */ React4.createElement(
4239
4260
  "input",
4240
4261
  {
4241
4262
  ref: inputRef,
@@ -4366,7 +4387,7 @@ function SectionImportModal({ isOpen, onClose, onSelect, availableNodes = [], av
4366
4387
  /* @__PURE__ */ React4.createElement(FiDownload, { className: "text-indigo-200" }),
4367
4388
  "Importar ",
4368
4389
  selectedIndices.size > 1 ? `${selectedIndices.size} Se\xE7\xF5es` : "Se\xE7\xE3o"
4369
- ))) : /* @__PURE__ */ React4.createElement("div", { className: "flex-1 flex flex-col items-center justify-center text-slate-500" }, /* @__PURE__ */ React4.createElement("div", { className: "w-16 h-16 rounded-full bg-white/5 flex items-center justify-center mb-4" }, /* @__PURE__ */ React4.createElement(FiSearch, { size: 24, className: "opacity-50" })), /* @__PURE__ */ React4.createElement("p", null, "Selecione um item \xE0 esquerda para visualizar suas se\xE7\xF5es."))))
4390
+ ))) : /* @__PURE__ */ React4.createElement("div", { className: "flex-1 flex flex-col items-center justify-center text-slate-500" }, /* @__PURE__ */ React4.createElement("div", { className: "w-16 h-16 rounded-full bg-white/5 flex items-center justify-center mb-4" }, /* @__PURE__ */ React4.createElement(FiSearch2, { size: 24, className: "opacity-50" })), /* @__PURE__ */ React4.createElement("p", null, "Selecione um item \xE0 esquerda para visualizar suas se\xE7\xF5es."))))
4370
4391
  ));
4371
4392
  }
4372
4393
 
@@ -4387,7 +4408,7 @@ var normalizeText = (text) => {
4387
4408
  if (!text) return "";
4388
4409
  return text.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
4389
4410
  };
4390
- function DescriptionEditModal({
4411
+ function DescriptionEditModal2({
4391
4412
  isOpen,
4392
4413
  title,
4393
4414
  initialValue,
@@ -4746,7 +4767,7 @@ ${space}${bullet} `);
4746
4767
  className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
4747
4768
  title: "Importar Se\xE7\xE3o de outro Node"
4748
4769
  },
4749
- /* @__PURE__ */ React5.createElement(FiLink2, { size: 12 }),
4770
+ /* @__PURE__ */ React5.createElement(FiLink3, { size: 12 }),
4750
4771
  " Importar Se\xE7\xE3o"
4751
4772
  ), /* @__PURE__ */ React5.createElement(
4752
4773
  "button",
@@ -4768,7 +4789,7 @@ ${space}${bullet} `);
4768
4789
  autoFocus: true,
4769
4790
  className: "w-full flex-1 h-full bg-slate-800/70 p-4 text-sm leading-relaxed rounded-lg border border-white/10 focus:outline-none focus:ring-2 focus:ring-indigo-400/60 custom-scrollbar font-mono resize-none"
4770
4791
  }
4771
- ), isMentionModalOpen && /* @__PURE__ */ React5.createElement("div", { className: "absolute inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm rounded-lg" }, /* @__PURE__ */ React5.createElement("div", { className: "w-[90%] max-w-[400px] max-h-[80%] flex flex-col bg-slate-900 border border-white/20 rounded-xl shadow-2xl overflow-hidden animate-in fade-in zoom-in-95 duration-150 relative" }, /* @__PURE__ */ React5.createElement("div", { className: "p-3 border-b border-white/10 flex items-center gap-2 bg-slate-950/50" }, /* @__PURE__ */ React5.createElement(FiSearch2, { className: "text-slate-400" }), /* @__PURE__ */ React5.createElement(
4792
+ ), isMentionModalOpen && /* @__PURE__ */ React5.createElement("div", { className: "absolute inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm rounded-lg" }, /* @__PURE__ */ React5.createElement("div", { className: "w-[90%] max-w-[400px] max-h-[80%] flex flex-col bg-slate-900 border border-white/20 rounded-xl shadow-2xl overflow-hidden animate-in fade-in zoom-in-95 duration-150 relative" }, /* @__PURE__ */ React5.createElement("div", { className: "p-3 border-b border-white/10 flex items-center gap-2 bg-slate-950/50" }, /* @__PURE__ */ React5.createElement(FiSearch3, { className: "text-slate-400" }), /* @__PURE__ */ React5.createElement(
4772
4793
  "input",
4773
4794
  {
4774
4795
  type: "text",
@@ -4867,7 +4888,7 @@ ${space}${bullet} `);
4867
4888
 
4868
4889
  // src/components/DescriptionDisplay.jsx
4869
4890
  import React6, { useMemo as useMemo5, useState as useState7, useEffect as useEffect6, useRef as useRef6 } from "react";
4870
- import { FiCopy as FiCopy2, FiCheck as FiCheck3, FiChevronDown as FiChevronDown3, FiChevronRight as FiChevronRight2, FiTerminal as FiTerminal2, FiCornerDownRight, FiExternalLink as FiExternalLink2, FiImage as FiImage2, FiSave } from "react-icons/fi";
4891
+ import { FiCopy as FiCopy2, FiCheck as FiCheck4, FiChevronDown as FiChevronDown4, FiChevronRight as FiChevronRight2, FiTerminal as FiTerminal2, FiCornerDownRight, FiExternalLink as FiExternalLink2, FiImage as FiImage2, FiSave } from "react-icons/fi";
4871
4892
  var CodeBlock2 = ({ content, isActive, onClick }) => {
4872
4893
  const [isExpanded, setIsExpanded] = useState7(false);
4873
4894
  const [copied, setCopied] = useState7(false);
@@ -4898,7 +4919,7 @@ var CodeBlock2 = ({ content, isActive, onClick }) => {
4898
4919
  className: "flex items-center gap-2 cursor-pointer opacity-80 hover:opacity-100 transition-opacity",
4899
4920
  onClick: toggleExpand
4900
4921
  },
4901
- isLongCode ? isExpanded ? /* @__PURE__ */ React6.createElement(FiChevronDown3, { size: 14 }) : /* @__PURE__ */ React6.createElement(FiChevronRight2, { size: 14 }) : /* @__PURE__ */ React6.createElement(FiTerminal2, { size: 14 }),
4922
+ isLongCode ? isExpanded ? /* @__PURE__ */ React6.createElement(FiChevronDown4, { size: 14 }) : /* @__PURE__ */ React6.createElement(FiChevronRight2, { size: 14 }) : /* @__PURE__ */ React6.createElement(FiTerminal2, { size: 14 }),
4902
4923
  /* @__PURE__ */ React6.createElement("span", { className: "text-xs font-mono font-medium text-slate-400" }, "Code")
4903
4924
  ), /* @__PURE__ */ React6.createElement(
4904
4925
  "button",
@@ -4906,7 +4927,7 @@ var CodeBlock2 = ({ content, isActive, onClick }) => {
4906
4927
  onClick: handleCopy,
4907
4928
  className: "flex items-center gap-1.5 px-2 py-1 rounded hover:bg-white/10 transition-colors text-xs text-slate-400 hover:text-white"
4908
4929
  },
4909
- copied ? /* @__PURE__ */ React6.createElement(FiCheck3, { size: 12, className: "text-emerald-400" }) : /* @__PURE__ */ React6.createElement(FiCopy2, { size: 12 }),
4930
+ copied ? /* @__PURE__ */ React6.createElement(FiCheck4, { size: 12, className: "text-emerald-400" }) : /* @__PURE__ */ React6.createElement(FiCopy2, { size: 12 }),
4910
4931
  copied ? /* @__PURE__ */ React6.createElement("span", { className: "text-emerald-400" }, "Copiado") : /* @__PURE__ */ React6.createElement("span", null, "Copiar")
4911
4932
  )),
4912
4933
  /* @__PURE__ */ React6.createElement("div", { className: `relative ${!isExpanded && isLongCode ? "max-h-24 overflow-hidden" : ""}` }, /* @__PURE__ */ React6.createElement("pre", { className: "p-3 text-xs sm:text-sm font-mono text-slate-300 overflow-x-auto custom-scrollbar" }, /* @__PURE__ */ React6.createElement("code", null, cleanContent)), !isExpanded && isLongCode && /* @__PURE__ */ React6.createElement(
@@ -5045,7 +5066,7 @@ var formatLineContent2 = (line, availableNodes, onMentionClick, activeMentionInd
5045
5066
  ${isChecked ? "bg-indigo-500 border-indigo-500 shadow-[0_0_8px_rgba(99,102,241,0.4)]" : "border-slate-500 bg-slate-900/50 hover:border-slate-400 group-hover/checkbox:border-slate-400"}
5046
5067
  `
5047
5068
  },
5048
- isChecked && /* @__PURE__ */ React6.createElement(FiCheck3, { size: 12, className: "text-white" })
5069
+ isChecked && /* @__PURE__ */ React6.createElement(FiCheck4, { size: 12, className: "text-white" })
5049
5070
  ), /* @__PURE__ */ React6.createElement(
5050
5071
  "span",
5051
5072
  {
@@ -5071,7 +5092,7 @@ var formatLineContent2 = (line, availableNodes, onMentionClick, activeMentionInd
5071
5092
  }
5072
5093
  return /* @__PURE__ */ React6.createElement("span", { className: "break-words" }, processContent(line));
5073
5094
  };
5074
- function DescriptionDisplay({
5095
+ function DescriptionDisplay2({
5075
5096
  description,
5076
5097
  savedSections,
5077
5098
  availableNodes = [],
@@ -5334,7 +5355,7 @@ function DescriptionDisplay({
5334
5355
  import React7, { useState as useState8, useMemo as useMemo6, useEffect as useEffect7 } from "react";
5335
5356
  import {
5336
5357
  FiArrowLeft,
5337
- FiEdit2,
5358
+ FiEdit2 as FiEdit22,
5338
5359
  FiLayers as FiLayers3,
5339
5360
  FiChevronLeft,
5340
5361
  FiChevronRight as FiChevronRight3,
@@ -5344,8 +5365,8 @@ import {
5344
5365
  FiAlignLeft,
5345
5366
  FiGitBranch,
5346
5367
  FiFolder,
5347
- FiLink as FiLink3,
5348
- FiCheck as FiCheck4
5368
+ FiLink as FiLink4,
5369
+ FiCheck as FiCheck5
5349
5370
  } from "react-icons/fi";
5350
5371
  var findNodePath = (tree, targetNodeId, currentPath = []) => {
5351
5372
  var _a;
@@ -5547,7 +5568,7 @@ function DescriptionReadModePanel({
5547
5568
  className: `p-1 transition-colors ${isLinkCopied ? "text-green-400" : "text-slate-400 hover:text-indigo-400"}`,
5548
5569
  title: isLinkCopied ? "Link Copiado!" : "Copiar link para esta Ancestralidade"
5549
5570
  },
5550
- isLinkCopied ? /* @__PURE__ */ React7.createElement(FiCheck4, { size: 12 }) : /* @__PURE__ */ React7.createElement(FiLink3, { size: 12 })
5571
+ isLinkCopied ? /* @__PURE__ */ React7.createElement(FiCheck5, { size: 12 }) : /* @__PURE__ */ React7.createElement(FiLink4, { size: 12 })
5551
5572
  )), /* @__PURE__ */ React7.createElement("h2", { className: "text-lg sm:text-xl font-semibold tracking-tight text-white truncate", title }, title || "Sem T\xEDtulo"))), /* @__PURE__ */ React7.createElement("div", { className: "flex items-center gap-2 flex-shrink-0" }, hasCustomProps && /* @__PURE__ */ React7.createElement(
5552
5573
  "button",
5553
5574
  {
@@ -5582,7 +5603,7 @@ function DescriptionReadModePanel({
5582
5603
  className: "w-9 h-9 grid place-content-center rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-slate-300 hover:text-white",
5583
5604
  title: "Editar Descri\xE7\xE3o / Estrutura"
5584
5605
  },
5585
- /* @__PURE__ */ React7.createElement(FiEdit2, { size: 16 })
5606
+ /* @__PURE__ */ React7.createElement(FiEdit22, { size: 16 })
5586
5607
  ), /* @__PURE__ */ React7.createElement(
5587
5608
  "button",
5588
5609
  {
@@ -5626,7 +5647,7 @@ function DescriptionReadModePanel({
5626
5647
  targetRenderNodeId
5627
5648
  }
5628
5649
  ))) : showProperties ? /* @__PURE__ */ React7.createElement("div", { className: "space-y-4 animate-in fade-in slide-in-from-bottom-2 duration-300" }, customProperties.map((prop) => /* @__PURE__ */ React7.createElement(
5629
- CustomPropertyDisplay,
5650
+ CustomPropertyDisplay2,
5630
5651
  {
5631
5652
  key: prop.id,
5632
5653
  prop,
@@ -5638,7 +5659,7 @@ function DescriptionReadModePanel({
5638
5659
  onOpenImageViewer: null
5639
5660
  }
5640
5661
  ))) : /* @__PURE__ */ React7.createElement(
5641
- DescriptionDisplay,
5662
+ DescriptionDisplay2,
5642
5663
  {
5643
5664
  description,
5644
5665
  savedSections,
@@ -5787,7 +5808,7 @@ function AncestryRelationshipPanel({
5787
5808
  onSaveDescription: handleSaveDescriptionInline
5788
5809
  }
5789
5810
  ) : /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement("div", { className: "h-[2px] bg-gradient-to-r from-cyan-400/0 via-cyan-400/70 to-cyan-400/0" }), /* @__PURE__ */ React8.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ React8.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React8.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React8.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-cyan-400/80 shadow-[0_0_18px_2px_rgba(45,212,191,0.55)]" }), /* @__PURE__ */ React8.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Rela\xE7\xE3o de Ancestralidade")), /* @__PURE__ */ React8.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, "Editar Rela\xE7\xE3o")), /* @__PURE__ */ React8.createElement("button", { onClick: onClose, className: "w-9 h-9 flex-shrink-0 grid place-content-center rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-xl", title: "Fechar" }, "\xD7")), /* @__PURE__ */ React8.createElement("div", { className: "px-6 pb-4 overflow-y-auto overscroll-contain space-y-4 custom-scrollbar" }, /* @__PURE__ */ React8.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React8.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o da Rela\xE7\xE3o"), /* @__PURE__ */ React8.createElement("div", { className: "relative group min-h-[60px] bg-slate-800/40 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React8.createElement(
5790
- DescriptionDisplay,
5811
+ DescriptionDisplay2,
5791
5812
  {
5792
5813
  description,
5793
5814
  savedSections: existingSections,
@@ -5806,7 +5827,7 @@ function AncestryRelationshipPanel({
5806
5827
  className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors border-r border-white/5",
5807
5828
  title: "Modo de Leitura"
5808
5829
  },
5809
- /* @__PURE__ */ React8.createElement(FiBookOpen, { size: 14 })
5830
+ /* @__PURE__ */ React8.createElement(FiBookOpen2, { size: 14 })
5810
5831
  ), /* @__PURE__ */ React8.createElement(
5811
5832
  "button",
5812
5833
  {
@@ -5815,7 +5836,7 @@ function AncestryRelationshipPanel({
5815
5836
  className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
5816
5837
  title: "Editar descri\xE7\xE3o"
5817
5838
  },
5818
- /* @__PURE__ */ React8.createElement(FiEdit22, { size: 14 })
5839
+ /* @__PURE__ */ React8.createElement(FiEdit23, { size: 14 })
5819
5840
  )), !description && /* @__PURE__ */ React8.createElement(
5820
5841
  "div",
5821
5842
  {
@@ -5823,8 +5844,8 @@ function AncestryRelationshipPanel({
5823
5844
  className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
5824
5845
  },
5825
5846
  "Adicionar descri\xE7\xE3o..."
5826
- )), /* @__PURE__ */ React8.createElement("p", { className: "text-xs text-slate-400 italic" }, "Esta descri\xE7\xE3o aparecer\xE1 ao passar o mouse sobre a linha de conex\xE3o na cena 3D.")), /* @__PURE__ */ React8.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React8.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React8.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), /* @__PURE__ */ React8.createElement("button", { type: "button", onClick: handleAddProp, className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors" }, /* @__PURE__ */ React8.createElement(FiPlus, { size: 14 }), " Adicionar")), /* @__PURE__ */ React8.createElement("div", { className: "flex flex-col gap-3 p-3 rounded-lg bg-black/20 border border-white/5" }, customProps.length === 0 && /* @__PURE__ */ React8.createElement("p", { className: "text-center text-sm text-slate-400 py-4" }, "Nenhuma propriedade adicional."), customProps.map((prop, idx) => /* @__PURE__ */ React8.createElement(
5827
- CustomPropertyDisplay,
5847
+ )), /* @__PURE__ */ React8.createElement("p", { className: "text-xs text-slate-400 italic" }, "Esta descri\xE7\xE3o aparecer\xE1 ao passar o mouse sobre a linha de conex\xE3o na cena 3D.")), /* @__PURE__ */ React8.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React8.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React8.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), /* @__PURE__ */ React8.createElement("button", { type: "button", onClick: handleAddProp, className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors" }, /* @__PURE__ */ React8.createElement(FiPlus2, { size: 14 }), " Adicionar")), /* @__PURE__ */ React8.createElement("div", { className: "flex flex-col gap-3 p-3 rounded-lg bg-black/20 border border-white/5" }, customProps.length === 0 && /* @__PURE__ */ React8.createElement("p", { className: "text-center text-sm text-slate-400 py-4" }, "Nenhuma propriedade adicional."), customProps.map((prop, idx) => /* @__PURE__ */ React8.createElement(
5848
+ CustomPropertyDisplay2,
5828
5849
  {
5829
5850
  key: prop.id,
5830
5851
  prop,
@@ -5837,7 +5858,7 @@ function AncestryRelationshipPanel({
5837
5858
  )), /* @__PURE__ */ React8.createElement("div", { ref: propsEndRef })))), /* @__PURE__ */ React8.createElement("div", { className: "sticky bottom-0 z-10 bg-gradient-to-t from-slate-950/80 via-slate-950/50 to-transparent px-6 py-4 border-t border-white/10 flex justify-end gap-3" }, /* @__PURE__ */ React8.createElement("button", { onClick: onClose, className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm" }, "Cancelar"), /* @__PURE__ */ React8.createElement("button", { onClick: handleSave, className: "px-4 py-2 rounded-lg bg-gradient-to-tr from-cyan-600 to-cyan-400 hover:from-cyan-500 hover:to-cyan-300 transition-colors font-semibold text-sm shadow-[0_8px_24px_rgba(45,212,191,0.35)]" }, "Salvar Altera\xE7\xF5es")))
5838
5859
  )
5839
5860
  ), isDescriptionModalOpen && /* @__PURE__ */ React8.createElement(
5840
- DescriptionEditModal,
5861
+ DescriptionEditModal2,
5841
5862
  {
5842
5863
  isOpen: isDescriptionModalOpen,
5843
5864
  title: "Editar Descri\xE7\xE3o da Rela\xE7\xE3o",
@@ -5856,11 +5877,11 @@ function AncestryRelationshipPanel({
5856
5877
  // src/components/CreateAncestryPanel.jsx
5857
5878
  import React10, { useState as useState11, useEffect as useEffect10, useMemo as useMemo8, useRef as useRef8, useCallback as useCallback2 } from "react";
5858
5879
  import {
5859
- FiEdit2 as FiEdit23,
5860
- FiBookOpen as FiBookOpen2,
5880
+ FiEdit2 as FiEdit24,
5881
+ FiBookOpen as FiBookOpen3,
5861
5882
  FiFolder as FiFolder2,
5862
5883
  FiMousePointer,
5863
- FiCheck as FiCheck5,
5884
+ FiCheck as FiCheck6,
5864
5885
  FiLayers as FiLayers5,
5865
5886
  FiArrowLeft as FiArrowLeft2,
5866
5887
  FiChevronLeft as FiChevronLeft2,
@@ -5868,15 +5889,15 @@ import {
5868
5889
  FiCornerUpLeft as FiCornerUpLeft2,
5869
5890
  FiCornerUpRight as FiCornerUpRight3,
5870
5891
  FiGitBranch as FiGitBranch2,
5871
- FiPlus as FiPlus2,
5892
+ FiPlus as FiPlus3,
5872
5893
  FiLock,
5873
- FiLink as FiLink4,
5894
+ FiLink as FiLink5,
5874
5895
  FiTrash2 as FiTrash22
5875
5896
  } from "react-icons/fi";
5876
5897
 
5877
5898
  // src/components/AncestryPickerModal.jsx
5878
5899
  import React9, { useState as useState10, useMemo as useMemo7, useEffect as useEffect9 } from "react";
5879
- import { FiSearch as FiSearch3, FiLayers as FiLayers4, FiCornerUpRight as FiCornerUpRight2 } from "react-icons/fi";
5900
+ import { FiSearch as FiSearch4, FiLayers as FiLayers4, FiCornerUpRight as FiCornerUpRight2 } from "react-icons/fi";
5880
5901
  function AncestryPickerModal({
5881
5902
  isOpen,
5882
5903
  onClose,
@@ -5925,7 +5946,7 @@ function AncestryPickerModal({
5925
5946
  });
5926
5947
  }, [availableAncestries, searchTerm, currentAncestryId, nodeNamesMap]);
5927
5948
  if (!isOpen) return null;
5928
- return /* @__PURE__ */ React9.createElement("div", { className: "fixed inset-0 z-[2200] bg-black/80 backdrop-blur-sm flex items-center justify-center p-4", onClick: onClose }, /* @__PURE__ */ React9.createElement("div", { className: "bg-slate-900 border border-white/10 rounded-xl w-full max-w-md flex flex-col shadow-2xl overflow-hidden max-h-[80vh]", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React9.createElement("div", { className: "p-4 border-b border-white/10 bg-white/5" }, /* @__PURE__ */ React9.createElement("h3", { className: "text-lg font-semibold text-white mb-1" }, "Importar Ancestralidade"), /* @__PURE__ */ React9.createElement("p", { className: "text-xs text-slate-400" }, "Esta ancestralidade ser\xE1 carregada dinamicamente como uma ramifica\xE7\xE3o.")), /* @__PURE__ */ React9.createElement("div", { className: "p-3 border-b border-white/5" }, /* @__PURE__ */ React9.createElement("div", { className: "relative" }, /* @__PURE__ */ React9.createElement(FiSearch3, { className: "absolute left-3 top-1/2 -translate-y-1/2 text-slate-500" }), /* @__PURE__ */ React9.createElement(
5949
+ return /* @__PURE__ */ React9.createElement("div", { className: "fixed inset-0 z-[2200] bg-black/80 backdrop-blur-sm flex items-center justify-center p-4", onClick: onClose }, /* @__PURE__ */ React9.createElement("div", { className: "bg-slate-900 border border-white/10 rounded-xl w-full max-w-md flex flex-col shadow-2xl overflow-hidden max-h-[80vh]", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React9.createElement("div", { className: "p-4 border-b border-white/10 bg-white/5" }, /* @__PURE__ */ React9.createElement("h3", { className: "text-lg font-semibold text-white mb-1" }, "Importar Ancestralidade"), /* @__PURE__ */ React9.createElement("p", { className: "text-xs text-slate-400" }, "Esta ancestralidade ser\xE1 carregada dinamicamente como uma ramifica\xE7\xE3o.")), /* @__PURE__ */ React9.createElement("div", { className: "p-3 border-b border-white/5" }, /* @__PURE__ */ React9.createElement("div", { className: "relative" }, /* @__PURE__ */ React9.createElement(FiSearch4, { className: "absolute left-3 top-1/2 -translate-y-1/2 text-slate-500" }), /* @__PURE__ */ React9.createElement(
5929
5950
  "input",
5930
5951
  {
5931
5952
  type: "text",
@@ -6050,7 +6071,7 @@ var NodeItem = ({ nodeData, onSelectParent, onViewSelect, highlightedPathIds = [
6050
6071
  level > 0 && isEditable && /* @__PURE__ */ React10.createElement("div", { className: "flex items-center gap-1 animate-in fade-in duration-200" }, !nodeData.is_section && /* @__PURE__ */ React10.createElement("button", { onClick: (e) => {
6051
6072
  e.stopPropagation();
6052
6073
  onEditRelationship(path, nodeData.relationship || {});
6053
- }, className: "w-6 h-6 grid place-content-center rounded-full hover:bg-cyan-500/20 text-cyan-400 transition-colors flex-shrink-0", title: "Editar detalhes da rela\xE7\xE3o" }, /* @__PURE__ */ React10.createElement(FiEdit23, { size: 12 })), /* @__PURE__ */ React10.createElement("button", { onClick: (e) => {
6074
+ }, className: "w-6 h-6 grid place-content-center rounded-full hover:bg-cyan-500/20 text-cyan-400 transition-colors flex-shrink-0", title: "Editar detalhes da rela\xE7\xE3o" }, /* @__PURE__ */ React10.createElement(FiEdit24, { size: 12 })), /* @__PURE__ */ React10.createElement("button", { onClick: (e) => {
6054
6075
  e.stopPropagation();
6055
6076
  onRemoveNode(path);
6056
6077
  }, className: "w-6 h-6 grid place-content-center rounded-full hover:bg-red-500/20 text-red-400 text-lg transition-colors flex-shrink-0", title: "Remover Node" }, "\xD7"))
@@ -7263,7 +7284,7 @@ function CreateAncestryPanel({
7263
7284
  className: `ml-1 p-1 transition-colors ${isLinkCopied ? "text-green-400" : "text-slate-400 hover:text-indigo-400"}`,
7264
7285
  title: isLinkCopied ? "Link Copiado!" : "Copiar link para esta Ancestralidade"
7265
7286
  },
7266
- isLinkCopied ? /* @__PURE__ */ React10.createElement(FiCheck5, { size: 12 }) : /* @__PURE__ */ React10.createElement(FiLink4, { size: 12 })
7287
+ isLinkCopied ? /* @__PURE__ */ React10.createElement(FiCheck6, { size: 12 }) : /* @__PURE__ */ React10.createElement(FiLink5, { size: 12 })
7267
7288
  )), /* @__PURE__ */ React10.createElement(
7268
7289
  "input",
7269
7290
  {
@@ -7327,7 +7348,7 @@ function CreateAncestryPanel({
7327
7348
  /* @__PURE__ */ React10.createElement("div", { className: "w-4 h-4 border border-slate-500 rounded flex items-center justify-center" }),
7328
7349
  "Usar Ancestralidade Existente como Branch"
7329
7350
  ))), isContextLinked ? /* @__PURE__ */ React10.createElement("div", { className: "text-center py-8 text-slate-500 text-sm border-t border-white/5" }, /* @__PURE__ */ React10.createElement("p", null, "O conte\xFAdo desta ramifica\xE7\xE3o \xE9 provido por outra ancestralidade."), /* @__PURE__ */ React10.createElement("p", { className: "mt-1 text-xs" }, "Para editar, navegue at\xE9 a ancestralidade original ou desvincule.")) : /* @__PURE__ */ React10.createElement(React10.Fragment, null, /* @__PURE__ */ React10.createElement("div", { className: "mb-4 space-y-1.5 relative" }, /* @__PURE__ */ React10.createElement("label", { className: "text-xs text-slate-400 font-medium ml-1" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React10.createElement("div", { className: "relative" }, /* @__PURE__ */ React10.createElement("div", { className: "relative group min-h-[60px] bg-slate-800/40 rounded-lg border border-white/10 hover:border-white/20 transition-colors z-10" }, /* @__PURE__ */ React10.createElement(
7330
- DescriptionDisplay,
7351
+ DescriptionDisplay2,
7331
7352
  {
7332
7353
  key: branchStack.length > 0 ? branchStack[branchStack.length - 1].branchId : currentAncestryId || "root",
7333
7354
  description,
@@ -7353,7 +7374,7 @@ function CreateAncestryPanel({
7353
7374
  className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors border-r border-white/5",
7354
7375
  title: "Modo de Leitura"
7355
7376
  },
7356
- /* @__PURE__ */ React10.createElement(FiBookOpen2, { size: 14 })
7377
+ /* @__PURE__ */ React10.createElement(FiBookOpen3, { size: 14 })
7357
7378
  ), /* @__PURE__ */ React10.createElement(
7358
7379
  "button",
7359
7380
  {
@@ -7362,7 +7383,7 @@ function CreateAncestryPanel({
7362
7383
  className: "p-2 text-slate-400 hover:text-white transition-colors",
7363
7384
  title: "Editar descri\xE7\xE3o"
7364
7385
  },
7365
- /* @__PURE__ */ React10.createElement(FiEdit23, { size: 14 })
7386
+ /* @__PURE__ */ React10.createElement(FiEdit24, { size: 14 })
7366
7387
  )), !description && /* @__PURE__ */ React10.createElement(
7367
7388
  "div",
7368
7389
  {
@@ -7380,7 +7401,7 @@ function CreateAncestryPanel({
7380
7401
  `,
7381
7402
  title: sideActions.left.label
7382
7403
  },
7383
- sideActions.left.type === "create" && /* @__PURE__ */ React10.createElement(FiPlus2, { size: 20 }),
7404
+ sideActions.left.type === "create" && /* @__PURE__ */ React10.createElement(FiPlus3, { size: 20 }),
7384
7405
  sideActions.left.type === "open" && /* @__PURE__ */ React10.createElement(FiChevronLeft2, { size: 20 }),
7385
7406
  sideActions.left.type === "back" && /* @__PURE__ */ React10.createElement(FiCornerUpLeft2, { size: 18 })
7386
7407
  )), sideActions.right && /* @__PURE__ */ React10.createElement("div", { className: "absolute top-1/2 -translate-y-1/2 -right-6 z-20" }, /* @__PURE__ */ React10.createElement(
@@ -7393,7 +7414,7 @@ function CreateAncestryPanel({
7393
7414
  `,
7394
7415
  title: sideActions.right.label
7395
7416
  },
7396
- sideActions.right.type === "create" && /* @__PURE__ */ React10.createElement(FiPlus2, { size: 18 }),
7417
+ sideActions.right.type === "create" && /* @__PURE__ */ React10.createElement(FiPlus3, { size: 18 }),
7397
7418
  sideActions.right.type === "open" && /* @__PURE__ */ React10.createElement(FiChevronRight4, { size: 18 }),
7398
7419
  sideActions.right.type === "back" && /* @__PURE__ */ React10.createElement(FiCornerUpRight3, { size: 16 })
7399
7420
  )))), /* @__PURE__ */ React10.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React10.createElement("h3", { className: "text-sm font-medium text-slate-300" }, "Propriedades Adicionais"), /* @__PURE__ */ React10.createElement(
@@ -7403,10 +7424,10 @@ function CreateAncestryPanel({
7403
7424
  onClick: handleAddProp,
7404
7425
  className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors"
7405
7426
  },
7406
- /* @__PURE__ */ React10.createElement(FiPlus2, { size: 14 }),
7427
+ /* @__PURE__ */ React10.createElement(FiPlus3, { size: 14 }),
7407
7428
  " Adicionar"
7408
7429
  )), /* @__PURE__ */ React10.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React10.createElement(
7409
- CustomPropertyDisplay,
7430
+ CustomPropertyDisplay2,
7410
7431
  {
7411
7432
  key: prop.id,
7412
7433
  prop,
@@ -7431,7 +7452,7 @@ function CreateAncestryPanel({
7431
7452
  className: `p-1.5 rounded-md transition-colors ${isAddingNodes ? "bg-cyan-500 text-white shadow-lg shadow-cyan-500/30" : "bg-slate-700 text-slate-400 hover:text-white hover:bg-slate-600"}`,
7432
7453
  title: isAddingNodes ? "Concluir edi\xE7\xE3o da estrutura" : "Editar estrutura e adicionar nodes"
7433
7454
  },
7434
- isAddingNodes ? /* @__PURE__ */ React10.createElement(FiCheck5, { size: 14 }) : /* @__PURE__ */ React10.createElement(FiEdit23, { size: 14 })
7455
+ isAddingNodes ? /* @__PURE__ */ React10.createElement(FiCheck6, { size: 14 }) : /* @__PURE__ */ React10.createElement(FiEdit24, { size: 14 })
7435
7456
  ))), /* @__PURE__ */ React10.createElement("div", { className: "p-4 space-y-2" }, isAddingNodes && /* @__PURE__ */ React10.createElement("div", { className: "mb-3 p-2 rounded bg-cyan-900/20 border border-cyan-500/20 text-xs text-cyan-200 flex items-start gap-2" }, /* @__PURE__ */ React10.createElement(FiMousePointer, { className: "mt-0.5 flex-shrink-0" }), /* @__PURE__ */ React10.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ React10.createElement("span", null, "Clique nos nodes do cen\xE1rio para adicion\xE1-los como filhos de: ", /* @__PURE__ */ React10.createElement("strong", { className: "text-white underline decoration-dashed" }, getSelectedParentName())), /* @__PURE__ */ React10.createElement("span", { className: "opacity-75" }, "Arraste e solte itens na lista para reorganizar a hierarquia."))), activeTree && /* @__PURE__ */ React10.createElement(
7436
7457
  NodeItem,
7437
7458
  {
@@ -7496,7 +7517,7 @@ function CreateAncestryPanel({
7496
7517
  className: `p-1.5 rounded-md transition-colors ${ancestryMode.isAddingAbstractionNodes ? "bg-purple-500 text-white shadow-lg shadow-purple-500/30" : "bg-slate-700 text-slate-400 hover:text-white hover:bg-slate-600"}`,
7497
7518
  title: "Editar estrutura da abstra\xE7\xE3o"
7498
7519
  },
7499
- ancestryMode.isAddingAbstractionNodes ? /* @__PURE__ */ React10.createElement(FiCheck5, { size: 14 }) : /* @__PURE__ */ React10.createElement(FiEdit23, { size: 14 })
7520
+ ancestryMode.isAddingAbstractionNodes ? /* @__PURE__ */ React10.createElement(FiCheck6, { size: 14 }) : /* @__PURE__ */ React10.createElement(FiEdit24, { size: 14 })
7500
7521
  ))),
7501
7522
  /* @__PURE__ */ React10.createElement("div", { className: "p-4 space-y-2" }, ancestryMode.isAddingAbstractionNodes && /* @__PURE__ */ React10.createElement("div", { className: "mb-3 p-2 rounded bg-purple-900/20 border border-purple-500/20 text-xs text-purple-200 flex items-start gap-2" }, /* @__PURE__ */ React10.createElement(FiMousePointer, { className: "mt-0.5 flex-shrink-0" }), /* @__PURE__ */ React10.createElement("span", null, "Clique nos nodes do cen\xE1rio para adicion\xE1-los. Arraste e solte para organizar a hierarquia.")), /* @__PURE__ */ React10.createElement(
7502
7523
  NodeItem,
@@ -7516,7 +7537,7 @@ function CreateAncestryPanel({
7516
7537
  isEditable: ancestryMode.isAddingAbstractionNodes
7517
7538
  }
7518
7539
  ))
7519
- ), branchStack.length === 0 && /* @__PURE__ */ React10.createElement("div", { className: "mt-3 flex items-center justify-end px-1" }, /* @__PURE__ */ React10.createElement("label", { className: "flex items-center gap-2 cursor-pointer group select-none" }, /* @__PURE__ */ React10.createElement("div", { className: `w-4 h-4 rounded border flex items-center justify-center transition-colors ${isPrivate ? "bg-indigo-500 border-indigo-500" : "border-slate-500 bg-transparent"}` }, isPrivate && /* @__PURE__ */ React10.createElement(FiCheck5, { size: 12, className: "text-white" })), /* @__PURE__ */ React10.createElement(
7540
+ ), branchStack.length === 0 && /* @__PURE__ */ React10.createElement("div", { className: "mt-3 flex items-center justify-end px-1" }, /* @__PURE__ */ React10.createElement("label", { className: "flex items-center gap-2 cursor-pointer group select-none" }, /* @__PURE__ */ React10.createElement("div", { className: `w-4 h-4 rounded border flex items-center justify-center transition-colors ${isPrivate ? "bg-indigo-500 border-indigo-500" : "border-slate-500 bg-transparent"}` }, isPrivate && /* @__PURE__ */ React10.createElement(FiCheck6, { size: 12, className: "text-white" })), /* @__PURE__ */ React10.createElement(
7520
7541
  "input",
7521
7542
  {
7522
7543
  type: "checkbox",
@@ -7546,7 +7567,7 @@ function CreateAncestryPanel({
7546
7567
  availableNodes
7547
7568
  }
7548
7569
  ), isDescriptionModalOpen && /* @__PURE__ */ React10.createElement(
7549
- DescriptionEditModal,
7570
+ DescriptionEditModal2,
7550
7571
  {
7551
7572
  isOpen: isDescriptionModalOpen,
7552
7573
  title: branchStack.length > 0 ? "Editar Descri\xE7\xE3o da Ramifica\xE7\xE3o" : "Editar Descri\xE7\xE3o da Ancestralidade",
@@ -7565,7 +7586,7 @@ function CreateAncestryPanel({
7565
7586
 
7566
7587
  // src/components/ImageViewer.jsx
7567
7588
  import React11, { useState as useState12, useEffect as useEffect11, useLayoutEffect as useLayoutEffect2, useCallback as useCallback3 } from "react";
7568
- import { FiX as FiX2, FiChevronLeft as FiChevronLeft3, FiChevronRight as FiChevronRight5 } from "react-icons/fi";
7589
+ import { FiX as FiX3, FiChevronLeft as FiChevronLeft3, FiChevronRight as FiChevronRight5 } from "react-icons/fi";
7569
7590
  function ImageViewer({ data, onClose }) {
7570
7591
  var _a;
7571
7592
  const { images = [], startIndex = 0, visible } = data;
@@ -7650,7 +7671,7 @@ function ImageViewer({ data, onClose }) {
7650
7671
  className: "absolute top-4 right-4 z-10 w-10 h-10 flex items-center justify-center bg-white/10 hover:bg-white/20 rounded-full text-white text-2xl transition-colors",
7651
7672
  "aria-label": "Fechar"
7652
7673
  },
7653
- /* @__PURE__ */ React11.createElement(FiX2, null)
7674
+ /* @__PURE__ */ React11.createElement(FiX3, null)
7654
7675
  ),
7655
7676
  /* @__PURE__ */ React11.createElement("div", { className: "relative max-w-full max-h-full flex items-center justify-center" }, isLoading && /* @__PURE__ */ React11.createElement("div", { className: "absolute inset-0 flex items-center justify-center" }, /* @__PURE__ */ React11.createElement("div", { className: "h-10 w-10 border-2 border-white/40 border-t-white rounded-full animate-spin" })), loadedSrc && /* @__PURE__ */ React11.createElement(
7656
7677
  "img",
@@ -7692,7 +7713,7 @@ import React13, { useState as useState14, useEffect as useEffect13, useRef as us
7692
7713
  // src/components/ColorPicker.jsx
7693
7714
  import React12, { useState as useState13, useEffect as useEffect12, useRef as useRef9 } from "react";
7694
7715
  import { HexColorPicker } from "react-colorful";
7695
- import { FiHash, FiCheck as FiCheck6 } from "react-icons/fi";
7716
+ import { FiHash, FiCheck as FiCheck7 } from "react-icons/fi";
7696
7717
  var PRESET_COLORS = [
7697
7718
  "#ef4444",
7698
7719
  "#f97316",
@@ -7761,7 +7782,7 @@ function ColorPicker({ color, onChange, disabled }) {
7761
7782
  style: { backgroundColor: preset },
7762
7783
  title: preset
7763
7784
  },
7764
- (color || "").toLowerCase() === (preset || "").toLowerCase() && /* @__PURE__ */ React12.createElement(FiCheck6, { className: `drop-shadow-md ${["#ffffff", "#4df5cb", "#84cc16", "#f59e0b"].includes(preset) ? "text-black" : "text-white"}`, size: 12 })
7785
+ (color || "").toLowerCase() === (preset || "").toLowerCase() && /* @__PURE__ */ React12.createElement(FiCheck7, { className: `drop-shadow-md ${["#ffffff", "#4df5cb", "#84cc16", "#f59e0b"].includes(preset) ? "text-black" : "text-white"}`, size: 12 })
7765
7786
  )))), /* @__PURE__ */ React12.createElement("style", null, `
7766
7787
  .custom-react-colorful .react-colorful {
7767
7788
  width: 100%;
@@ -7787,13 +7808,13 @@ function ColorPicker({ color, onChange, disabled }) {
7787
7808
 
7788
7809
  // src/components/InSceneCreationForm.jsx
7789
7810
  import {
7790
- FiPlus as FiPlus3,
7811
+ FiPlus as FiPlus4,
7791
7812
  FiMaximize2,
7792
- FiX as FiX3,
7793
- FiCheck as FiCheck7,
7794
- FiEdit2 as FiEdit24,
7813
+ FiX as FiX4,
7814
+ FiCheck as FiCheck8,
7815
+ FiEdit2 as FiEdit25,
7795
7816
  FiSun,
7796
- FiChevronDown as FiChevronDown4
7817
+ FiChevronDown as FiChevronDown5
7797
7818
  } from "react-icons/fi";
7798
7819
  function InSceneCreationForm({
7799
7820
  onSave,
@@ -8045,7 +8066,7 @@ function InSceneCreationForm({
8045
8066
  onClick: () => handleRemoveType(index),
8046
8067
  className: "hover:text-white transition-colors"
8047
8068
  },
8048
- /* @__PURE__ */ React13.createElement(FiX3, { size: 12 })
8069
+ /* @__PURE__ */ React13.createElement(FiX4, { size: 12 })
8049
8070
  )
8050
8071
  )), /* @__PURE__ */ React13.createElement(
8051
8072
  "input",
@@ -8099,7 +8120,7 @@ function InSceneCreationForm({
8099
8120
  },
8100
8121
  /* @__PURE__ */ React13.createElement("span", { className: "truncate pr-2" }, selectedDatasetName),
8101
8122
  /* @__PURE__ */ React13.createElement(
8102
- FiChevronDown4,
8123
+ FiChevronDown5,
8103
8124
  {
8104
8125
  className: `flex-shrink-0 text-slate-400 transition-transform ${isDatasetDropdownOpen ? "rotate-180" : ""}`
8105
8126
  }
@@ -8116,7 +8137,7 @@ function InSceneCreationForm({
8116
8137
  },
8117
8138
  ds.name
8118
8139
  )))), /* @__PURE__ */ React13.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React13.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React13.createElement("div", { className: "relative group min-h-[80px] bg-slate-800/70 p-2.5 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React13.createElement(
8119
- DescriptionDisplay,
8140
+ DescriptionDisplay2,
8120
8141
  {
8121
8142
  description,
8122
8143
  savedSections: [],
@@ -8134,7 +8155,7 @@ function InSceneCreationForm({
8134
8155
  className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
8135
8156
  title: "Editar descri\xE7\xE3o (Modo de Escrita)"
8136
8157
  },
8137
- /* @__PURE__ */ React13.createElement(FiEdit24, { size: 14 })
8158
+ /* @__PURE__ */ React13.createElement(FiEdit25, { size: 14 })
8138
8159
  )), !description && /* @__PURE__ */ React13.createElement(
8139
8160
  "div",
8140
8161
  {
@@ -8157,7 +8178,7 @@ function InSceneCreationForm({
8157
8178
  {
8158
8179
  className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${isSelected ? "bg-indigo-500 border-indigo-500 shadow-[0_0_10px_rgba(99,102,241,0.4)]" : "border-slate-600 bg-transparent group-hover:border-slate-500"}`
8159
8180
  },
8160
- isSelected && /* @__PURE__ */ React13.createElement(FiCheck7, { size: 12, className: "text-white" })
8181
+ isSelected && /* @__PURE__ */ React13.createElement(FiCheck8, { size: 12, className: "text-white" })
8161
8182
  ),
8162
8183
  /* @__PURE__ */ React13.createElement(
8163
8184
  "span",
@@ -8172,7 +8193,7 @@ function InSceneCreationForm({
8172
8193
  {
8173
8194
  className: `w-4 h-4 rounded border flex items-center justify-center transition-colors ${useImageAsTexture ? "bg-indigo-500 border-indigo-500" : "border-slate-500 bg-transparent"}`
8174
8195
  },
8175
- useImageAsTexture && /* @__PURE__ */ React13.createElement(FiCheck7, { size: 12, className: "text-white" })
8196
+ useImageAsTexture && /* @__PURE__ */ React13.createElement(FiCheck8, { size: 12, className: "text-white" })
8176
8197
  ), /* @__PURE__ */ React13.createElement(
8177
8198
  "input",
8178
8199
  {
@@ -8219,10 +8240,10 @@ function InSceneCreationForm({
8219
8240
  onClick: handleAddProp,
8220
8241
  className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors"
8221
8242
  },
8222
- /* @__PURE__ */ React13.createElement(FiPlus3, { size: 14 }),
8243
+ /* @__PURE__ */ React13.createElement(FiPlus4, { size: 14 }),
8223
8244
  " Adicionar"
8224
8245
  )), /* @__PURE__ */ React13.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React13.createElement(
8225
- CustomPropertyDisplay,
8246
+ CustomPropertyDisplay2,
8226
8247
  {
8227
8248
  key: prop.id,
8228
8249
  prop,
@@ -8254,7 +8275,7 @@ function InSceneCreationForm({
8254
8275
  "Salvar"
8255
8276
  )))
8256
8277
  ), isDescriptionModalOpen && /* @__PURE__ */ React13.createElement(
8257
- DescriptionEditModal,
8278
+ DescriptionEditModal2,
8258
8279
  {
8259
8280
  isOpen: isDescriptionModalOpen,
8260
8281
  title: "Editar Descri\xE7\xE3o do Node",
@@ -8272,7 +8293,7 @@ function InSceneCreationForm({
8272
8293
 
8273
8294
  // src/components/InSceneVersionForm.jsx
8274
8295
  import React14, { useState as useState15, useEffect as useEffect14, useRef as useRef11 } from "react";
8275
- import { FiPlus as FiPlus4, FiMaximize2 as FiMaximize22, FiCheck as FiCheck8, FiEdit2 as FiEdit25 } from "react-icons/fi";
8296
+ import { FiPlus as FiPlus5, FiMaximize2 as FiMaximize22, FiCheck as FiCheck9, FiEdit2 as FiEdit26 } from "react-icons/fi";
8276
8297
  function InSceneVersionForm({
8277
8298
  onSave,
8278
8299
  onCancel,
@@ -8443,7 +8464,7 @@ function InSceneVersionForm({
8443
8464
  className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 focus:outline-none focus:ring-2 focus:ring-indigo-400/60"
8444
8465
  }
8445
8466
  )), /* @__PURE__ */ React14.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React14.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React14.createElement("div", { className: "relative group min-h-[80px] bg-slate-800/70 p-2.5 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React14.createElement(
8446
- DescriptionDisplay,
8467
+ DescriptionDisplay2,
8447
8468
  {
8448
8469
  description,
8449
8470
  savedSections: [],
@@ -8461,7 +8482,7 @@ function InSceneVersionForm({
8461
8482
  className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
8462
8483
  title: "Editar descri\xE7\xE3o (Modo de Escrita)"
8463
8484
  },
8464
- /* @__PURE__ */ React14.createElement(FiEdit25, { size: 14 })
8485
+ /* @__PURE__ */ React14.createElement(FiEdit26, { size: 14 })
8465
8486
  )), !description && /* @__PURE__ */ React14.createElement(
8466
8487
  "div",
8467
8488
  {
@@ -8484,7 +8505,7 @@ function InSceneVersionForm({
8484
8505
  {
8485
8506
  className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${isSelected ? "bg-indigo-500 border-indigo-500 shadow-[0_0_10px_rgba(99,102,241,0.4)]" : "border-slate-600 bg-transparent group-hover:border-slate-500"}`
8486
8507
  },
8487
- isSelected && /* @__PURE__ */ React14.createElement(FiCheck8, { size: 12, className: "text-white" })
8508
+ isSelected && /* @__PURE__ */ React14.createElement(FiCheck9, { size: 12, className: "text-white" })
8488
8509
  ),
8489
8510
  /* @__PURE__ */ React14.createElement(
8490
8511
  "span",
@@ -8499,7 +8520,7 @@ function InSceneVersionForm({
8499
8520
  {
8500
8521
  className: `w-4 h-4 rounded border flex items-center justify-center transition-colors ${useImageAsTexture ? "bg-indigo-500 border-indigo-500" : "border-slate-500 bg-transparent"}`
8501
8522
  },
8502
- useImageAsTexture && /* @__PURE__ */ React14.createElement(FiCheck8, { size: 12, className: "text-white" })
8523
+ useImageAsTexture && /* @__PURE__ */ React14.createElement(FiCheck9, { size: 12, className: "text-white" })
8503
8524
  ), /* @__PURE__ */ React14.createElement(
8504
8525
  "input",
8505
8526
  {
@@ -8534,10 +8555,10 @@ function InSceneVersionForm({
8534
8555
  onClick: handleAddProp,
8535
8556
  className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors"
8536
8557
  },
8537
- /* @__PURE__ */ React14.createElement(FiPlus4, { size: 14 }),
8558
+ /* @__PURE__ */ React14.createElement(FiPlus5, { size: 14 }),
8538
8559
  " Adicionar"
8539
8560
  )), /* @__PURE__ */ React14.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React14.createElement(
8540
- CustomPropertyDisplay,
8561
+ CustomPropertyDisplay2,
8541
8562
  {
8542
8563
  key: prop.id,
8543
8564
  prop,
@@ -8569,7 +8590,7 @@ function InSceneVersionForm({
8569
8590
  "Salvar"
8570
8591
  )))
8571
8592
  ), isDescriptionModalOpen && /* @__PURE__ */ React14.createElement(
8572
- DescriptionEditModal,
8593
+ DescriptionEditModal2,
8573
8594
  {
8574
8595
  isOpen: isDescriptionModalOpen,
8575
8596
  title: "Editar Descri\xE7\xE3o da Vers\xE3o",
@@ -8588,25 +8609,25 @@ function InSceneVersionForm({
8588
8609
  // src/components/InSceneQuestForm.jsx
8589
8610
  import React16, { useState as useState17, useRef as useRef12 } from "react";
8590
8611
  import {
8591
- FiPlus as FiPlus6,
8592
- FiCheck as FiCheck9,
8593
- FiEdit2 as FiEdit26,
8594
- FiTarget,
8595
- FiX as FiX5,
8596
- FiChevronDown as FiChevronDown6,
8597
- FiUser as FiUser2,
8598
- FiSearch as FiSearch5
8612
+ FiPlus as FiPlus7,
8613
+ FiCheck as FiCheck10,
8614
+ FiEdit2 as FiEdit27,
8615
+ FiTarget as FiTarget2,
8616
+ FiX as FiX6,
8617
+ FiChevronDown as FiChevronDown7,
8618
+ FiUser as FiUser3,
8619
+ FiSearch as FiSearch6
8599
8620
  } from "react-icons/fi";
8600
8621
 
8601
8622
  // src/components/QuestReviewStackEditor.jsx
8602
8623
  import React15, { useState as useState16 } from "react";
8603
8624
  import {
8604
- FiPlus as FiPlus5,
8605
- FiX as FiX4,
8606
- FiUser,
8607
- FiSearch as FiSearch4,
8625
+ FiPlus as FiPlus6,
8626
+ FiX as FiX5,
8627
+ FiUser as FiUser2,
8628
+ FiSearch as FiSearch5,
8608
8629
  FiChevronUp,
8609
- FiChevronDown as FiChevronDown5,
8630
+ FiChevronDown as FiChevronDown6,
8610
8631
  FiStar
8611
8632
  } from "react-icons/fi";
8612
8633
  function QuestReviewStackEditor({
@@ -8659,10 +8680,10 @@ function QuestReviewStackEditor({
8659
8680
  onClick: () => setIsAdding(true),
8660
8681
  className: "flex items-center gap-1 px-2 py-1 text-[10px] bg-sky-500/20 text-sky-300 border border-sky-500/30 rounded hover:bg-sky-500/30 transition-colors"
8661
8682
  },
8662
- /* @__PURE__ */ React15.createElement(FiPlus5, { size: 10 }),
8683
+ /* @__PURE__ */ React15.createElement(FiPlus6, { size: 10 }),
8663
8684
  " Adicionar Camada"
8664
8685
  )), isAdding && /* @__PURE__ */ React15.createElement("div", { className: "bg-slate-900/50 border border-sky-500/30 rounded-lg p-2 space-y-2 animate-in fade-in slide-in-from-top-1 duration-200" }, /* @__PURE__ */ React15.createElement("div", { className: "relative" }, /* @__PURE__ */ React15.createElement(
8665
- FiSearch4,
8686
+ FiSearch5,
8666
8687
  {
8667
8688
  className: "absolute left-2 top-1/2 -translate-y-1/2 text-slate-500",
8668
8689
  size: 12
@@ -8683,7 +8704,7 @@ function QuestReviewStackEditor({
8683
8704
  onClick: () => setIsAdding(false),
8684
8705
  className: "absolute right-2 top-1/2 -translate-y-1/2 text-slate-500 hover:text-white"
8685
8706
  },
8686
- /* @__PURE__ */ React15.createElement(FiX4, { size: 14 })
8707
+ /* @__PURE__ */ React15.createElement(FiX5, { size: 14 })
8687
8708
  )), /* @__PURE__ */ React15.createElement("ul", { className: "max-h-32 overflow-y-auto custom-scrollbar space-y-1" }, filteredMembers.map((m) => /* @__PURE__ */ React15.createElement(
8688
8709
  "li",
8689
8710
  {
@@ -8691,7 +8712,7 @@ function QuestReviewStackEditor({
8691
8712
  onClick: () => handleAddReviewer(m.id),
8692
8713
  className: "px-2 py-1.5 hover:bg-white/5 rounded cursor-pointer text-xs flex items-center gap-2"
8693
8714
  },
8694
- /* @__PURE__ */ React15.createElement(FiUser, { size: 12, className: "text-slate-400" }),
8715
+ /* @__PURE__ */ React15.createElement(FiUser2, { size: 12, className: "text-slate-400" }),
8695
8716
  /* @__PURE__ */ React15.createElement("span", { className: "truncate" }, m.name || m.email)
8696
8717
  )), filteredMembers.length === 0 && /* @__PURE__ */ React15.createElement("li", { className: "text-[10px] text-slate-500 text-center py-2 italic font-light" }, "Nenhum membro encontrado"))), /* @__PURE__ */ React15.createElement("div", { className: "space-y-1.5" }, reviewStack.map((item, index) => {
8697
8718
  const member = viewMembers.find((m) => m.id === item.userId);
@@ -8719,7 +8740,7 @@ function QuestReviewStackEditor({
8719
8740
  disabled: index === reviewStack.length - 1,
8720
8741
  className: "hover:text-sky-400 disabled:opacity-20"
8721
8742
  },
8722
- /* @__PURE__ */ React15.createElement(FiChevronDown5, { size: 12 })
8743
+ /* @__PURE__ */ React15.createElement(FiChevronDown6, { size: 12 })
8723
8744
  ))),
8724
8745
  /* @__PURE__ */ React15.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React15.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15.createElement(
8725
8746
  "span",
@@ -8744,7 +8765,7 @@ function QuestReviewStackEditor({
8744
8765
  onClick: () => handleRemoveReviewer(index),
8745
8766
  className: "p-1.5 rounded hover:bg-red-500/20 text-slate-500 hover:text-red-400 transition-colors"
8746
8767
  },
8747
- /* @__PURE__ */ React15.createElement(FiX4, { size: 14 })
8768
+ /* @__PURE__ */ React15.createElement(FiX5, { size: 14 })
8748
8769
  ))
8749
8770
  );
8750
8771
  }), reviewStack.length === 0 && !isAdding && /* @__PURE__ */ React15.createElement("div", { className: "py-6 border-2 border-dashed border-white/5 rounded-xl flex flex-col items-center justify-center gap-2" }, /* @__PURE__ */ React15.createElement("p", { className: "text-xs text-slate-500 font-light italic" }, "Nenhum revisor definido"), !readOnly && /* @__PURE__ */ React15.createElement(
@@ -8850,22 +8871,19 @@ function InSceneQuestForm({
8850
8871
  );
8851
8872
  const processedSections = processDescriptionForSave(description, []);
8852
8873
  const initialTimeline = [
8853
- {
8854
- type: "quest_created",
8855
- timestamp: Date.now(),
8856
- actorId: ((_a2 = session == null ? void 0 : session.user) == null ? void 0 : _a2.id) || "unknown",
8857
- description: `Quest criada por ${((_b2 = session == null ? void 0 : session.user) == null ? void 0 : _b2.name) || "usu\xE1rio"}.`
8858
- }
8874
+ createTimelineEntry(
8875
+ ((_a2 = session == null ? void 0 : session.user) == null ? void 0 : _a2.id) || "unknown",
8876
+ `Quest criada por ${((_b2 = session == null ? void 0 : session.user) == null ? void 0 : _b2.name) || "usu\xE1rio"}.`,
8877
+ "quest_created"
8878
+ )
8859
8879
  ];
8860
8880
  if (assigneeId) {
8861
- initialTimeline.push({
8862
- type: "assignee_changed",
8863
- timestamp: Date.now() + 1,
8864
- // Ensure sequential timestamp
8865
- actorId: ((_c = session == null ? void 0 : session.user) == null ? void 0 : _c.id) || "unknown",
8866
- to_assignee_id: assigneeId,
8867
- description: `Quest atribu\xEDda para ${((_d = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _d.name) || "respons\xE1vel"}.`
8868
- });
8881
+ initialTimeline.push(createTimelineEntry(
8882
+ ((_c = session == null ? void 0 : session.user) == null ? void 0 : _c.id) || "unknown",
8883
+ `Quest atribu\xEDda para ${((_d = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _d.name) || "respons\xE1vel"}.`,
8884
+ "assignee_changed",
8885
+ { metadata: { to_assignee_id: assigneeId } }
8886
+ ));
8869
8887
  }
8870
8888
  onSave({
8871
8889
  name: standardizedName,
@@ -8911,7 +8929,7 @@ function InSceneQuestForm({
8911
8929
  }
8912
8930
  }
8913
8931
  ),
8914
- /* @__PURE__ */ React16.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ React16.createElement("div", null, /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React16.createElement(FiTarget, { className: "text-sky-400", size: 14 }), /* @__PURE__ */ React16.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Nova quest")), /* @__PURE__ */ React16.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, "Criar Quest")), /* @__PURE__ */ React16.createElement(
8932
+ /* @__PURE__ */ React16.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ React16.createElement("div", null, /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React16.createElement(FiTarget2, { className: "text-sky-400", size: 14 }), /* @__PURE__ */ React16.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Nova quest")), /* @__PURE__ */ React16.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, "Criar Quest")), /* @__PURE__ */ React16.createElement(
8915
8933
  "button",
8916
8934
  {
8917
8935
  type: "button",
@@ -8957,7 +8975,7 @@ function InSceneQuestForm({
8957
8975
  }
8958
8976
  ), /* @__PURE__ */ React16.createElement("span", { className: "text-slate-200 font-medium" }, status)),
8959
8977
  /* @__PURE__ */ React16.createElement(
8960
- FiChevronDown6,
8978
+ FiChevronDown7,
8961
8979
  {
8962
8980
  className: `text-slate-400 transition-transform duration-200 ${isStatusDropdownOpen ? "rotate-180" : ""}`
8963
8981
  }
@@ -8994,9 +9012,9 @@ function InSceneQuestForm({
8994
9012
  onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
8995
9013
  className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 hover:border-white/20 focus:outline-none focus:ring-2 focus:ring-indigo-400/60 transition-colors flex items-center justify-between"
8996
9014
  },
8997
- /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React16.createElement(FiUser2, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ React16.createElement("span", { className: "text-slate-200 font-medium" }, ((_a = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _a.name) || ((_b = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _b.email) || "Nenhum")),
9015
+ /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React16.createElement(FiUser3, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ React16.createElement("span", { className: "text-slate-200 font-medium" }, ((_a = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _a.name) || ((_b = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _b.email) || "Nenhum")),
8998
9016
  /* @__PURE__ */ React16.createElement(
8999
- FiChevronDown6,
9017
+ FiChevronDown7,
9000
9018
  {
9001
9019
  className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}`
9002
9020
  }
@@ -9010,7 +9028,7 @@ function InSceneQuestForm({
9010
9028
  setAssigneeSearchQuery("");
9011
9029
  }
9012
9030
  }
9013
- ), /* @__PURE__ */ React16.createElement("div", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-900 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden flex flex-col" }, /* @__PURE__ */ React16.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ React16.createElement(FiSearch5, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ React16.createElement(
9031
+ ), /* @__PURE__ */ React16.createElement("div", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-900 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden flex flex-col" }, /* @__PURE__ */ React16.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ React16.createElement(FiSearch6, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ React16.createElement(
9014
9032
  "input",
9015
9033
  {
9016
9034
  type: "text",
@@ -9058,7 +9076,7 @@ function InSceneQuestForm({
9058
9076
  viewMembers
9059
9077
  }
9060
9078
  )), /* @__PURE__ */ React16.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React16.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React16.createElement("div", { className: "relative group min-h-[80px] bg-slate-800/70 p-2.5 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React16.createElement(
9061
- DescriptionDisplay,
9079
+ DescriptionDisplay2,
9062
9080
  {
9063
9081
  description,
9064
9082
  savedSections: [],
@@ -9074,7 +9092,7 @@ function InSceneQuestForm({
9074
9092
  onClick: () => setIsDescriptionModalOpen(true),
9075
9093
  className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors"
9076
9094
  },
9077
- /* @__PURE__ */ React16.createElement(FiEdit26, { size: 14 })
9095
+ /* @__PURE__ */ React16.createElement(FiEdit27, { size: 14 })
9078
9096
  )), !description && /* @__PURE__ */ React16.createElement(
9079
9097
  "div",
9080
9098
  {
@@ -9089,10 +9107,10 @@ function InSceneQuestForm({
9089
9107
  onClick: handleAddProp,
9090
9108
  className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors"
9091
9109
  },
9092
- /* @__PURE__ */ React16.createElement(FiPlus6, { size: 14 }),
9110
+ /* @__PURE__ */ React16.createElement(FiPlus7, { size: 14 }),
9093
9111
  " Adicionar"
9094
9112
  )), /* @__PURE__ */ React16.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React16.createElement(
9095
- CustomPropertyDisplay,
9113
+ CustomPropertyDisplay2,
9096
9114
  {
9097
9115
  key: prop.id,
9098
9116
  prop,
@@ -9120,7 +9138,7 @@ function InSceneQuestForm({
9120
9138
  {
9121
9139
  className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${size === s ? "bg-indigo-500 border-indigo-500" : "border-slate-600 bg-transparent group-hover:border-slate-500"}`
9122
9140
  },
9123
- size === s && /* @__PURE__ */ React16.createElement(FiCheck9, { size: 12, className: "text-white" })
9141
+ size === s && /* @__PURE__ */ React16.createElement(FiCheck10, { size: 12, className: "text-white" })
9124
9142
  ),
9125
9143
  /* @__PURE__ */ React16.createElement(
9126
9144
  "span",
@@ -9143,7 +9161,7 @@ function InSceneQuestForm({
9143
9161
  onClick: () => handleRemoveType(index),
9144
9162
  className: "hover:text-white transition-colors"
9145
9163
  },
9146
- /* @__PURE__ */ React16.createElement(FiX5, { size: 12 })
9164
+ /* @__PURE__ */ React16.createElement(FiX6, { size: 12 })
9147
9165
  )
9148
9166
  )), /* @__PURE__ */ React16.createElement(
9149
9167
  "input",
@@ -9175,7 +9193,7 @@ function InSceneQuestForm({
9175
9193
  "Salvar Quest"
9176
9194
  )))
9177
9195
  ), isDescriptionModalOpen && /* @__PURE__ */ React16.createElement(
9178
- DescriptionEditModal,
9196
+ DescriptionEditModal2,
9179
9197
  {
9180
9198
  isOpen: isDescriptionModalOpen,
9181
9199
  title: "Editar Descri\xE7\xE3o da Quest",
@@ -9191,7 +9209,7 @@ function InSceneQuestForm({
9191
9209
 
9192
9210
  // src/components/NodeDetailsPanel.jsx
9193
9211
  import React17, { useState as useState18, useEffect as useEffect15, useRef as useRef13 } from "react";
9194
- import { FiPlus as FiPlus7, FiMaximize2 as FiMaximize23, FiX as FiX6, FiCheck as FiCheck10, FiImage as FiImage3, FiEdit2 as FiEdit27, FiLoader as FiLoader2, FiBookOpen as FiBookOpen3, FiSun as FiSun2, FiLink as FiLink5, FiDatabase } from "react-icons/fi";
9212
+ import { FiPlus as FiPlus8, FiMaximize2 as FiMaximize23, FiX as FiX7, FiCheck as FiCheck11, FiImage as FiImage3, FiEdit2 as FiEdit28, FiLoader as FiLoader3, FiBookOpen as FiBookOpen4, FiSun as FiSun2, FiLink as FiLink6, FiDatabase } from "react-icons/fi";
9195
9213
  function NodeDetailsPanel({
9196
9214
  node,
9197
9215
  onClose,
@@ -9528,7 +9546,7 @@ function NodeDetailsPanel({
9528
9546
  className: `ml-1 p-1 transition-colors ${isLinkCopied ? "text-green-400" : "text-slate-400 hover:text-indigo-400"}`,
9529
9547
  title: isLinkCopied ? "Link Copiado!" : "Copiar link para este Node"
9530
9548
  },
9531
- isLinkCopied ? /* @__PURE__ */ React17.createElement(FiCheck10, { size: 12 }) : /* @__PURE__ */ React17.createElement(FiLink5, { size: 12 })
9549
+ isLinkCopied ? /* @__PURE__ */ React17.createElement(FiCheck11, { size: 12 }) : /* @__PURE__ */ React17.createElement(FiLink6, { size: 12 })
9532
9550
  )), /* @__PURE__ */ React17.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, name || (node == null ? void 0 : node.name))), /* @__PURE__ */ React17.createElement("button", { onClick: handleCancel, disabled: isSaving, className: "w-9 h-9 flex-shrink-0 grid place-content-center rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-xl disabled:opacity-50", title: "Cancelar" }, "\xD7")), /* @__PURE__ */ React17.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 max-h-[68vh] custom-scrollbar" }, /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React17.createElement("label", { className: "text-xs text-slate-300" }, "Tipos"), /* @__PURE__ */ React17.createElement("div", { className: `relative w-full bg-slate-800/70 p-1.5 min-h-[42px] flex flex-wrap gap-1.5 rounded-lg border border-white/10 ${canEdit ? "focus-within:ring-2 focus-within:ring-indigo-400/60" : ""} transition-all` }, types.map((t, index) => /* @__PURE__ */ React17.createElement("span", { key: index, className: "flex items-center gap-1 bg-indigo-500/30 text-indigo-100 px-1.5 py-0.5 rounded-md text-xs font-medium border border-indigo-500/20" }, t, canEdit && /* @__PURE__ */ React17.createElement(
9533
9551
  "button",
9534
9552
  {
@@ -9536,7 +9554,7 @@ function NodeDetailsPanel({
9536
9554
  onClick: () => handleRemoveType(index),
9537
9555
  className: "hover:text-white transition-colors"
9538
9556
  },
9539
- /* @__PURE__ */ React17.createElement(FiX6, { size: 12 })
9557
+ /* @__PURE__ */ React17.createElement(FiX7, { size: 12 })
9540
9558
  ))), canEdit && /* @__PURE__ */ React17.createElement(
9541
9559
  "input",
9542
9560
  {
@@ -9579,7 +9597,7 @@ function NodeDetailsPanel({
9579
9597
  className: `w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 focus:outline-none ${canEdit ? "focus:ring-2 focus:ring-indigo-400/60" : "cursor-default text-slate-400"}`
9580
9598
  }
9581
9599
  )), /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React17.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React17.createElement("div", { className: "relative group min-h-[60px] bg-slate-800/40 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React17.createElement(
9582
- DescriptionDisplay,
9600
+ DescriptionDisplay2,
9583
9601
  {
9584
9602
  description,
9585
9603
  savedSections: existingSections,
@@ -9598,7 +9616,7 @@ function NodeDetailsPanel({
9598
9616
  className: `p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors ${canEdit ? "border-r border-white/5" : ""}`,
9599
9617
  title: "Modo de Leitura"
9600
9618
  },
9601
- /* @__PURE__ */ React17.createElement(FiBookOpen3, { size: 14 })
9619
+ /* @__PURE__ */ React17.createElement(FiBookOpen4, { size: 14 })
9602
9620
  ), canEdit && /* @__PURE__ */ React17.createElement(
9603
9621
  "button",
9604
9622
  {
@@ -9607,7 +9625,7 @@ function NodeDetailsPanel({
9607
9625
  className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
9608
9626
  title: "Editar descri\xE7\xE3o (Modo de Escrita)"
9609
9627
  },
9610
- /* @__PURE__ */ React17.createElement(FiEdit27, { size: 14 })
9628
+ /* @__PURE__ */ React17.createElement(FiEdit28, { size: 14 })
9611
9629
  )), canEdit && !description && /* @__PURE__ */ React17.createElement(
9612
9630
  "div",
9613
9631
  {
@@ -9625,10 +9643,10 @@ function NodeDetailsPanel({
9625
9643
  onClick: () => canEdit && handleSizeChange(s),
9626
9644
  className: `flex items-center gap-2 group focus:outline-none ${canEdit ? "cursor-pointer" : "cursor-default opacity-80"}`
9627
9645
  },
9628
- /* @__PURE__ */ React17.createElement("div", { className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${isSelected ? "bg-indigo-500 border-indigo-500 shadow-[0_0_10px_rgba(99,102,241,0.4)]" : "border-slate-600 bg-transparent " + (canEdit ? "group-hover:border-slate-500" : "")}` }, isSelected && /* @__PURE__ */ React17.createElement(FiCheck10, { size: 12, className: "text-white" })),
9646
+ /* @__PURE__ */ React17.createElement("div", { className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${isSelected ? "bg-indigo-500 border-indigo-500 shadow-[0_0_10px_rgba(99,102,241,0.4)]" : "border-slate-600 bg-transparent " + (canEdit ? "group-hover:border-slate-500" : "")}` }, isSelected && /* @__PURE__ */ React17.createElement(FiCheck11, { size: 12, className: "text-white" })),
9629
9647
  /* @__PURE__ */ React17.createElement("span", { className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 " + (canEdit ? "group-hover:text-slate-300" : "")}` }, s)
9630
9648
  );
9631
- }))), /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React17.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React17.createElement("label", { className: "text-xs text-slate-300" }, "Cor e Brilho"), canEdit && hasImages && /* @__PURE__ */ React17.createElement("label", { className: "flex items-center gap-2 cursor-pointer group" }, /* @__PURE__ */ React17.createElement("div", { className: `w-4 h-4 rounded border flex items-center justify-center transition-colors ${useImageAsTexture ? "bg-indigo-500 border-indigo-500" : "border-slate-500 bg-transparent"}` }, useImageAsTexture && /* @__PURE__ */ React17.createElement(FiCheck10, { size: 12, className: "text-white" })), /* @__PURE__ */ React17.createElement(
9649
+ }))), /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React17.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React17.createElement("label", { className: "text-xs text-slate-300" }, "Cor e Brilho"), canEdit && hasImages && /* @__PURE__ */ React17.createElement("label", { className: "flex items-center gap-2 cursor-pointer group" }, /* @__PURE__ */ React17.createElement("div", { className: `w-4 h-4 rounded border flex items-center justify-center transition-colors ${useImageAsTexture ? "bg-indigo-500 border-indigo-500" : "border-slate-500 bg-transparent"}` }, useImageAsTexture && /* @__PURE__ */ React17.createElement(FiCheck11, { size: 12, className: "text-white" })), /* @__PURE__ */ React17.createElement(
9632
9650
  "input",
9633
9651
  {
9634
9652
  type: "checkbox",
@@ -9656,8 +9674,8 @@ function NodeDetailsPanel({
9656
9674
  className: `w-full h-1.5 bg-slate-700 rounded-lg appearance-none ${canEdit ? "cursor-pointer accent-indigo-500 hover:accent-indigo-400" : "cursor-default accent-slate-500"}`,
9657
9675
  title: `Intensidade do brilho: ${intensity}`
9658
9676
  }
9659
- ), /* @__PURE__ */ React17.createElement("span", { className: "text-xs text-slate-400 w-6 text-right" }, intensity)), /* @__PURE__ */ React17.createElement("span", { className: `text-xs block mt-1 transition-opacity ${useImageAsTexture ? "opacity-40" : "text-slate-400"}` }, useImageAsTexture ? "Cor da borda (definida pela imagem)" : "Ajuste a cor e a intensidade do brilho.")), /* @__PURE__ */ React17.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React17.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React17.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), canEdit && /* @__PURE__ */ React17.createElement("button", { type: "button", onClick: handleAddProp, className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors" }, /* @__PURE__ */ React17.createElement(FiPlus7, { size: 14 }), " Adicionar")), /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React17.createElement(
9660
- CustomPropertyDisplay,
9677
+ ), /* @__PURE__ */ React17.createElement("span", { className: "text-xs text-slate-400 w-6 text-right" }, intensity)), /* @__PURE__ */ React17.createElement("span", { className: `text-xs block mt-1 transition-opacity ${useImageAsTexture ? "opacity-40" : "text-slate-400"}` }, useImageAsTexture ? "Cor da borda (definida pela imagem)" : "Ajuste a cor e a intensidade do brilho.")), /* @__PURE__ */ React17.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React17.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React17.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), canEdit && /* @__PURE__ */ React17.createElement("button", { type: "button", onClick: handleAddProp, className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors" }, /* @__PURE__ */ React17.createElement(FiPlus8, { size: 14 }), " Adicionar")), /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React17.createElement(
9678
+ CustomPropertyDisplay2,
9661
9679
  {
9662
9680
  key: prop.id,
9663
9681
  prop,
@@ -9680,11 +9698,11 @@ function NodeDetailsPanel({
9680
9698
  ${isSaving ? "bg-slate-700 text-slate-300 cursor-wait" : "bg-gradient-to-tr from-indigo-600 to-indigo-400 hover:from-indigo-500 hover:to-indigo-300 text-white"}
9681
9699
  `
9682
9700
  },
9683
- isSaving && /* @__PURE__ */ React17.createElement(FiLoader2, { className: "animate-spin" }),
9701
+ isSaving && /* @__PURE__ */ React17.createElement(FiLoader3, { className: "animate-spin" }),
9684
9702
  isSaving ? "Salvando..." : "Salvar"
9685
9703
  )))
9686
9704
  ), isDescriptionModalOpen && canEdit && /* @__PURE__ */ React17.createElement(
9687
- DescriptionEditModal,
9705
+ DescriptionEditModal2,
9688
9706
  {
9689
9707
  isOpen: isDescriptionModalOpen,
9690
9708
  title: "Editar Descri\xE7\xE3o do Node",
@@ -9704,8 +9722,85 @@ function NodeDetailsPanel({
9704
9722
  }
9705
9723
 
9706
9724
  // src/components/QuestDetailsPanel.jsx
9707
- import React18, { useState as useState19, useEffect as useEffect16, useRef as useRef14 } from "react";
9708
- import { FiPlus as FiPlus8, FiX as FiX7, FiCheck as FiCheck11, FiEdit2 as FiEdit28, FiLoader as FiLoader3, FiBookOpen as FiBookOpen4, FiLink as FiLink6, FiTarget as FiTarget2, FiChevronDown as FiChevronDown7, FiUser as FiUser3, FiSearch as FiSearch6 } from "react-icons/fi";
9725
+ import React19, { useState as useState19, useEffect as useEffect16, useRef as useRef14 } from "react";
9726
+
9727
+ // src/components/QuestTimeline.jsx
9728
+ import React18 from "react";
9729
+ import {
9730
+ FiGitCommit,
9731
+ FiUserPlus,
9732
+ FiRotateCcw,
9733
+ FiCheckSquare as FiCheckSquare2,
9734
+ FiMessageSquare,
9735
+ FiAlertCircle,
9736
+ FiArrowRight,
9737
+ FiTarget as FiTarget3,
9738
+ FiPlusCircle,
9739
+ FiSearch as FiSearch7,
9740
+ FiLink as FiLink7
9741
+ } from "react-icons/fi";
9742
+ var EVENT_ICONS = {
9743
+ "quest_created": { icon: FiPlusCircle, color: "text-sky-400", bg: "bg-sky-400/10" },
9744
+ "assignee_changed": { icon: FiUserPlus, color: "text-indigo-400", bg: "bg-indigo-400/10" },
9745
+ "status_changed": { icon: FiRotateCcw, color: "text-amber-400", bg: "bg-amber-400/10" },
9746
+ "review_cycle_started": { icon: FiSearch7, color: "text-purple-400", bg: "bg-purple-400/10" },
9747
+ "review_completed": { icon: FiCheckSquare2, color: "text-emerald-400", bg: "bg-emerald-400/10" },
9748
+ "comment": { icon: FiMessageSquare, color: "text-slate-400", bg: "bg-slate-400/10" },
9749
+ "quest_finished": { icon: FiTarget3, color: "text-green-400", bg: "bg-green-400/10" },
9750
+ "default": { icon: FiGitCommit, color: "text-slate-500", bg: "bg-slate-500/10" }
9751
+ };
9752
+ function QuestTimeline({
9753
+ timeline = [],
9754
+ viewMembers = [],
9755
+ onOpenImageViewer
9756
+ }) {
9757
+ const sortedTimeline = [...timeline].sort((a, b) => b.timestamp - a.timestamp);
9758
+ const getMemberName = (userId) => {
9759
+ const member = viewMembers.find((m) => m.id === userId);
9760
+ return (member == null ? void 0 : member.name) || (member == null ? void 0 : member.email) || "Sistema";
9761
+ };
9762
+ const formatDate = (timestamp) => {
9763
+ const date = new Date(timestamp);
9764
+ return new Intl.DateTimeFormat("pt-BR", {
9765
+ day: "2-digit",
9766
+ month: "short",
9767
+ hour: "2-digit",
9768
+ minute: "2-digit"
9769
+ }).format(date);
9770
+ };
9771
+ if (timeline.length === 0) {
9772
+ return /* @__PURE__ */ React18.createElement("div", { className: "py-6 flex flex-col items-center justify-center gap-2 border border-white/5 bg-white/5 rounded-xl" }, /* @__PURE__ */ React18.createElement(FiAlertCircle, { className: "text-slate-600", size: 16 }), /* @__PURE__ */ React18.createElement("p", { className: "text-[10px] text-slate-500 font-light uppercase tracking-widest" }, "Nenhum hist\xF3rico dispon\xEDvel"));
9773
+ }
9774
+ return /* @__PURE__ */ React18.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React18.createElement("h3", { className: "text-xs text-slate-400 font-medium uppercase tracking-wider flex items-center gap-2" }, "Hist\xF3rico (Timeline)"), /* @__PURE__ */ React18.createElement("div", { className: "relative pl-6 space-y-6 before:content-[''] before:absolute before:left-[11px] before:top-2 before:bottom-2 before:w-[2px] before:bg-white/5" }, sortedTimeline.map((event, index) => {
9775
+ const config = EVENT_ICONS[event.type] || EVENT_ICONS.default;
9776
+ const Icon = config.icon;
9777
+ const actorName = getMemberName(event.actorId);
9778
+ return /* @__PURE__ */ React18.createElement("div", { key: index, className: "relative animate-in fade-in slide-in-from-left-2 duration-300", style: { animationDelay: `${index * 50}ms` } }, /* @__PURE__ */ React18.createElement("div", { className: `absolute -left-[27px] top-0 w-8 h-8 rounded-full ${config.bg} flex items-center justify-center ring-4 ring-slate-950 border border-white/5` }, /* @__PURE__ */ React18.createElement(Icon, { className: config.iconColor || config.color, size: 14 })), /* @__PURE__ */ React18.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React18.createElement("div", { className: "flex items-center justify-between gap-4" }, /* @__PURE__ */ React18.createElement("span", { className: "text-xs font-semibold text-slate-200" }, actorName), /* @__PURE__ */ React18.createElement("span", { className: "text-[10px] text-slate-500 tabular-nums" }, formatDate(event.timestamp))), /* @__PURE__ */ React18.createElement("p", { className: "text-sm text-slate-400 leading-relaxed" }, event.description), (event.from_status || event.to_status) && /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-1.5 py-1 px-2 rounded-md bg-white/5 border border-white/5 w-fit mt-2" }, /* @__PURE__ */ React18.createElement("span", { className: "text-[10px] text-slate-500" }, event.from_status || "?"), /* @__PURE__ */ React18.createElement(FiArrowRight, { size: 10, className: "text-slate-600" }), /* @__PURE__ */ React18.createElement("span", { className: "text-[10px] text-indigo-300 font-bold" }, event.to_status || "?")), event.metadata && Object.keys(event.metadata).length > 0 && /* @__PURE__ */ React18.createElement("div", { className: "mt-2 text-[10px] grid grid-cols-2 gap-2 p-2 bg-slate-900/50 rounded border border-white/5" }, Object.entries(event.metadata).map(([key, value]) => /* @__PURE__ */ React18.createElement("div", { key, className: "flex flex-col gap-0.5" }, /* @__PURE__ */ React18.createElement("span", { className: "text-slate-500 capitalize" }, key.replace(/_/g, " ")), /* @__PURE__ */ React18.createElement("span", { className: "text-slate-300 truncate font-mono" }, typeof value === "string" ? value : JSON.stringify(value))))), event.links && event.links.length > 0 && /* @__PURE__ */ React18.createElement("div", { className: "flex flex-wrap gap-2 mt-2" }, event.links.map((link, lIdx) => /* @__PURE__ */ React18.createElement(
9779
+ "a",
9780
+ {
9781
+ key: lIdx,
9782
+ href: link.value,
9783
+ target: "_blank",
9784
+ rel: "noopener noreferrer",
9785
+ className: "flex items-center gap-1.5 px-2 py-1 rounded bg-white/5 border border-white/5 hover:bg-white/10 transition-colors text-[10px] text-sky-400 font-medium"
9786
+ },
9787
+ /* @__PURE__ */ React18.createElement(FiLink7, { size: 10 }),
9788
+ link.name || "Link"
9789
+ ))), event.images && event.images.length > 0 && /* @__PURE__ */ React18.createElement("div", { className: "flex flex-wrap gap-2 mt-2" }, event.images.map((img, iIdx) => /* @__PURE__ */ React18.createElement(
9790
+ "button",
9791
+ {
9792
+ key: iIdx,
9793
+ type: "button",
9794
+ onClick: () => onOpenImageViewer == null ? void 0 : onOpenImageViewer(event.images, iIdx),
9795
+ className: "relative w-12 h-12 rounded border border-white/10 overflow-hidden hover:border-sky-500/50 transition-colors group"
9796
+ },
9797
+ /* @__PURE__ */ React18.createElement("img", { src: img.value, alt: img.name, className: "w-full h-full object-cover" }),
9798
+ /* @__PURE__ */ React18.createElement("div", { className: "absolute inset-0 bg-slate-900/40 opacity-0 group-hover:opacity-100 flex items-center justify-center transition-opacity" }, /* @__PURE__ */ React18.createElement(FiSearch7, { size: 12, className: "text-white" }))
9799
+ )))));
9800
+ })));
9801
+ }
9802
+
9803
+ // src/components/QuestDetailsPanel.jsx
9709
9804
  var QUEST_STATUS_COLORS3 = {
9710
9805
  "Backlog": "#64748b",
9711
9806
  "In Progress": "#eab308",
@@ -9762,6 +9857,8 @@ function QuestDetailsPanel({
9762
9857
  const [isSaving, setIsSaving] = useState19(false);
9763
9858
  const [isLinkCopied, setIsLinkCopied] = useState19(false);
9764
9859
  const [hasUnsavedChanges, setHasUnsavedChanges] = useState19(false);
9860
+ const [noteText, setNoteText] = useState19("");
9861
+ const [isNoteFormOpen, setIsNoteFormOpen] = useState19(false);
9765
9862
  const maxPanelW = typeof window !== "undefined" ? window.innerWidth * 0.92 : 1200;
9766
9863
  const { width: panelWidth, isResizing, handlePointerDown: handleResize, setWidth } = useResizablePanel({
9767
9864
  initialWidth: isReadMode ? 700 : 440,
@@ -9892,6 +9989,28 @@ function QuestDetailsPanel({
9892
9989
  setIsSaving(false);
9893
9990
  }
9894
9991
  };
9992
+ const handleAddTimelineNote = async () => {
9993
+ if (!noteText.trim() || isSaving) return;
9994
+ setIsSaving(true);
9995
+ const actorId = (currentUser == null ? void 0 : currentUser.id) || "unknown";
9996
+ const newEntry = createTimelineEntry(actorId, noteText, "comment");
9997
+ const updatedTimeline = [...timeline, newEntry];
9998
+ try {
9999
+ const nodeToSave = {
10000
+ ...node,
10001
+ timeline: updatedTimeline
10002
+ };
10003
+ await onSave(nodeToSave, true);
10004
+ setTimeline(updatedTimeline);
10005
+ onDataUpdate(nodeToSave);
10006
+ setNoteText("");
10007
+ setIsNoteFormOpen(false);
10008
+ } catch (error) {
10009
+ console.error("Erro ao adicionar nota:", error);
10010
+ } finally {
10011
+ setIsSaving(false);
10012
+ }
10013
+ };
9895
10014
  const handleStatusChange = (newStatus) => {
9896
10015
  setStatus(newStatus);
9897
10016
  const newColor = QUEST_STATUS_COLORS3[newStatus];
@@ -10020,7 +10139,7 @@ function QuestDetailsPanel({
10020
10139
  const currentUsedTypes = customProps.map((p) => p.type).filter((t) => UNIQUE_PROP_TYPES.includes(t));
10021
10140
  const assigneeMember = viewMembers.find((m) => m.id === assigneeId);
10022
10141
  const isAssigneeUndefined = assigneeId && !assigneeMember;
10023
- return /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement(
10142
+ return /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement(
10024
10143
  "div",
10025
10144
  {
10026
10145
  className: `ui-overlay absolute group rounded-2xl border border-white/10 bg-slate-950/70 backdrop-blur-xl shadow-[0_20px_80px_rgba(0,0,0,0.6)] ring-1 ring-white/10 text-white overflow-hidden flex flex-col ${isResizing ? "transition-none" : "transition-all duration-300 ease-out"}`,
@@ -10033,11 +10152,11 @@ function QuestDetailsPanel({
10033
10152
  onContextMenu: swallow,
10034
10153
  onDoubleClick: swallow
10035
10154
  },
10036
- /* @__PURE__ */ React18.createElement("div", { onPointerDown: (e) => {
10155
+ /* @__PURE__ */ React19.createElement("div", { onPointerDown: (e) => {
10037
10156
  e.stopPropagation();
10038
10157
  handleResize(e);
10039
10158
  }, className: "absolute left-0 top-0 bottom-0 w-2 cursor-col-resize hover:bg-indigo-500/50 z-[2000] transition-colors", title: "Arraste para redimensionar" }),
10040
- isReadMode ? /* @__PURE__ */ React18.createElement(
10159
+ isReadMode ? /* @__PURE__ */ React19.createElement(
10041
10160
  DescriptionReadModePanel,
10042
10161
  {
10043
10162
  title: standardizedName || (node == null ? void 0 : node.name),
@@ -10058,7 +10177,7 @@ function QuestDetailsPanel({
10058
10177
  onImageClick: handleImageClickFromText,
10059
10178
  onSaveDescription: handleSaveDescriptionInline
10060
10179
  }
10061
- ) : /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement("div", { className: "h-[2px]", style: { background: `linear-gradient(to right, transparent, ${QUEST_STATUS_COLORS3[status]}, transparent)` } }), /* @__PURE__ */ React18.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ React18.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React18.createElement(FiTarget2, { className: "text-sky-400", size: 14 }), /* @__PURE__ */ React18.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Quest"), /* @__PURE__ */ React18.createElement("button", { onClick: handleCopyLink, className: `ml-1 p-1 transition-colors ${isLinkCopied ? "text-green-400" : "text-slate-400 hover:text-sky-400"}`, title: isLinkCopied ? "Link Copiado!" : "Copiar link para esta Quest" }, isLinkCopied ? /* @__PURE__ */ React18.createElement(FiCheck11, { size: 12 }) : /* @__PURE__ */ React18.createElement(FiLink6, { size: 12 }))), /* @__PURE__ */ React18.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, standardizedName || (node == null ? void 0 : node.name))), /* @__PURE__ */ React18.createElement("button", { onClick: handleCancel, disabled: isSaving, className: "w-9 h-9 flex-shrink-0 grid place-content-center rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-xl disabled:opacity-50", title: "Cancelar" }, "\xD7")), /* @__PURE__ */ React18.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 max-h-[68vh] custom-scrollbar" }, /* @__PURE__ */ React18.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React18.createElement("label", { className: "text-xs text-slate-300" }, "T\xEDtulo da Quest"), /* @__PURE__ */ React18.createElement(
10180
+ ) : /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement("div", { className: "h-[2px]", style: { background: `linear-gradient(to right, transparent, ${QUEST_STATUS_COLORS3[status]}, transparent)` } }), /* @__PURE__ */ React19.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ React19.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React19.createElement(FiTarget, { className: "text-sky-400", size: 14 }), /* @__PURE__ */ React19.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Quest"), /* @__PURE__ */ React19.createElement("button", { onClick: handleCopyLink, className: `ml-1 p-1 transition-colors ${isLinkCopied ? "text-green-400" : "text-slate-400 hover:text-sky-400"}`, title: isLinkCopied ? "Link Copiado!" : "Copiar link para esta Quest" }, isLinkCopied ? /* @__PURE__ */ React19.createElement(FiCheck, { size: 12 }) : /* @__PURE__ */ React19.createElement(FiLink, { size: 12 }))), /* @__PURE__ */ React19.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, standardizedName || (node == null ? void 0 : node.name))), /* @__PURE__ */ React19.createElement("button", { onClick: handleCancel, disabled: isSaving, className: "w-9 h-9 flex-shrink-0 grid place-content-center rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-xl disabled:opacity-50", title: "Cancelar" }, "\xD7")), /* @__PURE__ */ React19.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 max-h-[68vh] custom-scrollbar" }, /* @__PURE__ */ React19.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React19.createElement("label", { className: "text-xs text-slate-300" }, "T\xEDtulo da Quest"), /* @__PURE__ */ React19.createElement(
10062
10181
  "input",
10063
10182
  {
10064
10183
  type: "text",
@@ -10067,7 +10186,7 @@ function QuestDetailsPanel({
10067
10186
  readOnly: !canEdit,
10068
10187
  className: `w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 focus:outline-none ${canEdit ? "focus:ring-2 focus:ring-indigo-400/60" : "cursor-default text-slate-400"}`
10069
10188
  }
10070
- ), /* @__PURE__ */ React18.createElement("div", { className: "pt-1 flex items-center gap-1.5" }, /* @__PURE__ */ React18.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500 tracking-wider" }), /* @__PURE__ */ React18.createElement("p", { className: "text-xs text-indigo-300 font-medium truncate", title: standardizedName }, standardizedName))), /* @__PURE__ */ React18.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React18.createElement("label", { className: "text-xs text-slate-300" }, "Status da Quest"), /* @__PURE__ */ React18.createElement("div", { className: "relative" }, /* @__PURE__ */ React18.createElement(
10189
+ ), /* @__PURE__ */ React19.createElement("div", { className: "pt-1 flex items-center gap-1.5" }, /* @__PURE__ */ React19.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500 tracking-wider" }), /* @__PURE__ */ React19.createElement("p", { className: "text-xs text-indigo-300 font-medium truncate", title: standardizedName }, standardizedName))), /* @__PURE__ */ React19.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React19.createElement("label", { className: "text-xs text-slate-300" }, "Status da Quest"), /* @__PURE__ */ React19.createElement("div", { className: "relative" }, /* @__PURE__ */ React19.createElement(
10071
10190
  "button",
10072
10191
  {
10073
10192
  type: "button",
@@ -10075,9 +10194,9 @@ function QuestDetailsPanel({
10075
10194
  disabled: !canEdit,
10076
10195
  className: `w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 transition-colors flex items-center justify-between ${canEdit ? "hover:border-white/20 focus:ring-2 focus:ring-indigo-400/60 cursor-pointer" : "cursor-default opacity-80"}`
10077
10196
  },
10078
- /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React18.createElement("span", { className: "w-3 h-3 rounded-full shadow-[0_0_8px_rgba(0,0,0,0.5)]", style: { backgroundColor: QUEST_STATUS_COLORS3[status] } }), /* @__PURE__ */ React18.createElement("span", { className: "text-slate-200 font-medium" }, status)),
10079
- canEdit && /* @__PURE__ */ React18.createElement(FiChevronDown7, { className: `text-slate-400 transition-transform duration-200 ${isStatusDropdownOpen ? "rotate-180" : ""}` })
10080
- ), isStatusDropdownOpen && canEdit && /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement("div", { className: "fixed inset-0 z-40", onClick: () => setIsStatusDropdownOpen(false) }), /* @__PURE__ */ React18.createElement("ul", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-800 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden" }, Object.keys(QUEST_STATUS_COLORS3).map((s) => /* @__PURE__ */ React18.createElement(
10197
+ /* @__PURE__ */ React19.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React19.createElement("span", { className: "w-3 h-3 rounded-full shadow-[0_0_8px_rgba(0,0,0,0.5)]", style: { backgroundColor: QUEST_STATUS_COLORS3[status] } }), /* @__PURE__ */ React19.createElement("span", { className: "text-slate-200 font-medium" }, status)),
10198
+ canEdit && /* @__PURE__ */ React19.createElement(FiChevronDown, { className: `text-slate-400 transition-transform duration-200 ${isStatusDropdownOpen ? "rotate-180" : ""}` })
10199
+ ), isStatusDropdownOpen && canEdit && /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement("div", { className: "fixed inset-0 z-40", onClick: () => setIsStatusDropdownOpen(false) }), /* @__PURE__ */ React19.createElement("ul", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-800 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden" }, Object.keys(QUEST_STATUS_COLORS3).map((s) => /* @__PURE__ */ React19.createElement(
10081
10200
  "li",
10082
10201
  {
10083
10202
  key: s,
@@ -10087,21 +10206,21 @@ function QuestDetailsPanel({
10087
10206
  },
10088
10207
  className: `px-3 py-2.5 text-sm cursor-pointer transition-colors flex items-center gap-2 ${status === s ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-white/5 hover:text-white"}`
10089
10208
  },
10090
- /* @__PURE__ */ React18.createElement("span", { className: "w-3 h-3 rounded-full", style: { backgroundColor: QUEST_STATUS_COLORS3[s] } }),
10209
+ /* @__PURE__ */ React19.createElement("span", { className: "w-3 h-3 rounded-full", style: { backgroundColor: QUEST_STATUS_COLORS3[s] } }),
10091
10210
  s
10092
- )))))), /* @__PURE__ */ React18.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React18.createElement("label", { className: "text-xs text-slate-300" }, "Assignee (Respons\xE1vel)"), canEdit ? /* @__PURE__ */ React18.createElement("div", { className: "relative" }, /* @__PURE__ */ React18.createElement(
10211
+ )))))), /* @__PURE__ */ React19.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React19.createElement("label", { className: "text-xs text-slate-300" }, "Assignee (Respons\xE1vel)"), canEdit ? /* @__PURE__ */ React19.createElement("div", { className: "relative" }, /* @__PURE__ */ React19.createElement(
10093
10212
  "button",
10094
10213
  {
10095
10214
  type: "button",
10096
10215
  onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
10097
10216
  className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 hover:border-white/20 focus:outline-none focus:ring-2 focus:ring-indigo-400/60 transition-colors flex items-center justify-between"
10098
10217
  },
10099
- /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React18.createElement(FiUser3, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ React18.createElement("span", { className: "text-slate-200 font-medium" }, isAssigneeUndefined ? "Undefined" : (assigneeMember == null ? void 0 : assigneeMember.name) || (assigneeMember == null ? void 0 : assigneeMember.email) || "Nenhum")),
10100
- /* @__PURE__ */ React18.createElement(FiChevronDown7, { className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}` })
10101
- ), isAssigneeDropdownOpen && /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
10218
+ /* @__PURE__ */ React19.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React19.createElement(FiUser, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ React19.createElement("span", { className: "text-slate-200 font-medium" }, isAssigneeUndefined ? "Undefined" : (assigneeMember == null ? void 0 : assigneeMember.name) || (assigneeMember == null ? void 0 : assigneeMember.email) || "Nenhum")),
10219
+ /* @__PURE__ */ React19.createElement(FiChevronDown, { className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}` })
10220
+ ), isAssigneeDropdownOpen && /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
10102
10221
  setIsAssigneeDropdownOpen(false);
10103
10222
  setAssigneeSearchQuery("");
10104
- } }), /* @__PURE__ */ React18.createElement("div", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-900 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden flex flex-col" }, /* @__PURE__ */ React18.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ React18.createElement(FiSearch6, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ React18.createElement(
10223
+ } }), /* @__PURE__ */ React19.createElement("div", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-900 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden flex flex-col" }, /* @__PURE__ */ React19.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ React19.createElement(FiSearch, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ React19.createElement(
10105
10224
  "input",
10106
10225
  {
10107
10226
  type: "text",
@@ -10112,7 +10231,7 @@ function QuestDetailsPanel({
10112
10231
  className: "bg-transparent border-none outline-none text-xs text-white placeholder-slate-500 w-full",
10113
10232
  onClick: (e) => e.stopPropagation()
10114
10233
  }
10115
- )), /* @__PURE__ */ React18.createElement("ul", { className: "max-h-48 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ React18.createElement(
10234
+ )), /* @__PURE__ */ React19.createElement("ul", { className: "max-h-48 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ React19.createElement(
10116
10235
  "li",
10117
10236
  {
10118
10237
  onClick: () => {
@@ -10132,7 +10251,7 @@ function QuestDetailsPanel({
10132
10251
  className: `px-3 py-2.5 text-sm cursor-pointer transition-colors flex items-center gap-2 ${!assigneeId ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-white/5 hover:text-white"}`
10133
10252
  },
10134
10253
  "Nenhum"
10135
- ), isAssigneeUndefined && /* @__PURE__ */ React18.createElement(
10254
+ ), isAssigneeUndefined && /* @__PURE__ */ React19.createElement(
10136
10255
  "li",
10137
10256
  {
10138
10257
  onClick: () => {
@@ -10145,7 +10264,7 @@ function QuestDetailsPanel({
10145
10264
  ), viewMembers.filter((member) => {
10146
10265
  const search = assigneeSearchQuery.toLowerCase();
10147
10266
  return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
10148
- }).map((member) => /* @__PURE__ */ React18.createElement(
10267
+ }).map((member) => /* @__PURE__ */ React19.createElement(
10149
10268
  "li",
10150
10269
  {
10151
10270
  key: member.id,
@@ -10169,7 +10288,7 @@ function QuestDetailsPanel({
10169
10288
  )), viewMembers.filter((member) => {
10170
10289
  const search = assigneeSearchQuery.toLowerCase();
10171
10290
  return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
10172
- }).length === 0 && assigneeSearchQuery && /* @__PURE__ */ React18.createElement("li", { className: "px-3 py-4 text-xs text-slate-500 text-center italic" }, "Nenhum membro encontrado"))))) : /* @__PURE__ */ React18.createElement("div", { className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 text-slate-400 flex items-center gap-2" }, /* @__PURE__ */ React18.createElement(FiUser3, { className: "opacity-50", size: 14 }), assigneeId ? assigneeMember ? assigneeMember.name || assigneeMember.email : "Undefined" : "Nenhum")), /* @__PURE__ */ React18.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React18.createElement(
10291
+ }).length === 0 && assigneeSearchQuery && /* @__PURE__ */ React19.createElement("li", { className: "px-3 py-4 text-xs text-slate-500 text-center italic" }, "Nenhum membro encontrado"))))) : /* @__PURE__ */ React19.createElement("div", { className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 text-slate-400 flex items-center gap-2" }, /* @__PURE__ */ React19.createElement(FiUser, { className: "opacity-50", size: 14 }), assigneeId ? assigneeMember ? assigneeMember.name || assigneeMember.email : "Undefined" : "Nenhum")), /* @__PURE__ */ React19.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React19.createElement(
10173
10292
  QuestReviewStackEditor,
10174
10293
  {
10175
10294
  reviewStack,
@@ -10180,19 +10299,19 @@ function QuestDetailsPanel({
10180
10299
  viewMembers,
10181
10300
  readOnly: !canEdit
10182
10301
  }
10183
- )), status === "Review" && canEdit && /* @__PURE__ */ React18.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React18.createElement("div", { className: "bg-slate-900/40 rounded-xl p-4 border border-white/5 space-y-3" }, /* @__PURE__ */ React18.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React18.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "A\xE7\xF5es de Review"), /* @__PURE__ */ React18.createElement("span", { className: "px-2 py-0.5 rounded-full bg-purple-500/10 text-purple-300 text-[10px] font-medium border border-purple-500/20" }, "Em Revis\xE3o")), /* @__PURE__ */ React18.createElement("p", { className: "text-xs text-slate-400 leading-relaxed" }, "Selecione o respons\xE1vel abaixo para retornar o ciclo para opera\xE7\xE3o."), /* @__PURE__ */ React18.createElement("div", { className: "space-y-1.5 flex flex-col" }, /* @__PURE__ */ React18.createElement("label", { className: "text-[10px] text-slate-400 font-medium ml-0.5" }, "Retornar para:"), /* @__PURE__ */ React18.createElement("div", { className: "relative" }, /* @__PURE__ */ React18.createElement(
10302
+ )), status === "Review" && canEdit && /* @__PURE__ */ React19.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React19.createElement("div", { className: "bg-slate-900/40 rounded-xl p-4 border border-white/5 space-y-3" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React19.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "A\xE7\xF5es de Review"), /* @__PURE__ */ React19.createElement("span", { className: "px-2 py-0.5 rounded-full bg-purple-500/10 text-purple-300 text-[10px] font-medium border border-purple-500/20" }, "Em Revis\xE3o")), /* @__PURE__ */ React19.createElement("p", { className: "text-xs text-slate-400 leading-relaxed" }, "Selecione o respons\xE1vel abaixo para retornar o ciclo para opera\xE7\xE3o."), /* @__PURE__ */ React19.createElement("div", { className: "space-y-1.5 flex flex-col" }, /* @__PURE__ */ React19.createElement("label", { className: "text-[10px] text-slate-400 font-medium ml-0.5" }, "Retornar para:"), /* @__PURE__ */ React19.createElement("div", { className: "relative" }, /* @__PURE__ */ React19.createElement(
10184
10303
  "button",
10185
10304
  {
10186
10305
  type: "button",
10187
10306
  onClick: () => setIsReturnDropdownOpen(!isReturnDropdownOpen),
10188
10307
  className: "w-full bg-slate-800/80 p-2 text-xs rounded-lg border border-white/10 hover:border-white/20 focus:outline-none focus:ring-1 focus:ring-purple-400/50 transition-colors flex items-center justify-between"
10189
10308
  },
10190
- /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React18.createElement(FiUser3, { className: "text-slate-400", size: 12 }), /* @__PURE__ */ React18.createElement("span", { className: "text-slate-200 font-medium" }, ((_b = viewMembers.find((m) => String(m.id) === String(returnAssigneeId))) == null ? void 0 : _b.name) || "Selecionar respons\xE1vel...")),
10191
- /* @__PURE__ */ React18.createElement(FiChevronDown7, { className: `text-slate-400 transition-transform duration-200 ${isReturnDropdownOpen ? "rotate-180" : ""}`, size: 14 })
10192
- ), isReturnDropdownOpen && /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
10309
+ /* @__PURE__ */ React19.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React19.createElement(FiUser, { className: "text-slate-400", size: 12 }), /* @__PURE__ */ React19.createElement("span", { className: "text-slate-200 font-medium" }, ((_b = viewMembers.find((m) => String(m.id) === String(returnAssigneeId))) == null ? void 0 : _b.name) || "Selecionar respons\xE1vel...")),
10310
+ /* @__PURE__ */ React19.createElement(FiChevronDown, { className: `text-slate-400 transition-transform duration-200 ${isReturnDropdownOpen ? "rotate-180" : ""}`, size: 14 })
10311
+ ), isReturnDropdownOpen && /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
10193
10312
  setIsReturnDropdownOpen(false);
10194
10313
  setReturnSearchQuery("");
10195
- } }), /* @__PURE__ */ React18.createElement("div", { className: "absolute bottom-full left-0 mb-1.5 w-full bg-slate-900 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden flex flex-col" }, /* @__PURE__ */ React18.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ React18.createElement(FiSearch6, { className: "text-slate-500", size: 12 }), /* @__PURE__ */ React18.createElement(
10314
+ } }), /* @__PURE__ */ React19.createElement("div", { className: "absolute bottom-full left-0 mb-1.5 w-full bg-slate-900 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden flex flex-col" }, /* @__PURE__ */ React19.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ React19.createElement(FiSearch, { className: "text-slate-500", size: 12 }), /* @__PURE__ */ React19.createElement(
10196
10315
  "input",
10197
10316
  {
10198
10317
  type: "text",
@@ -10203,10 +10322,10 @@ function QuestDetailsPanel({
10203
10322
  className: "bg-transparent border-none outline-none text-[10px] text-white placeholder-slate-500 w-full",
10204
10323
  onClick: (e) => e.stopPropagation()
10205
10324
  }
10206
- )), /* @__PURE__ */ React18.createElement("ul", { className: "max-h-32 overflow-y-auto custom-scrollbar" }, viewMembers.filter((member) => {
10325
+ )), /* @__PURE__ */ React19.createElement("ul", { className: "max-h-32 overflow-y-auto custom-scrollbar" }, viewMembers.filter((member) => {
10207
10326
  const search = returnSearchQuery.toLowerCase();
10208
10327
  return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
10209
- }).map((member) => /* @__PURE__ */ React18.createElement(
10328
+ }).map((member) => /* @__PURE__ */ React19.createElement(
10210
10329
  "li",
10211
10330
  {
10212
10331
  key: member.id,
@@ -10221,7 +10340,7 @@ function QuestDetailsPanel({
10221
10340
  )), viewMembers.filter((member) => {
10222
10341
  const search = returnSearchQuery.toLowerCase();
10223
10342
  return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
10224
- }).length === 0 && /* @__PURE__ */ React18.createElement("li", { className: "px-3 py-4 text-[10px] text-slate-500 text-center italic" }, "Nenhum membro encontrado")))))), /* @__PURE__ */ React18.createElement(
10343
+ }).length === 0 && /* @__PURE__ */ React19.createElement("li", { className: "px-3 py-4 text-[10px] text-slate-500 text-center italic" }, "Nenhum membro encontrado")))))), /* @__PURE__ */ React19.createElement(
10225
10344
  "button",
10226
10345
  {
10227
10346
  type: "button",
@@ -10229,16 +10348,45 @@ function QuestDetailsPanel({
10229
10348
  disabled: isSaving || !returnAssigneeId,
10230
10349
  className: `w-full h-10 flex items-center justify-center gap-2 rounded-lg text-xs font-semibold border transition-all active:scale-[0.98] disabled:opacity-40 disabled:grayscale-[0.5] disabled:cursor-not-allowed ${!returnAssigneeId ? "bg-slate-800 text-slate-500 border-white/5" : "bg-slate-800 hover:bg-slate-700 text-purple-300 border-purple-500/20 hover:border-purple-500/40"}`
10231
10350
  },
10232
- /* @__PURE__ */ React18.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React18.createElement("path", { d: "M12 19V5M5 12l7 7 7-7" })),
10351
+ /* @__PURE__ */ React19.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React19.createElement("path", { d: "M12 19V5M5 12l7 7 7-7" })),
10233
10352
  "Retornar para Opera\xE7\xE3o"
10234
- ))), /* @__PURE__ */ React18.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React18.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React18.createElement("div", { className: "relative group min-h-[60px] bg-slate-800/40 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React18.createElement(DescriptionDisplay, { description, savedSections: existingSections, availableNodes, availableAncestries, onOpenReference, onMentionClick, onImageClick: handleImageClickFromText, onSaveDescription: handleSaveDescriptionInline }), /* @__PURE__ */ React18.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ React18.createElement("button", { type: "button", onClick: () => setIsReadMode(true), className: `p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors ${canEdit ? "border-r border-white/5" : ""}`, title: "Modo de Leitura" }, /* @__PURE__ */ React18.createElement(FiBookOpen4, { size: 14 })), canEdit && /* @__PURE__ */ React18.createElement("button", { type: "button", onClick: () => setIsDescriptionModalOpen(true), className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors", title: "Editar descri\xE7\xE3o (Modo de Escrita)" }, /* @__PURE__ */ React18.createElement(FiEdit28, { size: 14 }))), canEdit && !description && /* @__PURE__ */ React18.createElement("div", { onClick: () => setIsDescriptionModalOpen(true), className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text" }, "Adicionar descri\xE7\xE3o..."))), /* @__PURE__ */ React18.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React18.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React18.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), canEdit && /* @__PURE__ */ React18.createElement("button", { type: "button", onClick: handleAddProp, className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors" }, /* @__PURE__ */ React18.createElement(FiPlus8, { size: 14 }), " Adicionar")), /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React18.createElement(CustomPropertyDisplay, { key: prop.id, prop, onUpdate: canEdit ? (updatedProp) => handleUpdateProp(idx, updatedProp) : void 0, onRemove: canEdit ? () => handleRemoveProp(idx) : void 0, onOpenImageViewer, unavailableTypes: currentUsedTypes.filter((t) => t !== prop.type), isTextureMode: false, onUploadFile: canEdit ? onUploadFile : void 0, readOnly: !canEdit })), /* @__PURE__ */ React18.createElement("div", { ref: propsEndRef }))), timeline && timeline.length > 0 && /* @__PURE__ */ React18.createElement("div", { className: "pt-4 pb-2 border-t border-white/10 mt-4" }, /* @__PURE__ */ React18.createElement("h3", { className: "text-xs text-slate-400 font-medium uppercase tracking-wider mb-3" }, "Timeline & Hist\xF3rico"), /* @__PURE__ */ React18.createElement("div", { className: "relative border-l border-white/10 ml-2.5 space-y-4" }, timeline.slice().sort((a, b) => a.timestamp - b.timestamp).map((event, idx) => {
10235
- const dateObj = new Date(event.timestamp);
10236
- const dateString = dateObj.toLocaleDateString("pt-BR", { day: "2-digit", month: "short", hour: "2-digit", minute: "2-digit" });
10237
- return /* @__PURE__ */ React18.createElement("div", { key: idx, className: "relative pl-4 flex flex-col gap-0.5" }, /* @__PURE__ */ React18.createElement("div", { className: "absolute left-[-4.5px] top-1.5 w-2 h-2 rounded-full bg-slate-400/50 border-[1.5px] border-slate-900" }), /* @__PURE__ */ React18.createElement("p", { className: "text-[11px] text-slate-300" }, event.description), /* @__PURE__ */ React18.createElement("span", { className: "text-[9px] text-slate-500 font-mono tracking-tighter" }, dateString));
10238
- }))), /* @__PURE__ */ React18.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React18.createElement("label", { className: "text-xs text-slate-300" }, "Tamanho no Node (Size)"), /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-5" }, ["small", "medium", "large"].map((s) => {
10353
+ ))), /* @__PURE__ */ React19.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React19.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React19.createElement("div", { className: "relative group min-h-[60px] bg-slate-800/40 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React19.createElement(DescriptionDisplay, { description, savedSections: existingSections, availableNodes, availableAncestries, onOpenReference, onMentionClick, onImageClick: handleImageClickFromText, onSaveDescription: handleSaveDescriptionInline }), /* @__PURE__ */ React19.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ React19.createElement("button", { type: "button", onClick: () => setIsReadMode(true), className: `p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors ${canEdit ? "border-r border-white/5" : ""}`, title: "Modo de Leitura" }, /* @__PURE__ */ React19.createElement(FiBookOpen, { size: 14 })), canEdit && /* @__PURE__ */ React19.createElement("button", { type: "button", onClick: () => setIsDescriptionModalOpen(true), className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors", title: "Editar descri\xE7\xE3o (Modo de Escrita)" }, /* @__PURE__ */ React19.createElement(FiEdit2, { size: 14 }))), canEdit && !description && /* @__PURE__ */ React19.createElement("div", { onClick: () => setIsDescriptionModalOpen(true), className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text" }, "Adicionar descri\xE7\xE3o..."))), /* @__PURE__ */ React19.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React19.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), canEdit && /* @__PURE__ */ React19.createElement("button", { type: "button", onClick: handleAddProp, className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors" }, /* @__PURE__ */ React19.createElement(FiPlus, { size: 14 }), " Adicionar")), /* @__PURE__ */ React19.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React19.createElement(CustomPropertyDisplay, { key: prop.id, prop, onUpdate: canEdit ? (updatedProp) => handleUpdateProp(idx, updatedProp) : void 0, onRemove: canEdit ? () => handleRemoveProp(idx) : void 0, onOpenImageViewer, unavailableTypes: currentUsedTypes.filter((t) => t !== prop.type), isTextureMode: false, onUploadFile: canEdit ? onUploadFile : void 0, readOnly: !canEdit })), /* @__PURE__ */ React19.createElement("div", { ref: propsEndRef }))), /* @__PURE__ */ React19.createElement("div", { className: "pt-6 border-t border-white/10 mt-6" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center justify-between mb-4" }, /* @__PURE__ */ React19.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "Hist\xF3rico & Notas"), /* @__PURE__ */ React19.createElement(
10354
+ "button",
10355
+ {
10356
+ type: "button",
10357
+ onClick: () => setIsNoteFormOpen(!isNoteFormOpen),
10358
+ className: "flex items-center gap-1.5 px-2 py-1 text-[10px] rounded-md bg-white/5 hover:bg-white/10 border border-white/10 transition-colors text-slate-300"
10359
+ },
10360
+ isNoteFormOpen ? /* @__PURE__ */ React19.createElement(FiX, { size: 12 }) : /* @__PURE__ */ React19.createElement(FiPlus, { size: 12 }),
10361
+ isNoteFormOpen ? "Cancelar" : "Nova Nota"
10362
+ )), isNoteFormOpen && /* @__PURE__ */ React19.createElement("div", { className: "mb-6 p-4 rounded-xl bg-white/5 border border-white/5 space-y-3 animate-in fade-in slide-in-from-top-2" }, /* @__PURE__ */ React19.createElement(
10363
+ "textarea",
10364
+ {
10365
+ value: noteText,
10366
+ onChange: (e) => setNoteText(e.target.value),
10367
+ placeholder: "Escreva uma observa\xE7\xE3o no hist\xF3rico...",
10368
+ className: "w-full bg-slate-900/50 p-3 text-sm rounded-lg border border-white/10 focus:outline-none focus:ring-1 focus:ring-indigo-500/50 min-h-[80px] resize-none"
10369
+ }
10370
+ ), /* @__PURE__ */ React19.createElement("div", { className: "flex justify-end gap-2" }, /* @__PURE__ */ React19.createElement(
10371
+ "button",
10372
+ {
10373
+ type: "button",
10374
+ onClick: handleAddTimelineNote,
10375
+ disabled: !noteText.trim() || isSaving,
10376
+ className: "px-3 py-1.5 rounded-lg bg-indigo-600 hover:bg-indigo-500 text-white text-xs font-semibold transition-colors disabled:opacity-50"
10377
+ },
10378
+ "Adicionar ao Hist\xF3rico"
10379
+ ))), /* @__PURE__ */ React19.createElement(
10380
+ QuestTimeline,
10381
+ {
10382
+ timeline,
10383
+ viewMembers,
10384
+ onOpenImageViewer
10385
+ }
10386
+ )), /* @__PURE__ */ React19.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React19.createElement("label", { className: "text-xs text-slate-300" }, "Tamanho no Node (Size)"), /* @__PURE__ */ React19.createElement("div", { className: "flex items-center gap-5" }, ["small", "medium", "large"].map((s) => {
10239
10387
  const isSelected = size === s;
10240
- return /* @__PURE__ */ React18.createElement("button", { key: s, type: "button", onClick: () => canEdit && handleSizeChange(s), className: `flex items-center gap-2 group focus:outline-none ${canEdit ? "cursor-pointer" : "cursor-default opacity-80"}` }, /* @__PURE__ */ React18.createElement("div", { className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${isSelected ? "bg-indigo-500 border-indigo-500 shadow-[0_0_10px_rgba(99,102,241,0.4)]" : "border-slate-600 bg-transparent " + (canEdit ? "group-hover:border-slate-500" : "")}` }, isSelected && /* @__PURE__ */ React18.createElement(FiCheck11, { size: 12, className: "text-white" })), /* @__PURE__ */ React18.createElement("span", { className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 " + (canEdit ? "group-hover:text-slate-300" : "")}` }, s));
10241
- }))), /* @__PURE__ */ React18.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React18.createElement("label", { className: "text-xs text-slate-300" }, "Tipos Adicionais"), /* @__PURE__ */ React18.createElement("div", { className: `relative w-full bg-slate-800/70 p-1.5 min-h-[42px] flex flex-wrap gap-1.5 rounded-lg border border-white/10 ${canEdit ? "focus-within:ring-2 focus-within:ring-indigo-400/60" : ""} transition-all` }, types.map((t, index) => /* @__PURE__ */ React18.createElement("span", { key: index, className: `flex items-center gap-1 px-1.5 py-0.5 rounded-md text-xs font-medium border ${t === "quest" ? "bg-sky-500/20 text-sky-200 border-sky-500/30" : "bg-indigo-500/30 text-indigo-100 border-indigo-500/20"}` }, t, canEdit && t !== "quest" && /* @__PURE__ */ React18.createElement("button", { type: "button", onClick: () => handleRemoveType(index), className: "hover:text-white transition-colors" }, /* @__PURE__ */ React18.createElement(FiX7, { size: 12 })))), canEdit && /* @__PURE__ */ React18.createElement(
10388
+ return /* @__PURE__ */ React19.createElement("button", { key: s, type: "button", onClick: () => canEdit && handleSizeChange(s), className: `flex items-center gap-2 group focus:outline-none ${canEdit ? "cursor-pointer" : "cursor-default opacity-80"}` }, /* @__PURE__ */ React19.createElement("div", { className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${isSelected ? "bg-indigo-500 border-indigo-500 shadow-[0_0_10px_rgba(99,102,241,0.4)]" : "border-slate-600 bg-transparent " + (canEdit ? "group-hover:border-slate-500" : "")}` }, isSelected && /* @__PURE__ */ React19.createElement(FiCheck, { size: 12, className: "text-white" })), /* @__PURE__ */ React19.createElement("span", { className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 " + (canEdit ? "group-hover:text-slate-300" : "")}` }, s));
10389
+ }))), /* @__PURE__ */ React19.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React19.createElement("label", { className: "text-xs text-slate-300" }, "Tipos Adicionais"), /* @__PURE__ */ React19.createElement("div", { className: `relative w-full bg-slate-800/70 p-1.5 min-h-[42px] flex flex-wrap gap-1.5 rounded-lg border border-white/10 ${canEdit ? "focus-within:ring-2 focus-within:ring-indigo-400/60" : ""} transition-all` }, types.map((t, index) => /* @__PURE__ */ React19.createElement("span", { key: index, className: `flex items-center gap-1 px-1.5 py-0.5 rounded-md text-xs font-medium border ${t === "quest" ? "bg-sky-500/20 text-sky-200 border-sky-500/30" : "bg-indigo-500/30 text-indigo-100 border-indigo-500/20"}` }, t, canEdit && t !== "quest" && /* @__PURE__ */ React19.createElement("button", { type: "button", onClick: () => handleRemoveType(index), className: "hover:text-white transition-colors" }, /* @__PURE__ */ React19.createElement(FiX, { size: 12 })))), canEdit && /* @__PURE__ */ React19.createElement(
10242
10390
  "input",
10243
10391
  {
10244
10392
  type: "text",
@@ -10259,11 +10407,11 @@ function QuestDetailsPanel({
10259
10407
  placeholder: "",
10260
10408
  autoComplete: "off"
10261
10409
  }
10262
- ), canEdit && showTypeSuggestions && filteredTypes.length > 0 && /* @__PURE__ */ React18.createElement("ul", { className: "custom-scrollbar absolute top-full left-0 z-10 w-full mt-1 max-h-40 overflow-y-auto rounded-lg bg-slate-800 border border-white/10 shadow-lg" }, filteredTypes.map((suggestedType, index) => /* @__PURE__ */ React18.createElement("li", { key: index, className: "px-3 py-2 text-sm text-slate-200 cursor-pointer hover:bg-indigo-600/50", onMouseDown: (e) => {
10410
+ ), canEdit && showTypeSuggestions && filteredTypes.length > 0 && /* @__PURE__ */ React19.createElement("ul", { className: "custom-scrollbar absolute top-full left-0 z-10 w-full mt-1 max-h-40 overflow-y-auto rounded-lg bg-slate-800 border border-white/10 shadow-lg" }, filteredTypes.map((suggestedType, index) => /* @__PURE__ */ React19.createElement("li", { key: index, className: "px-3 py-2 text-sm text-slate-200 cursor-pointer hover:bg-indigo-600/50", onMouseDown: (e) => {
10263
10411
  e.preventDefault();
10264
10412
  handleAddType(suggestedType);
10265
- } }, suggestedType))))), currentDatasetName && /* @__PURE__ */ React18.createElement("div", { className: "pt-3 mt-4 border-t border-white/10 flex items-center justify-end gap-2 text-xs text-slate-400" }, /* @__PURE__ */ React18.createElement("span", { className: "truncate text-right" }, /* @__PURE__ */ React18.createElement("span", { className: "text-slate-200 font-medium" }, currentDatasetName)))), /* @__PURE__ */ React18.createElement("div", { className: "sticky bottom-0 z-10 bg-gradient-to-t from-slate-950/80 via-slate-950/50 to-transparent px-6 py-4 border-t border-white/10 flex justify-end gap-3" }, /* @__PURE__ */ React18.createElement("button", { onClick: handleCancel, disabled: isSaving, className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm disabled:opacity-50" }, canEdit ? "Cancelar" : "Fechar"), canEdit && /* @__PURE__ */ React18.createElement("button", { onClick: () => handleSave(false), disabled: isSaving, className: `px-4 py-2 rounded-lg transition-all font-semibold text-sm shadow-[0_8px_24px_rgba(99,102,241,0.35)] flex items-center gap-2 ${isSaving ? "bg-slate-700 text-slate-300 cursor-wait" : "bg-gradient-to-tr from-indigo-600 to-indigo-400 hover:from-indigo-500 hover:to-indigo-300 text-white"}` }, isSaving && /* @__PURE__ */ React18.createElement(FiLoader3, { className: "animate-spin" }), isSaving ? "Salvando..." : "Salvar Quest")))
10266
- ), isDescriptionModalOpen && canEdit && /* @__PURE__ */ React18.createElement(
10413
+ } }, suggestedType))))), currentDatasetName && /* @__PURE__ */ React19.createElement("div", { className: "pt-3 mt-4 border-t border-white/10 flex items-center justify-end gap-2 text-xs text-slate-400" }, /* @__PURE__ */ React19.createElement("span", { className: "truncate text-right" }, /* @__PURE__ */ React19.createElement("span", { className: "text-slate-200 font-medium" }, currentDatasetName)))), /* @__PURE__ */ React19.createElement("div", { className: "sticky bottom-0 z-10 bg-gradient-to-t from-slate-950/80 via-slate-950/50 to-transparent px-6 py-4 border-t border-white/10 flex justify-end gap-3" }, /* @__PURE__ */ React19.createElement("button", { onClick: handleCancel, disabled: isSaving, className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm disabled:opacity-50" }, canEdit ? "Cancelar" : "Fechar"), canEdit && /* @__PURE__ */ React19.createElement("button", { onClick: () => handleSave(false), disabled: isSaving, className: `px-4 py-2 rounded-lg transition-all font-semibold text-sm shadow-[0_8px_24px_rgba(99,102,241,0.35)] flex items-center gap-2 ${isSaving ? "bg-slate-700 text-slate-300 cursor-wait" : "bg-gradient-to-tr from-indigo-600 to-indigo-400 hover:from-indigo-500 hover:to-indigo-300 text-white"}` }, isSaving && /* @__PURE__ */ React19.createElement(FiLoader, { className: "animate-spin" }), isSaving ? "Salvando..." : "Salvar Quest")))
10414
+ ), isDescriptionModalOpen && canEdit && /* @__PURE__ */ React19.createElement(
10267
10415
  DescriptionEditModal,
10268
10416
  {
10269
10417
  isOpen: isDescriptionModalOpen,
@@ -10283,7 +10431,7 @@ function QuestDetailsPanel({
10283
10431
  }
10284
10432
 
10285
10433
  // src/components/MultiNodeContextMenu.jsx
10286
- import React19, { useLayoutEffect as useLayoutEffect3, useRef as useRef15, useState as useState20, useEffect as useEffect17 } from "react";
10434
+ import React20, { useLayoutEffect as useLayoutEffect3, useRef as useRef15, useState as useState20, useEffect as useEffect17 } from "react";
10287
10435
  function MultiNodeContextMenu({
10288
10436
  data,
10289
10437
  userRole,
@@ -10325,7 +10473,7 @@ function MultiNodeContextMenu({
10325
10473
  const baseButtonClass = "w-full flex items-center gap-2.5 px-2 py-1.5 text-left text-sm rounded-md hover:bg-indigo-500/20 text-slate-200 hover:text-white transition-colors duration-150 truncate";
10326
10474
  const deleteButtonClass = "w-full flex items-center gap-2.5 px-2 py-1.5 text-left text-sm rounded-md hover:bg-red-500/25 text-red-400 hover:text-red-300 transition-colors duration-150 truncate";
10327
10475
  const nodeCount = data.nodeIds.size;
10328
- return /* @__PURE__ */ React19.createElement(
10476
+ return /* @__PURE__ */ React20.createElement(
10329
10477
  "div",
10330
10478
  {
10331
10479
  ref: menuRef,
@@ -10339,27 +10487,27 @@ function MultiNodeContextMenu({
10339
10487
  onContextMenu: swallow,
10340
10488
  onDoubleClick: swallow
10341
10489
  },
10342
- /* @__PURE__ */ React19.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }),
10343
- /* @__PURE__ */ React19.createElement("div", { className: "p-1.5" }, isConfirmingDelete ? /* @__PURE__ */ React19.createElement("div", { className: "flex flex-col gap-3 p-2" }, /* @__PURE__ */ React19.createElement("div", { className: "flex flex-col items-center text-center gap-2" }, /* @__PURE__ */ React19.createElement("div", { className: "w-10 h-10 rounded-full bg-red-500/20 flex items-center justify-center text-red-400 mb-1" }, /* @__PURE__ */ React19.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React19.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React19.createElement("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" }))), /* @__PURE__ */ React19.createElement("p", { className: "text-sm text-slate-200" }, "Excluir ", /* @__PURE__ */ React19.createElement("strong", null, nodeCount, " Nodes"), "?"), /* @__PURE__ */ React19.createElement("p", { className: "text-[11px] text-slate-400 leading-tight" }, "Esta a\xE7\xE3o \xE9 irrevers\xEDvel. Todas as conex\xF5es associadas a eles ser\xE3o apagadas.")), /* @__PURE__ */ React19.createElement("div", { className: "flex gap-2 mt-1" }, /* @__PURE__ */ React19.createElement(
10490
+ /* @__PURE__ */ React20.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }),
10491
+ /* @__PURE__ */ React20.createElement("div", { className: "p-1.5" }, isConfirmingDelete ? /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-3 p-2" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col items-center text-center gap-2" }, /* @__PURE__ */ React20.createElement("div", { className: "w-10 h-10 rounded-full bg-red-500/20 flex items-center justify-center text-red-400 mb-1" }, /* @__PURE__ */ React20.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React20.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React20.createElement("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" }))), /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-slate-200" }, "Excluir ", /* @__PURE__ */ React20.createElement("strong", null, nodeCount, " Nodes"), "?"), /* @__PURE__ */ React20.createElement("p", { className: "text-[11px] text-slate-400 leading-tight" }, "Esta a\xE7\xE3o \xE9 irrevers\xEDvel. Todas as conex\xF5es associadas a eles ser\xE3o apagadas.")), /* @__PURE__ */ React20.createElement("div", { className: "flex gap-2 mt-1" }, /* @__PURE__ */ React20.createElement(
10344
10492
  "button",
10345
10493
  {
10346
10494
  onClick: () => setIsConfirmingDelete(false),
10347
10495
  className: "flex-1 px-2 py-2 text-xs font-medium bg-white/10 hover:bg-white/20 rounded-md text-white transition-colors"
10348
10496
  },
10349
10497
  "Cancelar"
10350
- ), /* @__PURE__ */ React19.createElement(
10498
+ ), /* @__PURE__ */ React20.createElement(
10351
10499
  "button",
10352
10500
  {
10353
10501
  onClick: () => onDeleteNodes(data.nodeIds),
10354
10502
  className: "flex-1 px-2 py-2 text-xs font-medium bg-red-500 hover:bg-red-600 rounded-md text-white transition-colors"
10355
10503
  },
10356
10504
  "Excluir"
10357
- ))) : /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center gap-2 px-2 pt-1 pb-2" }, /* @__PURE__ */ React19.createElement("span", { className: "inline-flex h-2 w-2 rounded-full bg-indigo-400/80 shadow-[0_0_12px_1px_rgba(99,102,241,0.5)]" }), /* @__PURE__ */ React19.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "A\xE7\xF5es em Grupo (", nodeCount, " Nodes)")), /* @__PURE__ */ React19.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ React19.createElement("button", { onClick: () => onDismissNodes(data.nodeIds), className: baseButtonClass, title: "Remover da visualiza\xE7\xE3o" }, /* @__PURE__ */ React19.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React19.createElement("path", { d: "M9.88 9.88a3 3 0 1 0 4.24 4.24" }), /* @__PURE__ */ React19.createElement("path", { d: "M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68" }), /* @__PURE__ */ React19.createElement("path", { d: "M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61" }), /* @__PURE__ */ React19.createElement("line", { x1: "2", y1: "2", x2: "22", y2: "22" })), /* @__PURE__ */ React19.createElement("span", null, "Dismiss (", nodeCount, ")")), /* @__PURE__ */ React19.createElement("button", { onClick: () => onDismissOtherNodes(data.nodeIds), className: baseButtonClass, title: "Remover outros da visualiza\xE7\xE3o" }, /* @__PURE__ */ React19.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React19.createElement("circle", { cx: "12", cy: "12", r: "3" }), /* @__PURE__ */ React19.createElement("path", { d: "M3 7V5a2 2 0 0 1 2-2h2" }), /* @__PURE__ */ React19.createElement("path", { d: "M17 3h2a2 2 0 0 1 2 2v2" }), /* @__PURE__ */ React19.createElement("path", { d: "M21 17v2a2 2 0 0 1-2 2h-2" }), /* @__PURE__ */ React19.createElement("path", { d: "M7 21H5a2 2 0 0 1-2-2v-2" })), /* @__PURE__ */ React19.createElement("span", null, "Dismiss other nodes")), canDelete && /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement("div", { className: "my-1 h-px w-full bg-white/10" }), /* @__PURE__ */ React19.createElement("button", { onClick: () => setIsConfirmingDelete(true), className: deleteButtonClass, title: "Excluir Nodes" }, /* @__PURE__ */ React19.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React19.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React19.createElement("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" }), /* @__PURE__ */ React19.createElement("line", { x1: "10", y1: "11", x2: "10", y2: "17" }), /* @__PURE__ */ React19.createElement("line", { x1: "14", y1: "11", x2: "14", y2: "17" })), /* @__PURE__ */ React19.createElement("span", null, "Excluir Nodes (", nodeCount, ")"))))))
10505
+ ))) : /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2 px-2 pt-1 pb-2" }, /* @__PURE__ */ React20.createElement("span", { className: "inline-flex h-2 w-2 rounded-full bg-indigo-400/80 shadow-[0_0_12px_1px_rgba(99,102,241,0.5)]" }), /* @__PURE__ */ React20.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "A\xE7\xF5es em Grupo (", nodeCount, " Nodes)")), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ React20.createElement("button", { onClick: () => onDismissNodes(data.nodeIds), className: baseButtonClass, title: "Remover da visualiza\xE7\xE3o" }, /* @__PURE__ */ React20.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React20.createElement("path", { d: "M9.88 9.88a3 3 0 1 0 4.24 4.24" }), /* @__PURE__ */ React20.createElement("path", { d: "M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68" }), /* @__PURE__ */ React20.createElement("path", { d: "M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61" }), /* @__PURE__ */ React20.createElement("line", { x1: "2", y1: "2", x2: "22", y2: "22" })), /* @__PURE__ */ React20.createElement("span", null, "Dismiss (", nodeCount, ")")), /* @__PURE__ */ React20.createElement("button", { onClick: () => onDismissOtherNodes(data.nodeIds), className: baseButtonClass, title: "Remover outros da visualiza\xE7\xE3o" }, /* @__PURE__ */ React20.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React20.createElement("circle", { cx: "12", cy: "12", r: "3" }), /* @__PURE__ */ React20.createElement("path", { d: "M3 7V5a2 2 0 0 1 2-2h2" }), /* @__PURE__ */ React20.createElement("path", { d: "M17 3h2a2 2 0 0 1 2 2v2" }), /* @__PURE__ */ React20.createElement("path", { d: "M21 17v2a2 2 0 0 1-2 2h-2" }), /* @__PURE__ */ React20.createElement("path", { d: "M7 21H5a2 2 0 0 1-2-2v-2" })), /* @__PURE__ */ React20.createElement("span", null, "Dismiss other nodes")), canDelete && /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement("div", { className: "my-1 h-px w-full bg-white/10" }), /* @__PURE__ */ React20.createElement("button", { onClick: () => setIsConfirmingDelete(true), className: deleteButtonClass, title: "Excluir Nodes" }, /* @__PURE__ */ React20.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React20.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React20.createElement("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" }), /* @__PURE__ */ React20.createElement("line", { x1: "10", y1: "11", x2: "10", y2: "17" }), /* @__PURE__ */ React20.createElement("line", { x1: "14", y1: "11", x2: "14", y2: "17" })), /* @__PURE__ */ React20.createElement("span", null, "Excluir Nodes (", nodeCount, ")"))))))
10358
10506
  );
10359
10507
  }
10360
10508
 
10361
10509
  // src/components/RelationshipDetailsPanel.jsx
10362
- import React20, { useState as useState21, useEffect as useEffect18, useRef as useRef16, useMemo as useMemo9 } from "react";
10510
+ import React21, { useState as useState21, useEffect as useEffect18, useRef as useRef16, useMemo as useMemo9 } from "react";
10363
10511
  import { FiPlus as FiPlus9, FiEdit2 as FiEdit29, FiLoader as FiLoader4, FiBookOpen as FiBookOpen5 } from "react-icons/fi";
10364
10512
  function RelationshipDetailsPanel({
10365
10513
  link,
@@ -10494,7 +10642,7 @@ function RelationshipDetailsPanel({
10494
10642
  onOpenImageViewer([{ name: name2 || "Imagem", value: url }], 0);
10495
10643
  }
10496
10644
  };
10497
- return /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement(
10645
+ return /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement(
10498
10646
  "div",
10499
10647
  {
10500
10648
  className: `ui-overlay absolute group rounded-2xl border border-white/10 bg-slate-950/70 backdrop-blur-xl shadow-[0_20px_80px_rgba(0,0,0,0.6)] ring-1 ring-white/10 text-white overflow-hidden transition-all duration-300 ease-out
@@ -10509,7 +10657,7 @@ function RelationshipDetailsPanel({
10509
10657
  onContextMenu: swallow,
10510
10658
  onDoubleClick: swallow
10511
10659
  },
10512
- isReadMode ? /* @__PURE__ */ React20.createElement(
10660
+ isReadMode ? /* @__PURE__ */ React21.createElement(
10513
10661
  DescriptionReadModePanel,
10514
10662
  {
10515
10663
  title: name || "Rela\xE7\xE3o",
@@ -10530,7 +10678,7 @@ function RelationshipDetailsPanel({
10530
10678
  onImageClick: handleImageClickFromText,
10531
10679
  onSaveDescription: handleSaveDescriptionInline
10532
10680
  }
10533
- ) : /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement("div", { className: "h-[2px] bg-gradient-to-r from-teal-400/0 via-teal-400/70 to-teal-400/0" }), /* @__PURE__ */ React20.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ React20.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React20.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-teal-400/80 shadow-[0_0_18px_2px_rgba(45,212,191,0.55)]" }), /* @__PURE__ */ React20.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Rela\xE7\xE3o")), /* @__PURE__ */ React20.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, name || "Rela\xE7\xE3o")), /* @__PURE__ */ React20.createElement(
10681
+ ) : /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("div", { className: "h-[2px] bg-gradient-to-r from-teal-400/0 via-teal-400/70 to-teal-400/0" }), /* @__PURE__ */ React21.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ React21.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-teal-400/80 shadow-[0_0_18px_2px_rgba(45,212,191,0.55)]" }), /* @__PURE__ */ React21.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Rela\xE7\xE3o")), /* @__PURE__ */ React21.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, name || "Rela\xE7\xE3o")), /* @__PURE__ */ React21.createElement(
10534
10682
  "button",
10535
10683
  {
10536
10684
  onClick: onClose,
@@ -10539,7 +10687,7 @@ function RelationshipDetailsPanel({
10539
10687
  title: "Fechar"
10540
10688
  },
10541
10689
  "\xD7"
10542
- )), /* @__PURE__ */ React20.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 max-h-[68vh] custom-scrollbar" }, /* @__PURE__ */ React20.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React20.createElement("label", { className: "text-xs text-slate-300" }, "Nome da Rela\xE7\xE3o"), /* @__PURE__ */ React20.createElement(
10690
+ )), /* @__PURE__ */ React21.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 max-h-[68vh] custom-scrollbar" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React21.createElement("label", { className: "text-xs text-slate-300" }, "Nome da Rela\xE7\xE3o"), /* @__PURE__ */ React21.createElement(
10543
10691
  "input",
10544
10692
  {
10545
10693
  type: "text",
@@ -10554,7 +10702,7 @@ function RelationshipDetailsPanel({
10554
10702
  ${!canEdit ? "opacity-50 cursor-not-allowed" : ""}
10555
10703
  `
10556
10704
  }
10557
- )), /* @__PURE__ */ React20.createElement("div", { className: "rounded-xl border border-white/8 bg-slate-800/30 p-3 space-y-3" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(
10705
+ )), /* @__PURE__ */ React21.createElement("div", { className: "rounded-xl border border-white/8 bg-slate-800/30 p-3 space-y-3" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21.createElement(
10558
10706
  "svg",
10559
10707
  {
10560
10708
  xmlns: "http://www.w3.org/2000/svg",
@@ -10568,9 +10716,9 @@ function RelationshipDetailsPanel({
10568
10716
  strokeLinejoin: "round",
10569
10717
  className: "text-violet-400 flex-shrink-0"
10570
10718
  },
10571
- /* @__PURE__ */ React20.createElement("path", { d: "M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z" }),
10572
- /* @__PURE__ */ React20.createElement("line", { x1: "7", y1: "7", x2: "7.01", y2: "7" })
10573
- ), /* @__PURE__ */ React20.createElement("p", { className: "text-xs font-medium text-violet-300/80 uppercase tracking-wider" }, "Labels de Agrupamento")), /* @__PURE__ */ React20.createElement("p", { className: "text-[11px] text-slate-400 leading-relaxed" }, "Labels agrupam conex\xF5es no menu de Conex\xF5es. Cada lado da conex\xE3o pode ter sua pr\xF3pria label."), /* @__PURE__ */ React20.createElement("div", { className: "grid grid-cols-2 gap-2" }, /* @__PURE__ */ React20.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React20.createElement("label", { className: "text-[11px] text-slate-400" }, "Label do Source"), /* @__PURE__ */ React20.createElement(
10719
+ /* @__PURE__ */ React21.createElement("path", { d: "M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z" }),
10720
+ /* @__PURE__ */ React21.createElement("line", { x1: "7", y1: "7", x2: "7.01", y2: "7" })
10721
+ ), /* @__PURE__ */ React21.createElement("p", { className: "text-xs font-medium text-violet-300/80 uppercase tracking-wider" }, "Labels de Agrupamento")), /* @__PURE__ */ React21.createElement("p", { className: "text-[11px] text-slate-400 leading-relaxed" }, "Labels agrupam conex\xF5es no menu de Conex\xF5es. Cada lado da conex\xE3o pode ter sua pr\xF3pria label."), /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-2 gap-2" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React21.createElement("label", { className: "text-[11px] text-slate-400" }, "Label do Source"), /* @__PURE__ */ React21.createElement(
10574
10722
  "input",
10575
10723
  {
10576
10724
  type: "text",
@@ -10585,7 +10733,7 @@ function RelationshipDetailsPanel({
10585
10733
  ${!canEdit ? "opacity-50 cursor-not-allowed" : ""}
10586
10734
  `
10587
10735
  }
10588
- )), /* @__PURE__ */ React20.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React20.createElement("label", { className: "text-[11px] text-slate-400" }, "Label do Target"), /* @__PURE__ */ React20.createElement(
10736
+ )), /* @__PURE__ */ React21.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React21.createElement("label", { className: "text-[11px] text-slate-400" }, "Label do Target"), /* @__PURE__ */ React21.createElement(
10589
10737
  "input",
10590
10738
  {
10591
10739
  type: "text",
@@ -10600,8 +10748,8 @@ function RelationshipDetailsPanel({
10600
10748
  ${!canEdit ? "opacity-50 cursor-not-allowed" : ""}
10601
10749
  `
10602
10750
  }
10603
- )))), /* @__PURE__ */ React20.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React20.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React20.createElement("div", { className: "relative group min-h-[60px] bg-slate-800/40 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React20.createElement(
10604
- DescriptionDisplay,
10751
+ )))), /* @__PURE__ */ React21.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React21.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React21.createElement("div", { className: "relative group min-h-[60px] bg-slate-800/40 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React21.createElement(
10752
+ DescriptionDisplay2,
10605
10753
  {
10606
10754
  description,
10607
10755
  savedSections: existingSections,
@@ -10612,7 +10760,7 @@ function RelationshipDetailsPanel({
10612
10760
  onImageClick: handleImageClickFromText,
10613
10761
  onSaveDescription: handleSaveDescriptionInline
10614
10762
  }
10615
- ), /* @__PURE__ */ React20.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ React20.createElement(
10763
+ ), /* @__PURE__ */ React21.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ React21.createElement(
10616
10764
  "button",
10617
10765
  {
10618
10766
  type: "button",
@@ -10620,8 +10768,8 @@ function RelationshipDetailsPanel({
10620
10768
  className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors border-r border-white/5",
10621
10769
  title: "Modo de Leitura"
10622
10770
  },
10623
- /* @__PURE__ */ React20.createElement(FiBookOpen5, { size: 14 })
10624
- ), canEdit && /* @__PURE__ */ React20.createElement(
10771
+ /* @__PURE__ */ React21.createElement(FiBookOpen5, { size: 14 })
10772
+ ), canEdit && /* @__PURE__ */ React21.createElement(
10625
10773
  "button",
10626
10774
  {
10627
10775
  type: "button",
@@ -10629,25 +10777,25 @@ function RelationshipDetailsPanel({
10629
10777
  className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
10630
10778
  title: "Editar descri\xE7\xE3o"
10631
10779
  },
10632
- /* @__PURE__ */ React20.createElement(FiEdit29, { size: 14 })
10633
- )), !description && canEdit && /* @__PURE__ */ React20.createElement(
10780
+ /* @__PURE__ */ React21.createElement(FiEdit29, { size: 14 })
10781
+ )), !description && canEdit && /* @__PURE__ */ React21.createElement(
10634
10782
  "div",
10635
10783
  {
10636
10784
  onClick: () => setIsDescriptionModalOpen(true),
10637
10785
  className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
10638
10786
  },
10639
10787
  "Adicionar descri\xE7\xE3o..."
10640
- ))), /* @__PURE__ */ React20.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React20.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), canEdit && /* @__PURE__ */ React20.createElement(
10788
+ ))), /* @__PURE__ */ React21.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), canEdit && /* @__PURE__ */ React21.createElement(
10641
10789
  "button",
10642
10790
  {
10643
10791
  type: "button",
10644
10792
  onClick: handleAddProp,
10645
10793
  className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors"
10646
10794
  },
10647
- /* @__PURE__ */ React20.createElement(FiPlus9, { size: 14 }),
10795
+ /* @__PURE__ */ React21.createElement(FiPlus9, { size: 14 }),
10648
10796
  " Adicionar"
10649
- )), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React20.createElement(
10650
- CustomPropertyDisplay,
10797
+ )), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React21.createElement(
10798
+ CustomPropertyDisplay2,
10651
10799
  {
10652
10800
  key: prop.id,
10653
10801
  prop,
@@ -10660,7 +10808,7 @@ function RelationshipDetailsPanel({
10660
10808
  onUploadFile,
10661
10809
  disabled: !canEdit
10662
10810
  }
10663
- )), /* @__PURE__ */ React20.createElement("div", { ref: propsEndRef })))), /* @__PURE__ */ React20.createElement("div", { className: "sticky bottom-0 z-10 bg-gradient-to-t from-slate-950/80 via-slate-950/50 to-transparent px-6 py-4 border-t border-white/10 flex justify-end gap-3" }, /* @__PURE__ */ React20.createElement(
10811
+ )), /* @__PURE__ */ React21.createElement("div", { ref: propsEndRef })))), /* @__PURE__ */ React21.createElement("div", { className: "sticky bottom-0 z-10 bg-gradient-to-t from-slate-950/80 via-slate-950/50 to-transparent px-6 py-4 border-t border-white/10 flex justify-end gap-3" }, /* @__PURE__ */ React21.createElement(
10664
10812
  "button",
10665
10813
  {
10666
10814
  onClick: onClose,
@@ -10668,7 +10816,7 @@ function RelationshipDetailsPanel({
10668
10816
  className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm disabled:opacity-50"
10669
10817
  },
10670
10818
  canEdit ? "Cancelar" : "Fechar"
10671
- ), canEdit && /* @__PURE__ */ React20.createElement(
10819
+ ), canEdit && /* @__PURE__ */ React21.createElement(
10672
10820
  "button",
10673
10821
  {
10674
10822
  onClick: () => handleSave(false),
@@ -10677,11 +10825,11 @@ function RelationshipDetailsPanel({
10677
10825
  ${isSaving ? "bg-slate-700 text-slate-300 cursor-wait" : "bg-gradient-to-tr from-teal-600 to-teal-400 hover:from-teal-500 hover:to-teal-300 text-white"}
10678
10826
  `
10679
10827
  },
10680
- isSaving && /* @__PURE__ */ React20.createElement(FiLoader4, { className: "animate-spin" }),
10828
+ isSaving && /* @__PURE__ */ React21.createElement(FiLoader4, { className: "animate-spin" }),
10681
10829
  isSaving ? "Salvando..." : "Salvar"
10682
10830
  )))
10683
- ), isDescriptionModalOpen && /* @__PURE__ */ React20.createElement(
10684
- DescriptionEditModal,
10831
+ ), isDescriptionModalOpen && /* @__PURE__ */ React21.createElement(
10832
+ DescriptionEditModal2,
10685
10833
  {
10686
10834
  isOpen: isDescriptionModalOpen,
10687
10835
  title: "Editar Descri\xE7\xE3o da Rela\xE7\xE3o",
@@ -10702,7 +10850,7 @@ function RelationshipDetailsPanel({
10702
10850
  }
10703
10851
 
10704
10852
  // src/components/RelationshipContextMenu.jsx
10705
- import React21, { useLayoutEffect as useLayoutEffect4, useRef as useRef17, useState as useState22, useEffect as useEffect19, useMemo as useMemo10 } from "react";
10853
+ import React22, { useLayoutEffect as useLayoutEffect4, useRef as useRef17, useState as useState22, useEffect as useEffect19, useMemo as useMemo10 } from "react";
10706
10854
  function RelationshipContextMenu({
10707
10855
  data,
10708
10856
  userRole,
@@ -10759,7 +10907,7 @@ function RelationshipContextMenu({
10759
10907
  const dangerButtonClass = "w-full flex items-center gap-2.5 px-2 py-1.5 text-left text-sm rounded-md hover:bg-rose-500/20 text-rose-300 hover:text-rose-100 transition-colors duration-150 truncate";
10760
10908
  const canUpdate = ability.can("update", "Connection");
10761
10909
  const canDelete = ability.can("delete", "Connection");
10762
- return /* @__PURE__ */ React21.createElement(
10910
+ return /* @__PURE__ */ React22.createElement(
10763
10911
  "div",
10764
10912
  {
10765
10913
  ref: menuRef,
@@ -10773,29 +10921,29 @@ function RelationshipContextMenu({
10773
10921
  onContextMenu: swallow,
10774
10922
  onDoubleClick: swallow
10775
10923
  },
10776
- /* @__PURE__ */ React21.createElement("div", { className: "h-[2px] bg-gradient-to-r from-teal-400/0 via-teal-400/70 to-teal-400/0" }),
10777
- /* @__PURE__ */ React21.createElement("div", { className: "p-1.5" }, isConfirmingDelete ? /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-3 p-2" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col items-center text-center gap-2" }, /* @__PURE__ */ React21.createElement("div", { className: "w-10 h-10 rounded-full bg-rose-500/20 flex items-center justify-center text-rose-400 mb-1" }, /* @__PURE__ */ React21.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React21.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React21.createElement("path", { d: "M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6" }), /* @__PURE__ */ React21.createElement("path", { d: "M10 11v6" }), /* @__PURE__ */ React21.createElement("path", { d: "M14 11v6" }), /* @__PURE__ */ React21.createElement("path", { d: "M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2" }))), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-200" }, "Excluir rela\xE7\xE3o?"), /* @__PURE__ */ React21.createElement("p", { className: "text-[11px] text-slate-400 leading-tight break-words" }, "Desconectar ", /* @__PURE__ */ React21.createElement("strong", null, sourceName), " de ", /* @__PURE__ */ React21.createElement("strong", null, targetName), ".")), /* @__PURE__ */ React21.createElement("div", { className: "flex gap-2 mt-1" }, /* @__PURE__ */ React21.createElement(
10924
+ /* @__PURE__ */ React22.createElement("div", { className: "h-[2px] bg-gradient-to-r from-teal-400/0 via-teal-400/70 to-teal-400/0" }),
10925
+ /* @__PURE__ */ React22.createElement("div", { className: "p-1.5" }, isConfirmingDelete ? /* @__PURE__ */ React22.createElement("div", { className: "flex flex-col gap-3 p-2" }, /* @__PURE__ */ React22.createElement("div", { className: "flex flex-col items-center text-center gap-2" }, /* @__PURE__ */ React22.createElement("div", { className: "w-10 h-10 rounded-full bg-rose-500/20 flex items-center justify-center text-rose-400 mb-1" }, /* @__PURE__ */ React22.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React22.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React22.createElement("path", { d: "M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6" }), /* @__PURE__ */ React22.createElement("path", { d: "M10 11v6" }), /* @__PURE__ */ React22.createElement("path", { d: "M14 11v6" }), /* @__PURE__ */ React22.createElement("path", { d: "M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2" }))), /* @__PURE__ */ React22.createElement("p", { className: "text-sm text-slate-200" }, "Excluir rela\xE7\xE3o?"), /* @__PURE__ */ React22.createElement("p", { className: "text-[11px] text-slate-400 leading-tight break-words" }, "Desconectar ", /* @__PURE__ */ React22.createElement("strong", null, sourceName), " de ", /* @__PURE__ */ React22.createElement("strong", null, targetName), ".")), /* @__PURE__ */ React22.createElement("div", { className: "flex gap-2 mt-1" }, /* @__PURE__ */ React22.createElement(
10778
10926
  "button",
10779
10927
  {
10780
10928
  onClick: () => setIsConfirmingDelete(false),
10781
10929
  className: "flex-1 px-2 py-2 text-xs font-medium bg-white/10 hover:bg-white/20 rounded-md text-white transition-colors"
10782
10930
  },
10783
10931
  "Cancelar"
10784
- ), /* @__PURE__ */ React21.createElement(
10932
+ ), /* @__PURE__ */ React22.createElement(
10785
10933
  "button",
10786
10934
  {
10787
10935
  onClick: () => onDelete == null ? void 0 : onDelete(data.linkObject),
10788
10936
  className: "flex-1 px-2 py-2 text-xs font-medium bg-rose-600 hover:bg-rose-500 rounded-md text-white transition-colors"
10789
10937
  },
10790
10938
  "Excluir"
10791
- ))) : /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2 px-2 pt-1 pb-2" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex h-2 w-2 rounded-full bg-teal-400/80 shadow-[0_0_12px_1px_rgba(45,212,191,0.5)]" }), /* @__PURE__ */ React21.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "Rela\xE7\xE3o")), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-1" }, canUpdate && /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement(
10939
+ ))) : /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement("div", { className: "flex items-center gap-2 px-2 pt-1 pb-2" }, /* @__PURE__ */ React22.createElement("span", { className: "inline-flex h-2 w-2 rounded-full bg-teal-400/80 shadow-[0_0_12px_1px_rgba(45,212,191,0.5)]" }), /* @__PURE__ */ React22.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "Rela\xE7\xE3o")), /* @__PURE__ */ React22.createElement("div", { className: "flex flex-col gap-1" }, canUpdate && /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement(
10792
10940
  "button",
10793
10941
  {
10794
10942
  onClick: () => onRelinkSource == null ? void 0 : onRelinkSource(data.linkObject),
10795
10943
  className: baseButtonClass,
10796
10944
  title: "Desconectar ponta ligada ao Source"
10797
10945
  },
10798
- /* @__PURE__ */ React21.createElement(
10946
+ /* @__PURE__ */ React22.createElement(
10799
10947
  "svg",
10800
10948
  {
10801
10949
  xmlns: "http://www.w3.org/2000/svg",
@@ -10808,18 +10956,18 @@ function RelationshipContextMenu({
10808
10956
  strokeLinecap: "round",
10809
10957
  strokeLinejoin: "round"
10810
10958
  },
10811
- /* @__PURE__ */ React21.createElement("path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.72" }),
10812
- /* @__PURE__ */ React21.createElement("path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.72-1.72" })
10959
+ /* @__PURE__ */ React22.createElement("path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.72" }),
10960
+ /* @__PURE__ */ React22.createElement("path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.72-1.72" })
10813
10961
  ),
10814
- /* @__PURE__ */ React21.createElement("span", null, "Desconectar Source (", sourceName, ")")
10815
- ), /* @__PURE__ */ React21.createElement(
10962
+ /* @__PURE__ */ React22.createElement("span", null, "Desconectar Source (", sourceName, ")")
10963
+ ), /* @__PURE__ */ React22.createElement(
10816
10964
  "button",
10817
10965
  {
10818
10966
  onClick: () => onRelinkTarget == null ? void 0 : onRelinkTarget(data.linkObject),
10819
10967
  className: baseButtonClass,
10820
10968
  title: "Desconectar ponta ligada ao Target"
10821
10969
  },
10822
- /* @__PURE__ */ React21.createElement(
10970
+ /* @__PURE__ */ React22.createElement(
10823
10971
  "svg",
10824
10972
  {
10825
10973
  xmlns: "http://www.w3.org/2000/svg",
@@ -10832,21 +10980,21 @@ function RelationshipContextMenu({
10832
10980
  strokeLinecap: "round",
10833
10981
  strokeLinejoin: "round"
10834
10982
  },
10835
- /* @__PURE__ */ React21.createElement("polyline", { points: "16 3 21 3 21 8" }),
10836
- /* @__PURE__ */ React21.createElement("line", { x1: "4", y1: "20", x2: "21", y2: "3" }),
10837
- /* @__PURE__ */ React21.createElement("polyline", { points: "21 16 21 21 16 21" }),
10838
- /* @__PURE__ */ React21.createElement("line", { x1: "15", y1: "15", x2: "21", y2: "21" }),
10839
- /* @__PURE__ */ React21.createElement("line", { x1: "4", y1: "4", x2: "9", y2: "9" })
10983
+ /* @__PURE__ */ React22.createElement("polyline", { points: "16 3 21 3 21 8" }),
10984
+ /* @__PURE__ */ React22.createElement("line", { x1: "4", y1: "20", x2: "21", y2: "3" }),
10985
+ /* @__PURE__ */ React22.createElement("polyline", { points: "21 16 21 21 16 21" }),
10986
+ /* @__PURE__ */ React22.createElement("line", { x1: "15", y1: "15", x2: "21", y2: "21" }),
10987
+ /* @__PURE__ */ React22.createElement("line", { x1: "4", y1: "4", x2: "9", y2: "9" })
10840
10988
  ),
10841
- /* @__PURE__ */ React21.createElement("span", null, "Desconectar Target (", targetName, ")")
10842
- ), /* @__PURE__ */ React21.createElement("div", { className: "h-[1px] my-1 mx-1 bg-white/10" })), /* @__PURE__ */ React21.createElement(
10989
+ /* @__PURE__ */ React22.createElement("span", null, "Desconectar Target (", targetName, ")")
10990
+ ), /* @__PURE__ */ React22.createElement("div", { className: "h-[1px] my-1 mx-1 bg-white/10" })), /* @__PURE__ */ React22.createElement(
10843
10991
  "button",
10844
10992
  {
10845
10993
  onClick: () => onOpenDetails == null ? void 0 : onOpenDetails(data.linkObject),
10846
10994
  className: baseButtonClass,
10847
10995
  title: "Abrir detalhes da rela\xE7\xE3o"
10848
10996
  },
10849
- /* @__PURE__ */ React21.createElement(
10997
+ /* @__PURE__ */ React22.createElement(
10850
10998
  "svg",
10851
10999
  {
10852
11000
  xmlns: "http://www.w3.org/2000/svg",
@@ -10859,19 +11007,19 @@ function RelationshipContextMenu({
10859
11007
  strokeLinecap: "round",
10860
11008
  strokeLinejoin: "round"
10861
11009
  },
10862
- /* @__PURE__ */ React21.createElement("circle", { cx: "12", cy: "12", r: "10" }),
10863
- /* @__PURE__ */ React21.createElement("line", { x1: "12", y1: "16", x2: "12", y2: "12" }),
10864
- /* @__PURE__ */ React21.createElement("line", { x1: "12", y1: "8", x2: "12", y2: "8" })
11010
+ /* @__PURE__ */ React22.createElement("circle", { cx: "12", cy: "12", r: "10" }),
11011
+ /* @__PURE__ */ React22.createElement("line", { x1: "12", y1: "16", x2: "12", y2: "12" }),
11012
+ /* @__PURE__ */ React22.createElement("line", { x1: "12", y1: "8", x2: "12", y2: "8" })
10865
11013
  ),
10866
- /* @__PURE__ */ React21.createElement("span", null, "Abrir Detalhes")
10867
- ), canDelete && /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("div", { className: "h-[1px] my-1 mx-1 bg-white/10" }), /* @__PURE__ */ React21.createElement(
11014
+ /* @__PURE__ */ React22.createElement("span", null, "Abrir Detalhes")
11015
+ ), canDelete && /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement("div", { className: "h-[1px] my-1 mx-1 bg-white/10" }), /* @__PURE__ */ React22.createElement(
10868
11016
  "button",
10869
11017
  {
10870
11018
  onClick: () => setIsConfirmingDelete(true),
10871
11019
  className: dangerButtonClass,
10872
11020
  title: "Excluir esta conex\xE3o"
10873
11021
  },
10874
- /* @__PURE__ */ React21.createElement(
11022
+ /* @__PURE__ */ React22.createElement(
10875
11023
  "svg",
10876
11024
  {
10877
11025
  xmlns: "http://www.w3.org/2000/svg",
@@ -10884,19 +11032,19 @@ function RelationshipContextMenu({
10884
11032
  strokeLinecap: "round",
10885
11033
  strokeLinejoin: "round"
10886
11034
  },
10887
- /* @__PURE__ */ React21.createElement("polyline", { points: "3 6 5 6 21 6" }),
10888
- /* @__PURE__ */ React21.createElement("path", { d: "M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6" }),
10889
- /* @__PURE__ */ React21.createElement("path", { d: "M10 11v6" }),
10890
- /* @__PURE__ */ React21.createElement("path", { d: "M14 11v6" }),
10891
- /* @__PURE__ */ React21.createElement("path", { d: "M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2" })
11035
+ /* @__PURE__ */ React22.createElement("polyline", { points: "3 6 5 6 21 6" }),
11036
+ /* @__PURE__ */ React22.createElement("path", { d: "M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6" }),
11037
+ /* @__PURE__ */ React22.createElement("path", { d: "M10 11v6" }),
11038
+ /* @__PURE__ */ React22.createElement("path", { d: "M14 11v6" }),
11039
+ /* @__PURE__ */ React22.createElement("path", { d: "M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2" })
10892
11040
  ),
10893
- /* @__PURE__ */ React21.createElement("span", null, "Excluir conex\xE3o (", sourceName, " \u2192 ", targetName, ")")
11041
+ /* @__PURE__ */ React22.createElement("span", null, "Excluir conex\xE3o (", sourceName, " \u2192 ", targetName, ")")
10894
11042
  )))))
10895
11043
  );
10896
11044
  }
10897
11045
 
10898
11046
  // src/components/LoadingScreen.jsx
10899
- import React22 from "react";
11047
+ import React23 from "react";
10900
11048
  var styles = {
10901
11049
  loadingOverlay: {
10902
11050
  position: "fixed",
@@ -10928,11 +11076,11 @@ var styles = {
10928
11076
  `
10929
11077
  };
10930
11078
  function LoadingScreen() {
10931
- return /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement("style", null, styles.keyframes), /* @__PURE__ */ React22.createElement("div", { style: styles.loadingOverlay }, /* @__PURE__ */ React22.createElement("div", { style: styles.spinner })));
11079
+ return /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement("style", null, styles.keyframes), /* @__PURE__ */ React23.createElement("div", { style: styles.loadingOverlay }, /* @__PURE__ */ React23.createElement("div", { style: styles.spinner })));
10932
11080
  }
10933
11081
 
10934
11082
  // src/components/ImportParentFileModal.jsx
10935
- import React23, { useEffect as useEffect20, useState as useState23 } from "react";
11083
+ import React24, { useEffect as useEffect20, useState as useState23 } from "react";
10936
11084
  function ImportParentFileModal({
10937
11085
  isOpen,
10938
11086
  onClose,
@@ -11013,13 +11161,13 @@ function ImportParentFileModal({
11013
11161
  const swallow = (e) => e.stopPropagation();
11014
11162
  const currentList = activeTab === "databases" ? availableDbs : availableViews;
11015
11163
  const emptyMessage = activeTab === "databases" ? "Nenhum novo arquivo parent dispon\xEDvel." : "Nenhuma view dispon\xEDvel para importa\xE7\xE3o.";
11016
- return /* @__PURE__ */ React23.createElement(
11164
+ return /* @__PURE__ */ React24.createElement(
11017
11165
  "div",
11018
11166
  {
11019
11167
  className: "ui-overlay fixed inset-0 z-[1200] flex items-center justify-center bg-black/60 backdrop-blur-sm",
11020
11168
  onClick: onClose
11021
11169
  },
11022
- /* @__PURE__ */ React23.createElement(
11170
+ /* @__PURE__ */ React24.createElement(
11023
11171
  "div",
11024
11172
  {
11025
11173
  className: "ui-overlay relative rounded-2xl border border-white/10 bg-slate-950/80 shadow-[0_20px_80px_rgba(0,0,0,0.6)] text-white w-[min(92vw,500px)] flex flex-col max-h-[85vh]",
@@ -11031,14 +11179,14 @@ function ImportParentFileModal({
11031
11179
  onContextMenu: swallow,
11032
11180
  onDoubleClick: swallow
11033
11181
  },
11034
- /* @__PURE__ */ React23.createElement("div", { className: "flex items-center justify-between px-6 py-4 border-b border-white/10 flex-shrink-0" }, /* @__PURE__ */ React23.createElement("h2", { className: "text-lg font-semibold" }, "Importar"), /* @__PURE__ */ React23.createElement(
11182
+ /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between px-6 py-4 border-b border-white/10 flex-shrink-0" }, /* @__PURE__ */ React24.createElement("h2", { className: "text-lg font-semibold" }, "Importar"), /* @__PURE__ */ React24.createElement(
11035
11183
  "button",
11036
11184
  {
11037
11185
  onClick: onClose,
11038
11186
  className: "p-2 rounded-md text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
11039
11187
  title: "Fechar"
11040
11188
  },
11041
- /* @__PURE__ */ React23.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React23.createElement(
11189
+ /* @__PURE__ */ React24.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React24.createElement(
11042
11190
  "path",
11043
11191
  {
11044
11192
  fillRule: "evenodd",
@@ -11047,14 +11195,14 @@ function ImportParentFileModal({
11047
11195
  }
11048
11196
  ))
11049
11197
  )),
11050
- /* @__PURE__ */ React23.createElement("div", { className: "flex px-6 border-b border-white/10 bg-white/5 flex-shrink-0" }, /* @__PURE__ */ React23.createElement(
11198
+ /* @__PURE__ */ React24.createElement("div", { className: "flex px-6 border-b border-white/10 bg-white/5 flex-shrink-0" }, /* @__PURE__ */ React24.createElement(
11051
11199
  "button",
11052
11200
  {
11053
11201
  onClick: () => setActiveTab("databases"),
11054
11202
  className: `flex-1 py-3 text-sm font-medium border-b-2 transition-colors ${activeTab === "databases" ? "border-indigo-500 text-white" : "border-transparent text-slate-400 hover:text-slate-200"}`
11055
11203
  },
11056
11204
  "Arquivos Parent"
11057
- ), /* @__PURE__ */ React23.createElement(
11205
+ ), /* @__PURE__ */ React24.createElement(
11058
11206
  "button",
11059
11207
  {
11060
11208
  onClick: () => setActiveTab("views"),
@@ -11062,24 +11210,24 @@ function ImportParentFileModal({
11062
11210
  },
11063
11211
  "Views (Ancestralidades)"
11064
11212
  )),
11065
- /* @__PURE__ */ React23.createElement("div", { className: "p-6 overflow-y-auto custom-scrollbar flex-grow min-h-[200px]" }, isLoading ? /* @__PURE__ */ React23.createElement("div", { className: "flex items-center justify-center h-40" }, /* @__PURE__ */ React23.createElement("div", { className: "w-8 h-8 border-4 border-t-indigo-500 border-slate-700 rounded-full animate-spin" })) : /* @__PURE__ */ React23.createElement("div", { className: "space-y-2" }, currentList.length > 0 ? currentList.map((item) => /* @__PURE__ */ React23.createElement(
11213
+ /* @__PURE__ */ React24.createElement("div", { className: "p-6 overflow-y-auto custom-scrollbar flex-grow min-h-[200px]" }, isLoading ? /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-center h-40" }, /* @__PURE__ */ React24.createElement("div", { className: "w-8 h-8 border-4 border-t-indigo-500 border-slate-700 rounded-full animate-spin" })) : /* @__PURE__ */ React24.createElement("div", { className: "space-y-2" }, currentList.length > 0 ? currentList.map((item) => /* @__PURE__ */ React24.createElement(
11066
11214
  "div",
11067
11215
  {
11068
11216
  key: item.id,
11069
11217
  onClick: () => setSelectedItem(item),
11070
11218
  className: `px-4 py-3 rounded-lg border cursor-pointer transition-all duration-150 flex flex-col gap-1 ${(selectedItem == null ? void 0 : selectedItem.id) === item.id ? "bg-indigo-600 border-indigo-500 shadow-lg" : "bg-slate-800/60 border-white/10 hover:border-white/20 hover:bg-slate-800"}`
11071
11219
  },
11072
- /* @__PURE__ */ React23.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React23.createElement("span", { className: "font-medium text-slate-100" }, item.name), activeTab === "views" && /* @__PURE__ */ React23.createElement("span", { className: "text-[10px] px-1.5 py-0.5 rounded bg-black/30 text-indigo-300 border border-indigo-500/30" }, "VIEW")),
11073
- item.description && /* @__PURE__ */ React23.createElement("p", { className: `text-xs ${(selectedItem == null ? void 0 : selectedItem.id) === item.id ? "text-indigo-200" : "text-slate-400"}` }, item.description)
11074
- )) : /* @__PURE__ */ React23.createElement("p", { className: "text-slate-400 text-center py-10" }, emptyMessage))),
11075
- /* @__PURE__ */ React23.createElement("div", { className: "px-6 py-4 border-t border-white/10 flex justify-end gap-3 flex-shrink-0 bg-slate-900/50" }, /* @__PURE__ */ React23.createElement(
11220
+ /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "font-medium text-slate-100" }, item.name), activeTab === "views" && /* @__PURE__ */ React24.createElement("span", { className: "text-[10px] px-1.5 py-0.5 rounded bg-black/30 text-indigo-300 border border-indigo-500/30" }, "VIEW")),
11221
+ item.description && /* @__PURE__ */ React24.createElement("p", { className: `text-xs ${(selectedItem == null ? void 0 : selectedItem.id) === item.id ? "text-indigo-200" : "text-slate-400"}` }, item.description)
11222
+ )) : /* @__PURE__ */ React24.createElement("p", { className: "text-slate-400 text-center py-10" }, emptyMessage))),
11223
+ /* @__PURE__ */ React24.createElement("div", { className: "px-6 py-4 border-t border-white/10 flex justify-end gap-3 flex-shrink-0 bg-slate-900/50" }, /* @__PURE__ */ React24.createElement(
11076
11224
  "button",
11077
11225
  {
11078
11226
  onClick: onClose,
11079
11227
  className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm text-slate-300"
11080
11228
  },
11081
11229
  "Cancelar"
11082
- ), /* @__PURE__ */ React23.createElement(
11230
+ ), /* @__PURE__ */ React24.createElement(
11083
11231
  "button",
11084
11232
  {
11085
11233
  onClick: handleConfirm,
@@ -11093,7 +11241,7 @@ function ImportParentFileModal({
11093
11241
  }
11094
11242
 
11095
11243
  // src/components/AncestryLinkDetailsPanel.jsx
11096
- import React24, { useState as useState24 } from "react";
11244
+ import React25, { useState as useState24 } from "react";
11097
11245
  import { FiBookOpen as FiBookOpen6 } from "react-icons/fi";
11098
11246
  function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenReference, onMentionClick, onUploadFile }) {
11099
11247
  var _a, _b, _c, _d;
@@ -11110,14 +11258,14 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
11110
11258
  onOpenImageViewer([{ name: name || "Imagem", value: url }], 0);
11111
11259
  }
11112
11260
  };
11113
- return /* @__PURE__ */ React24.createElement(
11261
+ return /* @__PURE__ */ React25.createElement(
11114
11262
  "div",
11115
11263
  {
11116
11264
  className: "ui-overlay fixed inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-[1200]",
11117
11265
  onClick: onClose,
11118
11266
  onPointerDown: swallow
11119
11267
  },
11120
- /* @__PURE__ */ React24.createElement(
11268
+ /* @__PURE__ */ React25.createElement(
11121
11269
  "div",
11122
11270
  {
11123
11271
  className: `relative group rounded-2xl border border-white/10 bg-slate-950/80 shadow-[0_20px_80px_rgba(0,0,0,0.6)] ring-1 ring-white/10 text-white overflow-hidden flex flex-col max-h-[calc(100vh-4rem)] transition-all duration-300 ease-out
@@ -11125,7 +11273,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
11125
11273
  `,
11126
11274
  onClick: swallow
11127
11275
  },
11128
- isReadMode ? /* @__PURE__ */ React24.createElement(
11276
+ isReadMode ? /* @__PURE__ */ React25.createElement(
11129
11277
  DescriptionReadModePanel,
11130
11278
  {
11131
11279
  title: `${sourceName} \u2794 ${targetName}`,
@@ -11137,16 +11285,16 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
11137
11285
  onMentionClick,
11138
11286
  onImageClick: handleImageClickFromText
11139
11287
  }
11140
- ) : /* @__PURE__ */ React24.createElement(React24.Fragment, null, /* @__PURE__ */ React24.createElement("div", { className: "h-[2px] bg-gradient-to-r from-blue-500/0 via-blue-500/70 to-blue-500/0" }), /* @__PURE__ */ React24.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ React24.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React24.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-blue-500/80 shadow-[0_0_18px_2px_rgba(59,130,246,0.55)]" }), /* @__PURE__ */ React24.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Ancestralidade")), /* @__PURE__ */ React24.createElement("h2", { className: "text-lg font-semibold tracking-tight flex items-center gap-2" }, /* @__PURE__ */ React24.createElement("span", { className: "truncate max-w-[150px]" }, sourceName), /* @__PURE__ */ React24.createElement("span", { className: "text-slate-500 text-sm" }, "\u2794"), /* @__PURE__ */ React24.createElement("span", { className: "truncate max-w-[150px]" }, targetName))), /* @__PURE__ */ React24.createElement("button", { onClick: onClose, className: "w-9 h-9 flex-shrink-0 grid place-content-center rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-xl", title: "Fechar" }, "\xD7")), /* @__PURE__ */ React24.createElement("div", { className: "px-6 pb-6 overflow-y-auto overscroll-contain space-y-4 custom-scrollbar" }, description && /* @__PURE__ */ React24.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("label", { className: "text-xs text-slate-300 font-medium" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React24.createElement(
11288
+ ) : /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement("div", { className: "h-[2px] bg-gradient-to-r from-blue-500/0 via-blue-500/70 to-blue-500/0" }), /* @__PURE__ */ React25.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ React25.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React25.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React25.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-blue-500/80 shadow-[0_0_18px_2px_rgba(59,130,246,0.55)]" }), /* @__PURE__ */ React25.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Ancestralidade")), /* @__PURE__ */ React25.createElement("h2", { className: "text-lg font-semibold tracking-tight flex items-center gap-2" }, /* @__PURE__ */ React25.createElement("span", { className: "truncate max-w-[150px]" }, sourceName), /* @__PURE__ */ React25.createElement("span", { className: "text-slate-500 text-sm" }, "\u2794"), /* @__PURE__ */ React25.createElement("span", { className: "truncate max-w-[150px]" }, targetName))), /* @__PURE__ */ React25.createElement("button", { onClick: onClose, className: "w-9 h-9 flex-shrink-0 grid place-content-center rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-xl", title: "Fechar" }, "\xD7")), /* @__PURE__ */ React25.createElement("div", { className: "px-6 pb-6 overflow-y-auto overscroll-contain space-y-4 custom-scrollbar" }, description && /* @__PURE__ */ React25.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React25.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React25.createElement("label", { className: "text-xs text-slate-300 font-medium" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React25.createElement(
11141
11289
  "button",
11142
11290
  {
11143
11291
  onClick: () => setIsReadMode(true),
11144
11292
  className: "p-1 text-slate-400 hover:text-white transition-colors",
11145
11293
  title: "Modo de Leitura"
11146
11294
  },
11147
- /* @__PURE__ */ React24.createElement(FiBookOpen6, { size: 14 })
11148
- )), /* @__PURE__ */ React24.createElement("div", { className: "bg-slate-800/40 rounded-lg border border-white/10 p-1 relative group" }, /* @__PURE__ */ React24.createElement(
11149
- DescriptionDisplay,
11295
+ /* @__PURE__ */ React25.createElement(FiBookOpen6, { size: 14 })
11296
+ )), /* @__PURE__ */ React25.createElement("div", { className: "bg-slate-800/40 rounded-lg border border-white/10 p-1 relative group" }, /* @__PURE__ */ React25.createElement(
11297
+ DescriptionDisplay2,
11150
11298
  {
11151
11299
  description,
11152
11300
  savedSections,
@@ -11154,8 +11302,8 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
11154
11302
  onMentionClick,
11155
11303
  onImageClick: handleImageClickFromText
11156
11304
  }
11157
- ))), customProps.length > 0 && /* @__PURE__ */ React24.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React24.createElement("label", { className: "text-xs text-slate-300 font-medium mb-2 block" }, "Propriedades"), /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop) => /* @__PURE__ */ React24.createElement(
11158
- CustomPropertyDisplay,
11305
+ ))), customProps.length > 0 && /* @__PURE__ */ React25.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React25.createElement("label", { className: "text-xs text-slate-300 font-medium mb-2 block" }, "Propriedades"), /* @__PURE__ */ React25.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop) => /* @__PURE__ */ React25.createElement(
11306
+ CustomPropertyDisplay2,
11159
11307
  {
11160
11308
  key: prop.id,
11161
11309
  prop,
@@ -11163,22 +11311,22 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
11163
11311
  onOpenImageViewer,
11164
11312
  onUploadFile
11165
11313
  }
11166
- )))), !description && customProps.length === 0 && /* @__PURE__ */ React24.createElement("div", { className: "py-8 text-center text-slate-500 text-sm italic border border-dashed border-white/10 rounded-lg" }, "Nenhum detalhe adicional dispon\xEDvel para esta conex\xE3o."), /* @__PURE__ */ React24.createElement("div", { className: "mt-4 p-3 bg-blue-500/10 border border-blue-500/20 rounded-lg text-xs text-blue-200/80 text-center" }, 'Para editar esta conex\xE3o, utilize o menu "Editar Ancestralidade".')))
11314
+ )))), !description && customProps.length === 0 && /* @__PURE__ */ React25.createElement("div", { className: "py-8 text-center text-slate-500 text-sm italic border border-dashed border-white/10 rounded-lg" }, "Nenhum detalhe adicional dispon\xEDvel para esta conex\xE3o."), /* @__PURE__ */ React25.createElement("div", { className: "mt-4 p-3 bg-blue-500/10 border border-blue-500/20 rounded-lg text-xs text-blue-200/80 text-center" }, 'Para editar esta conex\xE3o, utilize o menu "Editar Ancestralidade".')))
11167
11315
  )
11168
11316
  );
11169
11317
  }
11170
11318
 
11171
11319
  // src/components/AncestryBoard.jsx
11172
- import React25, { useState as useState25, useMemo as useMemo11, useEffect as useEffect21, useRef as useRef18 } from "react";
11320
+ import React26, { useState as useState25, useMemo as useMemo11, useEffect as useEffect21, useRef as useRef18 } from "react";
11173
11321
  import {
11174
- FiSearch as FiSearch7,
11322
+ FiSearch as FiSearch8,
11175
11323
  FiLayers as FiLayers6,
11176
11324
  FiCornerUpRight as FiCornerUpRight4,
11177
11325
  FiPlay,
11178
11326
  FiPlus as FiPlus10,
11179
11327
  FiTrash2 as FiTrash23,
11180
11328
  FiArrowLeft as FiArrowLeft3,
11181
- FiArrowRight,
11329
+ FiArrowRight as FiArrowRight2,
11182
11330
  FiCheckCircle,
11183
11331
  FiLoader as FiLoader5,
11184
11332
  FiX as FiX8,
@@ -11213,7 +11361,7 @@ var GroupItem = ({
11213
11361
  useEffect21(() => {
11214
11362
  adjustHeight();
11215
11363
  }, [group.text]);
11216
- return /* @__PURE__ */ React25.createElement("div", { className: "flex flex-col gap-2 mb-3 pl-3 border-l border-white/10 relative group/item animate-in fade-in slide-in-from-left-2 duration-300" }, /* @__PURE__ */ React25.createElement("div", { className: "absolute -left-[1px] top-4 w-2 h-px bg-white/20" }), /* @__PURE__ */ React25.createElement(
11364
+ return /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col gap-2 mb-3 pl-3 border-l border-white/10 relative group/item animate-in fade-in slide-in-from-left-2 duration-300" }, /* @__PURE__ */ React26.createElement("div", { className: "absolute -left-[1px] top-4 w-2 h-px bg-white/20" }), /* @__PURE__ */ React26.createElement(
11217
11365
  "div",
11218
11366
  {
11219
11367
  className: `
@@ -11221,7 +11369,7 @@ var GroupItem = ({
11221
11369
  ${isPickingForThisGroup ? "bg-indigo-500/10 border-l-2 border-indigo-500" : "hover:bg-white/5 border-l-2 border-transparent hover:border-white/20"}
11222
11370
  `
11223
11371
  },
11224
- /* @__PURE__ */ React25.createElement(
11372
+ /* @__PURE__ */ React26.createElement(
11225
11373
  "textarea",
11226
11374
  {
11227
11375
  ref: textareaRef,
@@ -11239,9 +11387,9 @@ var GroupItem = ({
11239
11387
  }
11240
11388
  }
11241
11389
  ),
11242
- group.ancestries && group.ancestries.length > 0 && /* @__PURE__ */ React25.createElement("div", { className: "flex flex-wrap gap-2 mt-1" }, group.ancestries.map((anc) => {
11390
+ group.ancestries && group.ancestries.length > 0 && /* @__PURE__ */ React26.createElement("div", { className: "flex flex-wrap gap-2 mt-1" }, group.ancestries.map((anc) => {
11243
11391
  const isValid = availableIds.has(String(anc.ancestry_id));
11244
- return /* @__PURE__ */ React25.createElement(
11392
+ return /* @__PURE__ */ React26.createElement(
11245
11393
  "div",
11246
11394
  {
11247
11395
  key: anc.ancestry_id,
@@ -11253,40 +11401,40 @@ var GroupItem = ({
11253
11401
  },
11254
11402
  isValid ? (
11255
11403
  // [MANTIDO] Botão Play visível para todos
11256
- /* @__PURE__ */ React25.createElement(
11404
+ /* @__PURE__ */ React26.createElement(
11257
11405
  "button",
11258
11406
  {
11259
11407
  onClick: () => onPlayAncestry(anc.ancestry_id),
11260
11408
  className: "text-indigo-400 hover:text-white hover:bg-indigo-500 p-1 rounded-full transition-colors",
11261
11409
  title: "Renderizar no cen\xE1rio"
11262
11410
  },
11263
- /* @__PURE__ */ React25.createElement(FiPlay, { size: 10, className: "ml-0.5 fill-current" })
11411
+ /* @__PURE__ */ React26.createElement(FiPlay, { size: 10, className: "ml-0.5 fill-current" })
11264
11412
  )
11265
- ) : /* @__PURE__ */ React25.createElement("div", { className: "p-1 text-red-500 cursor-not-allowed" }, /* @__PURE__ */ React25.createElement(FiAlertTriangle, { size: 10 })),
11266
- /* @__PURE__ */ React25.createElement(
11413
+ ) : /* @__PURE__ */ React26.createElement("div", { className: "p-1 text-red-500 cursor-not-allowed" }, /* @__PURE__ */ React26.createElement(FiAlertTriangle, { size: 10 })),
11414
+ /* @__PURE__ */ React26.createElement(
11267
11415
  "span",
11268
11416
  {
11269
11417
  className: `font-medium truncate max-w-[150px] ${!isValid && "line-through decoration-red-500/50"}`
11270
11418
  },
11271
11419
  anc.name
11272
11420
  ),
11273
- canEdit && /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement(
11421
+ canEdit && /* @__PURE__ */ React26.createElement(React26.Fragment, null, /* @__PURE__ */ React26.createElement(
11274
11422
  "div",
11275
11423
  {
11276
11424
  className: `w-px h-3 mx-0.5 ${isValid ? "bg-white/10" : "bg-red-500/20"}`
11277
11425
  }
11278
- ), /* @__PURE__ */ React25.createElement(
11426
+ ), /* @__PURE__ */ React26.createElement(
11279
11427
  "button",
11280
11428
  {
11281
11429
  onClick: () => onRemoveAncestry(group.id, anc.ancestry_id),
11282
11430
  className: `${isValid ? "text-slate-500 hover:text-red-400" : "text-red-400 hover:text-red-200"} p-0.5 rounded transition-colors`,
11283
11431
  title: "Remover men\xE7\xE3o"
11284
11432
  },
11285
- /* @__PURE__ */ React25.createElement(FiX8, { size: 12 })
11433
+ /* @__PURE__ */ React26.createElement(FiX8, { size: 12 })
11286
11434
  ))
11287
11435
  );
11288
11436
  })),
11289
- canEdit && /* @__PURE__ */ React25.createElement("div", { className: "flex items-center justify-between pt-2 mt-1 border-t border-white/5 opacity-40 group-hover/item:opacity-100 transition-opacity" }, /* @__PURE__ */ React25.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React25.createElement(
11437
+ canEdit && /* @__PURE__ */ React26.createElement("div", { className: "flex items-center justify-between pt-2 mt-1 border-t border-white/5 opacity-40 group-hover/item:opacity-100 transition-opacity" }, /* @__PURE__ */ React26.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React26.createElement(
11290
11438
  "button",
11291
11439
  {
11292
11440
  onClick: () => onRequestPickAncestry(group.id),
@@ -11296,17 +11444,17 @@ var GroupItem = ({
11296
11444
  `,
11297
11445
  title: "Adicionar Ancestralidade a este grupo"
11298
11446
  },
11299
- isPickingForThisGroup ? /* @__PURE__ */ React25.createElement(FiCheckCircle, { size: 12 }) : /* @__PURE__ */ React25.createElement(FiSearch7, { size: 12 }),
11447
+ isPickingForThisGroup ? /* @__PURE__ */ React26.createElement(FiCheckCircle, { size: 12 }) : /* @__PURE__ */ React26.createElement(FiSearch8, { size: 12 }),
11300
11448
  isPickingForThisGroup ? "Selecionando..." : "Adicionar"
11301
- ), /* @__PURE__ */ React25.createElement(
11449
+ ), /* @__PURE__ */ React26.createElement(
11302
11450
  "button",
11303
11451
  {
11304
11452
  onClick: () => onAddSubgroup(group.id),
11305
11453
  className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors",
11306
11454
  title: "Criar Subgrupo"
11307
11455
  },
11308
- /* @__PURE__ */ React25.createElement(FiPlus10, { size: 14 })
11309
- )), /* @__PURE__ */ React25.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React25.createElement(
11456
+ /* @__PURE__ */ React26.createElement(FiPlus10, { size: 14 })
11457
+ )), /* @__PURE__ */ React26.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React26.createElement(
11310
11458
  "button",
11311
11459
  {
11312
11460
  onClick: () => onIndent(group.id),
@@ -11314,25 +11462,25 @@ var GroupItem = ({
11314
11462
  className: `p-1.5 rounded transition-colors ${!canIndent ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}`,
11315
11463
  title: "Aninhar no grupo acima"
11316
11464
  },
11317
- /* @__PURE__ */ React25.createElement(FiArrowRight, { size: 14 })
11318
- ), /* @__PURE__ */ React25.createElement(
11465
+ /* @__PURE__ */ React26.createElement(FiArrowRight2, { size: 14 })
11466
+ ), /* @__PURE__ */ React26.createElement(
11319
11467
  "button",
11320
11468
  {
11321
11469
  onClick: () => onOutdent(group.id),
11322
11470
  className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors",
11323
11471
  title: "Desaninhar"
11324
11472
  },
11325
- /* @__PURE__ */ React25.createElement(FiArrowLeft3, { size: 14 })
11326
- ), /* @__PURE__ */ React25.createElement("div", { className: "w-px h-3 bg-white/10 mx-1" }), /* @__PURE__ */ React25.createElement(
11473
+ /* @__PURE__ */ React26.createElement(FiArrowLeft3, { size: 14 })
11474
+ ), /* @__PURE__ */ React26.createElement("div", { className: "w-px h-3 bg-white/10 mx-1" }), /* @__PURE__ */ React26.createElement(
11327
11475
  "button",
11328
11476
  {
11329
11477
  onClick: () => onDelete(group.id),
11330
11478
  className: "p-1.5 text-slate-600 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors",
11331
11479
  title: "Remover Grupo"
11332
11480
  },
11333
- /* @__PURE__ */ React25.createElement(FiTrash23, { size: 14 })
11481
+ /* @__PURE__ */ React26.createElement(FiTrash23, { size: 14 })
11334
11482
  )))
11335
- ), group.children && group.children.length > 0 && /* @__PURE__ */ React25.createElement("div", { className: "ml-2" }, group.children.map((childGroup, idx) => /* @__PURE__ */ React25.createElement(
11483
+ ), group.children && group.children.length > 0 && /* @__PURE__ */ React26.createElement("div", { className: "ml-2" }, group.children.map((childGroup, idx) => /* @__PURE__ */ React26.createElement(
11336
11484
  GroupItem,
11337
11485
  {
11338
11486
  key: childGroup.id,
@@ -11587,33 +11735,33 @@ function AncestryBoard({
11587
11735
  });
11588
11736
  };
11589
11737
  if (!isOpen) return null;
11590
- return /* @__PURE__ */ React25.createElement(
11738
+ return /* @__PURE__ */ React26.createElement(
11591
11739
  "div",
11592
11740
  {
11593
11741
  className: "fixed inset-0 z-[2200] bg-black/80 backdrop-blur-sm flex items-center justify-center p-2",
11594
11742
  onClick: onClose
11595
11743
  },
11596
- /* @__PURE__ */ React25.createElement(
11744
+ /* @__PURE__ */ React26.createElement(
11597
11745
  "div",
11598
11746
  {
11599
11747
  className: "bg-slate-950 border border-white/10 rounded-xl w-[98vw] h-[97vh] flex flex-col shadow-2xl overflow-hidden animate-in fade-in zoom-in-95 duration-200",
11600
11748
  onClick: (e) => e.stopPropagation()
11601
11749
  },
11602
- /* @__PURE__ */ React25.createElement("div", { className: "h-14 px-4 border-b border-white/10 bg-slate-900/90 flex items-center justify-between shrink-0" }, /* @__PURE__ */ React25.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React25.createElement("h3", { className: "text-base font-semibold text-white flex items-center gap-2 whitespace-nowrap" }, /* @__PURE__ */ React25.createElement(FiLayers6, { className: "text-indigo-400" }), "Ancestry Board"), saveStatus !== "idle" && /* @__PURE__ */ React25.createElement("div", { className: "flex items-center gap-2 animate-in fade-in slide-in-from-left-2 duration-300" }, /* @__PURE__ */ React25.createElement("div", { className: "w-px h-4 bg-white/10 mx-1" }), /* @__PURE__ */ React25.createElement("div", { className: "flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-slate-900/50 border border-white/5" }, saveStatus === "saving" && /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement(
11750
+ /* @__PURE__ */ React26.createElement("div", { className: "h-14 px-4 border-b border-white/10 bg-slate-900/90 flex items-center justify-between shrink-0" }, /* @__PURE__ */ React26.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React26.createElement("h3", { className: "text-base font-semibold text-white flex items-center gap-2 whitespace-nowrap" }, /* @__PURE__ */ React26.createElement(FiLayers6, { className: "text-indigo-400" }), "Ancestry Board"), saveStatus !== "idle" && /* @__PURE__ */ React26.createElement("div", { className: "flex items-center gap-2 animate-in fade-in slide-in-from-left-2 duration-300" }, /* @__PURE__ */ React26.createElement("div", { className: "w-px h-4 bg-white/10 mx-1" }), /* @__PURE__ */ React26.createElement("div", { className: "flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-slate-900/50 border border-white/5" }, saveStatus === "saving" && /* @__PURE__ */ React26.createElement(React26.Fragment, null, /* @__PURE__ */ React26.createElement(
11603
11751
  FiLoader5,
11604
11752
  {
11605
11753
  className: "animate-spin text-indigo-400",
11606
11754
  size: 12
11607
11755
  }
11608
- ), /* @__PURE__ */ React25.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-indigo-300" }, "Salvando")), saveStatus === "saved" && /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement(FiCheckCircle, { className: "text-emerald-400", size: 12 }), /* @__PURE__ */ React25.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-slate-400" }, "Salvo")), saveStatus === "error" && /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement("span", { className: "w-2 h-2 rounded-full bg-red-500" }), /* @__PURE__ */ React25.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-red-400" }, "Erro"))))), /* @__PURE__ */ React25.createElement("div", { className: "flex items-center gap-3" }, pickingGroupId && /* @__PURE__ */ React25.createElement("span", { className: "text-xs text-indigo-300 font-medium animate-pulse hidden sm:inline-block mr-2" }, "Selecione na lateral..."), canEdit && /* @__PURE__ */ React25.createElement(
11756
+ ), /* @__PURE__ */ React26.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-indigo-300" }, "Salvando")), saveStatus === "saved" && /* @__PURE__ */ React26.createElement(React26.Fragment, null, /* @__PURE__ */ React26.createElement(FiCheckCircle, { className: "text-emerald-400", size: 12 }), /* @__PURE__ */ React26.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-slate-400" }, "Salvo")), saveStatus === "error" && /* @__PURE__ */ React26.createElement(React26.Fragment, null, /* @__PURE__ */ React26.createElement("span", { className: "w-2 h-2 rounded-full bg-red-500" }), /* @__PURE__ */ React26.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-red-400" }, "Erro"))))), /* @__PURE__ */ React26.createElement("div", { className: "flex items-center gap-3" }, pickingGroupId && /* @__PURE__ */ React26.createElement("span", { className: "text-xs text-indigo-300 font-medium animate-pulse hidden sm:inline-block mr-2" }, "Selecione na lateral..."), canEdit && /* @__PURE__ */ React26.createElement(
11609
11757
  "button",
11610
11758
  {
11611
11759
  onClick: handleAddRootGroup,
11612
11760
  className: "\n flex items-center gap-2 px-3 py-1.5 \n bg-white/5 hover:bg-white/10 \n border border-white/10 hover:border-white/20\n backdrop-blur-sm\n text-slate-200 hover:text-white\n rounded-md transition-all duration-200\n text-xs font-medium shadow-sm\n "
11613
11761
  },
11614
- /* @__PURE__ */ React25.createElement(FiPlus10, { size: 14, className: "text-indigo-400" }),
11615
- /* @__PURE__ */ React25.createElement("span", { className: "hidden sm:inline" }, "Novo Grupo")
11616
- ), /* @__PURE__ */ React25.createElement(
11762
+ /* @__PURE__ */ React26.createElement(FiPlus10, { size: 14, className: "text-indigo-400" }),
11763
+ /* @__PURE__ */ React26.createElement("span", { className: "hidden sm:inline" }, "Novo Grupo")
11764
+ ), /* @__PURE__ */ React26.createElement(
11617
11765
  "button",
11618
11766
  {
11619
11767
  onClick: onClose,
@@ -11621,7 +11769,7 @@ function AncestryBoard({
11621
11769
  },
11622
11770
  "\xD7"
11623
11771
  ))),
11624
- /* @__PURE__ */ React25.createElement("div", { className: "flex flex-1 overflow-hidden" }, /* @__PURE__ */ React25.createElement(
11772
+ /* @__PURE__ */ React26.createElement("div", { className: "flex flex-1 overflow-hidden" }, /* @__PURE__ */ React26.createElement(
11625
11773
  "div",
11626
11774
  {
11627
11775
  className: `
@@ -11630,12 +11778,12 @@ function AncestryBoard({
11630
11778
  min-w-[280px] max-w-[500px] bg-slate-900
11631
11779
  `
11632
11780
  },
11633
- /* @__PURE__ */ React25.createElement("div", { className: "p-3 border-b border-white/5 bg-slate-900/50" }, /* @__PURE__ */ React25.createElement("div", { className: "relative group" }, /* @__PURE__ */ React25.createElement(
11634
- FiSearch7,
11781
+ /* @__PURE__ */ React26.createElement("div", { className: "p-3 border-b border-white/5 bg-slate-900/50" }, /* @__PURE__ */ React26.createElement("div", { className: "relative group" }, /* @__PURE__ */ React26.createElement(
11782
+ FiSearch8,
11635
11783
  {
11636
11784
  className: `absolute left-3 top-1/2 -translate-y-1/2 transition-colors ${pickingGroupId ? "text-indigo-400" : "text-slate-500 group-focus-within:text-indigo-400"}`
11637
11785
  }
11638
- ), /* @__PURE__ */ React25.createElement(
11786
+ ), /* @__PURE__ */ React26.createElement(
11639
11787
  "input",
11640
11788
  {
11641
11789
  type: "text",
@@ -11649,10 +11797,10 @@ function AncestryBoard({
11649
11797
  autoFocus: !pickingGroupId
11650
11798
  }
11651
11799
  ))),
11652
- /* @__PURE__ */ React25.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-3 space-y-2" }, filtered.map((anc) => {
11800
+ /* @__PURE__ */ React26.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-3 space-y-2" }, filtered.map((anc) => {
11653
11801
  const parentNodeName = nodeNamesMap.get(String(anc.ancestral_node)) || "Node Desconhecido";
11654
11802
  const isPicking = !!pickingGroupId;
11655
- return /* @__PURE__ */ React25.createElement(
11803
+ return /* @__PURE__ */ React26.createElement(
11656
11804
  "div",
11657
11805
  {
11658
11806
  key: anc.ancestry_id,
@@ -11664,7 +11812,7 @@ function AncestryBoard({
11664
11812
  ${isPicking ? "border-indigo-500/30 bg-indigo-500/5 hover:bg-indigo-500/20 hover:border-indigo-400 cursor-pointer" : "border-white/5 bg-slate-800/40 hover:bg-indigo-600/10 hover:border-indigo-500/30 cursor-default"}
11665
11813
  `
11666
11814
  },
11667
- /* @__PURE__ */ React25.createElement(
11815
+ /* @__PURE__ */ React26.createElement(
11668
11816
  "div",
11669
11817
  {
11670
11818
  className: `
@@ -11672,10 +11820,10 @@ function AncestryBoard({
11672
11820
  ${isPicking ? "bg-indigo-500 text-white border-indigo-400" : "bg-slate-800 text-indigo-400 border-white/5 group-hover:bg-indigo-500 group-hover:text-white"}
11673
11821
  `
11674
11822
  },
11675
- isPicking ? /* @__PURE__ */ React25.createElement(FiPlus10, { size: 16 }) : /* @__PURE__ */ React25.createElement(FiLayers6, { size: 14 })
11823
+ isPicking ? /* @__PURE__ */ React26.createElement(FiPlus10, { size: 16 }) : /* @__PURE__ */ React26.createElement(FiLayers6, { size: 14 })
11676
11824
  ),
11677
- /* @__PURE__ */ React25.createElement("div", { className: "flex-1 min-w-0 pb-2" }, /* @__PURE__ */ React25.createElement("div", { className: "flex items-center justify-between gap-2" }, /* @__PURE__ */ React25.createElement("h4", { className: "text-sm font-medium text-slate-200 group-hover:text-white truncate transition-colors" }, anc.name || "Sem Nome"), anc.is_private && /* @__PURE__ */ React25.createElement("span", { className: "text-[9px] px-1 py-0.5 rounded bg-amber-500/10 text-amber-300 border border-amber-500/20" }, "Priv")), /* @__PURE__ */ React25.createElement("div", { className: "flex items-center gap-1.5 mt-0.5 text-[11px] text-slate-500 group-hover:text-indigo-200/70 transition-colors" }, /* @__PURE__ */ React25.createElement(FiCornerUpRight4, { size: 10 }), /* @__PURE__ */ React25.createElement("span", { className: "truncate max-w-[120px]" }, parentNodeName)), anc.description && /* @__PURE__ */ React25.createElement("p", { className: "mt-1.5 text-[11px] text-slate-400 line-clamp-2 leading-relaxed opacity-80" }, anc.description)),
11678
- !isPicking && /* @__PURE__ */ React25.createElement(
11825
+ /* @__PURE__ */ React26.createElement("div", { className: "flex-1 min-w-0 pb-2" }, /* @__PURE__ */ React26.createElement("div", { className: "flex items-center justify-between gap-2" }, /* @__PURE__ */ React26.createElement("h4", { className: "text-sm font-medium text-slate-200 group-hover:text-white truncate transition-colors" }, anc.name || "Sem Nome"), anc.is_private && /* @__PURE__ */ React26.createElement("span", { className: "text-[9px] px-1 py-0.5 rounded bg-amber-500/10 text-amber-300 border border-amber-500/20" }, "Priv")), /* @__PURE__ */ React26.createElement("div", { className: "flex items-center gap-1.5 mt-0.5 text-[11px] text-slate-500 group-hover:text-indigo-200/70 transition-colors" }, /* @__PURE__ */ React26.createElement(FiCornerUpRight4, { size: 10 }), /* @__PURE__ */ React26.createElement("span", { className: "truncate max-w-[120px]" }, parentNodeName)), anc.description && /* @__PURE__ */ React26.createElement("p", { className: "mt-1.5 text-[11px] text-slate-400 line-clamp-2 leading-relaxed opacity-80" }, anc.description)),
11826
+ !isPicking && /* @__PURE__ */ React26.createElement(
11679
11827
  "button",
11680
11828
  {
11681
11829
  onClick: (e) => {
@@ -11685,11 +11833,11 @@ function AncestryBoard({
11685
11833
  className: "absolute right-2 bottom-2 opacity-0 group-hover:opacity-100 transition-all duration-300 transform translate-y-2 group-hover:translate-y-0 z-10",
11686
11834
  title: "Renderizar Ancestralidade"
11687
11835
  },
11688
- /* @__PURE__ */ React25.createElement("div", { className: "bg-indigo-500 text-white p-2 rounded-full shadow-lg hover:bg-indigo-400 hover:scale-110 transition-all" }, /* @__PURE__ */ React25.createElement(FiPlay, { size: 14, className: "ml-0.5" }))
11836
+ /* @__PURE__ */ React26.createElement("div", { className: "bg-indigo-500 text-white p-2 rounded-full shadow-lg hover:bg-indigo-400 hover:scale-110 transition-all" }, /* @__PURE__ */ React26.createElement(FiPlay, { size: 14, className: "ml-0.5" }))
11689
11837
  )
11690
11838
  );
11691
11839
  }))
11692
- ), /* @__PURE__ */ React25.createElement("div", { className: "flex flex-col flex-1 bg-slate-950/30" }, /* @__PURE__ */ React25.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 space-y-4" }, groups.length === 0 ? /* @__PURE__ */ React25.createElement("div", { className: "flex flex-col items-center justify-center h-full text-slate-500 gap-3 border-2 border-dashed border-white/5 rounded-xl m-4 bg-slate-900/20" }, /* @__PURE__ */ React25.createElement(FiLayers6, { size: 24, className: "opacity-20" }), /* @__PURE__ */ React25.createElement("p", { className: "text-xs text-center px-4" }, canEdit ? /* @__PURE__ */ React25.createElement(React25.Fragment, null, "Nenhum grupo criado.", /* @__PURE__ */ React25.createElement("br", null), 'Use o bot\xE3o "Novo Grupo" acima.') : /* @__PURE__ */ React25.createElement(React25.Fragment, null, "Nenhum grupo dispon\xEDvel para visualiza\xE7\xE3o."))) : groups.map((group, index) => /* @__PURE__ */ React25.createElement(
11840
+ ), /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col flex-1 bg-slate-950/30" }, /* @__PURE__ */ React26.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 space-y-4" }, groups.length === 0 ? /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col items-center justify-center h-full text-slate-500 gap-3 border-2 border-dashed border-white/5 rounded-xl m-4 bg-slate-900/20" }, /* @__PURE__ */ React26.createElement(FiLayers6, { size: 24, className: "opacity-20" }), /* @__PURE__ */ React26.createElement("p", { className: "text-xs text-center px-4" }, canEdit ? /* @__PURE__ */ React26.createElement(React26.Fragment, null, "Nenhum grupo criado.", /* @__PURE__ */ React26.createElement("br", null), 'Use o bot\xE3o "Novo Grupo" acima.') : /* @__PURE__ */ React26.createElement(React26.Fragment, null, "Nenhum grupo dispon\xEDvel para visualiza\xE7\xE3o."))) : groups.map((group, index) => /* @__PURE__ */ React26.createElement(
11693
11841
  GroupItem,
11694
11842
  {
11695
11843
  key: group.id,
@@ -11709,7 +11857,7 @@ function AncestryBoard({
11709
11857
  canEdit
11710
11858
  }
11711
11859
  ))))),
11712
- /* @__PURE__ */ React25.createElement("div", { className: "px-5 py-2 border-t border-white/10 bg-slate-950/50 text-xs text-slate-500 flex justify-between flex-shrink-0" }, /* @__PURE__ */ React25.createElement("span", null, filtered.length, " itens encontrados"), /* @__PURE__ */ React25.createElement("span", null, groups.length, " grupos raiz"))
11860
+ /* @__PURE__ */ React26.createElement("div", { className: "px-5 py-2 border-t border-white/10 bg-slate-950/50 text-xs text-slate-500 flex justify-between flex-shrink-0" }, /* @__PURE__ */ React26.createElement("span", null, filtered.length, " itens encontrados"), /* @__PURE__ */ React26.createElement("span", null, groups.length, " grupos raiz"))
11713
11861
  )
11714
11862
  );
11715
11863
  }
@@ -13800,12 +13948,11 @@ function XViewScene({
13800
13948
  timelineEndLabel,
13801
13949
  ...cleanQuestNode
13802
13950
  } = questNode;
13803
- const newTimeline = [...cleanQuestNode.timeline || [], {
13804
- type: "status_changed",
13805
- timestamp: Date.now(),
13806
- actorId: ((_a2 = session == null ? void 0 : session.user) == null ? void 0 : _a2.id) || "unknown",
13807
- description: `Quest iniciada ("In Progress") por ${((_b2 = session == null ? void 0 : session.user) == null ? void 0 : _b2.name) || "usu\xE1rio"}.`
13808
- }];
13951
+ const newTimeline = [...cleanQuestNode.timeline || [], createTimelineEntry(
13952
+ ((_a2 = session == null ? void 0 : session.user) == null ? void 0 : _a2.id) || "unknown",
13953
+ `Quest iniciada ("In Progress") por ${((_b2 = session == null ? void 0 : session.user) == null ? void 0 : _b2.name) || "usu\xE1rio"}.`,
13954
+ "status_changed"
13955
+ )];
13809
13956
  const updatedNode = {
13810
13957
  ...cleanQuestNode,
13811
13958
  status: "In Progress",
@@ -13819,7 +13966,7 @@ function XViewScene({
13819
13966
  setDetailsNode(updatedNode);
13820
13967
  }, [session, actionHandlerContext]);
13821
13968
  const handleFinishQuestQuick = useCallback4((questNode) => {
13822
- var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2;
13969
+ var _a2, _b2, _c2, _d2, _e2, _f2;
13823
13970
  if (!questNode || !actionHandlerContext) return;
13824
13971
  const {
13825
13972
  labelObject,
@@ -13839,20 +13986,18 @@ function XViewScene({
13839
13986
  if (currentReviewerIdx !== -1 && reviewStack[currentReviewerIdx].userId === cleanQuestNode.assignee_id) {
13840
13987
  reviewStack[currentReviewerIdx].status = "completed";
13841
13988
  nextIdxToAssign = currentReviewerIdx + 1;
13842
- newTimeline.push({
13843
- type: "review_completed",
13844
- timestamp: Date.now(),
13845
- actorId: ((_a2 = session == null ? void 0 : session.user) == null ? void 0 : _a2.id) || cleanQuestNode.assignee_id,
13846
- description: `Review conclu\xEDda por ${((_b2 = viewMembers.find((m) => m.id === cleanQuestNode.assignee_id)) == null ? void 0 : _b2.name) || "revisor"}.`
13847
- });
13989
+ newTimeline.push(createTimelineEntry(
13990
+ ((_a2 = session == null ? void 0 : session.user) == null ? void 0 : _a2.id) || cleanQuestNode.assignee_id,
13991
+ `Review conclu\xEDda por ${((_b2 = viewMembers.find((m) => m.id === cleanQuestNode.assignee_id)) == null ? void 0 : _b2.name) || "revisor"}.`,
13992
+ "review_completed"
13993
+ ));
13848
13994
  } else {
13849
13995
  nextIdxToAssign = currentReviewerIdx !== -1 ? currentReviewerIdx : reviewStack.length;
13850
- newTimeline.push({
13851
- type: "task_completed",
13852
- timestamp: Date.now(),
13853
- actorId: ((_c2 = session == null ? void 0 : session.user) == null ? void 0 : _c2.id) || cleanQuestNode.assignee_id,
13854
- description: `Tarefa principal entregue por ${((_d2 = viewMembers.find((m) => m.id === cleanQuestNode.assignee_id)) == null ? void 0 : _d2.name) || ((_e2 = session == null ? void 0 : session.user) == null ? void 0 : _e2.name) || "respons\xE1vel"}.`
13855
- });
13996
+ newTimeline.push(createTimelineEntry(
13997
+ ((_c2 = session == null ? void 0 : session.user) == null ? void 0 : _c2.id) || cleanQuestNode.assignee_id,
13998
+ `Tarefa principal entregue por ${((_d2 = viewMembers.find((m) => m.id === cleanQuestNode.assignee_id)) == null ? void 0 : _d2.name) || ((_e2 = session == null ? void 0 : session.user) == null ? void 0 : _e2.name) || "respons\xE1vel"}.`,
13999
+ "task_completed"
14000
+ ));
13856
14001
  }
13857
14002
  if (nextIdxToAssign < reviewStack.length) {
13858
14003
  const remainingMandatory = reviewStack.slice(nextIdxToAssign).some((r) => r.mandatory);
@@ -13861,13 +14006,12 @@ function XViewScene({
13861
14006
  const nextReviewer = reviewStack[nextIdxToAssign];
13862
14007
  nextAssigneeId = nextReviewer.userId;
13863
14008
  nextStatus = "Review";
13864
- newTimeline.push({
13865
- type: "assignee_changed",
13866
- timestamp: Date.now() + 1,
13867
- actorId: ((_f2 = session == null ? void 0 : session.user) == null ? void 0 : _f2.id) || "system",
13868
- to_assignee_id: nextAssigneeId,
13869
- description: `Quest atribu\xEDda para revis\xE3o a ${((_g2 = viewMembers.find((m) => m.id === nextAssigneeId)) == null ? void 0 : _g2.name) || "revisor"}.`
13870
- });
14009
+ newTimeline.push(createTimelineEntry(
14010
+ "system",
14011
+ `Quest atribu\xEDda para revis\xE3o a ${((_f2 = viewMembers.find((m) => m.id === nextAssigneeId)) == null ? void 0 : _f2.name) || "revisor"}.`,
14012
+ "assignee_changed",
14013
+ { metadata: { to_assignee_id: nextAssigneeId } }
14014
+ ));
13871
14015
  } else {
13872
14016
  nextStatus = "Done";
13873
14017
  for (let i = nextIdxToAssign; i < reviewStack.length; i++) {
@@ -13878,12 +14022,11 @@ function XViewScene({
13878
14022
  nextStatus = "Done";
13879
14023
  }
13880
14024
  if (nextStatus === "Done") {
13881
- newTimeline.push({
13882
- type: "quest_finished",
13883
- timestamp: Date.now() + 2,
13884
- actorId: ((_h2 = session == null ? void 0 : session.user) == null ? void 0 : _h2.id) || "system",
13885
- description: `Quest finalizada!`
13886
- });
14025
+ newTimeline.push(createTimelineEntry(
14026
+ "system",
14027
+ `Quest finalizada!`,
14028
+ "quest_finished"
14029
+ ));
13887
14030
  }
13888
14031
  const updatedNode = {
13889
14032
  ...cleanQuestNode,
@@ -15896,10 +16039,10 @@ function XViewScene({
15896
16039
  // <-- handleCancelQuest adicionado aqui
15897
16040
  ]);
15898
16041
  if (isLoading || status === "loading" || permissionStatus === "loading") {
15899
- return /* @__PURE__ */ React26.createElement(LoadingScreen, null);
16042
+ return /* @__PURE__ */ React27.createElement(LoadingScreen, null);
15900
16043
  }
15901
16044
  if (permissionStatus === "denied") {
15902
- return /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col items-center justify-center min-h-screen w-full bg-slate-950 text-white" }, /* @__PURE__ */ React26.createElement("div", { className: "bg-slate-900/50 p-8 rounded-2xl border border-slate-800 shadow-2xl text-center max-w-md" }, /* @__PURE__ */ React26.createElement("div", { className: "mb-4 text-red-500" }, /* @__PURE__ */ React26.createElement(
16045
+ return /* @__PURE__ */ React27.createElement("div", { className: "flex flex-col items-center justify-center min-h-screen w-full bg-slate-950 text-white" }, /* @__PURE__ */ React27.createElement("div", { className: "bg-slate-900/50 p-8 rounded-2xl border border-slate-800 shadow-2xl text-center max-w-md" }, /* @__PURE__ */ React27.createElement("div", { className: "mb-4 text-red-500" }, /* @__PURE__ */ React27.createElement(
15903
16046
  "svg",
15904
16047
  {
15905
16048
  xmlns: "http://www.w3.org/2000/svg",
@@ -15909,7 +16052,7 @@ function XViewScene({
15909
16052
  stroke: "currentColor",
15910
16053
  className: "w-16 h-16 mx-auto"
15911
16054
  },
15912
- /* @__PURE__ */ React26.createElement(
16055
+ /* @__PURE__ */ React27.createElement(
15913
16056
  "path",
15914
16057
  {
15915
16058
  strokeLinecap: "round",
@@ -15917,13 +16060,13 @@ function XViewScene({
15917
16060
  d: "M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"
15918
16061
  }
15919
16062
  )
15920
- )), /* @__PURE__ */ React26.createElement("h2", { className: "text-2xl font-bold mb-2" }, "Acesso Negado"), /* @__PURE__ */ React26.createElement("p", { className: "text-slate-400 mb-6" }, "Voc\xEA n\xE3o tem permiss\xE3o para acessar este conte\xFAdo. Solicite acesso ao propriet\xE1rio ou verifique se est\xE1 na conta correta."), /* @__PURE__ */ React26.createElement(
16063
+ )), /* @__PURE__ */ React27.createElement("h2", { className: "text-2xl font-bold mb-2" }, "Acesso Negado"), /* @__PURE__ */ React27.createElement("p", { className: "text-slate-400 mb-6" }, "Voc\xEA n\xE3o tem permiss\xE3o para acessar este conte\xFAdo. Solicite acesso ao propriet\xE1rio ou verifique se est\xE1 na conta correta."), /* @__PURE__ */ React27.createElement(
15921
16064
  "button",
15922
16065
  {
15923
16066
  onClick: () => router.push("/dashboard/scenes"),
15924
16067
  className: "flex items-center justify-center gap-2 w-full py-3 px-4 bg-blue-600 hover:bg-blue-700 text-white rounded-lg transition-colors font-medium"
15925
16068
  },
15926
- /* @__PURE__ */ React26.createElement(
16069
+ /* @__PURE__ */ React27.createElement(
15927
16070
  "svg",
15928
16071
  {
15929
16072
  xmlns: "http://www.w3.org/2000/svg",
@@ -15933,7 +16076,7 @@ function XViewScene({
15933
16076
  stroke: "currentColor",
15934
16077
  className: "w-5 h-5"
15935
16078
  },
15936
- /* @__PURE__ */ React26.createElement(
16079
+ /* @__PURE__ */ React27.createElement(
15937
16080
  "path",
15938
16081
  {
15939
16082
  strokeLinecap: "round",
@@ -15945,7 +16088,7 @@ function XViewScene({
15945
16088
  "Voltar para Scenes"
15946
16089
  )));
15947
16090
  }
15948
- return /* @__PURE__ */ React26.createElement(
16091
+ return /* @__PURE__ */ React27.createElement(
15949
16092
  "div",
15950
16093
  {
15951
16094
  ref: mountRef,
@@ -15957,7 +16100,7 @@ function XViewScene({
15957
16100
  cursor: stateRef.current.connection.isActive || stateRef.current.relink.isActive || ancestryMode.isActive ? "crosshair" : creationMode.isActive ? "default" : "grab"
15958
16101
  }
15959
16102
  },
15960
- userPermissionRole !== "link_viewer" && /* @__PURE__ */ React26.createElement(
16103
+ userPermissionRole !== "link_viewer" && /* @__PURE__ */ React27.createElement(
15961
16104
  XViewSidebar,
15962
16105
  {
15963
16106
  dbNodes: searchableDbNodes,
@@ -15977,7 +16120,7 @@ function XViewScene({
15977
16120
  userRole: userPermissionRole
15978
16121
  }
15979
16122
  ),
15980
- creationMode.isActive && /* @__PURE__ */ React26.createElement(
16123
+ creationMode.isActive && /* @__PURE__ */ React27.createElement(
15981
16124
  InSceneCreationForm,
15982
16125
  {
15983
16126
  onSave: (data) => userActionHandlers.handleSaveNode(actionHandlerContext, data),
@@ -16009,7 +16152,7 @@ function XViewScene({
16009
16152
  availableAncestries: allAvailableAncestries
16010
16153
  }
16011
16154
  ),
16012
- versionMode.isActive && /* @__PURE__ */ React26.createElement(
16155
+ versionMode.isActive && /* @__PURE__ */ React27.createElement(
16013
16156
  InSceneVersionForm,
16014
16157
  {
16015
16158
  onSave: (data) => userActionHandlers.handleSaveVersionNode(actionHandlerContext, data),
@@ -16035,7 +16178,7 @@ function XViewScene({
16035
16178
  availableAncestries: allAvailableAncestries
16036
16179
  }
16037
16180
  ),
16038
- questMode.isActive && /* @__PURE__ */ React26.createElement(
16181
+ questMode.isActive && /* @__PURE__ */ React27.createElement(
16039
16182
  InSceneQuestForm,
16040
16183
  {
16041
16184
  onSave: (data) => handleSaveQuestNode(actionHandlerContext, data),
@@ -16061,7 +16204,7 @@ function XViewScene({
16061
16204
  viewMembers
16062
16205
  }
16063
16206
  ),
16064
- readingMode.isActive && readingMode.ancestry && /* @__PURE__ */ React26.createElement(
16207
+ readingMode.isActive && readingMode.ancestry && /* @__PURE__ */ React27.createElement(
16065
16208
  "div",
16066
16209
  {
16067
16210
  className: `ui-overlay absolute group rounded-2xl border border-white/10 bg-slate-950/70 backdrop-blur-xl shadow-[0_20px_80px_rgba(0,0,0,0.6)] ring-1 ring-white/10 text-white overflow-hidden flex flex-col ${isReadModeResizing ? "transition-none" : "transition-all duration-300 ease-out"}`,
@@ -16074,7 +16217,7 @@ function XViewScene({
16074
16217
  maxWidth: "92vw"
16075
16218
  }
16076
16219
  },
16077
- /* @__PURE__ */ React26.createElement(
16220
+ /* @__PURE__ */ React27.createElement(
16078
16221
  "div",
16079
16222
  {
16080
16223
  onPointerDown: (e) => {
@@ -16085,7 +16228,7 @@ function XViewScene({
16085
16228
  title: "Arraste para redimensionar"
16086
16229
  }
16087
16230
  ),
16088
- /* @__PURE__ */ React26.createElement(
16231
+ /* @__PURE__ */ React27.createElement(
16089
16232
  DescriptionReadModePanel,
16090
16233
  {
16091
16234
  key: readingMode.branchStack.length > 0 ? readingMode.branchStack[readingMode.branchStack.length - 1].branchId : readingMode.ancestry.ancestry_id,
@@ -16120,7 +16263,7 @@ function XViewScene({
16120
16263
  }
16121
16264
  )
16122
16265
  ),
16123
- ancestryMode.isActive && ancestryMode.tree && /* @__PURE__ */ React26.createElement(
16266
+ ancestryMode.isActive && ancestryMode.tree && /* @__PURE__ */ React27.createElement(
16124
16267
  CreateAncestryPanel,
16125
16268
  {
16126
16269
  ancestryMode,
@@ -16156,7 +16299,7 @@ function XViewScene({
16156
16299
  onRenderAbstractionTree: (data, targetId) => handleRenderAbstractionTree(data, targetId)
16157
16300
  }
16158
16301
  ),
16159
- editingAncestryRel.visible && /* @__PURE__ */ React26.createElement(
16302
+ editingAncestryRel.visible && /* @__PURE__ */ React27.createElement(
16160
16303
  AncestryRelationshipPanel,
16161
16304
  {
16162
16305
  data: editingAncestryRel.data,
@@ -16170,7 +16313,7 @@ function XViewScene({
16170
16313
  onUploadFile: upload_file_action
16171
16314
  }
16172
16315
  ),
16173
- detailsNode && detailsNode.is_quest && /* @__PURE__ */ React26.createElement(
16316
+ detailsNode && detailsNode.is_quest && /* @__PURE__ */ React27.createElement(
16174
16317
  QuestDetailsPanel,
16175
16318
  {
16176
16319
  node: detailsNode,
@@ -16193,7 +16336,7 @@ function XViewScene({
16193
16336
  currentUser: session == null ? void 0 : session.user
16194
16337
  }
16195
16338
  ),
16196
- detailsNode && !detailsNode.is_quest && /* @__PURE__ */ React26.createElement(
16339
+ detailsNode && !detailsNode.is_quest && /* @__PURE__ */ React27.createElement(
16197
16340
  NodeDetailsPanel,
16198
16341
  {
16199
16342
  node: detailsNode,
@@ -16225,7 +16368,7 @@ function XViewScene({
16225
16368
  currentDatasetName: detailsNodeDatasetInfo == null ? void 0 : detailsNodeDatasetInfo.datasetName
16226
16369
  }
16227
16370
  ),
16228
- detailsLink && /* @__PURE__ */ React26.createElement(
16371
+ detailsLink && /* @__PURE__ */ React27.createElement(
16229
16372
  RelationshipDetailsPanel,
16230
16373
  {
16231
16374
  link: detailsLink,
@@ -16239,7 +16382,7 @@ function XViewScene({
16239
16382
  userRole: userPermissionRole
16240
16383
  }
16241
16384
  ),
16242
- ancestryLinkDetails && /* @__PURE__ */ React26.createElement(
16385
+ ancestryLinkDetails && /* @__PURE__ */ React27.createElement(
16243
16386
  AncestryLinkDetailsPanel,
16244
16387
  {
16245
16388
  data: ancestryLinkDetails,
@@ -16250,7 +16393,7 @@ function XViewScene({
16250
16393
  onUploadFile: upload_file_action
16251
16394
  }
16252
16395
  ),
16253
- /* @__PURE__ */ React26.createElement(
16396
+ /* @__PURE__ */ React27.createElement(
16254
16397
  "div",
16255
16398
  {
16256
16399
  ref: tooltipRef,
@@ -16277,7 +16420,7 @@ function XViewScene({
16277
16420
  }
16278
16421
  }
16279
16422
  ),
16280
- /* @__PURE__ */ React26.createElement(
16423
+ /* @__PURE__ */ React27.createElement(
16281
16424
  ContextMenu,
16282
16425
  {
16283
16426
  data: contextMenu,
@@ -16310,7 +16453,7 @@ function XViewScene({
16310
16453
  onFinishQuest: handleFinishQuestQuick
16311
16454
  }
16312
16455
  ),
16313
- /* @__PURE__ */ React26.createElement(
16456
+ /* @__PURE__ */ React27.createElement(
16314
16457
  MultiNodeContextMenu,
16315
16458
  {
16316
16459
  data: multiContextMenu,
@@ -16330,7 +16473,7 @@ function XViewScene({
16330
16473
  )
16331
16474
  }
16332
16475
  ),
16333
- /* @__PURE__ */ React26.createElement(
16476
+ /* @__PURE__ */ React27.createElement(
16334
16477
  RelationshipContextMenu,
16335
16478
  {
16336
16479
  data: relationshipMenu,
@@ -16348,14 +16491,14 @@ function XViewScene({
16348
16491
  onDelete: (data) => userActionHandlers.handleDeleteLink(actionHandlerContext, data)
16349
16492
  }
16350
16493
  ),
16351
- /* @__PURE__ */ React26.createElement(
16494
+ /* @__PURE__ */ React27.createElement(
16352
16495
  ImageViewer,
16353
16496
  {
16354
16497
  data: imageViewer,
16355
16498
  onClose: () => setImageViewer({ ...imageViewer, visible: false })
16356
16499
  }
16357
16500
  ),
16358
- /* @__PURE__ */ React26.createElement(
16501
+ /* @__PURE__ */ React27.createElement(
16359
16502
  AncestryBoard,
16360
16503
  {
16361
16504
  isOpen: isAncestryBoardOpen,
@@ -16368,7 +16511,7 @@ function XViewScene({
16368
16511
  userRole: userPermissionRole
16369
16512
  }
16370
16513
  ),
16371
- /* @__PURE__ */ React26.createElement(
16514
+ /* @__PURE__ */ React27.createElement(
16372
16515
  ImportParentFileModal,
16373
16516
  {
16374
16517
  isOpen: isImportModalOpen,
@@ -16381,7 +16524,7 @@ function XViewScene({
16381
16524
  currentAncestries: ancestryDataRef.current || []
16382
16525
  }
16383
16526
  ),
16384
- invalidTargetError && /* @__PURE__ */ React26.createElement(
16527
+ invalidTargetError && /* @__PURE__ */ React27.createElement(
16385
16528
  "div",
16386
16529
  {
16387
16530
  className: "ui-overlay",
@@ -16406,13 +16549,13 @@ function XViewScene({
16406
16549
  animation: "fadeInDown 0.5s cubic-bezier(0.16, 1, 0.3, 1)"
16407
16550
  }
16408
16551
  },
16409
- /* @__PURE__ */ React26.createElement("style", null, `
16552
+ /* @__PURE__ */ React27.createElement("style", null, `
16410
16553
  @keyframes fadeInDown {
16411
16554
  from { opacity: 0; transform: translate(-50%, -20px); }
16412
16555
  to { opacity: 1; transform: translate(-50%, 0); }
16413
16556
  }
16414
16557
  `),
16415
- /* @__PURE__ */ React26.createElement(
16558
+ /* @__PURE__ */ React27.createElement(
16416
16559
  "svg",
16417
16560
  {
16418
16561
  width: "20",
@@ -16424,12 +16567,12 @@ function XViewScene({
16424
16567
  strokeLinecap: "round",
16425
16568
  strokeLinejoin: "round"
16426
16569
  },
16427
- /* @__PURE__ */ React26.createElement("circle", { cx: "12", cy: "12", r: "10" }),
16428
- /* @__PURE__ */ React26.createElement("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
16429
- /* @__PURE__ */ React26.createElement("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
16570
+ /* @__PURE__ */ React27.createElement("circle", { cx: "12", cy: "12", r: "10" }),
16571
+ /* @__PURE__ */ React27.createElement("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
16572
+ /* @__PURE__ */ React27.createElement("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
16430
16573
  ),
16431
- /* @__PURE__ */ React26.createElement("span", { style: { fontSize: "14px", fontWeight: 500 } }, invalidTargetError),
16432
- /* @__PURE__ */ React26.createElement(
16574
+ /* @__PURE__ */ React27.createElement("span", { style: { fontSize: "14px", fontWeight: 500 } }, invalidTargetError),
16575
+ /* @__PURE__ */ React27.createElement(
16433
16576
  "button",
16434
16577
  {
16435
16578
  onClick: () => setInvalidTargetError(null),