@lv-x-software-house/x_view 1.2.5-dev.30 → 1.2.5-dev.32
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 +124 -71
- package/dist/index.mjs +210 -157
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -3636,8 +3636,8 @@ function createTimelineEntry(actorId, description, type = "comment", extras = {}
|
|
|
3636
3636
|
|
|
3637
3637
|
// src/components/CustomPropertyDisplay.jsx
|
|
3638
3638
|
import React3, { useState as useState4, useRef as useRef3, useEffect as useEffect3 } from "react";
|
|
3639
|
-
import { FiCheck
|
|
3640
|
-
function
|
|
3639
|
+
import { FiCheck, FiX, FiEdit3, FiTrash2, FiExternalLink, FiFileText, FiChevronDown, FiUpload, FiLoader } from "react-icons/fi";
|
|
3640
|
+
function CustomPropertyDisplay({
|
|
3641
3641
|
prop,
|
|
3642
3642
|
onUpdate,
|
|
3643
3643
|
onRemove,
|
|
@@ -3803,7 +3803,7 @@ function CustomPropertyDisplay2({
|
|
|
3803
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"
|
|
3804
3804
|
},
|
|
3805
3805
|
/* @__PURE__ */ React3.createElement("span", { className: "truncate" }, currentTypeLabel),
|
|
3806
|
-
/* @__PURE__ */ React3.createElement(
|
|
3806
|
+
/* @__PURE__ */ React3.createElement(FiChevronDown, { className: `text-slate-400 transition-transform ${isTypeDropdownOpen ? "rotate-180" : ""}` })
|
|
3807
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(
|
|
3808
3808
|
"button",
|
|
3809
3809
|
{
|
|
@@ -3922,12 +3922,12 @@ function CustomPropertyDisplay2({
|
|
|
3922
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",
|
|
3923
3923
|
title: "Upload de Arquivo"
|
|
3924
3924
|
},
|
|
3925
|
-
uploadingItemIndex === itemIndex ? /* @__PURE__ */ React3.createElement(
|
|
3925
|
+
uploadingItemIndex === itemIndex ? /* @__PURE__ */ React3.createElement(FiLoader, { className: "animate-spin" }) : /* @__PURE__ */ React3.createElement(FiUpload, { size: 12 })
|
|
3926
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"));
|
|
3927
3927
|
default:
|
|
3928
3928
|
return /* @__PURE__ */ React3.createElement("input", { type: "text", placeholder: "Valor", value: tempProp.value, onChange: (e) => handlePropChange("value", e.target.value), className: baseInput });
|
|
3929
3929
|
}
|
|
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(
|
|
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(FiX, { className: "text-red-400" })), /* @__PURE__ */ React3.createElement("button", { onClick: handleSave, type: "button", className: "w-8 h-8 grid place-items-center rounded-lg hover:bg-white/10 transition-colors" }, /* @__PURE__ */ React3.createElement(FiCheck, { className: "text-green-400" }))));
|
|
3931
3931
|
};
|
|
3932
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" }, (() => {
|
|
3933
3933
|
switch (prop.type) {
|
|
@@ -3962,7 +3962,7 @@ function CustomPropertyDisplay2({
|
|
|
3962
3962
|
style: { backgroundImage: `url(${item.value})` },
|
|
3963
3963
|
title: isTextureMode ? "Usar esta imagem no node" : `Ver imagem: ${item.name}`
|
|
3964
3964
|
}
|
|
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(
|
|
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(FiCheck, { size: 12 })));
|
|
3966
3966
|
}));
|
|
3967
3967
|
case "links":
|
|
3968
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 })))));
|
|
@@ -3998,15 +3998,15 @@ function CustomPropertyDisplay2({
|
|
|
3998
3998
|
}
|
|
3999
3999
|
|
|
4000
4000
|
// src/components/AncestryRelationshipPanel.jsx
|
|
4001
|
-
import { FiPlus
|
|
4001
|
+
import { FiPlus, FiEdit2 as FiEdit22, FiBookOpen } from "react-icons/fi";
|
|
4002
4002
|
|
|
4003
4003
|
// src/components/DescriptionEditModal.jsx
|
|
4004
4004
|
import React5, { useState as useState6, useEffect as useEffect5, useRef as useRef5, useMemo as useMemo4 } from "react";
|
|
4005
|
-
import { FiType, FiList, FiCode, FiLink as
|
|
4005
|
+
import { FiType, FiList, FiCode, FiLink as FiLink2, FiAtSign, FiSearch as FiSearch2, FiHexagon as FiHexagon2, FiGlobe, FiImage as FiImage2, FiCheckSquare } from "react-icons/fi";
|
|
4006
4006
|
|
|
4007
4007
|
// src/components/SectionImportModal.jsx
|
|
4008
4008
|
import React4, { useState as useState5, useMemo as useMemo3, useRef as useRef4, useEffect as useEffect4 } from "react";
|
|
4009
|
-
import { FiSearch
|
|
4009
|
+
import { FiSearch, FiLayers as FiLayers2, FiHexagon, FiClock, FiCheck as FiCheck2, FiCopy, FiTerminal, FiChevronDown as FiChevronDown2, FiChevronRight, FiDownload, FiLink } from "react-icons/fi";
|
|
4010
4010
|
var CodeBlock = ({ content, isActive, onClick }) => {
|
|
4011
4011
|
const [isExpanded, setIsExpanded] = useState5(false);
|
|
4012
4012
|
const [copied, setCopied] = useState5(false);
|
|
@@ -4037,7 +4037,7 @@ var CodeBlock = ({ content, isActive, onClick }) => {
|
|
|
4037
4037
|
className: "flex items-center gap-2 cursor-pointer opacity-80 hover:opacity-100 transition-opacity",
|
|
4038
4038
|
onClick: toggleExpand
|
|
4039
4039
|
},
|
|
4040
|
-
isLongCode ? isExpanded ? /* @__PURE__ */ React4.createElement(
|
|
4040
|
+
isLongCode ? isExpanded ? /* @__PURE__ */ React4.createElement(FiChevronDown2, { size: 14 }) : /* @__PURE__ */ React4.createElement(FiChevronRight, { size: 14 }) : /* @__PURE__ */ React4.createElement(FiTerminal, { size: 14 }),
|
|
4041
4041
|
/* @__PURE__ */ React4.createElement("span", { className: "text-xs font-mono font-medium text-slate-400" }, "Code")
|
|
4042
4042
|
), /* @__PURE__ */ React4.createElement(
|
|
4043
4043
|
"button",
|
|
@@ -4046,7 +4046,7 @@ var CodeBlock = ({ content, isActive, onClick }) => {
|
|
|
4046
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",
|
|
4047
4047
|
title: "Copiar c\xF3digo"
|
|
4048
4048
|
},
|
|
4049
|
-
copied ? /* @__PURE__ */ React4.createElement(
|
|
4049
|
+
copied ? /* @__PURE__ */ React4.createElement(FiCheck2, { size: 12, className: "text-emerald-400" }) : /* @__PURE__ */ React4.createElement(FiCopy, { size: 12 }),
|
|
4050
4050
|
copied ? /* @__PURE__ */ React4.createElement("span", { className: "text-emerald-400" }, "Copiado") : /* @__PURE__ */ React4.createElement("span", null, "Copiar")
|
|
4051
4051
|
)),
|
|
4052
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(
|
|
@@ -4239,10 +4239,10 @@ function SectionImportModal({ isOpen, onClose, onSelect, availableNodes = [], av
|
|
|
4239
4239
|
if (isRef) {
|
|
4240
4240
|
const resolved = resolveDescriptionReference(trimmed, availableNodes, availableAncestries);
|
|
4241
4241
|
if (resolved == null ? void 0 : resolved.error) {
|
|
4242
|
-
return /* @__PURE__ */ React4.createElement("div", { className: "my-2 p-3 rounded border border-red-500/30 bg-red-500/10 text-red-200 text-xs flex gap-2 items-center" }, /* @__PURE__ */ React4.createElement(
|
|
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(FiLink, null), " Erro na refer\xEAncia: ", resolved.error);
|
|
4243
4243
|
}
|
|
4244
4244
|
if (resolved) {
|
|
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(
|
|
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(FiLink, null), " Vinculado de: ", /* @__PURE__ */ React4.createElement("span", { className: "font-semibold" }, resolved.sourceName)), /* @__PURE__ */ React4.createElement("div", { className: "text-slate-300 opacity-90" }, resolved.content.split("\n").map((line, i) => /* @__PURE__ */ React4.createElement("div", { key: i }, formatLineContent(line))))));
|
|
4246
4246
|
}
|
|
4247
4247
|
}
|
|
4248
4248
|
return null;
|
|
@@ -4256,7 +4256,7 @@ function SectionImportModal({ isOpen, onClose, onSelect, availableNodes = [], av
|
|
|
4256
4256
|
onClick: swallow
|
|
4257
4257
|
},
|
|
4258
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")),
|
|
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(
|
|
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(FiSearch, { className: "absolute left-3 top-1/2 -translate-y-1/2 text-slate-500" }), /* @__PURE__ */ React4.createElement(
|
|
4260
4260
|
"input",
|
|
4261
4261
|
{
|
|
4262
4262
|
ref: inputRef,
|
|
@@ -4387,7 +4387,7 @@ function SectionImportModal({ isOpen, onClose, onSelect, availableNodes = [], av
|
|
|
4387
4387
|
/* @__PURE__ */ React4.createElement(FiDownload, { className: "text-indigo-200" }),
|
|
4388
4388
|
"Importar ",
|
|
4389
4389
|
selectedIndices.size > 1 ? `${selectedIndices.size} Se\xE7\xF5es` : "Se\xE7\xE3o"
|
|
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(
|
|
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(FiSearch, { size: 24, className: "opacity-50" })), /* @__PURE__ */ React4.createElement("p", null, "Selecione um item \xE0 esquerda para visualizar suas se\xE7\xF5es."))))
|
|
4391
4391
|
));
|
|
4392
4392
|
}
|
|
4393
4393
|
|
|
@@ -4408,7 +4408,7 @@ var normalizeText = (text) => {
|
|
|
4408
4408
|
if (!text) return "";
|
|
4409
4409
|
return text.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
|
4410
4410
|
};
|
|
4411
|
-
function
|
|
4411
|
+
function DescriptionEditModal({
|
|
4412
4412
|
isOpen,
|
|
4413
4413
|
title,
|
|
4414
4414
|
initialValue,
|
|
@@ -4749,7 +4749,7 @@ ${space}${bullet} `);
|
|
|
4749
4749
|
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",
|
|
4750
4750
|
title: "Inserir Imagem (Propriedade ou URL)"
|
|
4751
4751
|
},
|
|
4752
|
-
/* @__PURE__ */ React5.createElement(
|
|
4752
|
+
/* @__PURE__ */ React5.createElement(FiImage2, { size: 12 }),
|
|
4753
4753
|
" Imagem"
|
|
4754
4754
|
), /* @__PURE__ */ React5.createElement(
|
|
4755
4755
|
"button",
|
|
@@ -4767,7 +4767,7 @@ ${space}${bullet} `);
|
|
|
4767
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",
|
|
4768
4768
|
title: "Importar Se\xE7\xE3o de outro Node"
|
|
4769
4769
|
},
|
|
4770
|
-
/* @__PURE__ */ React5.createElement(
|
|
4770
|
+
/* @__PURE__ */ React5.createElement(FiLink2, { size: 12 }),
|
|
4771
4771
|
" Importar Se\xE7\xE3o"
|
|
4772
4772
|
), /* @__PURE__ */ React5.createElement(
|
|
4773
4773
|
"button",
|
|
@@ -4789,7 +4789,7 @@ ${space}${bullet} `);
|
|
|
4789
4789
|
autoFocus: true,
|
|
4790
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"
|
|
4791
4791
|
}
|
|
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(
|
|
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(FiSearch2, { className: "text-slate-400" }), /* @__PURE__ */ React5.createElement(
|
|
4793
4793
|
"input",
|
|
4794
4794
|
{
|
|
4795
4795
|
type: "text",
|
|
@@ -4888,7 +4888,7 @@ ${space}${bullet} `);
|
|
|
4888
4888
|
|
|
4889
4889
|
// src/components/DescriptionDisplay.jsx
|
|
4890
4890
|
import React6, { useMemo as useMemo5, useState as useState7, useEffect as useEffect6, useRef as useRef6 } from "react";
|
|
4891
|
-
import { FiCopy as FiCopy2, FiCheck as
|
|
4891
|
+
import { FiCopy as FiCopy2, FiCheck as FiCheck3, FiChevronDown as FiChevronDown3, FiChevronRight as FiChevronRight2, FiTerminal as FiTerminal2, FiCornerDownRight, FiExternalLink as FiExternalLink2, FiImage as FiImage3, FiSave } from "react-icons/fi";
|
|
4892
4892
|
var CodeBlock2 = ({ content, isActive, onClick }) => {
|
|
4893
4893
|
const [isExpanded, setIsExpanded] = useState7(false);
|
|
4894
4894
|
const [copied, setCopied] = useState7(false);
|
|
@@ -4919,7 +4919,7 @@ var CodeBlock2 = ({ content, isActive, onClick }) => {
|
|
|
4919
4919
|
className: "flex items-center gap-2 cursor-pointer opacity-80 hover:opacity-100 transition-opacity",
|
|
4920
4920
|
onClick: toggleExpand
|
|
4921
4921
|
},
|
|
4922
|
-
isLongCode ? isExpanded ? /* @__PURE__ */ React6.createElement(
|
|
4922
|
+
isLongCode ? isExpanded ? /* @__PURE__ */ React6.createElement(FiChevronDown3, { size: 14 }) : /* @__PURE__ */ React6.createElement(FiChevronRight2, { size: 14 }) : /* @__PURE__ */ React6.createElement(FiTerminal2, { size: 14 }),
|
|
4923
4923
|
/* @__PURE__ */ React6.createElement("span", { className: "text-xs font-mono font-medium text-slate-400" }, "Code")
|
|
4924
4924
|
), /* @__PURE__ */ React6.createElement(
|
|
4925
4925
|
"button",
|
|
@@ -4927,7 +4927,7 @@ var CodeBlock2 = ({ content, isActive, onClick }) => {
|
|
|
4927
4927
|
onClick: handleCopy,
|
|
4928
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"
|
|
4929
4929
|
},
|
|
4930
|
-
copied ? /* @__PURE__ */ React6.createElement(
|
|
4930
|
+
copied ? /* @__PURE__ */ React6.createElement(FiCheck3, { size: 12, className: "text-emerald-400" }) : /* @__PURE__ */ React6.createElement(FiCopy2, { size: 12 }),
|
|
4931
4931
|
copied ? /* @__PURE__ */ React6.createElement("span", { className: "text-emerald-400" }, "Copiado") : /* @__PURE__ */ React6.createElement("span", null, "Copiar")
|
|
4932
4932
|
)),
|
|
4933
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(
|
|
@@ -4985,7 +4985,7 @@ var renderTextWithImages = (text, onImageClick) => {
|
|
|
4985
4985
|
},
|
|
4986
4986
|
className: "inline-flex items-center gap-1 text-emerald-400 hover:text-emerald-300 hover:underline decoration-emerald-500/50 underline-offset-2 transition-colors cursor-pointer align-baseline mx-0.5"
|
|
4987
4987
|
},
|
|
4988
|
-
/* @__PURE__ */ React6.createElement(
|
|
4988
|
+
/* @__PURE__ */ React6.createElement(FiImage3, { size: 11 }),
|
|
4989
4989
|
/* @__PURE__ */ React6.createElement("span", null, name)
|
|
4990
4990
|
);
|
|
4991
4991
|
}
|
|
@@ -5066,7 +5066,7 @@ var formatLineContent2 = (line, availableNodes, onMentionClick, activeMentionInd
|
|
|
5066
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"}
|
|
5067
5067
|
`
|
|
5068
5068
|
},
|
|
5069
|
-
isChecked && /* @__PURE__ */ React6.createElement(
|
|
5069
|
+
isChecked && /* @__PURE__ */ React6.createElement(FiCheck3, { size: 12, className: "text-white" })
|
|
5070
5070
|
), /* @__PURE__ */ React6.createElement(
|
|
5071
5071
|
"span",
|
|
5072
5072
|
{
|
|
@@ -5092,7 +5092,7 @@ var formatLineContent2 = (line, availableNodes, onMentionClick, activeMentionInd
|
|
|
5092
5092
|
}
|
|
5093
5093
|
return /* @__PURE__ */ React6.createElement("span", { className: "break-words" }, processContent(line));
|
|
5094
5094
|
};
|
|
5095
|
-
function
|
|
5095
|
+
function DescriptionDisplay({
|
|
5096
5096
|
description,
|
|
5097
5097
|
savedSections,
|
|
5098
5098
|
availableNodes = [],
|
|
@@ -5355,7 +5355,7 @@ function DescriptionDisplay2({
|
|
|
5355
5355
|
import React7, { useState as useState8, useMemo as useMemo6, useEffect as useEffect7 } from "react";
|
|
5356
5356
|
import {
|
|
5357
5357
|
FiArrowLeft,
|
|
5358
|
-
FiEdit2
|
|
5358
|
+
FiEdit2,
|
|
5359
5359
|
FiLayers as FiLayers3,
|
|
5360
5360
|
FiChevronLeft,
|
|
5361
5361
|
FiChevronRight as FiChevronRight3,
|
|
@@ -5365,8 +5365,8 @@ import {
|
|
|
5365
5365
|
FiAlignLeft,
|
|
5366
5366
|
FiGitBranch,
|
|
5367
5367
|
FiFolder,
|
|
5368
|
-
FiLink as
|
|
5369
|
-
FiCheck as
|
|
5368
|
+
FiLink as FiLink3,
|
|
5369
|
+
FiCheck as FiCheck4
|
|
5370
5370
|
} from "react-icons/fi";
|
|
5371
5371
|
var findNodePath = (tree, targetNodeId, currentPath = []) => {
|
|
5372
5372
|
var _a;
|
|
@@ -5568,7 +5568,7 @@ function DescriptionReadModePanel({
|
|
|
5568
5568
|
className: `p-1 transition-colors ${isLinkCopied ? "text-green-400" : "text-slate-400 hover:text-indigo-400"}`,
|
|
5569
5569
|
title: isLinkCopied ? "Link Copiado!" : "Copiar link para esta Ancestralidade"
|
|
5570
5570
|
},
|
|
5571
|
-
isLinkCopied ? /* @__PURE__ */ React7.createElement(
|
|
5571
|
+
isLinkCopied ? /* @__PURE__ */ React7.createElement(FiCheck4, { size: 12 }) : /* @__PURE__ */ React7.createElement(FiLink3, { size: 12 })
|
|
5572
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(
|
|
5573
5573
|
"button",
|
|
5574
5574
|
{
|
|
@@ -5603,7 +5603,7 @@ function DescriptionReadModePanel({
|
|
|
5603
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",
|
|
5604
5604
|
title: "Editar Descri\xE7\xE3o / Estrutura"
|
|
5605
5605
|
},
|
|
5606
|
-
/* @__PURE__ */ React7.createElement(
|
|
5606
|
+
/* @__PURE__ */ React7.createElement(FiEdit2, { size: 16 })
|
|
5607
5607
|
), /* @__PURE__ */ React7.createElement(
|
|
5608
5608
|
"button",
|
|
5609
5609
|
{
|
|
@@ -5647,7 +5647,7 @@ function DescriptionReadModePanel({
|
|
|
5647
5647
|
targetRenderNodeId
|
|
5648
5648
|
}
|
|
5649
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(
|
|
5650
|
-
|
|
5650
|
+
CustomPropertyDisplay,
|
|
5651
5651
|
{
|
|
5652
5652
|
key: prop.id,
|
|
5653
5653
|
prop,
|
|
@@ -5659,7 +5659,7 @@ function DescriptionReadModePanel({
|
|
|
5659
5659
|
onOpenImageViewer: null
|
|
5660
5660
|
}
|
|
5661
5661
|
))) : /* @__PURE__ */ React7.createElement(
|
|
5662
|
-
|
|
5662
|
+
DescriptionDisplay,
|
|
5663
5663
|
{
|
|
5664
5664
|
description,
|
|
5665
5665
|
savedSections,
|
|
@@ -5808,7 +5808,7 @@ function AncestryRelationshipPanel({
|
|
|
5808
5808
|
onSaveDescription: handleSaveDescriptionInline
|
|
5809
5809
|
}
|
|
5810
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(
|
|
5811
|
-
|
|
5811
|
+
DescriptionDisplay,
|
|
5812
5812
|
{
|
|
5813
5813
|
description,
|
|
5814
5814
|
savedSections: existingSections,
|
|
@@ -5827,7 +5827,7 @@ function AncestryRelationshipPanel({
|
|
|
5827
5827
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors border-r border-white/5",
|
|
5828
5828
|
title: "Modo de Leitura"
|
|
5829
5829
|
},
|
|
5830
|
-
/* @__PURE__ */ React8.createElement(
|
|
5830
|
+
/* @__PURE__ */ React8.createElement(FiBookOpen, { size: 14 })
|
|
5831
5831
|
), /* @__PURE__ */ React8.createElement(
|
|
5832
5832
|
"button",
|
|
5833
5833
|
{
|
|
@@ -5836,7 +5836,7 @@ function AncestryRelationshipPanel({
|
|
|
5836
5836
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
5837
5837
|
title: "Editar descri\xE7\xE3o"
|
|
5838
5838
|
},
|
|
5839
|
-
/* @__PURE__ */ React8.createElement(
|
|
5839
|
+
/* @__PURE__ */ React8.createElement(FiEdit22, { size: 14 })
|
|
5840
5840
|
)), !description && /* @__PURE__ */ React8.createElement(
|
|
5841
5841
|
"div",
|
|
5842
5842
|
{
|
|
@@ -5844,8 +5844,8 @@ function AncestryRelationshipPanel({
|
|
|
5844
5844
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
5845
5845
|
},
|
|
5846
5846
|
"Adicionar descri\xE7\xE3o..."
|
|
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(
|
|
5848
|
-
|
|
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(FiPlus, { size: 14 }), " Adicionar")), /* @__PURE__ */ React8.createElement("div", { className: "flex flex-col gap-3 p-3 rounded-lg bg-black/20 border border-white/5" }, customProps.length === 0 && /* @__PURE__ */ React8.createElement("p", { className: "text-center text-sm text-slate-400 py-4" }, "Nenhuma propriedade adicional."), customProps.map((prop, idx) => /* @__PURE__ */ React8.createElement(
|
|
5848
|
+
CustomPropertyDisplay,
|
|
5849
5849
|
{
|
|
5850
5850
|
key: prop.id,
|
|
5851
5851
|
prop,
|
|
@@ -5858,7 +5858,7 @@ function AncestryRelationshipPanel({
|
|
|
5858
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")))
|
|
5859
5859
|
)
|
|
5860
5860
|
), isDescriptionModalOpen && /* @__PURE__ */ React8.createElement(
|
|
5861
|
-
|
|
5861
|
+
DescriptionEditModal,
|
|
5862
5862
|
{
|
|
5863
5863
|
isOpen: isDescriptionModalOpen,
|
|
5864
5864
|
title: "Editar Descri\xE7\xE3o da Rela\xE7\xE3o",
|
|
@@ -5877,11 +5877,11 @@ function AncestryRelationshipPanel({
|
|
|
5877
5877
|
// src/components/CreateAncestryPanel.jsx
|
|
5878
5878
|
import React10, { useState as useState11, useEffect as useEffect10, useMemo as useMemo8, useRef as useRef8, useCallback as useCallback2 } from "react";
|
|
5879
5879
|
import {
|
|
5880
|
-
FiEdit2 as
|
|
5881
|
-
FiBookOpen as
|
|
5880
|
+
FiEdit2 as FiEdit23,
|
|
5881
|
+
FiBookOpen as FiBookOpen2,
|
|
5882
5882
|
FiFolder as FiFolder2,
|
|
5883
5883
|
FiMousePointer,
|
|
5884
|
-
FiCheck as
|
|
5884
|
+
FiCheck as FiCheck5,
|
|
5885
5885
|
FiLayers as FiLayers5,
|
|
5886
5886
|
FiArrowLeft as FiArrowLeft2,
|
|
5887
5887
|
FiChevronLeft as FiChevronLeft2,
|
|
@@ -5889,15 +5889,15 @@ import {
|
|
|
5889
5889
|
FiCornerUpLeft as FiCornerUpLeft2,
|
|
5890
5890
|
FiCornerUpRight as FiCornerUpRight3,
|
|
5891
5891
|
FiGitBranch as FiGitBranch2,
|
|
5892
|
-
FiPlus as
|
|
5892
|
+
FiPlus as FiPlus2,
|
|
5893
5893
|
FiLock,
|
|
5894
|
-
FiLink as
|
|
5894
|
+
FiLink as FiLink4,
|
|
5895
5895
|
FiTrash2 as FiTrash22
|
|
5896
5896
|
} from "react-icons/fi";
|
|
5897
5897
|
|
|
5898
5898
|
// src/components/AncestryPickerModal.jsx
|
|
5899
5899
|
import React9, { useState as useState10, useMemo as useMemo7, useEffect as useEffect9 } from "react";
|
|
5900
|
-
import { FiSearch as
|
|
5900
|
+
import { FiSearch as FiSearch3, FiLayers as FiLayers4, FiCornerUpRight as FiCornerUpRight2 } from "react-icons/fi";
|
|
5901
5901
|
function AncestryPickerModal({
|
|
5902
5902
|
isOpen,
|
|
5903
5903
|
onClose,
|
|
@@ -5946,7 +5946,7 @@ function AncestryPickerModal({
|
|
|
5946
5946
|
});
|
|
5947
5947
|
}, [availableAncestries, searchTerm, currentAncestryId, nodeNamesMap]);
|
|
5948
5948
|
if (!isOpen) return null;
|
|
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(
|
|
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(FiSearch3, { className: "absolute left-3 top-1/2 -translate-y-1/2 text-slate-500" }), /* @__PURE__ */ React9.createElement(
|
|
5950
5950
|
"input",
|
|
5951
5951
|
{
|
|
5952
5952
|
type: "text",
|
|
@@ -6071,7 +6071,7 @@ var NodeItem = ({ nodeData, onSelectParent, onViewSelect, highlightedPathIds = [
|
|
|
6071
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) => {
|
|
6072
6072
|
e.stopPropagation();
|
|
6073
6073
|
onEditRelationship(path, nodeData.relationship || {});
|
|
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(
|
|
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(FiEdit23, { size: 12 })), /* @__PURE__ */ React10.createElement("button", { onClick: (e) => {
|
|
6075
6075
|
e.stopPropagation();
|
|
6076
6076
|
onRemoveNode(path);
|
|
6077
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"))
|
|
@@ -7284,7 +7284,7 @@ function CreateAncestryPanel({
|
|
|
7284
7284
|
className: `ml-1 p-1 transition-colors ${isLinkCopied ? "text-green-400" : "text-slate-400 hover:text-indigo-400"}`,
|
|
7285
7285
|
title: isLinkCopied ? "Link Copiado!" : "Copiar link para esta Ancestralidade"
|
|
7286
7286
|
},
|
|
7287
|
-
isLinkCopied ? /* @__PURE__ */ React10.createElement(
|
|
7287
|
+
isLinkCopied ? /* @__PURE__ */ React10.createElement(FiCheck5, { size: 12 }) : /* @__PURE__ */ React10.createElement(FiLink4, { size: 12 })
|
|
7288
7288
|
)), /* @__PURE__ */ React10.createElement(
|
|
7289
7289
|
"input",
|
|
7290
7290
|
{
|
|
@@ -7348,7 +7348,7 @@ function CreateAncestryPanel({
|
|
|
7348
7348
|
/* @__PURE__ */ React10.createElement("div", { className: "w-4 h-4 border border-slate-500 rounded flex items-center justify-center" }),
|
|
7349
7349
|
"Usar Ancestralidade Existente como Branch"
|
|
7350
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(
|
|
7351
|
-
|
|
7351
|
+
DescriptionDisplay,
|
|
7352
7352
|
{
|
|
7353
7353
|
key: branchStack.length > 0 ? branchStack[branchStack.length - 1].branchId : currentAncestryId || "root",
|
|
7354
7354
|
description,
|
|
@@ -7374,7 +7374,7 @@ function CreateAncestryPanel({
|
|
|
7374
7374
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors border-r border-white/5",
|
|
7375
7375
|
title: "Modo de Leitura"
|
|
7376
7376
|
},
|
|
7377
|
-
/* @__PURE__ */ React10.createElement(
|
|
7377
|
+
/* @__PURE__ */ React10.createElement(FiBookOpen2, { size: 14 })
|
|
7378
7378
|
), /* @__PURE__ */ React10.createElement(
|
|
7379
7379
|
"button",
|
|
7380
7380
|
{
|
|
@@ -7383,7 +7383,7 @@ function CreateAncestryPanel({
|
|
|
7383
7383
|
className: "p-2 text-slate-400 hover:text-white transition-colors",
|
|
7384
7384
|
title: "Editar descri\xE7\xE3o"
|
|
7385
7385
|
},
|
|
7386
|
-
/* @__PURE__ */ React10.createElement(
|
|
7386
|
+
/* @__PURE__ */ React10.createElement(FiEdit23, { size: 14 })
|
|
7387
7387
|
)), !description && /* @__PURE__ */ React10.createElement(
|
|
7388
7388
|
"div",
|
|
7389
7389
|
{
|
|
@@ -7401,7 +7401,7 @@ function CreateAncestryPanel({
|
|
|
7401
7401
|
`,
|
|
7402
7402
|
title: sideActions.left.label
|
|
7403
7403
|
},
|
|
7404
|
-
sideActions.left.type === "create" && /* @__PURE__ */ React10.createElement(
|
|
7404
|
+
sideActions.left.type === "create" && /* @__PURE__ */ React10.createElement(FiPlus2, { size: 20 }),
|
|
7405
7405
|
sideActions.left.type === "open" && /* @__PURE__ */ React10.createElement(FiChevronLeft2, { size: 20 }),
|
|
7406
7406
|
sideActions.left.type === "back" && /* @__PURE__ */ React10.createElement(FiCornerUpLeft2, { size: 18 })
|
|
7407
7407
|
)), sideActions.right && /* @__PURE__ */ React10.createElement("div", { className: "absolute top-1/2 -translate-y-1/2 -right-6 z-20" }, /* @__PURE__ */ React10.createElement(
|
|
@@ -7414,7 +7414,7 @@ function CreateAncestryPanel({
|
|
|
7414
7414
|
`,
|
|
7415
7415
|
title: sideActions.right.label
|
|
7416
7416
|
},
|
|
7417
|
-
sideActions.right.type === "create" && /* @__PURE__ */ React10.createElement(
|
|
7417
|
+
sideActions.right.type === "create" && /* @__PURE__ */ React10.createElement(FiPlus2, { size: 18 }),
|
|
7418
7418
|
sideActions.right.type === "open" && /* @__PURE__ */ React10.createElement(FiChevronRight4, { size: 18 }),
|
|
7419
7419
|
sideActions.right.type === "back" && /* @__PURE__ */ React10.createElement(FiCornerUpRight3, { size: 16 })
|
|
7420
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(
|
|
@@ -7424,10 +7424,10 @@ function CreateAncestryPanel({
|
|
|
7424
7424
|
onClick: handleAddProp,
|
|
7425
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"
|
|
7426
7426
|
},
|
|
7427
|
-
/* @__PURE__ */ React10.createElement(
|
|
7427
|
+
/* @__PURE__ */ React10.createElement(FiPlus2, { size: 14 }),
|
|
7428
7428
|
" Adicionar"
|
|
7429
7429
|
)), /* @__PURE__ */ React10.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React10.createElement(
|
|
7430
|
-
|
|
7430
|
+
CustomPropertyDisplay,
|
|
7431
7431
|
{
|
|
7432
7432
|
key: prop.id,
|
|
7433
7433
|
prop,
|
|
@@ -7452,7 +7452,7 @@ function CreateAncestryPanel({
|
|
|
7452
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"}`,
|
|
7453
7453
|
title: isAddingNodes ? "Concluir edi\xE7\xE3o da estrutura" : "Editar estrutura e adicionar nodes"
|
|
7454
7454
|
},
|
|
7455
|
-
isAddingNodes ? /* @__PURE__ */ React10.createElement(
|
|
7455
|
+
isAddingNodes ? /* @__PURE__ */ React10.createElement(FiCheck5, { size: 14 }) : /* @__PURE__ */ React10.createElement(FiEdit23, { size: 14 })
|
|
7456
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(
|
|
7457
7457
|
NodeItem,
|
|
7458
7458
|
{
|
|
@@ -7517,7 +7517,7 @@ function CreateAncestryPanel({
|
|
|
7517
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"}`,
|
|
7518
7518
|
title: "Editar estrutura da abstra\xE7\xE3o"
|
|
7519
7519
|
},
|
|
7520
|
-
ancestryMode.isAddingAbstractionNodes ? /* @__PURE__ */ React10.createElement(
|
|
7520
|
+
ancestryMode.isAddingAbstractionNodes ? /* @__PURE__ */ React10.createElement(FiCheck5, { size: 14 }) : /* @__PURE__ */ React10.createElement(FiEdit23, { size: 14 })
|
|
7521
7521
|
))),
|
|
7522
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(
|
|
7523
7523
|
NodeItem,
|
|
@@ -7537,7 +7537,7 @@ function CreateAncestryPanel({
|
|
|
7537
7537
|
isEditable: ancestryMode.isAddingAbstractionNodes
|
|
7538
7538
|
}
|
|
7539
7539
|
))
|
|
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(
|
|
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(FiCheck5, { size: 12, className: "text-white" })), /* @__PURE__ */ React10.createElement(
|
|
7541
7541
|
"input",
|
|
7542
7542
|
{
|
|
7543
7543
|
type: "checkbox",
|
|
@@ -7567,7 +7567,7 @@ function CreateAncestryPanel({
|
|
|
7567
7567
|
availableNodes
|
|
7568
7568
|
}
|
|
7569
7569
|
), isDescriptionModalOpen && /* @__PURE__ */ React10.createElement(
|
|
7570
|
-
|
|
7570
|
+
DescriptionEditModal,
|
|
7571
7571
|
{
|
|
7572
7572
|
isOpen: isDescriptionModalOpen,
|
|
7573
7573
|
title: branchStack.length > 0 ? "Editar Descri\xE7\xE3o da Ramifica\xE7\xE3o" : "Editar Descri\xE7\xE3o da Ancestralidade",
|
|
@@ -7586,7 +7586,7 @@ function CreateAncestryPanel({
|
|
|
7586
7586
|
|
|
7587
7587
|
// src/components/ImageViewer.jsx
|
|
7588
7588
|
import React11, { useState as useState12, useEffect as useEffect11, useLayoutEffect as useLayoutEffect2, useCallback as useCallback3 } from "react";
|
|
7589
|
-
import { FiX as
|
|
7589
|
+
import { FiX as FiX2, FiChevronLeft as FiChevronLeft3, FiChevronRight as FiChevronRight5 } from "react-icons/fi";
|
|
7590
7590
|
function ImageViewer({ data, onClose }) {
|
|
7591
7591
|
var _a;
|
|
7592
7592
|
const { images = [], startIndex = 0, visible } = data;
|
|
@@ -7671,7 +7671,7 @@ function ImageViewer({ data, onClose }) {
|
|
|
7671
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",
|
|
7672
7672
|
"aria-label": "Fechar"
|
|
7673
7673
|
},
|
|
7674
|
-
/* @__PURE__ */ React11.createElement(
|
|
7674
|
+
/* @__PURE__ */ React11.createElement(FiX2, null)
|
|
7675
7675
|
),
|
|
7676
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(
|
|
7677
7677
|
"img",
|
|
@@ -7713,7 +7713,7 @@ import React13, { useState as useState14, useEffect as useEffect13, useRef as us
|
|
|
7713
7713
|
// src/components/ColorPicker.jsx
|
|
7714
7714
|
import React12, { useState as useState13, useEffect as useEffect12, useRef as useRef9 } from "react";
|
|
7715
7715
|
import { HexColorPicker } from "react-colorful";
|
|
7716
|
-
import { FiHash, FiCheck as
|
|
7716
|
+
import { FiHash, FiCheck as FiCheck6 } from "react-icons/fi";
|
|
7717
7717
|
var PRESET_COLORS = [
|
|
7718
7718
|
"#ef4444",
|
|
7719
7719
|
"#f97316",
|
|
@@ -7782,7 +7782,7 @@ function ColorPicker({ color, onChange, disabled }) {
|
|
|
7782
7782
|
style: { backgroundColor: preset },
|
|
7783
7783
|
title: preset
|
|
7784
7784
|
},
|
|
7785
|
-
(color || "").toLowerCase() === (preset || "").toLowerCase() && /* @__PURE__ */ React12.createElement(
|
|
7785
|
+
(color || "").toLowerCase() === (preset || "").toLowerCase() && /* @__PURE__ */ React12.createElement(FiCheck6, { className: `drop-shadow-md ${["#ffffff", "#4df5cb", "#84cc16", "#f59e0b"].includes(preset) ? "text-black" : "text-white"}`, size: 12 })
|
|
7786
7786
|
)))), /* @__PURE__ */ React12.createElement("style", null, `
|
|
7787
7787
|
.custom-react-colorful .react-colorful {
|
|
7788
7788
|
width: 100%;
|
|
@@ -7808,13 +7808,13 @@ function ColorPicker({ color, onChange, disabled }) {
|
|
|
7808
7808
|
|
|
7809
7809
|
// src/components/InSceneCreationForm.jsx
|
|
7810
7810
|
import {
|
|
7811
|
-
FiPlus as
|
|
7811
|
+
FiPlus as FiPlus3,
|
|
7812
7812
|
FiMaximize2,
|
|
7813
|
-
FiX as
|
|
7814
|
-
FiCheck as
|
|
7815
|
-
FiEdit2 as
|
|
7813
|
+
FiX as FiX3,
|
|
7814
|
+
FiCheck as FiCheck7,
|
|
7815
|
+
FiEdit2 as FiEdit24,
|
|
7816
7816
|
FiSun,
|
|
7817
|
-
FiChevronDown as
|
|
7817
|
+
FiChevronDown as FiChevronDown4
|
|
7818
7818
|
} from "react-icons/fi";
|
|
7819
7819
|
function InSceneCreationForm({
|
|
7820
7820
|
onSave,
|
|
@@ -8066,7 +8066,7 @@ function InSceneCreationForm({
|
|
|
8066
8066
|
onClick: () => handleRemoveType(index),
|
|
8067
8067
|
className: "hover:text-white transition-colors"
|
|
8068
8068
|
},
|
|
8069
|
-
/* @__PURE__ */ React13.createElement(
|
|
8069
|
+
/* @__PURE__ */ React13.createElement(FiX3, { size: 12 })
|
|
8070
8070
|
)
|
|
8071
8071
|
)), /* @__PURE__ */ React13.createElement(
|
|
8072
8072
|
"input",
|
|
@@ -8120,7 +8120,7 @@ function InSceneCreationForm({
|
|
|
8120
8120
|
},
|
|
8121
8121
|
/* @__PURE__ */ React13.createElement("span", { className: "truncate pr-2" }, selectedDatasetName),
|
|
8122
8122
|
/* @__PURE__ */ React13.createElement(
|
|
8123
|
-
|
|
8123
|
+
FiChevronDown4,
|
|
8124
8124
|
{
|
|
8125
8125
|
className: `flex-shrink-0 text-slate-400 transition-transform ${isDatasetDropdownOpen ? "rotate-180" : ""}`
|
|
8126
8126
|
}
|
|
@@ -8137,7 +8137,7 @@ function InSceneCreationForm({
|
|
|
8137
8137
|
},
|
|
8138
8138
|
ds.name
|
|
8139
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(
|
|
8140
|
-
|
|
8140
|
+
DescriptionDisplay,
|
|
8141
8141
|
{
|
|
8142
8142
|
description,
|
|
8143
8143
|
savedSections: [],
|
|
@@ -8155,7 +8155,7 @@ function InSceneCreationForm({
|
|
|
8155
8155
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
8156
8156
|
title: "Editar descri\xE7\xE3o (Modo de Escrita)"
|
|
8157
8157
|
},
|
|
8158
|
-
/* @__PURE__ */ React13.createElement(
|
|
8158
|
+
/* @__PURE__ */ React13.createElement(FiEdit24, { size: 14 })
|
|
8159
8159
|
)), !description && /* @__PURE__ */ React13.createElement(
|
|
8160
8160
|
"div",
|
|
8161
8161
|
{
|
|
@@ -8178,7 +8178,7 @@ function InSceneCreationForm({
|
|
|
8178
8178
|
{
|
|
8179
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"}`
|
|
8180
8180
|
},
|
|
8181
|
-
isSelected && /* @__PURE__ */ React13.createElement(
|
|
8181
|
+
isSelected && /* @__PURE__ */ React13.createElement(FiCheck7, { size: 12, className: "text-white" })
|
|
8182
8182
|
),
|
|
8183
8183
|
/* @__PURE__ */ React13.createElement(
|
|
8184
8184
|
"span",
|
|
@@ -8193,7 +8193,7 @@ function InSceneCreationForm({
|
|
|
8193
8193
|
{
|
|
8194
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"}`
|
|
8195
8195
|
},
|
|
8196
|
-
useImageAsTexture && /* @__PURE__ */ React13.createElement(
|
|
8196
|
+
useImageAsTexture && /* @__PURE__ */ React13.createElement(FiCheck7, { size: 12, className: "text-white" })
|
|
8197
8197
|
), /* @__PURE__ */ React13.createElement(
|
|
8198
8198
|
"input",
|
|
8199
8199
|
{
|
|
@@ -8240,10 +8240,10 @@ function InSceneCreationForm({
|
|
|
8240
8240
|
onClick: handleAddProp,
|
|
8241
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"
|
|
8242
8242
|
},
|
|
8243
|
-
/* @__PURE__ */ React13.createElement(
|
|
8243
|
+
/* @__PURE__ */ React13.createElement(FiPlus3, { size: 14 }),
|
|
8244
8244
|
" Adicionar"
|
|
8245
8245
|
)), /* @__PURE__ */ React13.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React13.createElement(
|
|
8246
|
-
|
|
8246
|
+
CustomPropertyDisplay,
|
|
8247
8247
|
{
|
|
8248
8248
|
key: prop.id,
|
|
8249
8249
|
prop,
|
|
@@ -8275,7 +8275,7 @@ function InSceneCreationForm({
|
|
|
8275
8275
|
"Salvar"
|
|
8276
8276
|
)))
|
|
8277
8277
|
), isDescriptionModalOpen && /* @__PURE__ */ React13.createElement(
|
|
8278
|
-
|
|
8278
|
+
DescriptionEditModal,
|
|
8279
8279
|
{
|
|
8280
8280
|
isOpen: isDescriptionModalOpen,
|
|
8281
8281
|
title: "Editar Descri\xE7\xE3o do Node",
|
|
@@ -8293,7 +8293,7 @@ function InSceneCreationForm({
|
|
|
8293
8293
|
|
|
8294
8294
|
// src/components/InSceneVersionForm.jsx
|
|
8295
8295
|
import React14, { useState as useState15, useEffect as useEffect14, useRef as useRef11 } from "react";
|
|
8296
|
-
import { FiPlus as
|
|
8296
|
+
import { FiPlus as FiPlus4, FiMaximize2 as FiMaximize22, FiCheck as FiCheck8, FiEdit2 as FiEdit25 } from "react-icons/fi";
|
|
8297
8297
|
function InSceneVersionForm({
|
|
8298
8298
|
onSave,
|
|
8299
8299
|
onCancel,
|
|
@@ -8464,7 +8464,7 @@ function InSceneVersionForm({
|
|
|
8464
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"
|
|
8465
8465
|
}
|
|
8466
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(
|
|
8467
|
-
|
|
8467
|
+
DescriptionDisplay,
|
|
8468
8468
|
{
|
|
8469
8469
|
description,
|
|
8470
8470
|
savedSections: [],
|
|
@@ -8482,7 +8482,7 @@ function InSceneVersionForm({
|
|
|
8482
8482
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
8483
8483
|
title: "Editar descri\xE7\xE3o (Modo de Escrita)"
|
|
8484
8484
|
},
|
|
8485
|
-
/* @__PURE__ */ React14.createElement(
|
|
8485
|
+
/* @__PURE__ */ React14.createElement(FiEdit25, { size: 14 })
|
|
8486
8486
|
)), !description && /* @__PURE__ */ React14.createElement(
|
|
8487
8487
|
"div",
|
|
8488
8488
|
{
|
|
@@ -8505,7 +8505,7 @@ function InSceneVersionForm({
|
|
|
8505
8505
|
{
|
|
8506
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"}`
|
|
8507
8507
|
},
|
|
8508
|
-
isSelected && /* @__PURE__ */ React14.createElement(
|
|
8508
|
+
isSelected && /* @__PURE__ */ React14.createElement(FiCheck8, { size: 12, className: "text-white" })
|
|
8509
8509
|
),
|
|
8510
8510
|
/* @__PURE__ */ React14.createElement(
|
|
8511
8511
|
"span",
|
|
@@ -8520,7 +8520,7 @@ function InSceneVersionForm({
|
|
|
8520
8520
|
{
|
|
8521
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"}`
|
|
8522
8522
|
},
|
|
8523
|
-
useImageAsTexture && /* @__PURE__ */ React14.createElement(
|
|
8523
|
+
useImageAsTexture && /* @__PURE__ */ React14.createElement(FiCheck8, { size: 12, className: "text-white" })
|
|
8524
8524
|
), /* @__PURE__ */ React14.createElement(
|
|
8525
8525
|
"input",
|
|
8526
8526
|
{
|
|
@@ -8555,10 +8555,10 @@ function InSceneVersionForm({
|
|
|
8555
8555
|
onClick: handleAddProp,
|
|
8556
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"
|
|
8557
8557
|
},
|
|
8558
|
-
/* @__PURE__ */ React14.createElement(
|
|
8558
|
+
/* @__PURE__ */ React14.createElement(FiPlus4, { size: 14 }),
|
|
8559
8559
|
" Adicionar"
|
|
8560
8560
|
)), /* @__PURE__ */ React14.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React14.createElement(
|
|
8561
|
-
|
|
8561
|
+
CustomPropertyDisplay,
|
|
8562
8562
|
{
|
|
8563
8563
|
key: prop.id,
|
|
8564
8564
|
prop,
|
|
@@ -8590,7 +8590,7 @@ function InSceneVersionForm({
|
|
|
8590
8590
|
"Salvar"
|
|
8591
8591
|
)))
|
|
8592
8592
|
), isDescriptionModalOpen && /* @__PURE__ */ React14.createElement(
|
|
8593
|
-
|
|
8593
|
+
DescriptionEditModal,
|
|
8594
8594
|
{
|
|
8595
8595
|
isOpen: isDescriptionModalOpen,
|
|
8596
8596
|
title: "Editar Descri\xE7\xE3o da Vers\xE3o",
|
|
@@ -8609,25 +8609,25 @@ function InSceneVersionForm({
|
|
|
8609
8609
|
// src/components/InSceneQuestForm.jsx
|
|
8610
8610
|
import React16, { useState as useState17, useRef as useRef12 } from "react";
|
|
8611
8611
|
import {
|
|
8612
|
-
FiPlus as
|
|
8613
|
-
FiCheck as
|
|
8614
|
-
FiEdit2 as
|
|
8615
|
-
FiTarget
|
|
8616
|
-
FiX as
|
|
8617
|
-
FiChevronDown as
|
|
8618
|
-
FiUser as
|
|
8619
|
-
FiSearch as
|
|
8612
|
+
FiPlus as FiPlus6,
|
|
8613
|
+
FiCheck as FiCheck9,
|
|
8614
|
+
FiEdit2 as FiEdit26,
|
|
8615
|
+
FiTarget,
|
|
8616
|
+
FiX as FiX5,
|
|
8617
|
+
FiChevronDown as FiChevronDown6,
|
|
8618
|
+
FiUser as FiUser2,
|
|
8619
|
+
FiSearch as FiSearch5
|
|
8620
8620
|
} from "react-icons/fi";
|
|
8621
8621
|
|
|
8622
8622
|
// src/components/QuestReviewStackEditor.jsx
|
|
8623
8623
|
import React15, { useState as useState16 } from "react";
|
|
8624
8624
|
import {
|
|
8625
|
-
FiPlus as
|
|
8626
|
-
FiX as
|
|
8627
|
-
FiUser
|
|
8628
|
-
FiSearch as
|
|
8625
|
+
FiPlus as FiPlus5,
|
|
8626
|
+
FiX as FiX4,
|
|
8627
|
+
FiUser,
|
|
8628
|
+
FiSearch as FiSearch4,
|
|
8629
8629
|
FiChevronUp,
|
|
8630
|
-
FiChevronDown as
|
|
8630
|
+
FiChevronDown as FiChevronDown5,
|
|
8631
8631
|
FiStar
|
|
8632
8632
|
} from "react-icons/fi";
|
|
8633
8633
|
function QuestReviewStackEditor({
|
|
@@ -8680,10 +8680,10 @@ function QuestReviewStackEditor({
|
|
|
8680
8680
|
onClick: () => setIsAdding(true),
|
|
8681
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"
|
|
8682
8682
|
},
|
|
8683
|
-
/* @__PURE__ */ React15.createElement(
|
|
8683
|
+
/* @__PURE__ */ React15.createElement(FiPlus5, { size: 10 }),
|
|
8684
8684
|
" Adicionar Camada"
|
|
8685
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(
|
|
8686
|
-
|
|
8686
|
+
FiSearch4,
|
|
8687
8687
|
{
|
|
8688
8688
|
className: "absolute left-2 top-1/2 -translate-y-1/2 text-slate-500",
|
|
8689
8689
|
size: 12
|
|
@@ -8704,7 +8704,7 @@ function QuestReviewStackEditor({
|
|
|
8704
8704
|
onClick: () => setIsAdding(false),
|
|
8705
8705
|
className: "absolute right-2 top-1/2 -translate-y-1/2 text-slate-500 hover:text-white"
|
|
8706
8706
|
},
|
|
8707
|
-
/* @__PURE__ */ React15.createElement(
|
|
8707
|
+
/* @__PURE__ */ React15.createElement(FiX4, { size: 14 })
|
|
8708
8708
|
)), /* @__PURE__ */ React15.createElement("ul", { className: "max-h-32 overflow-y-auto custom-scrollbar space-y-1" }, filteredMembers.map((m) => /* @__PURE__ */ React15.createElement(
|
|
8709
8709
|
"li",
|
|
8710
8710
|
{
|
|
@@ -8712,7 +8712,7 @@ function QuestReviewStackEditor({
|
|
|
8712
8712
|
onClick: () => handleAddReviewer(m.id),
|
|
8713
8713
|
className: "px-2 py-1.5 hover:bg-white/5 rounded cursor-pointer text-xs flex items-center gap-2"
|
|
8714
8714
|
},
|
|
8715
|
-
/* @__PURE__ */ React15.createElement(
|
|
8715
|
+
/* @__PURE__ */ React15.createElement(FiUser, { size: 12, className: "text-slate-400" }),
|
|
8716
8716
|
/* @__PURE__ */ React15.createElement("span", { className: "truncate" }, m.name || m.email)
|
|
8717
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) => {
|
|
8718
8718
|
const member = viewMembers.find((m) => m.id === item.userId);
|
|
@@ -8740,7 +8740,7 @@ function QuestReviewStackEditor({
|
|
|
8740
8740
|
disabled: index === reviewStack.length - 1,
|
|
8741
8741
|
className: "hover:text-sky-400 disabled:opacity-20"
|
|
8742
8742
|
},
|
|
8743
|
-
/* @__PURE__ */ React15.createElement(
|
|
8743
|
+
/* @__PURE__ */ React15.createElement(FiChevronDown5, { size: 12 })
|
|
8744
8744
|
))),
|
|
8745
8745
|
/* @__PURE__ */ React15.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React15.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15.createElement(
|
|
8746
8746
|
"span",
|
|
@@ -8765,7 +8765,7 @@ function QuestReviewStackEditor({
|
|
|
8765
8765
|
onClick: () => handleRemoveReviewer(index),
|
|
8766
8766
|
className: "p-1.5 rounded hover:bg-red-500/20 text-slate-500 hover:text-red-400 transition-colors"
|
|
8767
8767
|
},
|
|
8768
|
-
/* @__PURE__ */ React15.createElement(
|
|
8768
|
+
/* @__PURE__ */ React15.createElement(FiX4, { size: 14 })
|
|
8769
8769
|
))
|
|
8770
8770
|
);
|
|
8771
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(
|
|
@@ -8929,7 +8929,7 @@ function InSceneQuestForm({
|
|
|
8929
8929
|
}
|
|
8930
8930
|
}
|
|
8931
8931
|
),
|
|
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(
|
|
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(FiTarget, { className: "text-sky-400", size: 14 }), /* @__PURE__ */ React16.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Nova quest")), /* @__PURE__ */ React16.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, "Criar Quest")), /* @__PURE__ */ React16.createElement(
|
|
8933
8933
|
"button",
|
|
8934
8934
|
{
|
|
8935
8935
|
type: "button",
|
|
@@ -8975,7 +8975,7 @@ function InSceneQuestForm({
|
|
|
8975
8975
|
}
|
|
8976
8976
|
), /* @__PURE__ */ React16.createElement("span", { className: "text-slate-200 font-medium" }, status)),
|
|
8977
8977
|
/* @__PURE__ */ React16.createElement(
|
|
8978
|
-
|
|
8978
|
+
FiChevronDown6,
|
|
8979
8979
|
{
|
|
8980
8980
|
className: `text-slate-400 transition-transform duration-200 ${isStatusDropdownOpen ? "rotate-180" : ""}`
|
|
8981
8981
|
}
|
|
@@ -9012,9 +9012,9 @@ function InSceneQuestForm({
|
|
|
9012
9012
|
onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
|
|
9013
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"
|
|
9014
9014
|
},
|
|
9015
|
-
/* @__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(FiUser2, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ React16.createElement("span", { className: "text-slate-200 font-medium" }, ((_a = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _a.name) || ((_b = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _b.email) || "Nenhum")),
|
|
9016
9016
|
/* @__PURE__ */ React16.createElement(
|
|
9017
|
-
|
|
9017
|
+
FiChevronDown6,
|
|
9018
9018
|
{
|
|
9019
9019
|
className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}`
|
|
9020
9020
|
}
|
|
@@ -9028,7 +9028,7 @@ function InSceneQuestForm({
|
|
|
9028
9028
|
setAssigneeSearchQuery("");
|
|
9029
9029
|
}
|
|
9030
9030
|
}
|
|
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(
|
|
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(FiSearch5, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ React16.createElement(
|
|
9032
9032
|
"input",
|
|
9033
9033
|
{
|
|
9034
9034
|
type: "text",
|
|
@@ -9076,7 +9076,7 @@ function InSceneQuestForm({
|
|
|
9076
9076
|
viewMembers
|
|
9077
9077
|
}
|
|
9078
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(
|
|
9079
|
-
|
|
9079
|
+
DescriptionDisplay,
|
|
9080
9080
|
{
|
|
9081
9081
|
description,
|
|
9082
9082
|
savedSections: [],
|
|
@@ -9092,7 +9092,7 @@ function InSceneQuestForm({
|
|
|
9092
9092
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
9093
9093
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors"
|
|
9094
9094
|
},
|
|
9095
|
-
/* @__PURE__ */ React16.createElement(
|
|
9095
|
+
/* @__PURE__ */ React16.createElement(FiEdit26, { size: 14 })
|
|
9096
9096
|
)), !description && /* @__PURE__ */ React16.createElement(
|
|
9097
9097
|
"div",
|
|
9098
9098
|
{
|
|
@@ -9107,10 +9107,10 @@ function InSceneQuestForm({
|
|
|
9107
9107
|
onClick: handleAddProp,
|
|
9108
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"
|
|
9109
9109
|
},
|
|
9110
|
-
/* @__PURE__ */ React16.createElement(
|
|
9110
|
+
/* @__PURE__ */ React16.createElement(FiPlus6, { size: 14 }),
|
|
9111
9111
|
" Adicionar"
|
|
9112
9112
|
)), /* @__PURE__ */ React16.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React16.createElement(
|
|
9113
|
-
|
|
9113
|
+
CustomPropertyDisplay,
|
|
9114
9114
|
{
|
|
9115
9115
|
key: prop.id,
|
|
9116
9116
|
prop,
|
|
@@ -9138,7 +9138,7 @@ function InSceneQuestForm({
|
|
|
9138
9138
|
{
|
|
9139
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"}`
|
|
9140
9140
|
},
|
|
9141
|
-
size === s && /* @__PURE__ */ React16.createElement(
|
|
9141
|
+
size === s && /* @__PURE__ */ React16.createElement(FiCheck9, { size: 12, className: "text-white" })
|
|
9142
9142
|
),
|
|
9143
9143
|
/* @__PURE__ */ React16.createElement(
|
|
9144
9144
|
"span",
|
|
@@ -9161,7 +9161,7 @@ function InSceneQuestForm({
|
|
|
9161
9161
|
onClick: () => handleRemoveType(index),
|
|
9162
9162
|
className: "hover:text-white transition-colors"
|
|
9163
9163
|
},
|
|
9164
|
-
/* @__PURE__ */ React16.createElement(
|
|
9164
|
+
/* @__PURE__ */ React16.createElement(FiX5, { size: 12 })
|
|
9165
9165
|
)
|
|
9166
9166
|
)), /* @__PURE__ */ React16.createElement(
|
|
9167
9167
|
"input",
|
|
@@ -9193,7 +9193,7 @@ function InSceneQuestForm({
|
|
|
9193
9193
|
"Salvar Quest"
|
|
9194
9194
|
)))
|
|
9195
9195
|
), isDescriptionModalOpen && /* @__PURE__ */ React16.createElement(
|
|
9196
|
-
|
|
9196
|
+
DescriptionEditModal,
|
|
9197
9197
|
{
|
|
9198
9198
|
isOpen: isDescriptionModalOpen,
|
|
9199
9199
|
title: "Editar Descri\xE7\xE3o da Quest",
|
|
@@ -9209,7 +9209,7 @@ function InSceneQuestForm({
|
|
|
9209
9209
|
|
|
9210
9210
|
// src/components/NodeDetailsPanel.jsx
|
|
9211
9211
|
import React17, { useState as useState18, useEffect as useEffect15, useRef as useRef13 } from "react";
|
|
9212
|
-
import { FiPlus as
|
|
9212
|
+
import { FiPlus as FiPlus7, FiMaximize2 as FiMaximize23, FiX as FiX6, FiCheck as FiCheck10, FiImage as FiImage4, FiEdit2 as FiEdit27, FiLoader as FiLoader2, FiBookOpen as FiBookOpen3, FiSun as FiSun2, FiLink as FiLink5, FiDatabase } from "react-icons/fi";
|
|
9213
9213
|
function NodeDetailsPanel({
|
|
9214
9214
|
node,
|
|
9215
9215
|
onClose,
|
|
@@ -9546,7 +9546,7 @@ function NodeDetailsPanel({
|
|
|
9546
9546
|
className: `ml-1 p-1 transition-colors ${isLinkCopied ? "text-green-400" : "text-slate-400 hover:text-indigo-400"}`,
|
|
9547
9547
|
title: isLinkCopied ? "Link Copiado!" : "Copiar link para este Node"
|
|
9548
9548
|
},
|
|
9549
|
-
isLinkCopied ? /* @__PURE__ */ React17.createElement(
|
|
9549
|
+
isLinkCopied ? /* @__PURE__ */ React17.createElement(FiCheck10, { size: 12 }) : /* @__PURE__ */ React17.createElement(FiLink5, { size: 12 })
|
|
9550
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(
|
|
9551
9551
|
"button",
|
|
9552
9552
|
{
|
|
@@ -9554,7 +9554,7 @@ function NodeDetailsPanel({
|
|
|
9554
9554
|
onClick: () => handleRemoveType(index),
|
|
9555
9555
|
className: "hover:text-white transition-colors"
|
|
9556
9556
|
},
|
|
9557
|
-
/* @__PURE__ */ React17.createElement(
|
|
9557
|
+
/* @__PURE__ */ React17.createElement(FiX6, { size: 12 })
|
|
9558
9558
|
))), canEdit && /* @__PURE__ */ React17.createElement(
|
|
9559
9559
|
"input",
|
|
9560
9560
|
{
|
|
@@ -9597,7 +9597,7 @@ function NodeDetailsPanel({
|
|
|
9597
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"}`
|
|
9598
9598
|
}
|
|
9599
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(
|
|
9600
|
-
|
|
9600
|
+
DescriptionDisplay,
|
|
9601
9601
|
{
|
|
9602
9602
|
description,
|
|
9603
9603
|
savedSections: existingSections,
|
|
@@ -9616,7 +9616,7 @@ function NodeDetailsPanel({
|
|
|
9616
9616
|
className: `p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors ${canEdit ? "border-r border-white/5" : ""}`,
|
|
9617
9617
|
title: "Modo de Leitura"
|
|
9618
9618
|
},
|
|
9619
|
-
/* @__PURE__ */ React17.createElement(
|
|
9619
|
+
/* @__PURE__ */ React17.createElement(FiBookOpen3, { size: 14 })
|
|
9620
9620
|
), canEdit && /* @__PURE__ */ React17.createElement(
|
|
9621
9621
|
"button",
|
|
9622
9622
|
{
|
|
@@ -9625,7 +9625,7 @@ function NodeDetailsPanel({
|
|
|
9625
9625
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
9626
9626
|
title: "Editar descri\xE7\xE3o (Modo de Escrita)"
|
|
9627
9627
|
},
|
|
9628
|
-
/* @__PURE__ */ React17.createElement(
|
|
9628
|
+
/* @__PURE__ */ React17.createElement(FiEdit27, { size: 14 })
|
|
9629
9629
|
)), canEdit && !description && /* @__PURE__ */ React17.createElement(
|
|
9630
9630
|
"div",
|
|
9631
9631
|
{
|
|
@@ -9643,10 +9643,10 @@ function NodeDetailsPanel({
|
|
|
9643
9643
|
onClick: () => canEdit && handleSizeChange(s),
|
|
9644
9644
|
className: `flex items-center gap-2 group focus:outline-none ${canEdit ? "cursor-pointer" : "cursor-default opacity-80"}`
|
|
9645
9645
|
},
|
|
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(
|
|
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(FiCheck10, { size: 12, className: "text-white" })),
|
|
9647
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)
|
|
9648
9648
|
);
|
|
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(
|
|
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(FiCheck10, { size: 12, className: "text-white" })), /* @__PURE__ */ React17.createElement(
|
|
9650
9650
|
"input",
|
|
9651
9651
|
{
|
|
9652
9652
|
type: "checkbox",
|
|
@@ -9674,8 +9674,8 @@ function NodeDetailsPanel({
|
|
|
9674
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"}`,
|
|
9675
9675
|
title: `Intensidade do brilho: ${intensity}`
|
|
9676
9676
|
}
|
|
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(
|
|
9678
|
-
|
|
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(FiPlus7, { size: 14 }), " Adicionar")), /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React17.createElement(
|
|
9678
|
+
CustomPropertyDisplay,
|
|
9679
9679
|
{
|
|
9680
9680
|
key: prop.id,
|
|
9681
9681
|
prop,
|
|
@@ -9698,11 +9698,11 @@ function NodeDetailsPanel({
|
|
|
9698
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"}
|
|
9699
9699
|
`
|
|
9700
9700
|
},
|
|
9701
|
-
isSaving && /* @__PURE__ */ React17.createElement(
|
|
9701
|
+
isSaving && /* @__PURE__ */ React17.createElement(FiLoader2, { className: "animate-spin" }),
|
|
9702
9702
|
isSaving ? "Salvando..." : "Salvar"
|
|
9703
9703
|
)))
|
|
9704
9704
|
), isDescriptionModalOpen && canEdit && /* @__PURE__ */ React17.createElement(
|
|
9705
|
-
|
|
9705
|
+
DescriptionEditModal,
|
|
9706
9706
|
{
|
|
9707
9707
|
isOpen: isDescriptionModalOpen,
|
|
9708
9708
|
title: "Editar Descri\xE7\xE3o do Node",
|
|
@@ -9723,6 +9723,7 @@ function NodeDetailsPanel({
|
|
|
9723
9723
|
|
|
9724
9724
|
// src/components/QuestDetailsPanel.jsx
|
|
9725
9725
|
import React19, { useState as useState19, useEffect as useEffect16, useRef as useRef14 } from "react";
|
|
9726
|
+
import { FiPlus as FiPlus8, FiX as FiX7, FiCheck as FiCheck11, FiEdit2 as FiEdit28, FiLoader as FiLoader3, FiBookOpen as FiBookOpen4, FiLink as FiLink7, FiTarget as FiTarget3, FiChevronDown as FiChevronDown7, FiUser as FiUser3, FiSearch as FiSearch7 } from "react-icons/fi";
|
|
9726
9727
|
|
|
9727
9728
|
// src/components/QuestTimeline.jsx
|
|
9728
9729
|
import React18 from "react";
|
|
@@ -9734,19 +9735,19 @@ import {
|
|
|
9734
9735
|
FiMessageSquare,
|
|
9735
9736
|
FiAlertCircle,
|
|
9736
9737
|
FiArrowRight,
|
|
9737
|
-
FiTarget as
|
|
9738
|
+
FiTarget as FiTarget2,
|
|
9738
9739
|
FiPlusCircle,
|
|
9739
|
-
FiSearch as
|
|
9740
|
-
FiLink as
|
|
9740
|
+
FiSearch as FiSearch6,
|
|
9741
|
+
FiLink as FiLink6
|
|
9741
9742
|
} from "react-icons/fi";
|
|
9742
9743
|
var EVENT_ICONS = {
|
|
9743
9744
|
"quest_created": { icon: FiPlusCircle, color: "text-sky-400", bg: "bg-sky-400/10" },
|
|
9744
9745
|
"assignee_changed": { icon: FiUserPlus, color: "text-indigo-400", bg: "bg-indigo-400/10" },
|
|
9745
9746
|
"status_changed": { icon: FiRotateCcw, color: "text-amber-400", bg: "bg-amber-400/10" },
|
|
9746
|
-
"review_cycle_started": { icon:
|
|
9747
|
+
"review_cycle_started": { icon: FiSearch6, color: "text-purple-400", bg: "bg-purple-400/10" },
|
|
9747
9748
|
"review_completed": { icon: FiCheckSquare2, color: "text-emerald-400", bg: "bg-emerald-400/10" },
|
|
9748
9749
|
"comment": { icon: FiMessageSquare, color: "text-slate-400", bg: "bg-slate-400/10" },
|
|
9749
|
-
"quest_finished": { icon:
|
|
9750
|
+
"quest_finished": { icon: FiTarget2, color: "text-green-400", bg: "bg-green-400/10" },
|
|
9750
9751
|
"default": { icon: FiGitCommit, color: "text-slate-500", bg: "bg-slate-500/10" }
|
|
9751
9752
|
};
|
|
9752
9753
|
function QuestTimeline({
|
|
@@ -9771,11 +9772,11 @@ function QuestTimeline({
|
|
|
9771
9772
|
if (timeline.length === 0) {
|
|
9772
9773
|
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
|
}
|
|
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-
|
|
9775
|
+
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-10 space-y-6 before:content-[''] before:absolute before:left-[21px] before:top-2 before:bottom-2 before:w-[2px] before:bg-white/5" }, sortedTimeline.map((event, index) => {
|
|
9775
9776
|
const config = EVENT_ICONS[event.type] || EVENT_ICONS.default;
|
|
9776
9777
|
const Icon = config.icon;
|
|
9777
9778
|
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-[
|
|
9779
|
+
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-[35px] 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
9780
|
"a",
|
|
9780
9781
|
{
|
|
9781
9782
|
key: lIdx,
|
|
@@ -9784,7 +9785,7 @@ function QuestTimeline({
|
|
|
9784
9785
|
rel: "noopener noreferrer",
|
|
9785
9786
|
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
|
},
|
|
9787
|
-
/* @__PURE__ */ React18.createElement(
|
|
9788
|
+
/* @__PURE__ */ React18.createElement(FiLink6, { size: 10 }),
|
|
9788
9789
|
link.name || "Link"
|
|
9789
9790
|
))), 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
9791
|
"button",
|
|
@@ -9795,7 +9796,7 @@ function QuestTimeline({
|
|
|
9795
9796
|
className: "relative w-12 h-12 rounded border border-white/10 overflow-hidden hover:border-sky-500/50 transition-colors group"
|
|
9796
9797
|
},
|
|
9797
9798
|
/* @__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(
|
|
9799
|
+
/* @__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(FiSearch6, { size: 12, className: "text-white" }))
|
|
9799
9800
|
)))));
|
|
9800
9801
|
})));
|
|
9801
9802
|
}
|
|
@@ -9858,6 +9859,8 @@ function QuestDetailsPanel({
|
|
|
9858
9859
|
const [isLinkCopied, setIsLinkCopied] = useState19(false);
|
|
9859
9860
|
const [hasUnsavedChanges, setHasUnsavedChanges] = useState19(false);
|
|
9860
9861
|
const [noteText, setNoteText] = useState19("");
|
|
9862
|
+
const [noteLinks, setNoteLinks] = useState19([]);
|
|
9863
|
+
const [noteImages, setNoteImages] = useState19([]);
|
|
9861
9864
|
const [isNoteFormOpen, setIsNoteFormOpen] = useState19(false);
|
|
9862
9865
|
const maxPanelW = typeof window !== "undefined" ? window.innerWidth * 0.92 : 1200;
|
|
9863
9866
|
const { width: panelWidth, isResizing, handlePointerDown: handleResize, setWidth } = useResizablePanel({
|
|
@@ -9993,7 +9996,10 @@ function QuestDetailsPanel({
|
|
|
9993
9996
|
if (!noteText.trim() || isSaving) return;
|
|
9994
9997
|
setIsSaving(true);
|
|
9995
9998
|
const actorId = (currentUser == null ? void 0 : currentUser.id) || "unknown";
|
|
9996
|
-
const newEntry = createTimelineEntry(actorId, noteText, "comment"
|
|
9999
|
+
const newEntry = createTimelineEntry(actorId, noteText, "comment", {
|
|
10000
|
+
links: noteLinks,
|
|
10001
|
+
images: noteImages
|
|
10002
|
+
});
|
|
9997
10003
|
const updatedTimeline = [...timeline, newEntry];
|
|
9998
10004
|
try {
|
|
9999
10005
|
const nodeToSave = {
|
|
@@ -10004,6 +10010,8 @@ function QuestDetailsPanel({
|
|
|
10004
10010
|
setTimeline(updatedTimeline);
|
|
10005
10011
|
onDataUpdate(nodeToSave);
|
|
10006
10012
|
setNoteText("");
|
|
10013
|
+
setNoteLinks([]);
|
|
10014
|
+
setNoteImages([]);
|
|
10007
10015
|
setIsNoteFormOpen(false);
|
|
10008
10016
|
} catch (error) {
|
|
10009
10017
|
console.error("Erro ao adicionar nota:", error);
|
|
@@ -10011,6 +10019,24 @@ function QuestDetailsPanel({
|
|
|
10011
10019
|
setIsSaving(false);
|
|
10012
10020
|
}
|
|
10013
10021
|
};
|
|
10022
|
+
const addLinkToNote = () => {
|
|
10023
|
+
setNoteLinks([...noteLinks, { id: v4_default(), name: "", value: "" }]);
|
|
10024
|
+
};
|
|
10025
|
+
const removeLinkFromNote = (id) => {
|
|
10026
|
+
setNoteLinks(noteLinks.filter((l) => l.id !== id));
|
|
10027
|
+
};
|
|
10028
|
+
const updateLinkInNote = (id, field, val) => {
|
|
10029
|
+
setNoteLinks(noteLinks.map((l) => l.id === id ? { ...l, [field]: val } : l));
|
|
10030
|
+
};
|
|
10031
|
+
const addImageToNote = () => {
|
|
10032
|
+
setNoteImages([...noteImages, { id: v4_default(), name: "Image", value: "" }]);
|
|
10033
|
+
};
|
|
10034
|
+
const removeImageFromNote = (id) => {
|
|
10035
|
+
setNoteImages(noteImages.filter((img) => img.id !== id));
|
|
10036
|
+
};
|
|
10037
|
+
const updateImageInNote = (id, val) => {
|
|
10038
|
+
setNoteImages(noteImages.map((img) => img.id === id ? { ...img, value: val } : img));
|
|
10039
|
+
};
|
|
10014
10040
|
const handleStatusChange = (newStatus) => {
|
|
10015
10041
|
setStatus(newStatus);
|
|
10016
10042
|
const newColor = QUEST_STATUS_COLORS3[newStatus];
|
|
@@ -10177,7 +10203,7 @@ function QuestDetailsPanel({
|
|
|
10177
10203
|
onImageClick: handleImageClickFromText,
|
|
10178
10204
|
onSaveDescription: handleSaveDescriptionInline
|
|
10179
10205
|
}
|
|
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(
|
|
10206
|
+
) : /* @__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(FiTarget3, { 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(FiCheck11, { size: 12 }) : /* @__PURE__ */ React19.createElement(FiLink7, { 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(
|
|
10181
10207
|
"input",
|
|
10182
10208
|
{
|
|
10183
10209
|
type: "text",
|
|
@@ -10195,7 +10221,7 @@ function QuestDetailsPanel({
|
|
|
10195
10221
|
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"}`
|
|
10196
10222
|
},
|
|
10197
10223
|
/* @__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(
|
|
10224
|
+
canEdit && /* @__PURE__ */ React19.createElement(FiChevronDown7, { className: `text-slate-400 transition-transform duration-200 ${isStatusDropdownOpen ? "rotate-180" : ""}` })
|
|
10199
10225
|
), 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(
|
|
10200
10226
|
"li",
|
|
10201
10227
|
{
|
|
@@ -10215,12 +10241,12 @@ function QuestDetailsPanel({
|
|
|
10215
10241
|
onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
|
|
10216
10242
|
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"
|
|
10217
10243
|
},
|
|
10218
|
-
/* @__PURE__ */ React19.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React19.createElement(
|
|
10219
|
-
/* @__PURE__ */ React19.createElement(
|
|
10244
|
+
/* @__PURE__ */ React19.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React19.createElement(FiUser3, { 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")),
|
|
10245
|
+
/* @__PURE__ */ React19.createElement(FiChevronDown7, { className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}` })
|
|
10220
10246
|
), isAssigneeDropdownOpen && /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
|
|
10221
10247
|
setIsAssigneeDropdownOpen(false);
|
|
10222
10248
|
setAssigneeSearchQuery("");
|
|
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(
|
|
10249
|
+
} }), /* @__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(FiSearch7, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ React19.createElement(
|
|
10224
10250
|
"input",
|
|
10225
10251
|
{
|
|
10226
10252
|
type: "text",
|
|
@@ -10288,7 +10314,7 @@ function QuestDetailsPanel({
|
|
|
10288
10314
|
)), viewMembers.filter((member) => {
|
|
10289
10315
|
const search = assigneeSearchQuery.toLowerCase();
|
|
10290
10316
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
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(
|
|
10317
|
+
}).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(FiUser3, { className: "opacity-50", size: 14 }), assigneeId ? assigneeMember ? assigneeMember.name || assigneeMember.email : "Undefined" : "Nenhum")), /* @__PURE__ */ React19.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React19.createElement(
|
|
10292
10318
|
QuestReviewStackEditor,
|
|
10293
10319
|
{
|
|
10294
10320
|
reviewStack,
|
|
@@ -10306,12 +10332,12 @@ function QuestDetailsPanel({
|
|
|
10306
10332
|
onClick: () => setIsReturnDropdownOpen(!isReturnDropdownOpen),
|
|
10307
10333
|
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"
|
|
10308
10334
|
},
|
|
10309
|
-
/* @__PURE__ */ React19.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React19.createElement(
|
|
10310
|
-
/* @__PURE__ */ React19.createElement(
|
|
10335
|
+
/* @__PURE__ */ React19.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React19.createElement(FiUser3, { 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...")),
|
|
10336
|
+
/* @__PURE__ */ React19.createElement(FiChevronDown7, { className: `text-slate-400 transition-transform duration-200 ${isReturnDropdownOpen ? "rotate-180" : ""}`, size: 14 })
|
|
10311
10337
|
), isReturnDropdownOpen && /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
|
|
10312
10338
|
setIsReturnDropdownOpen(false);
|
|
10313
10339
|
setReturnSearchQuery("");
|
|
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(
|
|
10340
|
+
} }), /* @__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(FiSearch7, { className: "text-slate-500", size: 12 }), /* @__PURE__ */ React19.createElement(
|
|
10315
10341
|
"input",
|
|
10316
10342
|
{
|
|
10317
10343
|
type: "text",
|
|
@@ -10350,14 +10376,14 @@ function QuestDetailsPanel({
|
|
|
10350
10376
|
},
|
|
10351
10377
|
/* @__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" })),
|
|
10352
10378
|
"Retornar para Opera\xE7\xE3o"
|
|
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(
|
|
10379
|
+
))), /* @__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(FiBookOpen4, { 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(FiEdit28, { 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(FiPlus8, { 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
10380
|
"button",
|
|
10355
10381
|
{
|
|
10356
10382
|
type: "button",
|
|
10357
10383
|
onClick: () => setIsNoteFormOpen(!isNoteFormOpen),
|
|
10358
10384
|
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
10385
|
},
|
|
10360
|
-
isNoteFormOpen ? /* @__PURE__ */ React19.createElement(
|
|
10386
|
+
isNoteFormOpen ? /* @__PURE__ */ React19.createElement(FiX7, { size: 12 }) : /* @__PURE__ */ React19.createElement(FiPlus8, { size: 12 }),
|
|
10361
10387
|
isNoteFormOpen ? "Cancelar" : "Nova Nota"
|
|
10362
10388
|
)), 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
10389
|
"textarea",
|
|
@@ -10367,7 +10393,34 @@ function QuestDetailsPanel({
|
|
|
10367
10393
|
placeholder: "Escreva uma observa\xE7\xE3o no hist\xF3rico...",
|
|
10368
10394
|
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
10395
|
}
|
|
10370
|
-
), /* @__PURE__ */ React19.createElement("div", { className: "flex justify-
|
|
10396
|
+
), /* @__PURE__ */ React19.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React19.createElement("span", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Links"), /* @__PURE__ */ React19.createElement("button", { type: "button", onClick: addLinkToNote, className: "text-indigo-400 hover:text-indigo-300 text-[10px] flex items-center gap-1 font-medium" }, /* @__PURE__ */ React19.createElement(FiPlus8, { size: 10 }), " Adicionar Link")), noteLinks.length > 0 && /* @__PURE__ */ React19.createElement("div", { className: "space-y-2" }, noteLinks.map((link) => /* @__PURE__ */ React19.createElement("div", { key: link.id, className: "flex items-center gap-2 animate-in fade-in slide-in-from-left-1" }, /* @__PURE__ */ React19.createElement(
|
|
10397
|
+
"input",
|
|
10398
|
+
{
|
|
10399
|
+
type: "text",
|
|
10400
|
+
placeholder: "T\xEDtulo",
|
|
10401
|
+
value: link.name,
|
|
10402
|
+
onChange: (e) => updateLinkInNote(link.id, "name", e.target.value),
|
|
10403
|
+
className: "w-1/3 bg-slate-950/50 border border-white/5 rounded px-2 py-1 text-[10px] focus:outline-none focus:border-indigo-500/50"
|
|
10404
|
+
}
|
|
10405
|
+
), /* @__PURE__ */ React19.createElement(
|
|
10406
|
+
"input",
|
|
10407
|
+
{
|
|
10408
|
+
type: "text",
|
|
10409
|
+
placeholder: "URL (https://...)",
|
|
10410
|
+
value: link.value,
|
|
10411
|
+
onChange: (e) => updateLinkInNote(link.id, "value", e.target.value),
|
|
10412
|
+
className: "flex-1 bg-slate-950/50 border border-white/5 rounded px-2 py-1 text-[10px] focus:outline-none focus:border-indigo-500/50"
|
|
10413
|
+
}
|
|
10414
|
+
), /* @__PURE__ */ React19.createElement("button", { type: "button", onClick: () => removeLinkFromNote(link.id), className: "text-slate-600 hover:text-red-400 transition-colors" }, /* @__PURE__ */ React19.createElement(FiX7, { size: 12 })))))), /* @__PURE__ */ React19.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React19.createElement("span", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Imagens (URLs)"), /* @__PURE__ */ React19.createElement("button", { type: "button", onClick: addImageToNote, className: "text-indigo-400 hover:text-indigo-300 text-[10px] flex items-center gap-1 font-medium" }, /* @__PURE__ */ React19.createElement(FiPlus8, { size: 10 }), " Adicionar Imagem")), noteImages.length > 0 && /* @__PURE__ */ React19.createElement("div", { className: "space-y-2" }, noteImages.map((img) => /* @__PURE__ */ React19.createElement("div", { key: img.id, className: "flex items-center gap-2 animate-in fade-in slide-in-from-left-1" }, /* @__PURE__ */ React19.createElement("div", { className: "flex-1 flex items-center gap-2 bg-slate-950/50 border border-white/5 rounded px-2 py-1" }, /* @__PURE__ */ React19.createElement(FiImage, { size: 10, className: "text-slate-600" }), /* @__PURE__ */ React19.createElement(
|
|
10415
|
+
"input",
|
|
10416
|
+
{
|
|
10417
|
+
type: "text",
|
|
10418
|
+
placeholder: "URL da Imagem (https://...)",
|
|
10419
|
+
value: img.value,
|
|
10420
|
+
onChange: (e) => updateImageInNote(img.id, e.target.value),
|
|
10421
|
+
className: "flex-1 bg-transparent text-[10px] focus:outline-none"
|
|
10422
|
+
}
|
|
10423
|
+
)), /* @__PURE__ */ React19.createElement("button", { type: "button", onClick: () => removeImageFromNote(img.id), className: "text-slate-600 hover:text-red-400 transition-colors" }, /* @__PURE__ */ React19.createElement(FiX7, { size: 12 })))))), /* @__PURE__ */ React19.createElement("div", { className: "flex justify-end gap-2 pt-2" }, /* @__PURE__ */ React19.createElement(
|
|
10371
10424
|
"button",
|
|
10372
10425
|
{
|
|
10373
10426
|
type: "button",
|
|
@@ -10385,8 +10438,8 @@ function QuestDetailsPanel({
|
|
|
10385
10438
|
}
|
|
10386
10439
|
)), /* @__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) => {
|
|
10387
10440
|
const isSelected = size === s;
|
|
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(
|
|
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(
|
|
10441
|
+
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(FiCheck11, { 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));
|
|
10442
|
+
}))), /* @__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(FiX7, { size: 12 })))), canEdit && /* @__PURE__ */ React19.createElement(
|
|
10390
10443
|
"input",
|
|
10391
10444
|
{
|
|
10392
10445
|
type: "text",
|
|
@@ -10410,7 +10463,7 @@ function QuestDetailsPanel({
|
|
|
10410
10463
|
), 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) => {
|
|
10411
10464
|
e.preventDefault();
|
|
10412
10465
|
handleAddType(suggestedType);
|
|
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(
|
|
10466
|
+
} }, 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(FiLoader3, { className: "animate-spin" }), isSaving ? "Salvando..." : "Salvar Quest")))
|
|
10414
10467
|
), isDescriptionModalOpen && canEdit && /* @__PURE__ */ React19.createElement(
|
|
10415
10468
|
DescriptionEditModal,
|
|
10416
10469
|
{
|
|
@@ -10749,7 +10802,7 @@ function RelationshipDetailsPanel({
|
|
|
10749
10802
|
`
|
|
10750
10803
|
}
|
|
10751
10804
|
)))), /* @__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
|
-
|
|
10805
|
+
DescriptionDisplay,
|
|
10753
10806
|
{
|
|
10754
10807
|
description,
|
|
10755
10808
|
savedSections: existingSections,
|
|
@@ -10795,7 +10848,7 @@ function RelationshipDetailsPanel({
|
|
|
10795
10848
|
/* @__PURE__ */ React21.createElement(FiPlus9, { size: 14 }),
|
|
10796
10849
|
" Adicionar"
|
|
10797
10850
|
)), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React21.createElement(
|
|
10798
|
-
|
|
10851
|
+
CustomPropertyDisplay,
|
|
10799
10852
|
{
|
|
10800
10853
|
key: prop.id,
|
|
10801
10854
|
prop,
|
|
@@ -10829,7 +10882,7 @@ function RelationshipDetailsPanel({
|
|
|
10829
10882
|
isSaving ? "Salvando..." : "Salvar"
|
|
10830
10883
|
)))
|
|
10831
10884
|
), isDescriptionModalOpen && /* @__PURE__ */ React21.createElement(
|
|
10832
|
-
|
|
10885
|
+
DescriptionEditModal,
|
|
10833
10886
|
{
|
|
10834
10887
|
isOpen: isDescriptionModalOpen,
|
|
10835
10888
|
title: "Editar Descri\xE7\xE3o da Rela\xE7\xE3o",
|
|
@@ -11294,7 +11347,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
11294
11347
|
},
|
|
11295
11348
|
/* @__PURE__ */ React25.createElement(FiBookOpen6, { size: 14 })
|
|
11296
11349
|
)), /* @__PURE__ */ React25.createElement("div", { className: "bg-slate-800/40 rounded-lg border border-white/10 p-1 relative group" }, /* @__PURE__ */ React25.createElement(
|
|
11297
|
-
|
|
11350
|
+
DescriptionDisplay,
|
|
11298
11351
|
{
|
|
11299
11352
|
description,
|
|
11300
11353
|
savedSections,
|
|
@@ -11303,7 +11356,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
11303
11356
|
onImageClick: handleImageClickFromText
|
|
11304
11357
|
}
|
|
11305
11358
|
))), 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
|
-
|
|
11359
|
+
CustomPropertyDisplay,
|
|
11307
11360
|
{
|
|
11308
11361
|
key: prop.id,
|
|
11309
11362
|
prop,
|