@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.
- package/dist/index.js +581 -450
- package/dist/index.mjs +524 -381
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/XViewScene.jsx
|
|
2
|
-
import
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
5348
|
-
FiCheck as
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
5827
|
-
|
|
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
|
-
|
|
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
|
|
5860
|
-
FiBookOpen as
|
|
5880
|
+
FiEdit2 as FiEdit24,
|
|
5881
|
+
FiBookOpen as FiBookOpen3,
|
|
5861
5882
|
FiFolder as FiFolder2,
|
|
5862
5883
|
FiMousePointer,
|
|
5863
|
-
FiCheck as
|
|
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
|
|
5892
|
+
FiPlus as FiPlus3,
|
|
5872
5893
|
FiLock,
|
|
5873
|
-
FiLink as
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
7811
|
+
FiPlus as FiPlus4,
|
|
7791
7812
|
FiMaximize2,
|
|
7792
|
-
FiX as
|
|
7793
|
-
FiCheck as
|
|
7794
|
-
FiEdit2 as
|
|
7813
|
+
FiX as FiX4,
|
|
7814
|
+
FiCheck as FiCheck8,
|
|
7815
|
+
FiEdit2 as FiEdit25,
|
|
7795
7816
|
FiSun,
|
|
7796
|
-
FiChevronDown as
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
8592
|
-
FiCheck as
|
|
8593
|
-
FiEdit2 as
|
|
8594
|
-
FiTarget,
|
|
8595
|
-
FiX as
|
|
8596
|
-
FiChevronDown as
|
|
8597
|
-
FiUser as
|
|
8598
|
-
FiSearch as
|
|
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
|
|
8605
|
-
FiX as
|
|
8606
|
-
FiUser,
|
|
8607
|
-
FiSearch as
|
|
8625
|
+
FiPlus as FiPlus6,
|
|
8626
|
+
FiX as FiX5,
|
|
8627
|
+
FiUser as FiUser2,
|
|
8628
|
+
FiSearch as FiSearch5,
|
|
8608
8629
|
FiChevronUp,
|
|
8609
|
-
FiChevronDown as
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
8855
|
-
|
|
8856
|
-
|
|
8857
|
-
|
|
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
|
-
|
|
8863
|
-
|
|
8864
|
-
|
|
8865
|
-
|
|
8866
|
-
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
9660
|
-
|
|
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(
|
|
9701
|
+
isSaving && /* @__PURE__ */ React17.createElement(FiLoader3, { className: "animate-spin" }),
|
|
9684
9702
|
isSaving ? "Salvando..." : "Salvar"
|
|
9685
9703
|
)))
|
|
9686
9704
|
), isDescriptionModalOpen && canEdit && /* @__PURE__ */ React17.createElement(
|
|
9687
|
-
|
|
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
|
|
9708
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
10079
|
-
canEdit && /* @__PURE__ */
|
|
10080
|
-
), isStatusDropdownOpen && canEdit && /* @__PURE__ */
|
|
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__ */
|
|
10209
|
+
/* @__PURE__ */ React19.createElement("span", { className: "w-3 h-3 rounded-full", style: { backgroundColor: QUEST_STATUS_COLORS3[s] } }),
|
|
10091
10210
|
s
|
|
10092
|
-
)))))), /* @__PURE__ */
|
|
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__ */
|
|
10100
|
-
/* @__PURE__ */
|
|
10101
|
-
), isAssigneeDropdownOpen && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
10191
|
-
/* @__PURE__ */
|
|
10192
|
-
), isReturnDropdownOpen && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
10235
|
-
|
|
10236
|
-
|
|
10237
|
-
|
|
10238
|
-
|
|
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__ */
|
|
10241
|
-
}))), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
10266
|
-
), isDescriptionModalOpen && canEdit && /* @__PURE__ */
|
|
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
|
|
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__ */
|
|
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__ */
|
|
10343
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
10572
|
-
/* @__PURE__ */
|
|
10573
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
10604
|
-
|
|
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__ */
|
|
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__ */
|
|
10624
|
-
), canEdit && /* @__PURE__ */
|
|
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__ */
|
|
10633
|
-
)), !description && canEdit && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
10795
|
+
/* @__PURE__ */ React21.createElement(FiPlus9, { size: 14 }),
|
|
10648
10796
|
" Adicionar"
|
|
10649
|
-
)), /* @__PURE__ */
|
|
10650
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
10828
|
+
isSaving && /* @__PURE__ */ React21.createElement(FiLoader4, { className: "animate-spin" }),
|
|
10681
10829
|
isSaving ? "Salvando..." : "Salvar"
|
|
10682
10830
|
)))
|
|
10683
|
-
), isDescriptionModalOpen && /* @__PURE__ */
|
|
10684
|
-
|
|
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
|
|
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__ */
|
|
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__ */
|
|
10777
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
10812
|
-
/* @__PURE__ */
|
|
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__ */
|
|
10815
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
10836
|
-
/* @__PURE__ */
|
|
10837
|
-
/* @__PURE__ */
|
|
10838
|
-
/* @__PURE__ */
|
|
10839
|
-
/* @__PURE__ */
|
|
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__ */
|
|
10842
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
10863
|
-
/* @__PURE__ */
|
|
10864
|
-
/* @__PURE__ */
|
|
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__ */
|
|
10867
|
-
), canDelete && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
10888
|
-
/* @__PURE__ */
|
|
10889
|
-
/* @__PURE__ */
|
|
10890
|
-
/* @__PURE__ */
|
|
10891
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
11073
|
-
item.description && /* @__PURE__ */
|
|
11074
|
-
)) : /* @__PURE__ */
|
|
11075
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
11148
|
-
)), /* @__PURE__ */
|
|
11149
|
-
|
|
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__ */
|
|
11158
|
-
|
|
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__ */
|
|
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
|
|
11320
|
+
import React26, { useState as useState25, useMemo as useMemo11, useEffect as useEffect21, useRef as useRef18 } from "react";
|
|
11173
11321
|
import {
|
|
11174
|
-
FiSearch as
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
11411
|
+
/* @__PURE__ */ React26.createElement(FiPlay, { size: 10, className: "ml-0.5 fill-current" })
|
|
11264
11412
|
)
|
|
11265
|
-
) : /* @__PURE__ */
|
|
11266
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
11433
|
+
/* @__PURE__ */ React26.createElement(FiX8, { size: 12 })
|
|
11286
11434
|
))
|
|
11287
11435
|
);
|
|
11288
11436
|
})),
|
|
11289
|
-
canEdit && /* @__PURE__ */
|
|
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__ */
|
|
11447
|
+
isPickingForThisGroup ? /* @__PURE__ */ React26.createElement(FiCheckCircle, { size: 12 }) : /* @__PURE__ */ React26.createElement(FiSearch8, { size: 12 }),
|
|
11300
11448
|
isPickingForThisGroup ? "Selecionando..." : "Adicionar"
|
|
11301
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
11309
|
-
)), /* @__PURE__ */
|
|
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__ */
|
|
11318
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
11326
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
11481
|
+
/* @__PURE__ */ React26.createElement(FiTrash23, { size: 14 })
|
|
11334
11482
|
)))
|
|
11335
|
-
), group.children && group.children.length > 0 && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
11615
|
-
/* @__PURE__ */
|
|
11616
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
11634
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
11823
|
+
isPicking ? /* @__PURE__ */ React26.createElement(FiPlus10, { size: 16 }) : /* @__PURE__ */ React26.createElement(FiLayers6, { size: 14 })
|
|
11676
11824
|
),
|
|
11677
|
-
/* @__PURE__ */
|
|
11678
|
-
!isPicking && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
-
|
|
13805
|
-
|
|
13806
|
-
|
|
13807
|
-
|
|
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
|
|
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
|
-
|
|
13844
|
-
|
|
13845
|
-
|
|
13846
|
-
|
|
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
|
-
|
|
13852
|
-
|
|
13853
|
-
|
|
13854
|
-
|
|
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
|
-
|
|
13866
|
-
|
|
13867
|
-
|
|
13868
|
-
to_assignee_id: nextAssigneeId
|
|
13869
|
-
|
|
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
|
-
|
|
13883
|
-
|
|
13884
|
-
|
|
13885
|
-
|
|
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__ */
|
|
16042
|
+
return /* @__PURE__ */ React27.createElement(LoadingScreen, null);
|
|
15900
16043
|
}
|
|
15901
16044
|
if (permissionStatus === "denied") {
|
|
15902
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
16428
|
-
/* @__PURE__ */
|
|
16429
|
-
/* @__PURE__ */
|
|
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__ */
|
|
16432
|
-
/* @__PURE__ */
|
|
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),
|