@lv-x-software-house/x_view 1.2.5-dev.27 → 1.2.5-dev.28
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 +594 -120
- package/dist/index.mjs +622 -123
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -347,13 +347,13 @@ function ContextMenu({
|
|
|
347
347
|
});
|
|
348
348
|
};
|
|
349
349
|
const renderMainView = () => {
|
|
350
|
-
var _a2, _b2, _c2, _d, _e;
|
|
350
|
+
var _a2, _b2, _c2, _d, _e, _f;
|
|
351
351
|
const hasVersions = computedVersions.length > 0;
|
|
352
352
|
const canCreateVersion = ability.can("create", "Versioning");
|
|
353
353
|
const canReadVersion = ability.can("read", "Versioning");
|
|
354
354
|
const shouldShowVersioningBtn = canCreateVersion || canReadVersion && hasVersions;
|
|
355
355
|
const canStartQuest = isCurrentNodeQuest && (((_a2 = data.nodeData) == null ? void 0 : _a2.status) === "Backlog" || !((_b2 = data.nodeData) == null ? void 0 : _b2.status));
|
|
356
|
-
const canFinishQuest = isCurrentNodeQuest && ((_c2 = data.nodeData) == null ? void 0 : _c2.assignee_id) === (currentUser == null ? void 0 : currentUser.id) && ((_d = data.nodeData) == null ? void 0 : _d.status) !== "Backlog";
|
|
356
|
+
const canFinishQuest = isCurrentNodeQuest && ((_c2 = data.nodeData) == null ? void 0 : _c2.assignee_id) === (currentUser == null ? void 0 : currentUser.id) && ((_d = data.nodeData) == null ? void 0 : _d.status) !== "Backlog" && ((_e = data.nodeData) == null ? void 0 : _e.status) !== "Done";
|
|
357
357
|
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex items-center gap-2 px-2 pt-1 pb-2" }, /* @__PURE__ */ import_react.default.createElement("span", { className: "inline-flex h-2 w-2 rounded-full bg-indigo-400/80 shadow-[0_0_12px_1px_rgba(99,102,241,0.5)]" }), /* @__PURE__ */ import_react.default.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "A\xE7\xF5es R\xE1pidas")), /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col gap-1" }, canStartQuest && /* @__PURE__ */ import_react.default.createElement(
|
|
358
358
|
"button",
|
|
359
359
|
{
|
|
@@ -374,11 +374,11 @@ function ContextMenu({
|
|
|
374
374
|
onClose();
|
|
375
375
|
},
|
|
376
376
|
className: baseButtonClass,
|
|
377
|
-
title: "Finalizar esta
|
|
377
|
+
title: "Finalizar esta etapa e avan\xE7ar"
|
|
378
378
|
},
|
|
379
379
|
/* @__PURE__ */ import_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react.default.createElement("path", { d: "M22 11.08V12a10 10 0 1 1-5.93-9.14" }), /* @__PURE__ */ import_react.default.createElement("polyline", { points: "22 4 12 14.01 9 11.01" })),
|
|
380
|
-
/* @__PURE__ */ import_react.default.createElement("span", null, "Finalizar
|
|
381
|
-
), (canStartQuest || canFinishQuest) && /* @__PURE__ */ import_react.default.createElement("div", { className: "my-1 h-px w-full bg-white/10" }), ability.can("create", "Connection") && /* @__PURE__ */ import_react.default.createElement("button", { onClick: () => onStartConnection == null ? void 0 : onStartConnection(data.nodeData), className: baseButtonClass, title: "Conectar" }, /* @__PURE__ */ import_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react.default.createElement("path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.72" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.72-1.72" })), /* @__PURE__ */ import_react.default.createElement("span", null, "Conectar")), ability.can("create", "Node") && !((
|
|
380
|
+
/* @__PURE__ */ import_react.default.createElement("span", null, "Finalizar Etapa")
|
|
381
|
+
), (canStartQuest || canFinishQuest) && /* @__PURE__ */ import_react.default.createElement("div", { className: "my-1 h-px w-full bg-white/10" }), ability.can("create", "Connection") && /* @__PURE__ */ import_react.default.createElement("button", { onClick: () => onStartConnection == null ? void 0 : onStartConnection(data.nodeData), className: baseButtonClass, title: "Conectar" }, /* @__PURE__ */ import_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react.default.createElement("path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.72" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.72-1.72" })), /* @__PURE__ */ import_react.default.createElement("span", null, "Conectar")), ability.can("create", "Node") && !((_f = data.nodeData) == null ? void 0 : _f.is_quest) && /* @__PURE__ */ import_react.default.createElement("button", { onClick: () => onStartCreation == null ? void 0 : onStartCreation(data.nodeData), className: baseButtonClass, title: "Criar e Conectar" }, /* @__PURE__ */ import_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react.default.createElement("line", { x1: "12", y1: "8", x2: "12", y2: "16" }), /* @__PURE__ */ import_react.default.createElement("line", { x1: "8", y1: "12", x2: "16", y2: "12" })), /* @__PURE__ */ import_react.default.createElement("span", null, "Criar e Conectar")), ability.can("create", "Ancestry") && /* @__PURE__ */ import_react.default.createElement("button", { onClick: () => onStartAncestryCreation == null ? void 0 : onStartAncestryCreation(data.nodeData), className: baseButtonClass, title: "Criar Ancestralidade" }, /* @__PURE__ */ import_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react.default.createElement("path", { d: "M10 20.5c.5-.5.8-1.2.8-2s-.3-1.5-.8-2c-.5-.5-1.2-.8-2-.8s-1.5.3-2 .8c-.5.5-.8 1.2-.8 2s.3 1.5.8 2c.5.5 1.2-.8 2 .8s1.5-.3 2-.8c-.5-.5-.8-1.2-.8-2s.3-1.5.8-2c.5.5 1.2-.8 2 .8s1.5.3 2 .8Z" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M10 16v-3a2 2 0 0 1 2-2h4" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M14 3.5c.5.5.8 1.2.8 2s-.3 1.5-.8 2c-.5-.5-1.2-.8-2 .8s1.5.3-2-.8c-.5-.5-.8-1.2-.8-2s.3-1.5.8-2c.5.5 1.2-.8 2 .8s1.5.3 2 .8Z" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M14 8v3a2 2 0 0 0 2 2h4" })), /* @__PURE__ */ import_react.default.createElement("span", null, "Criar Ancestralidade")), shouldShowVersioningBtn && /* @__PURE__ */ import_react.default.createElement("button", { onClick: () => setMenuView("versioning"), className: baseButtonClass, title: hasVersions ? "Versionamento" : "Criar Versionamento" }, /* @__PURE__ */ import_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react.default.createElement("line", { x1: "6", y1: "3", x2: "6", y2: "15" }), /* @__PURE__ */ import_react.default.createElement("circle", { cx: "18", cy: "6", r: "3" }), /* @__PURE__ */ import_react.default.createElement("circle", { cx: "6", cy: "18", r: "3" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M18 9a9 9 0 0 1-9 9" })), /* @__PURE__ */ import_react.default.createElement("span", null, hasVersions || !canCreateVersion ? "Versionamento" : "Criar Versionamento")), (connections.length > 0 || availableAncestries.length > 0) && ability.can("read", "Connection") && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("div", { className: "my-1 h-px w-full bg-white/10" }), /* @__PURE__ */ import_react.default.createElement("button", { onClick: () => setMenuView("connections"), className: baseButtonClass, title: "Conex\xF5es" }, /* @__PURE__ */ import_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react.default.createElement("path", { d: "M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2z" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M8 12h8" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M12 8v8" })), /* @__PURE__ */ import_react.default.createElement("span", null, "Conex\xF5es (", totalConnectionsCount, ")"))), /* @__PURE__ */ import_react.default.createElement("div", { className: "my-1 h-px w-full bg-white/10" }), /* @__PURE__ */ import_react.default.createElement("button", { onClick: () => {
|
|
382
382
|
onFocusNode == null ? void 0 : onFocusNode(data.nodeData);
|
|
383
383
|
onClose();
|
|
384
384
|
}, className: baseButtonClass, title: "Focar na c\xE2mera" }, /* @__PURE__ */ import_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react.default.createElement("circle", { cx: "12", cy: "12", r: "3" })), /* @__PURE__ */ import_react.default.createElement("span", null, "Focar neste Node")), /* @__PURE__ */ import_react.default.createElement("button", { onClick: (e) => handleCopyLink(e, data.nodeData), className: baseButtonClass, title: "Copiar Link para Compartilhar" }, isLinkCopied ? /* @__PURE__ */ import_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "#4ade80", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react.default.createElement("polyline", { points: "20 6 9 17 4 12" })) : /* @__PURE__ */ import_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react.default.createElement("path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.72" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.72-1.72" })), /* @__PURE__ */ import_react.default.createElement("span", { className: isLinkCopied ? "text-green-400" : "" }, isLinkCopied ? "Copiado!" : "Copiar Link")), ability.can("dismiss", "Node") && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("button", { onClick: () => onDismissNode == null ? void 0 : onDismissNode(data.nodeData), className: baseButtonClass, title: "Remover da visualiza\xE7\xE3o" }, /* @__PURE__ */ import_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react.default.createElement("path", { d: "M9.88 9.88a3 3 0 1 0 4.24 4.24" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61" }), /* @__PURE__ */ import_react.default.createElement("line", { x1: "2", y1: "2", x2: "22", y2: "22" })), /* @__PURE__ */ import_react.default.createElement("span", null, "Dismiss")), /* @__PURE__ */ import_react.default.createElement("button", { onClick: () => onDismissOtherNodes == null ? void 0 : onDismissOtherNodes(data.nodeData), className: baseButtonClass, title: "Remover outros da visualiza\xE7\xE3o" }, /* @__PURE__ */ import_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react.default.createElement("circle", { cx: "12", cy: "12", r: "3" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M3 7V5a2 2 0 0 1 2-2h2" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M17 3h2a2 2 0 0 1 2 2v2" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M21 17v2a2 2 0 0 1-2 2h-2" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M7 21H5a2 2 0 0 1-2-2v-2" })), /* @__PURE__ */ import_react.default.createElement("span", null, "Dismiss other nodes"))), ability.can("delete", "Node") && /* @__PURE__ */ import_react.default.createElement("button", { onClick: () => setMenuView("deleteConfirmation"), className: deleteButtonClass, title: "Excluir Node" }, /* @__PURE__ */ import_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react.default.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" }), /* @__PURE__ */ import_react.default.createElement("line", { x1: "10", y1: "11", x2: "10", y2: "17" }), /* @__PURE__ */ import_react.default.createElement("line", { x1: "14", y1: "11", x2: "14", y2: "17" })), /* @__PURE__ */ import_react.default.createElement("span", null, "Excluir Node"))));
|
|
@@ -7831,7 +7831,9 @@ function InSceneCreationForm({
|
|
|
7831
7831
|
const [isDescriptionModalOpen, setIsDescriptionModalOpen] = (0, import_react14.useState)(false);
|
|
7832
7832
|
const [useImageAsTexture, setUseImageAsTexture] = (0, import_react14.useState)(false);
|
|
7833
7833
|
const [selectedImageUrl, setSelectedImageUrl] = (0, import_react14.useState)(null);
|
|
7834
|
-
const [targetDatasetId, setTargetDatasetId] = (0, import_react14.useState)(
|
|
7834
|
+
const [targetDatasetId, setTargetDatasetId] = (0, import_react14.useState)(
|
|
7835
|
+
sourceNodeDatasetId || ""
|
|
7836
|
+
);
|
|
7835
7837
|
const [isDatasetDropdownOpen, setIsDatasetDropdownOpen] = (0, import_react14.useState)(false);
|
|
7836
7838
|
const datasetDropdownRef = (0, import_react14.useRef)(null);
|
|
7837
7839
|
(0, import_react14.useEffect)(() => {
|
|
@@ -7851,7 +7853,9 @@ function InSceneCreationForm({
|
|
|
7851
7853
|
};
|
|
7852
7854
|
}, [isDatasetDropdownOpen]);
|
|
7853
7855
|
const propsEndRef = (0, import_react14.useRef)(null);
|
|
7854
|
-
const hasImages = customProps.some(
|
|
7856
|
+
const hasImages = customProps.some(
|
|
7857
|
+
(p) => p.type === "images" && Array.isArray(p.value) && p.value.length > 0 && p.value.some((img) => img.value)
|
|
7858
|
+
);
|
|
7855
7859
|
(0, import_react14.useEffect)(() => {
|
|
7856
7860
|
if (!hasImages && useImageAsTexture) {
|
|
7857
7861
|
setUseImageAsTexture(false);
|
|
@@ -7861,7 +7865,9 @@ function InSceneCreationForm({
|
|
|
7861
7865
|
}, [hasImages, useImageAsTexture, onImageChange]);
|
|
7862
7866
|
(0, import_react14.useEffect)(() => {
|
|
7863
7867
|
let result = [];
|
|
7864
|
-
const validExistingTypes = existingTypes.filter(
|
|
7868
|
+
const validExistingTypes = existingTypes.filter(
|
|
7869
|
+
(t) => t && typeof t === "string" && t.trim() !== ""
|
|
7870
|
+
);
|
|
7865
7871
|
if (typeInput.trim() === "") {
|
|
7866
7872
|
result = validExistingTypes.filter((t) => !types.includes(t));
|
|
7867
7873
|
} else {
|
|
@@ -7870,13 +7876,20 @@ function InSceneCreationForm({
|
|
|
7870
7876
|
const lowercasedInput = typeInput.toLowerCase();
|
|
7871
7877
|
result = validExistingTypes.filter((t) => {
|
|
7872
7878
|
if (!t) {
|
|
7873
|
-
console.warn(
|
|
7879
|
+
console.warn(
|
|
7880
|
+
"InSceneCreationForm: Tipo encontrado como undefined/null durante filtragem"
|
|
7881
|
+
);
|
|
7874
7882
|
return false;
|
|
7875
7883
|
}
|
|
7876
7884
|
return t.toLowerCase().includes(lowercasedInput) && !types.includes(t);
|
|
7877
7885
|
});
|
|
7878
7886
|
} catch (err) {
|
|
7879
|
-
console.error(
|
|
7887
|
+
console.error(
|
|
7888
|
+
"InSceneCreationForm: Erro ao filtrar tipos:",
|
|
7889
|
+
err,
|
|
7890
|
+
"typeInput:",
|
|
7891
|
+
typeInput
|
|
7892
|
+
);
|
|
7880
7893
|
}
|
|
7881
7894
|
}
|
|
7882
7895
|
if (sourceTypes) {
|
|
@@ -7906,7 +7919,10 @@ function InSceneCreationForm({
|
|
|
7906
7919
|
setCustomProps([...customProps, newProp]);
|
|
7907
7920
|
setTimeout(() => {
|
|
7908
7921
|
var _a2;
|
|
7909
|
-
(_a2 = propsEndRef.current) == null ? void 0 : _a2.scrollIntoView({
|
|
7922
|
+
(_a2 = propsEndRef.current) == null ? void 0 : _a2.scrollIntoView({
|
|
7923
|
+
behavior: "smooth",
|
|
7924
|
+
block: "center"
|
|
7925
|
+
});
|
|
7910
7926
|
}, 100);
|
|
7911
7927
|
};
|
|
7912
7928
|
const handleRemoveProp = (index) => setCustomProps(customProps.filter((_, i) => i !== index));
|
|
@@ -8015,15 +8031,23 @@ function InSceneCreationForm({
|
|
|
8015
8031
|
},
|
|
8016
8032
|
/* @__PURE__ */ import_react14.default.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }),
|
|
8017
8033
|
/* @__PURE__ */ import_react14.default.createElement("div", { className: "px-6 pt-5 pb-3" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ import_react14.default.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-indigo-400/80 shadow-[0_0_18px_2px_rgba(99,102,241,0.55)]" }), /* @__PURE__ */ import_react14.default.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Criar & Conectar")), /* @__PURE__ */ import_react14.default.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, "Novo Node")),
|
|
8018
|
-
/* @__PURE__ */ import_react14.default.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col max-h-[68vh]" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 custom-scrollbar" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react14.default.createElement("label", { className: "text-xs text-slate-300" }, "Tipo(s) do Node"), /* @__PURE__ */ import_react14.default.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 focus-within:ring-2 focus-within:ring-indigo-400/60 transition-all" }, types.map((t, index) => /* @__PURE__ */ import_react14.default.createElement(
|
|
8019
|
-
"
|
|
8034
|
+
/* @__PURE__ */ import_react14.default.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col max-h-[68vh]" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 custom-scrollbar" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react14.default.createElement("label", { className: "text-xs text-slate-300" }, "Tipo(s) do Node"), /* @__PURE__ */ import_react14.default.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 focus-within:ring-2 focus-within:ring-indigo-400/60 transition-all" }, types.map((t, index) => /* @__PURE__ */ import_react14.default.createElement(
|
|
8035
|
+
"span",
|
|
8020
8036
|
{
|
|
8021
|
-
|
|
8022
|
-
|
|
8023
|
-
className: "hover:text-white transition-colors"
|
|
8037
|
+
key: index,
|
|
8038
|
+
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"
|
|
8024
8039
|
},
|
|
8025
|
-
|
|
8026
|
-
|
|
8040
|
+
t,
|
|
8041
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
8042
|
+
"button",
|
|
8043
|
+
{
|
|
8044
|
+
type: "button",
|
|
8045
|
+
onClick: () => handleRemoveType(index),
|
|
8046
|
+
className: "hover:text-white transition-colors"
|
|
8047
|
+
},
|
|
8048
|
+
/* @__PURE__ */ import_react14.default.createElement(import_fi12.FiX, { size: 12 })
|
|
8049
|
+
)
|
|
8050
|
+
)), /* @__PURE__ */ import_react14.default.createElement(
|
|
8027
8051
|
"input",
|
|
8028
8052
|
{
|
|
8029
8053
|
type: "text",
|
|
@@ -8056,7 +8080,17 @@ function InSceneCreationForm({
|
|
|
8056
8080
|
}
|
|
8057
8081
|
},
|
|
8058
8082
|
suggestedType
|
|
8059
|
-
))))), /* @__PURE__ */ import_react14.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react14.default.createElement("label", { className: "text-xs text-slate-300" }, "Nome do Node"), /* @__PURE__ */ import_react14.default.createElement(
|
|
8083
|
+
))))), /* @__PURE__ */ import_react14.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react14.default.createElement("label", { className: "text-xs text-slate-300" }, "Nome do Node"), /* @__PURE__ */ import_react14.default.createElement(
|
|
8084
|
+
"input",
|
|
8085
|
+
{
|
|
8086
|
+
required: true,
|
|
8087
|
+
type: "text",
|
|
8088
|
+
placeholder: "Ex.: Cliente XPTO",
|
|
8089
|
+
value: name,
|
|
8090
|
+
onChange: handleNameInputChange,
|
|
8091
|
+
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"
|
|
8092
|
+
}
|
|
8093
|
+
)), viewType === "view" && availableDatasets.length > 0 && /* @__PURE__ */ import_react14.default.createElement("div", { className: "space-y-1.5 relative", ref: datasetDropdownRef }, /* @__PURE__ */ import_react14.default.createElement("label", { className: "text-xs text-slate-300" }, "Criar Node no Dataset:"), /* @__PURE__ */ import_react14.default.createElement(
|
|
8060
8094
|
"button",
|
|
8061
8095
|
{
|
|
8062
8096
|
type: "button",
|
|
@@ -8064,7 +8098,12 @@ function InSceneCreationForm({
|
|
|
8064
8098
|
className: "w-full flex items-center justify-between 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 hover:bg-slate-700/70 transition-colors text-slate-200 text-left"
|
|
8065
8099
|
},
|
|
8066
8100
|
/* @__PURE__ */ import_react14.default.createElement("span", { className: "truncate pr-2" }, selectedDatasetName),
|
|
8067
|
-
/* @__PURE__ */ import_react14.default.createElement(
|
|
8101
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
8102
|
+
import_fi12.FiChevronDown,
|
|
8103
|
+
{
|
|
8104
|
+
className: `flex-shrink-0 text-slate-400 transition-transform ${isDatasetDropdownOpen ? "rotate-180" : ""}`
|
|
8105
|
+
}
|
|
8106
|
+
)
|
|
8068
8107
|
), isDatasetDropdownOpen && /* @__PURE__ */ import_react14.default.createElement("ul", { className: "custom-scrollbar absolute top-[66px] left-0 z-20 w-full max-h-48 overflow-y-auto rounded-lg bg-slate-800 border border-white/10 shadow-xl py-1" }, availableDatasets.map((ds) => /* @__PURE__ */ import_react14.default.createElement(
|
|
8069
8108
|
"li",
|
|
8070
8109
|
{
|
|
@@ -8076,7 +8115,7 @@ function InSceneCreationForm({
|
|
|
8076
8115
|
className: `px-3 py-2 text-sm cursor-pointer transition-colors ${targetDatasetId === ds.id ? "bg-indigo-600/40 text-indigo-200 font-medium" : "text-slate-300 hover:bg-white/5"}`
|
|
8077
8116
|
},
|
|
8078
8117
|
ds.name
|
|
8079
|
-
)))), /* @__PURE__ */ import_react14.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react14.default.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o
|
|
8118
|
+
)))), /* @__PURE__ */ import_react14.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react14.default.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react14.default.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__ */ import_react14.default.createElement(
|
|
8080
8119
|
DescriptionDisplay,
|
|
8081
8120
|
{
|
|
8082
8121
|
description,
|
|
@@ -8113,10 +8152,28 @@ function InSceneCreationForm({
|
|
|
8113
8152
|
onClick: () => handleSizeChange(s),
|
|
8114
8153
|
className: "flex items-center gap-2 group cursor-pointer focus:outline-none"
|
|
8115
8154
|
},
|
|
8116
|
-
/* @__PURE__ */ import_react14.default.createElement(
|
|
8117
|
-
|
|
8155
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
8156
|
+
"div",
|
|
8157
|
+
{
|
|
8158
|
+
className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${isSelected ? "bg-indigo-500 border-indigo-500 shadow-[0_0_10px_rgba(99,102,241,0.4)]" : "border-slate-600 bg-transparent group-hover:border-slate-500"}`
|
|
8159
|
+
},
|
|
8160
|
+
isSelected && /* @__PURE__ */ import_react14.default.createElement(import_fi12.FiCheck, { size: 12, className: "text-white" })
|
|
8161
|
+
),
|
|
8162
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
8163
|
+
"span",
|
|
8164
|
+
{
|
|
8165
|
+
className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 group-hover:text-slate-300"}`
|
|
8166
|
+
},
|
|
8167
|
+
s
|
|
8168
|
+
)
|
|
8118
8169
|
);
|
|
8119
|
-
}))), /* @__PURE__ */ import_react14.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react14.default.createElement("label", { className: "text-xs text-slate-300" }, "Cor e Brilho"), hasImages && /* @__PURE__ */ import_react14.default.createElement("label", { className: "flex items-center gap-2 cursor-pointer group" }, /* @__PURE__ */ import_react14.default.createElement(
|
|
8170
|
+
}))), /* @__PURE__ */ import_react14.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react14.default.createElement("label", { className: "text-xs text-slate-300" }, "Cor e Brilho"), hasImages && /* @__PURE__ */ import_react14.default.createElement("label", { className: "flex items-center gap-2 cursor-pointer group" }, /* @__PURE__ */ import_react14.default.createElement(
|
|
8171
|
+
"div",
|
|
8172
|
+
{
|
|
8173
|
+
className: `w-4 h-4 rounded border flex items-center justify-center transition-colors ${useImageAsTexture ? "bg-indigo-500 border-indigo-500" : "border-slate-500 bg-transparent"}`
|
|
8174
|
+
},
|
|
8175
|
+
useImageAsTexture && /* @__PURE__ */ import_react14.default.createElement(import_fi12.FiCheck, { size: 12, className: "text-white" })
|
|
8176
|
+
), /* @__PURE__ */ import_react14.default.createElement(
|
|
8120
8177
|
"input",
|
|
8121
8178
|
{
|
|
8122
8179
|
type: "checkbox",
|
|
@@ -8124,7 +8181,13 @@ function InSceneCreationForm({
|
|
|
8124
8181
|
onChange: handleToggleImageMode,
|
|
8125
8182
|
className: "hidden"
|
|
8126
8183
|
}
|
|
8127
|
-
), /* @__PURE__ */ import_react14.default.createElement(
|
|
8184
|
+
), /* @__PURE__ */ import_react14.default.createElement(
|
|
8185
|
+
"span",
|
|
8186
|
+
{
|
|
8187
|
+
className: `text-xs ${useImageAsTexture ? "text-indigo-300" : "text-slate-400 group-hover:text-slate-300"}`
|
|
8188
|
+
},
|
|
8189
|
+
"Usar imagem para representar o node"
|
|
8190
|
+
))), /* @__PURE__ */ import_react14.default.createElement(
|
|
8128
8191
|
ColorPicker,
|
|
8129
8192
|
{
|
|
8130
8193
|
color,
|
|
@@ -8143,7 +8206,22 @@ function InSceneCreationForm({
|
|
|
8143
8206
|
className: "w-full h-1.5 bg-slate-700 rounded-lg appearance-none cursor-pointer accent-indigo-500 hover:accent-indigo-400",
|
|
8144
8207
|
title: `Intensidade do brilho: ${intensity}`
|
|
8145
8208
|
}
|
|
8146
|
-
), /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-xs text-slate-400 w-6 text-right" }, intensity)), /* @__PURE__ */ import_react14.default.createElement(
|
|
8209
|
+
), /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-xs text-slate-400 w-6 text-right" }, intensity)), /* @__PURE__ */ import_react14.default.createElement(
|
|
8210
|
+
"span",
|
|
8211
|
+
{
|
|
8212
|
+
className: `text-xs block mt-1 transition-opacity ${useImageAsTexture ? "opacity-40" : "text-slate-400"}`
|
|
8213
|
+
},
|
|
8214
|
+
useImageAsTexture ? "Cor da borda (definida pela imagem)" : "Selecione a cor e ajuste o brilho."
|
|
8215
|
+
)), /* @__PURE__ */ import_react14.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react14.default.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), /* @__PURE__ */ import_react14.default.createElement(
|
|
8216
|
+
"button",
|
|
8217
|
+
{
|
|
8218
|
+
type: "button",
|
|
8219
|
+
onClick: handleAddProp,
|
|
8220
|
+
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors"
|
|
8221
|
+
},
|
|
8222
|
+
/* @__PURE__ */ import_react14.default.createElement(import_fi12.FiPlus, { size: 14 }),
|
|
8223
|
+
" Adicionar"
|
|
8224
|
+
)), /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ import_react14.default.createElement(
|
|
8147
8225
|
CustomPropertyDisplay,
|
|
8148
8226
|
{
|
|
8149
8227
|
key: prop.id,
|
|
@@ -8151,13 +8229,30 @@ function InSceneCreationForm({
|
|
|
8151
8229
|
onUpdate: (updatedProp) => handleUpdateProp(index, updatedProp),
|
|
8152
8230
|
onRemove: () => handleRemoveProp(index),
|
|
8153
8231
|
onOpenImageViewer,
|
|
8154
|
-
unavailableTypes: currentUsedTypes.filter(
|
|
8232
|
+
unavailableTypes: currentUsedTypes.filter(
|
|
8233
|
+
(t) => t !== prop.type
|
|
8234
|
+
),
|
|
8155
8235
|
isTextureMode: useImageAsTexture,
|
|
8156
8236
|
selectedImageUrl,
|
|
8157
8237
|
onSelectTexture: handleSelectTexture,
|
|
8158
8238
|
onUploadFile
|
|
8159
8239
|
}
|
|
8160
|
-
)), /* @__PURE__ */ import_react14.default.createElement("div", { ref: propsEndRef })))), /* @__PURE__ */ import_react14.default.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__ */ import_react14.default.createElement(
|
|
8240
|
+
)), /* @__PURE__ */ import_react14.default.createElement("div", { ref: propsEndRef })))), /* @__PURE__ */ import_react14.default.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__ */ import_react14.default.createElement(
|
|
8241
|
+
"button",
|
|
8242
|
+
{
|
|
8243
|
+
type: "button",
|
|
8244
|
+
onClick: onCancel,
|
|
8245
|
+
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm"
|
|
8246
|
+
},
|
|
8247
|
+
"Cancelar"
|
|
8248
|
+
), /* @__PURE__ */ import_react14.default.createElement(
|
|
8249
|
+
"button",
|
|
8250
|
+
{
|
|
8251
|
+
type: "submit",
|
|
8252
|
+
className: "px-4 py-2 rounded-lg bg-gradient-to-tr from-indigo-600 to-indigo-400 hover:from-indigo-500 hover:to-indigo-300 transition-colors font-semibold text-sm shadow-[0_8px_24px_rgba(99,102,241,0.35)]"
|
|
8253
|
+
},
|
|
8254
|
+
"Salvar"
|
|
8255
|
+
)))
|
|
8161
8256
|
), isDescriptionModalOpen && /* @__PURE__ */ import_react14.default.createElement(
|
|
8162
8257
|
DescriptionEditModal,
|
|
8163
8258
|
{
|
|
@@ -8197,12 +8292,22 @@ function InSceneVersionForm({
|
|
|
8197
8292
|
const [name, setName] = (0, import_react15.useState)("");
|
|
8198
8293
|
const [size, setSize] = (0, import_react15.useState)("medium");
|
|
8199
8294
|
const [description, setDescription] = (0, import_react15.useState)("");
|
|
8200
|
-
const [customProps, setCustomProps] = (0, import_react15.useState)([
|
|
8295
|
+
const [customProps, setCustomProps] = (0, import_react15.useState)([
|
|
8296
|
+
{
|
|
8297
|
+
id: v4_default(),
|
|
8298
|
+
key: "Date",
|
|
8299
|
+
type: "date",
|
|
8300
|
+
value: { type: "Data", value: "" },
|
|
8301
|
+
isEditing: true
|
|
8302
|
+
}
|
|
8303
|
+
]);
|
|
8201
8304
|
const [isDescriptionModalOpen, setIsDescriptionModalOpen] = (0, import_react15.useState)(false);
|
|
8202
8305
|
const propsEndRef = (0, import_react15.useRef)(null);
|
|
8203
8306
|
const [useImageAsTexture, setUseImageAsTexture] = (0, import_react15.useState)(false);
|
|
8204
8307
|
const [selectedImageUrl, setSelectedImageUrl] = (0, import_react15.useState)(null);
|
|
8205
|
-
const hasImages = customProps.some(
|
|
8308
|
+
const hasImages = customProps.some(
|
|
8309
|
+
(p) => p.type === "images" && Array.isArray(p.value) && p.value.length > 0 && p.value.some((img) => img.value)
|
|
8310
|
+
);
|
|
8206
8311
|
(0, import_react15.useEffect)(() => {
|
|
8207
8312
|
if (!hasImages && useImageAsTexture) {
|
|
8208
8313
|
setUseImageAsTexture(false);
|
|
@@ -8219,7 +8324,10 @@ function InSceneVersionForm({
|
|
|
8219
8324
|
setCustomProps([...customProps, newProp]);
|
|
8220
8325
|
setTimeout(() => {
|
|
8221
8326
|
var _a;
|
|
8222
|
-
(_a = propsEndRef.current) == null ? void 0 : _a.scrollIntoView({
|
|
8327
|
+
(_a = propsEndRef.current) == null ? void 0 : _a.scrollIntoView({
|
|
8328
|
+
behavior: "smooth",
|
|
8329
|
+
block: "center"
|
|
8330
|
+
});
|
|
8223
8331
|
}, 100);
|
|
8224
8332
|
};
|
|
8225
8333
|
const handleRemoveProp = (index) => {
|
|
@@ -8263,7 +8371,9 @@ function InSceneVersionForm({
|
|
|
8263
8371
|
alert("O campo 'Nome' \xE9 obrigat\xF3rio.");
|
|
8264
8372
|
return;
|
|
8265
8373
|
}
|
|
8266
|
-
const hasDate = customProps.some(
|
|
8374
|
+
const hasDate = customProps.some(
|
|
8375
|
+
(prop) => prop.key === "Date" && !prop.isEditing
|
|
8376
|
+
);
|
|
8267
8377
|
if (!hasDate) {
|
|
8268
8378
|
alert("A propriedade 'Date' \xE9 obrigat\xF3ria.");
|
|
8269
8379
|
return;
|
|
@@ -8314,7 +8424,25 @@ function InSceneVersionForm({
|
|
|
8314
8424
|
},
|
|
8315
8425
|
/* @__PURE__ */ import_react15.default.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }),
|
|
8316
8426
|
/* @__PURE__ */ import_react15.default.createElement("div", { className: "px-6 pt-5 pb-3" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ import_react15.default.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-indigo-400/80 shadow-[0_0_18px_2px_rgba(99,102,241,0.55)]" }), /* @__PURE__ */ import_react15.default.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Criar Versionamento")), /* @__PURE__ */ import_react15.default.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, "Nova Vers\xE3o")),
|
|
8317
|
-
/* @__PURE__ */ import_react15.default.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col max-h-[68vh]" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 custom-scrollbar" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react15.default.createElement("label", { className: "text-xs text-slate-300" }, "Tipo do Node (Fixo)"), /* @__PURE__ */ import_react15.default.createElement(
|
|
8427
|
+
/* @__PURE__ */ import_react15.default.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col max-h-[68vh]" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 custom-scrollbar" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react15.default.createElement("label", { className: "text-xs text-slate-300" }, "Tipo do Node (Fixo)"), /* @__PURE__ */ import_react15.default.createElement(
|
|
8428
|
+
"input",
|
|
8429
|
+
{
|
|
8430
|
+
type: "text",
|
|
8431
|
+
value: displayType,
|
|
8432
|
+
disabled: true,
|
|
8433
|
+
className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 text-slate-400 cursor-not-allowed"
|
|
8434
|
+
}
|
|
8435
|
+
)), /* @__PURE__ */ import_react15.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react15.default.createElement("label", { className: "text-xs text-slate-300" }, "Nome do Node"), /* @__PURE__ */ import_react15.default.createElement(
|
|
8436
|
+
"input",
|
|
8437
|
+
{
|
|
8438
|
+
required: true,
|
|
8439
|
+
type: "text",
|
|
8440
|
+
placeholder: "Ex.: Vers\xE3o 2.0",
|
|
8441
|
+
value: name,
|
|
8442
|
+
onChange: handleNameInputChange,
|
|
8443
|
+
className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 focus:outline-none focus:ring-2 focus:ring-indigo-400/60"
|
|
8444
|
+
}
|
|
8445
|
+
)), /* @__PURE__ */ import_react15.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react15.default.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react15.default.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__ */ import_react15.default.createElement(
|
|
8318
8446
|
DescriptionDisplay,
|
|
8319
8447
|
{
|
|
8320
8448
|
description,
|
|
@@ -8351,10 +8479,28 @@ function InSceneVersionForm({
|
|
|
8351
8479
|
onClick: () => handleSizeChange(s),
|
|
8352
8480
|
className: "flex items-center gap-2 group cursor-pointer focus:outline-none"
|
|
8353
8481
|
},
|
|
8354
|
-
/* @__PURE__ */ import_react15.default.createElement(
|
|
8355
|
-
|
|
8482
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
8483
|
+
"div",
|
|
8484
|
+
{
|
|
8485
|
+
className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${isSelected ? "bg-indigo-500 border-indigo-500 shadow-[0_0_10px_rgba(99,102,241,0.4)]" : "border-slate-600 bg-transparent group-hover:border-slate-500"}`
|
|
8486
|
+
},
|
|
8487
|
+
isSelected && /* @__PURE__ */ import_react15.default.createElement(import_fi13.FiCheck, { size: 12, className: "text-white" })
|
|
8488
|
+
),
|
|
8489
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
8490
|
+
"span",
|
|
8491
|
+
{
|
|
8492
|
+
className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 group-hover:text-slate-300"}`
|
|
8493
|
+
},
|
|
8494
|
+
s
|
|
8495
|
+
)
|
|
8356
8496
|
);
|
|
8357
|
-
}))), /* @__PURE__ */ import_react15.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react15.default.createElement("label", { className: "text-xs text-slate-300" }, "Cor do Node (Fixa)"), hasImages && /* @__PURE__ */ import_react15.default.createElement("label", { className: "flex items-center gap-2 cursor-pointer group" }, /* @__PURE__ */ import_react15.default.createElement(
|
|
8497
|
+
}))), /* @__PURE__ */ import_react15.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react15.default.createElement("label", { className: "text-xs text-slate-300" }, "Cor do Node (Fixa)"), hasImages && /* @__PURE__ */ import_react15.default.createElement("label", { className: "flex items-center gap-2 cursor-pointer group" }, /* @__PURE__ */ import_react15.default.createElement(
|
|
8498
|
+
"div",
|
|
8499
|
+
{
|
|
8500
|
+
className: `w-4 h-4 rounded border flex items-center justify-center transition-colors ${useImageAsTexture ? "bg-indigo-500 border-indigo-500" : "border-slate-500 bg-transparent"}`
|
|
8501
|
+
},
|
|
8502
|
+
useImageAsTexture && /* @__PURE__ */ import_react15.default.createElement(import_fi13.FiCheck, { size: 12, className: "text-white" })
|
|
8503
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
8358
8504
|
"input",
|
|
8359
8505
|
{
|
|
8360
8506
|
type: "checkbox",
|
|
@@ -8362,7 +8508,35 @@ function InSceneVersionForm({
|
|
|
8362
8508
|
onChange: handleToggleImageMode,
|
|
8363
8509
|
className: "hidden"
|
|
8364
8510
|
}
|
|
8365
|
-
), /* @__PURE__ */ import_react15.default.createElement(
|
|
8511
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
8512
|
+
"span",
|
|
8513
|
+
{
|
|
8514
|
+
className: `text-xs ${useImageAsTexture ? "text-indigo-300" : "text-slate-400 group-hover:text-slate-300"}`
|
|
8515
|
+
},
|
|
8516
|
+
"Usar imagem"
|
|
8517
|
+
))), /* @__PURE__ */ import_react15.default.createElement(
|
|
8518
|
+
"div",
|
|
8519
|
+
{
|
|
8520
|
+
className: `flex items-center gap-3 bg-slate-900/60 p-2.5 rounded-lg border border-white/10 transition-opacity duration-200 ${useImageAsTexture ? "opacity-40 pointer-events-none grayscale" : "opacity-100"}`
|
|
8521
|
+
},
|
|
8522
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
8523
|
+
"div",
|
|
8524
|
+
{
|
|
8525
|
+
className: "h-8 w-12 rounded-md border border-white/10",
|
|
8526
|
+
style: { backgroundColor: fixedColor }
|
|
8527
|
+
}
|
|
8528
|
+
),
|
|
8529
|
+
/* @__PURE__ */ import_react15.default.createElement("span", { className: "text-xs text-slate-300" }, useImageAsTexture ? "Cor definida pela imagem." : "Cor herdada do node original.")
|
|
8530
|
+
)), /* @__PURE__ */ import_react15.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react15.default.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais (*Date obrigat\xF3rio)"), /* @__PURE__ */ import_react15.default.createElement(
|
|
8531
|
+
"button",
|
|
8532
|
+
{
|
|
8533
|
+
type: "button",
|
|
8534
|
+
onClick: handleAddProp,
|
|
8535
|
+
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors"
|
|
8536
|
+
},
|
|
8537
|
+
/* @__PURE__ */ import_react15.default.createElement(import_fi13.FiPlus, { size: 14 }),
|
|
8538
|
+
" Adicionar"
|
|
8539
|
+
)), /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ import_react15.default.createElement(
|
|
8366
8540
|
CustomPropertyDisplay,
|
|
8367
8541
|
{
|
|
8368
8542
|
key: prop.id,
|
|
@@ -8370,13 +8544,30 @@ function InSceneVersionForm({
|
|
|
8370
8544
|
onUpdate: (updatedProp) => handleUpdateProp(index, updatedProp),
|
|
8371
8545
|
onRemove: () => handleRemoveProp(index),
|
|
8372
8546
|
onOpenImageViewer,
|
|
8373
|
-
unavailableTypes: currentUsedTypes.filter(
|
|
8547
|
+
unavailableTypes: currentUsedTypes.filter(
|
|
8548
|
+
(t) => t !== prop.type
|
|
8549
|
+
),
|
|
8374
8550
|
isTextureMode: useImageAsTexture,
|
|
8375
8551
|
selectedImageUrl,
|
|
8376
8552
|
onSelectTexture: handleSelectTexture,
|
|
8377
8553
|
onUploadFile
|
|
8378
8554
|
}
|
|
8379
|
-
)), /* @__PURE__ */ import_react15.default.createElement("div", { ref: propsEndRef })))), /* @__PURE__ */ import_react15.default.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__ */ import_react15.default.createElement(
|
|
8555
|
+
)), /* @__PURE__ */ import_react15.default.createElement("div", { ref: propsEndRef })))), /* @__PURE__ */ import_react15.default.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__ */ import_react15.default.createElement(
|
|
8556
|
+
"button",
|
|
8557
|
+
{
|
|
8558
|
+
type: "button",
|
|
8559
|
+
onClick: onCancel,
|
|
8560
|
+
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm"
|
|
8561
|
+
},
|
|
8562
|
+
"Cancelar"
|
|
8563
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
8564
|
+
"button",
|
|
8565
|
+
{
|
|
8566
|
+
type: "submit",
|
|
8567
|
+
className: "px-4 py-2 rounded-lg bg-gradient-to-tr from-indigo-600 to-indigo-400 hover:from-indigo-500 hover:to-indigo-300 transition-colors font-semibold text-sm shadow-[0_8px_24px_rgba(99,102,241,0.35)]"
|
|
8568
|
+
},
|
|
8569
|
+
"Salvar"
|
|
8570
|
+
)))
|
|
8380
8571
|
), isDescriptionModalOpen && /* @__PURE__ */ import_react15.default.createElement(
|
|
8381
8572
|
DescriptionEditModal,
|
|
8382
8573
|
{
|
|
@@ -8410,7 +8601,10 @@ function QuestReviewStackEditor({
|
|
|
8410
8601
|
const [isAdding, setIsAdding] = (0, import_react16.useState)(false);
|
|
8411
8602
|
const [searchQuery, setSearchQuery] = (0, import_react16.useState)("");
|
|
8412
8603
|
const handleAddReviewer = (userId) => {
|
|
8413
|
-
const newStack = [
|
|
8604
|
+
const newStack = [
|
|
8605
|
+
...reviewStack,
|
|
8606
|
+
{ userId, status: "pending", mandatory: true }
|
|
8607
|
+
];
|
|
8414
8608
|
onChange(newStack);
|
|
8415
8609
|
setIsAdding(false);
|
|
8416
8610
|
setSearchQuery("");
|
|
@@ -8421,21 +8615,27 @@ function QuestReviewStackEditor({
|
|
|
8421
8615
|
};
|
|
8422
8616
|
const handleToggleMandatory = (index) => {
|
|
8423
8617
|
const newStack = [...reviewStack];
|
|
8424
|
-
newStack[index] = {
|
|
8618
|
+
newStack[index] = {
|
|
8619
|
+
...newStack[index],
|
|
8620
|
+
mandatory: !newStack[index].mandatory
|
|
8621
|
+
};
|
|
8425
8622
|
onChange(newStack);
|
|
8426
8623
|
};
|
|
8427
8624
|
const handleMove = (index, direction) => {
|
|
8428
8625
|
const newStack = [...reviewStack];
|
|
8429
8626
|
const targetIndex = index + direction;
|
|
8430
8627
|
if (targetIndex < 0 || targetIndex >= newStack.length) return;
|
|
8431
|
-
[newStack[index], newStack[targetIndex]] = [
|
|
8628
|
+
[newStack[index], newStack[targetIndex]] = [
|
|
8629
|
+
newStack[targetIndex],
|
|
8630
|
+
newStack[index]
|
|
8631
|
+
];
|
|
8432
8632
|
onChange(newStack);
|
|
8433
8633
|
};
|
|
8434
8634
|
const filteredMembers = viewMembers.filter((m) => {
|
|
8435
8635
|
const search = searchQuery.toLowerCase();
|
|
8436
8636
|
return (m.name || "").toLowerCase().includes(search) || (m.email || "").toLowerCase().includes(search);
|
|
8437
8637
|
});
|
|
8438
|
-
return /* @__PURE__ */ import_react16.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ import_react16.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react16.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Review Stack
|
|
8638
|
+
return /* @__PURE__ */ import_react16.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ import_react16.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react16.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Review Stack"), !readOnly && !isAdding && /* @__PURE__ */ import_react16.default.createElement(
|
|
8439
8639
|
"button",
|
|
8440
8640
|
{
|
|
8441
8641
|
type: "button",
|
|
@@ -8444,7 +8644,13 @@ function QuestReviewStackEditor({
|
|
|
8444
8644
|
},
|
|
8445
8645
|
/* @__PURE__ */ import_react16.default.createElement(import_fi14.FiPlus, { size: 10 }),
|
|
8446
8646
|
" Adicionar Camada"
|
|
8447
|
-
)), isAdding && /* @__PURE__ */ import_react16.default.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__ */ import_react16.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react16.default.createElement(
|
|
8647
|
+
)), isAdding && /* @__PURE__ */ import_react16.default.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__ */ import_react16.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react16.default.createElement(
|
|
8648
|
+
import_fi14.FiSearch,
|
|
8649
|
+
{
|
|
8650
|
+
className: "absolute left-2 top-1/2 -translate-y-1/2 text-slate-500",
|
|
8651
|
+
size: 12
|
|
8652
|
+
}
|
|
8653
|
+
), /* @__PURE__ */ import_react16.default.createElement(
|
|
8448
8654
|
"input",
|
|
8449
8655
|
{
|
|
8450
8656
|
autoFocus: true,
|
|
@@ -8454,7 +8660,14 @@ function QuestReviewStackEditor({
|
|
|
8454
8660
|
onChange: (e) => setSearchQuery(e.target.value),
|
|
8455
8661
|
className: "w-full bg-slate-800 border border-white/10 rounded p-1.5 pl-7 text-xs focus:outline-none focus:ring-1 focus:ring-sky-400"
|
|
8456
8662
|
}
|
|
8457
|
-
), /* @__PURE__ */ import_react16.default.createElement(
|
|
8663
|
+
), /* @__PURE__ */ import_react16.default.createElement(
|
|
8664
|
+
"button",
|
|
8665
|
+
{
|
|
8666
|
+
onClick: () => setIsAdding(false),
|
|
8667
|
+
className: "absolute right-2 top-1/2 -translate-y-1/2 text-slate-500 hover:text-white"
|
|
8668
|
+
},
|
|
8669
|
+
/* @__PURE__ */ import_react16.default.createElement(import_fi14.FiX, { size: 14 })
|
|
8670
|
+
)), /* @__PURE__ */ import_react16.default.createElement("ul", { className: "max-h-32 overflow-y-auto custom-scrollbar space-y-1" }, filteredMembers.map((m) => /* @__PURE__ */ import_react16.default.createElement(
|
|
8458
8671
|
"li",
|
|
8459
8672
|
{
|
|
8460
8673
|
key: m.id,
|
|
@@ -8472,8 +8685,32 @@ function QuestReviewStackEditor({
|
|
|
8472
8685
|
key: index,
|
|
8473
8686
|
className: `group relative flex items-center gap-3 p-2 rounded-lg border ${isCompleted ? "bg-green-500/5 border-green-500/20" : "bg-white/5 border-white/10"} hover:border-white/20 transition-all`
|
|
8474
8687
|
},
|
|
8475
|
-
/* @__PURE__ */ import_react16.default.createElement("div", { className: "flex flex-col items-center gap-0.5 text-slate-500" }, /* @__PURE__ */ import_react16.default.createElement("span", { className: "text-[10px] font-bold opacity-50" }, index + 1), !readOnly && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(
|
|
8476
|
-
|
|
8688
|
+
/* @__PURE__ */ import_react16.default.createElement("div", { className: "flex flex-col items-center gap-0.5 text-slate-500" }, /* @__PURE__ */ import_react16.default.createElement("span", { className: "text-[10px] font-bold opacity-50" }, index + 1), !readOnly && /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(
|
|
8689
|
+
"button",
|
|
8690
|
+
{
|
|
8691
|
+
type: "button",
|
|
8692
|
+
onClick: () => handleMove(index, -1),
|
|
8693
|
+
disabled: index === 0,
|
|
8694
|
+
className: "hover:text-sky-400 disabled:opacity-20"
|
|
8695
|
+
},
|
|
8696
|
+
/* @__PURE__ */ import_react16.default.createElement(import_fi14.FiChevronUp, { size: 12 })
|
|
8697
|
+
), /* @__PURE__ */ import_react16.default.createElement(
|
|
8698
|
+
"button",
|
|
8699
|
+
{
|
|
8700
|
+
type: "button",
|
|
8701
|
+
onClick: () => handleMove(index, 1),
|
|
8702
|
+
disabled: index === reviewStack.length - 1,
|
|
8703
|
+
className: "hover:text-sky-400 disabled:opacity-20"
|
|
8704
|
+
},
|
|
8705
|
+
/* @__PURE__ */ import_react16.default.createElement(import_fi14.FiChevronDown, { size: 12 })
|
|
8706
|
+
))),
|
|
8707
|
+
/* @__PURE__ */ import_react16.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react16.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react16.default.createElement(
|
|
8708
|
+
"span",
|
|
8709
|
+
{
|
|
8710
|
+
className: `truncate text-sm font-medium ${isCompleted ? "text-green-300" : "text-slate-200"}`
|
|
8711
|
+
},
|
|
8712
|
+
(member == null ? void 0 : member.name) || (member == null ? void 0 : member.email) || "Unknown User"
|
|
8713
|
+
), item.mandatory && /* @__PURE__ */ import_react16.default.createElement("span", { className: "flex-shrink-0 px-1.5 py-0.5 rounded-full bg-amber-500/20 text-amber-300 text-[8px] font-bold uppercase tracking-tighter border border-amber-500/30" }, "Obrigat\xF3rio")), /* @__PURE__ */ import_react16.default.createElement("p", { className: "text-[10px] text-slate-500 flex items-center gap-1" }, isCompleted ? "\u2713 Review Conclu\xEDda" : "\u23F3 Pendente")),
|
|
8477
8714
|
!readOnly && /* @__PURE__ */ import_react16.default.createElement("div", { className: "flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity" }, /* @__PURE__ */ import_react16.default.createElement(
|
|
8478
8715
|
"button",
|
|
8479
8716
|
{
|
|
@@ -8506,10 +8743,10 @@ function QuestReviewStackEditor({
|
|
|
8506
8743
|
|
|
8507
8744
|
// src/components/InSceneQuestForm.jsx
|
|
8508
8745
|
var QUEST_STATUS_COLORS2 = {
|
|
8509
|
-
|
|
8746
|
+
Backlog: "#64748b",
|
|
8510
8747
|
"In Progress": "#eab308",
|
|
8511
|
-
|
|
8512
|
-
|
|
8748
|
+
Review: "#a855f7",
|
|
8749
|
+
Done: "#22c55e"
|
|
8513
8750
|
};
|
|
8514
8751
|
function InSceneQuestForm({
|
|
8515
8752
|
onSave,
|
|
@@ -8553,7 +8790,10 @@ function InSceneQuestForm({
|
|
|
8553
8790
|
setCustomProps([...customProps, newProp]);
|
|
8554
8791
|
setTimeout(() => {
|
|
8555
8792
|
var _a2;
|
|
8556
|
-
(_a2 = propsEndRef.current) == null ? void 0 : _a2.scrollIntoView({
|
|
8793
|
+
(_a2 = propsEndRef.current) == null ? void 0 : _a2.scrollIntoView({
|
|
8794
|
+
behavior: "smooth",
|
|
8795
|
+
block: "center"
|
|
8796
|
+
});
|
|
8557
8797
|
}, 100);
|
|
8558
8798
|
};
|
|
8559
8799
|
const handleRemoveProp = (index) => setCustomProps(customProps.filter((_, i) => i !== index));
|
|
@@ -8592,12 +8832,14 @@ function InSceneQuestForm({
|
|
|
8592
8832
|
customProps.filter((prop) => prop.key.trim() && !prop.isEditing)
|
|
8593
8833
|
);
|
|
8594
8834
|
const processedSections = processDescriptionForSave(description, []);
|
|
8595
|
-
const initialTimeline = [
|
|
8596
|
-
|
|
8597
|
-
|
|
8598
|
-
|
|
8599
|
-
|
|
8600
|
-
|
|
8835
|
+
const initialTimeline = [
|
|
8836
|
+
{
|
|
8837
|
+
type: "quest_created",
|
|
8838
|
+
timestamp: Date.now(),
|
|
8839
|
+
actorId: ((_a2 = session == null ? void 0 : session.user) == null ? void 0 : _a2.id) || "unknown",
|
|
8840
|
+
description: `Quest criada por ${((_b2 = session == null ? void 0 : session.user) == null ? void 0 : _b2.name) || "usu\xE1rio"}.`
|
|
8841
|
+
}
|
|
8842
|
+
];
|
|
8601
8843
|
if (assigneeId) {
|
|
8602
8844
|
initialTimeline.push({
|
|
8603
8845
|
type: "assignee_changed",
|
|
@@ -8643,7 +8885,15 @@ function InSceneQuestForm({
|
|
|
8643
8885
|
onContextMenu: swallow,
|
|
8644
8886
|
onDoubleClick: swallow
|
|
8645
8887
|
},
|
|
8646
|
-
/* @__PURE__ */ import_react17.default.createElement(
|
|
8888
|
+
/* @__PURE__ */ import_react17.default.createElement(
|
|
8889
|
+
"div",
|
|
8890
|
+
{
|
|
8891
|
+
className: "h-[2px]",
|
|
8892
|
+
style: {
|
|
8893
|
+
background: `linear-gradient(to right, transparent, ${QUEST_STATUS_COLORS2[status]}, transparent)`
|
|
8894
|
+
}
|
|
8895
|
+
}
|
|
8896
|
+
),
|
|
8647
8897
|
/* @__PURE__ */ import_react17.default.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react17.default.createElement("div", null, /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ import_react17.default.createElement(import_fi15.FiTarget, { className: "text-sky-400", size: 14 }), /* @__PURE__ */ import_react17.default.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Nova quest")), /* @__PURE__ */ import_react17.default.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, "Criar Quest")), /* @__PURE__ */ import_react17.default.createElement(
|
|
8648
8898
|
"button",
|
|
8649
8899
|
{
|
|
@@ -8668,16 +8918,40 @@ function InSceneQuestForm({
|
|
|
8668
8918
|
},
|
|
8669
8919
|
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"
|
|
8670
8920
|
}
|
|
8671
|
-
), /* @__PURE__ */ import_react17.default.createElement("div", { className: "pt-1 flex items-center gap-1.5" }, /* @__PURE__ */ import_react17.default.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500 tracking-wider" }), /* @__PURE__ */ import_react17.default.createElement(
|
|
8921
|
+
), /* @__PURE__ */ import_react17.default.createElement("div", { className: "pt-1 flex items-center gap-1.5" }, /* @__PURE__ */ import_react17.default.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500 tracking-wider" }), /* @__PURE__ */ import_react17.default.createElement(
|
|
8922
|
+
"p",
|
|
8923
|
+
{
|
|
8924
|
+
className: "text-xs text-indigo-300 font-medium truncate",
|
|
8925
|
+
title: standardizedName
|
|
8926
|
+
},
|
|
8927
|
+
standardizedName
|
|
8928
|
+
))), /* @__PURE__ */ import_react17.default.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ import_react17.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Status da Quest"), /* @__PURE__ */ import_react17.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
8672
8929
|
"button",
|
|
8673
8930
|
{
|
|
8674
8931
|
type: "button",
|
|
8675
8932
|
onClick: () => setIsStatusDropdownOpen(!isStatusDropdownOpen),
|
|
8676
8933
|
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"
|
|
8677
8934
|
},
|
|
8678
|
-
/* @__PURE__ */ import_react17.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
8679
|
-
|
|
8680
|
-
|
|
8935
|
+
/* @__PURE__ */ import_react17.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
8936
|
+
"span",
|
|
8937
|
+
{
|
|
8938
|
+
className: "w-3 h-3 rounded-full shadow-[0_0_8px_rgba(0,0,0,0.5)]",
|
|
8939
|
+
style: { backgroundColor: QUEST_STATUS_COLORS2[status] }
|
|
8940
|
+
}
|
|
8941
|
+
), /* @__PURE__ */ import_react17.default.createElement("span", { className: "text-slate-200 font-medium" }, status)),
|
|
8942
|
+
/* @__PURE__ */ import_react17.default.createElement(
|
|
8943
|
+
import_fi15.FiChevronDown,
|
|
8944
|
+
{
|
|
8945
|
+
className: `text-slate-400 transition-transform duration-200 ${isStatusDropdownOpen ? "rotate-180" : ""}`
|
|
8946
|
+
}
|
|
8947
|
+
)
|
|
8948
|
+
), isStatusDropdownOpen && /* @__PURE__ */ import_react17.default.createElement(import_react17.default.Fragment, null, /* @__PURE__ */ import_react17.default.createElement(
|
|
8949
|
+
"div",
|
|
8950
|
+
{
|
|
8951
|
+
className: "fixed inset-0 z-40",
|
|
8952
|
+
onClick: () => setIsStatusDropdownOpen(false)
|
|
8953
|
+
}
|
|
8954
|
+
), /* @__PURE__ */ import_react17.default.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_COLORS2).map((s) => /* @__PURE__ */ import_react17.default.createElement(
|
|
8681
8955
|
"li",
|
|
8682
8956
|
{
|
|
8683
8957
|
key: s,
|
|
@@ -8688,7 +8962,13 @@ function InSceneQuestForm({
|
|
|
8688
8962
|
},
|
|
8689
8963
|
className: `px-3 py-2.5 text-sm cursor-pointer transition-colors flex items-center gap-2 ${status === s ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-white/5 hover:text-white"}`
|
|
8690
8964
|
},
|
|
8691
|
-
/* @__PURE__ */ import_react17.default.createElement(
|
|
8965
|
+
/* @__PURE__ */ import_react17.default.createElement(
|
|
8966
|
+
"span",
|
|
8967
|
+
{
|
|
8968
|
+
className: "w-3 h-3 rounded-full",
|
|
8969
|
+
style: { backgroundColor: QUEST_STATUS_COLORS2[s] }
|
|
8970
|
+
}
|
|
8971
|
+
),
|
|
8692
8972
|
s
|
|
8693
8973
|
)))))), /* @__PURE__ */ import_react17.default.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ import_react17.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Assignee (Respons\xE1vel)"), /* @__PURE__ */ import_react17.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
8694
8974
|
"button",
|
|
@@ -8698,11 +8978,22 @@ function InSceneQuestForm({
|
|
|
8698
8978
|
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"
|
|
8699
8979
|
},
|
|
8700
8980
|
/* @__PURE__ */ import_react17.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react17.default.createElement(import_fi15.FiUser, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ import_react17.default.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")),
|
|
8701
|
-
/* @__PURE__ */ import_react17.default.createElement(
|
|
8702
|
-
|
|
8703
|
-
|
|
8704
|
-
|
|
8705
|
-
|
|
8981
|
+
/* @__PURE__ */ import_react17.default.createElement(
|
|
8982
|
+
import_fi15.FiChevronDown,
|
|
8983
|
+
{
|
|
8984
|
+
className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}`
|
|
8985
|
+
}
|
|
8986
|
+
)
|
|
8987
|
+
), isAssigneeDropdownOpen && /* @__PURE__ */ import_react17.default.createElement(import_react17.default.Fragment, null, /* @__PURE__ */ import_react17.default.createElement(
|
|
8988
|
+
"div",
|
|
8989
|
+
{
|
|
8990
|
+
className: "fixed inset-0 z-40",
|
|
8991
|
+
onClick: () => {
|
|
8992
|
+
setIsAssigneeDropdownOpen(false);
|
|
8993
|
+
setAssigneeSearchQuery("");
|
|
8994
|
+
}
|
|
8995
|
+
}
|
|
8996
|
+
), /* @__PURE__ */ import_react17.default.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__ */ import_react17.default.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ import_react17.default.createElement(import_fi15.FiSearch, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ import_react17.default.createElement(
|
|
8706
8997
|
"input",
|
|
8707
8998
|
{
|
|
8708
8999
|
type: "text",
|
|
@@ -8749,20 +9040,7 @@ function InSceneQuestForm({
|
|
|
8749
9040
|
onChange: setReviewStack,
|
|
8750
9041
|
viewMembers
|
|
8751
9042
|
}
|
|
8752
|
-
)), /* @__PURE__ */ import_react17.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react17.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "
|
|
8753
|
-
"input",
|
|
8754
|
-
{
|
|
8755
|
-
type: "text",
|
|
8756
|
-
value: typeInput,
|
|
8757
|
-
onChange: (e) => setTypeInput(e.target.value),
|
|
8758
|
-
onKeyDown: handleTypeInputKeyDown,
|
|
8759
|
-
onBlur: () => {
|
|
8760
|
-
if (typeInput.trim()) handleAddType(typeInput);
|
|
8761
|
-
},
|
|
8762
|
-
className: "flex-1 bg-transparent text-sm min-w-[80px] focus:outline-none text-slate-200",
|
|
8763
|
-
autoComplete: "off"
|
|
8764
|
-
}
|
|
8765
|
-
))), /* @__PURE__ */ import_react17.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react17.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Descri\xE7\xE3o (Opcional)"), /* @__PURE__ */ import_react17.default.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__ */ import_react17.default.createElement(
|
|
9043
|
+
)), /* @__PURE__ */ import_react17.default.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ import_react17.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react17.default.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__ */ import_react17.default.createElement(
|
|
8766
9044
|
DescriptionDisplay,
|
|
8767
9045
|
{
|
|
8768
9046
|
description,
|
|
@@ -8772,20 +9050,31 @@ function InSceneQuestForm({
|
|
|
8772
9050
|
onMentionClick,
|
|
8773
9051
|
onSaveDescription: (newDesc) => setDescription(newDesc)
|
|
8774
9052
|
}
|
|
8775
|
-
), /* @__PURE__ */ import_react17.default.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 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
9053
|
+
), /* @__PURE__ */ import_react17.default.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 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
8776
9054
|
"button",
|
|
8777
9055
|
{
|
|
8778
|
-
key: s,
|
|
8779
9056
|
type: "button",
|
|
8780
|
-
onClick: () =>
|
|
8781
|
-
|
|
8782
|
-
onSizeChange == null ? void 0 : onSizeChange(s);
|
|
8783
|
-
},
|
|
8784
|
-
className: "flex items-center gap-2 group cursor-pointer focus:outline-none"
|
|
9057
|
+
onClick: () => setIsDescriptionModalOpen(true),
|
|
9058
|
+
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors"
|
|
8785
9059
|
},
|
|
8786
|
-
/* @__PURE__ */ import_react17.default.createElement(
|
|
8787
|
-
|
|
8788
|
-
|
|
9060
|
+
/* @__PURE__ */ import_react17.default.createElement(import_fi15.FiEdit2, { size: 14 })
|
|
9061
|
+
)), !description && /* @__PURE__ */ import_react17.default.createElement(
|
|
9062
|
+
"div",
|
|
9063
|
+
{
|
|
9064
|
+
onClick: () => setIsDescriptionModalOpen(true),
|
|
9065
|
+
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
9066
|
+
},
|
|
9067
|
+
"Adicionar descri\xE7\xE3o..."
|
|
9068
|
+
))), /* @__PURE__ */ import_react17.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react17.default.createElement("h3", { className: "text-xs text-slate-400 font-medium uppercase tracking-wider" }, "Propriedades Adicionais"), /* @__PURE__ */ import_react17.default.createElement(
|
|
9069
|
+
"button",
|
|
9070
|
+
{
|
|
9071
|
+
type: "button",
|
|
9072
|
+
onClick: handleAddProp,
|
|
9073
|
+
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"
|
|
9074
|
+
},
|
|
9075
|
+
/* @__PURE__ */ import_react17.default.createElement(import_fi15.FiPlus, { size: 14 }),
|
|
9076
|
+
" Adicionar"
|
|
9077
|
+
)), /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ import_react17.default.createElement(
|
|
8789
9078
|
CustomPropertyDisplay,
|
|
8790
9079
|
{
|
|
8791
9080
|
key: prop.id,
|
|
@@ -8793,10 +9082,81 @@ function InSceneQuestForm({
|
|
|
8793
9082
|
onUpdate: (updatedProp) => handleUpdateProp(index, updatedProp),
|
|
8794
9083
|
onRemove: () => handleRemoveProp(index),
|
|
8795
9084
|
onOpenImageViewer,
|
|
8796
|
-
unavailableTypes: currentUsedTypes.filter(
|
|
9085
|
+
unavailableTypes: currentUsedTypes.filter(
|
|
9086
|
+
(t) => t !== prop.type
|
|
9087
|
+
),
|
|
8797
9088
|
onUploadFile
|
|
8798
9089
|
}
|
|
8799
|
-
)), /* @__PURE__ */ import_react17.default.createElement("div", { ref: propsEndRef })))
|
|
9090
|
+
)), /* @__PURE__ */ import_react17.default.createElement("div", { ref: propsEndRef }))), /* @__PURE__ */ import_react17.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react17.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Tamanho no Node (Size)"), /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex items-center gap-5" }, ["small", "medium", "large"].map((s) => /* @__PURE__ */ import_react17.default.createElement(
|
|
9091
|
+
"button",
|
|
9092
|
+
{
|
|
9093
|
+
key: s,
|
|
9094
|
+
type: "button",
|
|
9095
|
+
onClick: () => {
|
|
9096
|
+
setSize(s);
|
|
9097
|
+
onSizeChange == null ? void 0 : onSizeChange(s);
|
|
9098
|
+
},
|
|
9099
|
+
className: "flex items-center gap-2 group cursor-pointer focus:outline-none"
|
|
9100
|
+
},
|
|
9101
|
+
/* @__PURE__ */ import_react17.default.createElement(
|
|
9102
|
+
"div",
|
|
9103
|
+
{
|
|
9104
|
+
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"}`
|
|
9105
|
+
},
|
|
9106
|
+
size === s && /* @__PURE__ */ import_react17.default.createElement(import_fi15.FiCheck, { size: 12, className: "text-white" })
|
|
9107
|
+
),
|
|
9108
|
+
/* @__PURE__ */ import_react17.default.createElement(
|
|
9109
|
+
"span",
|
|
9110
|
+
{
|
|
9111
|
+
className: `text-sm capitalize transition-colors ${size === s ? "text-white font-medium" : "text-slate-400 group-hover:text-slate-300"}`
|
|
9112
|
+
},
|
|
9113
|
+
s
|
|
9114
|
+
)
|
|
9115
|
+
)))), /* @__PURE__ */ import_react17.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react17.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Tipos Adicionais"), /* @__PURE__ */ import_react17.default.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 focus-within:ring-2 focus-within:ring-indigo-400/60 transition-all" }, types.map((t, index) => /* @__PURE__ */ import_react17.default.createElement(
|
|
9116
|
+
"span",
|
|
9117
|
+
{
|
|
9118
|
+
key: index,
|
|
9119
|
+
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"}`
|
|
9120
|
+
},
|
|
9121
|
+
t,
|
|
9122
|
+
t !== "quest" && /* @__PURE__ */ import_react17.default.createElement(
|
|
9123
|
+
"button",
|
|
9124
|
+
{
|
|
9125
|
+
type: "button",
|
|
9126
|
+
onClick: () => handleRemoveType(index),
|
|
9127
|
+
className: "hover:text-white transition-colors"
|
|
9128
|
+
},
|
|
9129
|
+
/* @__PURE__ */ import_react17.default.createElement(import_fi15.FiX, { size: 12 })
|
|
9130
|
+
)
|
|
9131
|
+
)), /* @__PURE__ */ import_react17.default.createElement(
|
|
9132
|
+
"input",
|
|
9133
|
+
{
|
|
9134
|
+
type: "text",
|
|
9135
|
+
value: typeInput,
|
|
9136
|
+
onChange: (e) => setTypeInput(e.target.value),
|
|
9137
|
+
onKeyDown: handleTypeInputKeyDown,
|
|
9138
|
+
onBlur: () => {
|
|
9139
|
+
if (typeInput.trim()) handleAddType(typeInput);
|
|
9140
|
+
},
|
|
9141
|
+
className: "flex-1 bg-transparent text-sm min-w-[80px] focus:outline-none text-slate-200",
|
|
9142
|
+
autoComplete: "off"
|
|
9143
|
+
}
|
|
9144
|
+
)))), /* @__PURE__ */ import_react17.default.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__ */ import_react17.default.createElement(
|
|
9145
|
+
"button",
|
|
9146
|
+
{
|
|
9147
|
+
type: "button",
|
|
9148
|
+
onClick: onCancel,
|
|
9149
|
+
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm"
|
|
9150
|
+
},
|
|
9151
|
+
"Cancelar"
|
|
9152
|
+
), /* @__PURE__ */ import_react17.default.createElement(
|
|
9153
|
+
"button",
|
|
9154
|
+
{
|
|
9155
|
+
type: "submit",
|
|
9156
|
+
className: "px-4 py-2 rounded-lg bg-gradient-to-tr from-indigo-600 to-indigo-400 hover:from-indigo-500 hover:to-indigo-300 transition-colors font-semibold text-sm shadow-[0_8px_24px_rgba(99,102,241,0.35)]"
|
|
9157
|
+
},
|
|
9158
|
+
"Salvar Quest"
|
|
9159
|
+
)))
|
|
8800
9160
|
), isDescriptionModalOpen && /* @__PURE__ */ import_react17.default.createElement(
|
|
8801
9161
|
DescriptionEditModal,
|
|
8802
9162
|
{
|
|
@@ -9352,7 +9712,8 @@ function QuestDetailsPanel({
|
|
|
9352
9712
|
onUploadFile,
|
|
9353
9713
|
userRole,
|
|
9354
9714
|
currentDatasetName,
|
|
9355
|
-
viewMembers = []
|
|
9715
|
+
viewMembers = [],
|
|
9716
|
+
currentUser
|
|
9356
9717
|
}) {
|
|
9357
9718
|
var _a;
|
|
9358
9719
|
const initialRawTitle = (node == null ? void 0 : node.raw_title) || (((_a = node == null ? void 0 : node.name) == null ? void 0 : _a.includes(" - \xBB ")) ? node.name.split(" - \xBB ")[1] : node == null ? void 0 : node.name) || "";
|
|
@@ -9452,8 +9813,7 @@ function QuestDetailsPanel({
|
|
|
9452
9813
|
});
|
|
9453
9814
|
};
|
|
9454
9815
|
const swallow = (e) => e.stopPropagation();
|
|
9455
|
-
const handleNameChange = (
|
|
9456
|
-
const val = e.target.value;
|
|
9816
|
+
const handleNameChange = (val) => {
|
|
9457
9817
|
setRawTitle(val);
|
|
9458
9818
|
const newStandardName = questPrefix ? `${questPrefix} - \xBB ${val || "Sem t\xEDtulo"}` : val;
|
|
9459
9819
|
onNameChange == null ? void 0 : onNameChange(node.id, newStandardName, val);
|
|
@@ -9464,6 +9824,51 @@ function QuestDetailsPanel({
|
|
|
9464
9824
|
onSizeChange == null ? void 0 : onSizeChange(node.id, newSize);
|
|
9465
9825
|
setHasUnsavedChanges(true);
|
|
9466
9826
|
};
|
|
9827
|
+
const handleReturnToOperation = async () => {
|
|
9828
|
+
if (isSaving) return;
|
|
9829
|
+
setIsSaving(true);
|
|
9830
|
+
const actorId = (currentUser == null ? void 0 : currentUser.id) || "unknown";
|
|
9831
|
+
const actorName = (currentUser == null ? void 0 : currentUser.name) || "Revisor";
|
|
9832
|
+
const targetMember = viewMembers.find((m) => String(m.id) === String(assigneeId));
|
|
9833
|
+
const targetName = (targetMember == null ? void 0 : targetMember.name) || "executor";
|
|
9834
|
+
const newEvent = {
|
|
9835
|
+
type: "review_returned",
|
|
9836
|
+
timestamp: Date.now(),
|
|
9837
|
+
actorId,
|
|
9838
|
+
description: `Review finalizada com retorno para opera\xE7\xE3o por ${actorName}. Novo respons\xE1vel: ${targetName}.`
|
|
9839
|
+
};
|
|
9840
|
+
const updatedTimeline = [...timeline, newEvent];
|
|
9841
|
+
const updatedStatus = "In Progress";
|
|
9842
|
+
const updatedColor = "#eab308";
|
|
9843
|
+
const nodeToSave = {
|
|
9844
|
+
...node,
|
|
9845
|
+
name: standardizedName,
|
|
9846
|
+
raw_title: rawTitle,
|
|
9847
|
+
description,
|
|
9848
|
+
status: updatedStatus,
|
|
9849
|
+
color: updatedColor,
|
|
9850
|
+
assignee_id: assigneeId,
|
|
9851
|
+
reviewStack,
|
|
9852
|
+
timeline: updatedTimeline,
|
|
9853
|
+
size,
|
|
9854
|
+
types: types.includes("quest") ? types : [...types, "quest"],
|
|
9855
|
+
intensity: intensity || 0,
|
|
9856
|
+
useImageAsTexture: node.useImageAsTexture || false,
|
|
9857
|
+
textureImageUrl: node.textureImageUrl || null
|
|
9858
|
+
};
|
|
9859
|
+
try {
|
|
9860
|
+
await onSave(nodeToSave, false);
|
|
9861
|
+
setTimeline(updatedTimeline);
|
|
9862
|
+
setStatus(updatedStatus);
|
|
9863
|
+
onDataUpdate(nodeToSave);
|
|
9864
|
+
setHasUnsavedChanges(false);
|
|
9865
|
+
} catch (error) {
|
|
9866
|
+
console.error("Erro ao retornar para opera\xE7\xE3o:", error);
|
|
9867
|
+
alert("Erro ao realizar o retorno para opera\xE7\xE3o.");
|
|
9868
|
+
} finally {
|
|
9869
|
+
setIsSaving(false);
|
|
9870
|
+
}
|
|
9871
|
+
};
|
|
9467
9872
|
const handleStatusChange = (newStatus) => {
|
|
9468
9873
|
setStatus(newStatus);
|
|
9469
9874
|
const newColor = QUEST_STATUS_COLORS3[newStatus];
|
|
@@ -9635,7 +10040,7 @@ function QuestDetailsPanel({
|
|
|
9635
10040
|
{
|
|
9636
10041
|
type: "text",
|
|
9637
10042
|
value: rawTitle,
|
|
9638
|
-
onChange: handleNameChange,
|
|
10043
|
+
onChange: (e) => handleNameChange(e.target.value),
|
|
9639
10044
|
readOnly: !canEdit,
|
|
9640
10045
|
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"}`
|
|
9641
10046
|
}
|
|
@@ -9752,7 +10157,24 @@ function QuestDetailsPanel({
|
|
|
9752
10157
|
viewMembers,
|
|
9753
10158
|
readOnly: !canEdit
|
|
9754
10159
|
}
|
|
9755
|
-
)), /* @__PURE__ */ import_react19.default.createElement("div", { className: "
|
|
10160
|
+
)), status === "Review" && canEdit && /* @__PURE__ */ import_react19.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "bg-slate-900/40 rounded-xl p-4 border border-white/5 space-y-3" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react19.default.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "A\xE7\xF5es de Review"), /* @__PURE__ */ import_react19.default.createElement("span", { className: "px-2 py-0.5 rounded-full bg-purple-500/10 text-purple-300 text-[10px] font-medium border border-purple-500/20" }, "Em Revis\xE3o")), /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-xs text-slate-400 leading-relaxed" }, "Se algo precisar de ajuste, selecione o respons\xE1vel acima e clique para retornar o ciclo para opera\xE7\xE3o."), /* @__PURE__ */ import_react19.default.createElement(
|
|
10161
|
+
"button",
|
|
10162
|
+
{
|
|
10163
|
+
type: "button",
|
|
10164
|
+
onClick: handleReturnToOperation,
|
|
10165
|
+
disabled: isSaving,
|
|
10166
|
+
className: "w-full h-10 flex items-center justify-center gap-2 rounded-lg bg-slate-800 hover:bg-slate-700 text-slate-200 text-xs font-semibold border border-white/10 transition-all hover:border-white/20 active:scale-[0.98] disabled:opacity-50 disabled:cursor-wait"
|
|
10167
|
+
},
|
|
10168
|
+
/* @__PURE__ */ import_react19.default.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__ */ import_react19.default.createElement("path", { d: "M12 19V5M5 12l7 7 7-7" })),
|
|
10169
|
+
"Retornar para Opera\xE7\xE3o"
|
|
10170
|
+
))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react19.default.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.createElement(DescriptionDisplay, { description, savedSections: existingSections, availableNodes, availableAncestries, onOpenReference, onMentionClick, onImageClick: handleImageClickFromText, onSaveDescription: handleSaveDescriptionInline }), /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.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__ */ import_react19.default.createElement(import_fi17.FiBookOpen, { size: 14 })), canEdit && /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.createElement(import_fi17.FiEdit2, { size: 14 }))), canEdit && !description && /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react19.default.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), canEdit && /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.createElement(import_fi17.FiPlus, { size: 14 }), " Adicionar")), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.createElement("div", { ref: propsEndRef }))), timeline && timeline.length > 0 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "pt-4 pb-2 border-t border-white/10 mt-4" }, /* @__PURE__ */ import_react19.default.createElement("h3", { className: "text-xs text-slate-400 font-medium uppercase tracking-wider mb-3" }, "Timeline & Hist\xF3rico"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative border-l border-white/10 ml-2.5 space-y-4" }, timeline.slice().sort((a, b) => a.timestamp - b.timestamp).map((event, idx) => {
|
|
10171
|
+
const dateObj = new Date(event.timestamp);
|
|
10172
|
+
const dateString = dateObj.toLocaleDateString("pt-BR", { day: "2-digit", month: "short", hour: "2-digit", minute: "2-digit" });
|
|
10173
|
+
return /* @__PURE__ */ import_react19.default.createElement("div", { key: idx, className: "relative pl-4 flex flex-col gap-0.5" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "absolute left-[-4.5px] top-1.5 w-2 h-2 rounded-full bg-slate-400/50 border-[1.5px] border-slate-900" }), /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-[11px] text-slate-300" }, event.description), /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[9px] text-slate-500 font-mono tracking-tighter" }, dateString));
|
|
10174
|
+
}))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react19.default.createElement("label", { className: "text-xs text-slate-300" }, "Tamanho no Node (Size)"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center gap-5" }, ["small", "medium", "large"].map((s) => {
|
|
10175
|
+
const isSelected = size === s;
|
|
10176
|
+
return /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.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__ */ import_react19.default.createElement(import_fi17.FiCheck, { size: 12, className: "text-white" })), /* @__PURE__ */ import_react19.default.createElement("span", { className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 " + (canEdit ? "group-hover:text-slate-300" : "")}` }, s));
|
|
10177
|
+
}))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react19.default.createElement("label", { className: "text-xs text-slate-300" }, "Tipos Adicionais"), /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.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__ */ import_react19.default.createElement("button", { type: "button", onClick: () => handleRemoveType(index), className: "hover:text-white transition-colors" }, /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiX, { size: 12 })))), canEdit && /* @__PURE__ */ import_react19.default.createElement(
|
|
9756
10178
|
"input",
|
|
9757
10179
|
{
|
|
9758
10180
|
type: "text",
|
|
@@ -9776,14 +10198,7 @@ function QuestDetailsPanel({
|
|
|
9776
10198
|
), canEdit && showTypeSuggestions && filteredTypes.length > 0 && /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.createElement("li", { key: index, className: "px-3 py-2 text-sm text-slate-200 cursor-pointer hover:bg-indigo-600/50", onMouseDown: (e) => {
|
|
9777
10199
|
e.preventDefault();
|
|
9778
10200
|
handleAddType(suggestedType);
|
|
9779
|
-
} }, suggestedType))))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "
|
|
9780
|
-
const isSelected = size === s;
|
|
9781
|
-
return /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.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__ */ import_react19.default.createElement(import_fi17.FiCheck, { size: 12, className: "text-white" })), /* @__PURE__ */ import_react19.default.createElement("span", { className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 " + (canEdit ? "group-hover:text-slate-300" : "")}` }, s));
|
|
9782
|
-
}))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react19.default.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), canEdit && /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.createElement(import_fi17.FiPlus, { size: 14 }), " Adicionar")), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.createElement("div", { ref: propsEndRef }))), timeline && timeline.length > 0 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "pt-4 pb-2 border-t border-white/10 mt-4" }, /* @__PURE__ */ import_react19.default.createElement("h3", { className: "text-xs text-slate-400 font-medium uppercase tracking-wider mb-3" }, "Timeline & Hist\xF3rico"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative border-l border-white/10 ml-2.5 space-y-4" }, timeline.slice().sort((a, b) => a.timestamp - b.timestamp).map((event, idx) => {
|
|
9783
|
-
const dateObj = new Date(event.timestamp);
|
|
9784
|
-
const dateString = dateObj.toLocaleDateString("pt-BR", { day: "2-digit", month: "short", hour: "2-digit", minute: "2-digit" });
|
|
9785
|
-
return /* @__PURE__ */ import_react19.default.createElement("div", { key: idx, className: "relative pl-4 flex flex-col gap-0.5" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "absolute left-[-4.5px] top-1.5 w-2 h-2 rounded-full bg-slate-400/50 border-[1.5px] border-slate-900" }), /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-[11px] text-slate-300" }, event.description), /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[9px] text-slate-500 font-mono tracking-tighter" }, dateString));
|
|
9786
|
-
}))), currentDatasetName && /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.createElement("span", { className: "truncate text-right" }, /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-slate-200 font-medium" }, currentDatasetName)))), /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.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__ */ import_react19.default.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__ */ import_react19.default.createElement(import_fi17.FiLoader, { className: "animate-spin" }), isSaving ? "Salvando..." : "Salvar Quest")))
|
|
10201
|
+
} }, suggestedType))))), currentDatasetName && /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.createElement("span", { className: "truncate text-right" }, /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-slate-200 font-medium" }, currentDatasetName)))), /* @__PURE__ */ import_react19.default.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__ */ import_react19.default.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__ */ import_react19.default.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__ */ import_react19.default.createElement(import_fi17.FiLoader, { className: "animate-spin" }), isSaving ? "Salvando..." : "Salvar Quest")))
|
|
9787
10202
|
), isDescriptionModalOpen && canEdit && /* @__PURE__ */ import_react19.default.createElement(
|
|
9788
10203
|
DescriptionEditModal,
|
|
9789
10204
|
{
|
|
@@ -9897,8 +10312,12 @@ function RelationshipDetailsPanel({
|
|
|
9897
10312
|
}) {
|
|
9898
10313
|
const [name, setName] = (0, import_react21.useState)((link == null ? void 0 : link.name) ?? "");
|
|
9899
10314
|
const [description, setDescription] = (0, import_react21.useState)((link == null ? void 0 : link.description) ?? "");
|
|
9900
|
-
const [customProps, setCustomProps] = (0, import_react21.useState)(
|
|
9901
|
-
|
|
10315
|
+
const [customProps, setCustomProps] = (0, import_react21.useState)(
|
|
10316
|
+
() => extractCustomPropsFromNode(link || {})
|
|
10317
|
+
);
|
|
10318
|
+
const [existingSections, setExistingSections] = (0, import_react21.useState)(
|
|
10319
|
+
(link == null ? void 0 : link.description_sections) || []
|
|
10320
|
+
);
|
|
9902
10321
|
const [sourceLabel, setSourceLabel] = (0, import_react21.useState)((link == null ? void 0 : link.source_label) ?? "");
|
|
9903
10322
|
const [targetLabel, setTargetLabel] = (0, import_react21.useState)((link == null ? void 0 : link.target_label) ?? "");
|
|
9904
10323
|
const [isDescriptionModalOpen, setIsDescriptionModalOpen] = (0, import_react21.useState)(false);
|
|
@@ -9927,7 +10346,10 @@ function RelationshipDetailsPanel({
|
|
|
9927
10346
|
setHasUnsavedChanges(true);
|
|
9928
10347
|
setTimeout(() => {
|
|
9929
10348
|
var _a;
|
|
9930
|
-
(_a = propsEndRef.current) == null ? void 0 : _a.scrollIntoView({
|
|
10349
|
+
(_a = propsEndRef.current) == null ? void 0 : _a.scrollIntoView({
|
|
10350
|
+
behavior: "smooth",
|
|
10351
|
+
block: "center"
|
|
10352
|
+
});
|
|
9931
10353
|
}, 100);
|
|
9932
10354
|
};
|
|
9933
10355
|
const handleSave = async (keepOpen = false, overrides = {}) => {
|
|
@@ -9944,8 +10366,13 @@ function RelationshipDetailsPanel({
|
|
|
9944
10366
|
}
|
|
9945
10367
|
setIsSaving(true);
|
|
9946
10368
|
try {
|
|
9947
|
-
const extrasObj = toObjectFromCustomProps(
|
|
9948
|
-
|
|
10369
|
+
const extrasObj = toObjectFromCustomProps(
|
|
10370
|
+
currentCustomProps.filter((p) => !p.isEditing)
|
|
10371
|
+
);
|
|
10372
|
+
const processedSections = processDescriptionForSave(
|
|
10373
|
+
currentDescription,
|
|
10374
|
+
currentExistingSections
|
|
10375
|
+
);
|
|
9949
10376
|
const dataToSave = {
|
|
9950
10377
|
id: link.id,
|
|
9951
10378
|
source: link.source,
|
|
@@ -9957,8 +10384,10 @@ function RelationshipDetailsPanel({
|
|
|
9957
10384
|
isCurved: link.isCurved,
|
|
9958
10385
|
curveOffset: link.curveOffset
|
|
9959
10386
|
};
|
|
9960
|
-
if (currentSourceLabel.trim())
|
|
9961
|
-
|
|
10387
|
+
if (currentSourceLabel.trim())
|
|
10388
|
+
dataToSave.source_label = currentSourceLabel.trim();
|
|
10389
|
+
if (currentTargetLabel.trim())
|
|
10390
|
+
dataToSave.target_label = currentTargetLabel.trim();
|
|
9962
10391
|
await onSave(dataToSave, keepOpen);
|
|
9963
10392
|
onDataUpdate(dataToSave);
|
|
9964
10393
|
setHasUnsavedChanges(false);
|
|
@@ -10037,7 +10466,16 @@ function RelationshipDetailsPanel({
|
|
|
10037
10466
|
onImageClick: handleImageClickFromText,
|
|
10038
10467
|
onSaveDescription: handleSaveDescriptionInline
|
|
10039
10468
|
}
|
|
10040
|
-
) : /* @__PURE__ */ import_react21.default.createElement(import_react21.default.Fragment, null, /* @__PURE__ */ import_react21.default.createElement("div", { className: "h-[2px] bg-gradient-to-r from-teal-400/0 via-teal-400/70 to-teal-400/0" }), /* @__PURE__ */ import_react21.default.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ import_react21.default.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-teal-400/80 shadow-[0_0_18px_2px_rgba(45,212,191,0.55)]" }), /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Rela\xE7\xE3o")), /* @__PURE__ */ import_react21.default.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, name || "Rela\xE7\xE3o")), /* @__PURE__ */ import_react21.default.createElement(
|
|
10469
|
+
) : /* @__PURE__ */ import_react21.default.createElement(import_react21.default.Fragment, null, /* @__PURE__ */ import_react21.default.createElement("div", { className: "h-[2px] bg-gradient-to-r from-teal-400/0 via-teal-400/70 to-teal-400/0" }), /* @__PURE__ */ import_react21.default.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ import_react21.default.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-teal-400/80 shadow-[0_0_18px_2px_rgba(45,212,191,0.55)]" }), /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Rela\xE7\xE3o")), /* @__PURE__ */ import_react21.default.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, name || "Rela\xE7\xE3o")), /* @__PURE__ */ import_react21.default.createElement(
|
|
10470
|
+
"button",
|
|
10471
|
+
{
|
|
10472
|
+
onClick: onClose,
|
|
10473
|
+
disabled: isSaving,
|
|
10474
|
+
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",
|
|
10475
|
+
title: "Fechar"
|
|
10476
|
+
},
|
|
10477
|
+
"\xD7"
|
|
10478
|
+
)), /* @__PURE__ */ import_react21.default.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 max-h-[68vh] custom-scrollbar" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react21.default.createElement("label", { className: "text-xs text-slate-300" }, "Nome da Rela\xE7\xE3o"), /* @__PURE__ */ import_react21.default.createElement(
|
|
10041
10479
|
"input",
|
|
10042
10480
|
{
|
|
10043
10481
|
type: "text",
|
|
@@ -10052,7 +10490,23 @@ function RelationshipDetailsPanel({
|
|
|
10052
10490
|
${!canEdit ? "opacity-50 cursor-not-allowed" : ""}
|
|
10053
10491
|
`
|
|
10054
10492
|
}
|
|
10055
|
-
)), /* @__PURE__ */ import_react21.default.createElement("div", { className: "rounded-xl border border-white/8 bg-slate-800/30 p-3 space-y-3" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react21.default.createElement(
|
|
10493
|
+
)), /* @__PURE__ */ import_react21.default.createElement("div", { className: "rounded-xl border border-white/8 bg-slate-800/30 p-3 space-y-3" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react21.default.createElement(
|
|
10494
|
+
"svg",
|
|
10495
|
+
{
|
|
10496
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
10497
|
+
width: "13",
|
|
10498
|
+
height: "13",
|
|
10499
|
+
viewBox: "0 0 24 24",
|
|
10500
|
+
fill: "none",
|
|
10501
|
+
stroke: "currentColor",
|
|
10502
|
+
strokeWidth: "2",
|
|
10503
|
+
strokeLinecap: "round",
|
|
10504
|
+
strokeLinejoin: "round",
|
|
10505
|
+
className: "text-violet-400 flex-shrink-0"
|
|
10506
|
+
},
|
|
10507
|
+
/* @__PURE__ */ import_react21.default.createElement("path", { d: "M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z" }),
|
|
10508
|
+
/* @__PURE__ */ import_react21.default.createElement("line", { x1: "7", y1: "7", x2: "7.01", y2: "7" })
|
|
10509
|
+
), /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-xs font-medium text-violet-300/80 uppercase tracking-wider" }, "Labels de Agrupamento")), /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-[11px] text-slate-400 leading-relaxed" }, "Labels agrupam conex\xF5es no menu de Conex\xF5es. Cada lado da conex\xE3o pode ter sua pr\xF3pria label."), /* @__PURE__ */ import_react21.default.createElement("div", { className: "grid grid-cols-2 gap-2" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ import_react21.default.createElement("label", { className: "text-[11px] text-slate-400" }, "Label do Source"), /* @__PURE__ */ import_react21.default.createElement(
|
|
10056
10510
|
"input",
|
|
10057
10511
|
{
|
|
10058
10512
|
type: "text",
|
|
@@ -10119,7 +10573,16 @@ function RelationshipDetailsPanel({
|
|
|
10119
10573
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
10120
10574
|
},
|
|
10121
10575
|
"Adicionar descri\xE7\xE3o..."
|
|
10122
|
-
))), /* @__PURE__ */ import_react21.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react21.default.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), canEdit && /* @__PURE__ */ import_react21.default.createElement(
|
|
10576
|
+
))), /* @__PURE__ */ import_react21.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react21.default.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), canEdit && /* @__PURE__ */ import_react21.default.createElement(
|
|
10577
|
+
"button",
|
|
10578
|
+
{
|
|
10579
|
+
type: "button",
|
|
10580
|
+
onClick: handleAddProp,
|
|
10581
|
+
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"
|
|
10582
|
+
},
|
|
10583
|
+
/* @__PURE__ */ import_react21.default.createElement(import_fi18.FiPlus, { size: 14 }),
|
|
10584
|
+
" Adicionar"
|
|
10585
|
+
)), /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ import_react21.default.createElement(
|
|
10123
10586
|
CustomPropertyDisplay,
|
|
10124
10587
|
{
|
|
10125
10588
|
key: prop.id,
|
|
@@ -10127,11 +10590,21 @@ function RelationshipDetailsPanel({
|
|
|
10127
10590
|
onUpdate: (updatedProp) => handleUpdateProp(idx, updatedProp),
|
|
10128
10591
|
onRemove: () => handleRemoveProp(idx),
|
|
10129
10592
|
onOpenImageViewer,
|
|
10130
|
-
unavailableTypes: currentUsedTypes.filter(
|
|
10593
|
+
unavailableTypes: currentUsedTypes.filter(
|
|
10594
|
+
(t) => t !== prop.type
|
|
10595
|
+
),
|
|
10131
10596
|
onUploadFile,
|
|
10132
10597
|
disabled: !canEdit
|
|
10133
10598
|
}
|
|
10134
|
-
)), /* @__PURE__ */ import_react21.default.createElement("div", { ref: propsEndRef })))), /* @__PURE__ */ import_react21.default.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__ */ import_react21.default.createElement(
|
|
10599
|
+
)), /* @__PURE__ */ import_react21.default.createElement("div", { ref: propsEndRef })))), /* @__PURE__ */ import_react21.default.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__ */ import_react21.default.createElement(
|
|
10600
|
+
"button",
|
|
10601
|
+
{
|
|
10602
|
+
onClick: onClose,
|
|
10603
|
+
disabled: isSaving,
|
|
10604
|
+
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm disabled:opacity-50"
|
|
10605
|
+
},
|
|
10606
|
+
canEdit ? "Cancelar" : "Fechar"
|
|
10607
|
+
), canEdit && /* @__PURE__ */ import_react21.default.createElement(
|
|
10135
10608
|
"button",
|
|
10136
10609
|
{
|
|
10137
10610
|
onClick: () => handleSave(false),
|
|
@@ -15639,7 +16112,8 @@ function XViewScene({
|
|
|
15639
16112
|
onUploadFile: upload_file_action,
|
|
15640
16113
|
userRole: userPermissionRole,
|
|
15641
16114
|
currentDatasetName: detailsNodeDatasetInfo == null ? void 0 : detailsNodeDatasetInfo.datasetName,
|
|
15642
|
-
viewMembers
|
|
16115
|
+
viewMembers,
|
|
16116
|
+
currentUser: session == null ? void 0 : session.user
|
|
15643
16117
|
}
|
|
15644
16118
|
),
|
|
15645
16119
|
detailsNode && !detailsNode.is_quest && /* @__PURE__ */ import_react27.default.createElement(
|