@lv-x-software-house/x_view 1.2.2-dev.21 → 1.2.2-dev.23
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 +71 -34
- package/dist/index.mjs +71 -34
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -290,7 +290,7 @@ function ContextMenu({
|
|
|
290
290
|
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" }, 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") && /* @__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-.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: () => {
|
|
291
291
|
onFocusNode == null ? void 0 : onFocusNode(data.nodeData);
|
|
292
292
|
onClose();
|
|
293
|
-
}, 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: () =>
|
|
293
|
+
}, 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"))));
|
|
294
294
|
};
|
|
295
295
|
const renderVersionSubMenuView = () => {
|
|
296
296
|
const group = versionSubMenu;
|
|
@@ -382,6 +382,24 @@ function ContextMenu({
|
|
|
382
382
|
/* @__PURE__ */ import_react.default.createElement("span", { className: "flex-1 truncate" }, version.name)
|
|
383
383
|
))));
|
|
384
384
|
};
|
|
385
|
+
const renderDeleteConfirmationView = () => {
|
|
386
|
+
var _a2;
|
|
387
|
+
return /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col gap-3 p-2" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col items-center text-center gap-2" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "w-10 h-10 rounded-full bg-red-500/20 flex items-center justify-center text-red-400 mb-1" }, /* @__PURE__ */ import_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ 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("p", { className: "text-sm text-slate-200" }, "Excluir ", /* @__PURE__ */ import_react.default.createElement("strong", null, (_a2 = data.nodeData) == null ? void 0 : _a2.name), "?"), /* @__PURE__ */ import_react.default.createElement("p", { className: "text-[11px] text-slate-400 leading-tight" }, "Todas as conex\xF5es associadas tamb\xE9m ser\xE3o apagadas.")), /* @__PURE__ */ import_react.default.createElement("div", { className: "flex gap-2 mt-1" }, /* @__PURE__ */ import_react.default.createElement(
|
|
388
|
+
"button",
|
|
389
|
+
{
|
|
390
|
+
onClick: () => setMenuView("main"),
|
|
391
|
+
className: "flex-1 px-2 py-2 text-xs font-medium bg-white/10 hover:bg-white/20 rounded-md text-white transition-colors"
|
|
392
|
+
},
|
|
393
|
+
"Cancelar"
|
|
394
|
+
), /* @__PURE__ */ import_react.default.createElement(
|
|
395
|
+
"button",
|
|
396
|
+
{
|
|
397
|
+
onClick: () => onDeleteNode == null ? void 0 : onDeleteNode(data.nodeData),
|
|
398
|
+
className: "flex-1 px-2 py-2 text-xs font-medium bg-red-500 hover:bg-red-600 rounded-md text-white transition-colors"
|
|
399
|
+
},
|
|
400
|
+
"Excluir"
|
|
401
|
+
)));
|
|
402
|
+
};
|
|
385
403
|
return /* @__PURE__ */ import_react.default.createElement(
|
|
386
404
|
"div",
|
|
387
405
|
{
|
|
@@ -397,7 +415,7 @@ function ContextMenu({
|
|
|
397
415
|
onDoubleClick: swallow
|
|
398
416
|
},
|
|
399
417
|
/* @__PURE__ */ import_react.default.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }),
|
|
400
|
-
/* @__PURE__ */ import_react.default.createElement("div", { className: "p-1.5" }, menuView === "main" && renderMainView(), menuView === "connections" && renderConnectionsView(), menuView === "ancestryActions" && renderAncestryActionsView(), menuView === "versioning" && renderVersioningView())
|
|
418
|
+
/* @__PURE__ */ import_react.default.createElement("div", { className: "p-1.5" }, menuView === "main" && renderMainView(), menuView === "connections" && renderConnectionsView(), menuView === "ancestryActions" && renderAncestryActionsView(), menuView === "versioning" && renderVersioningView(), menuView === "deleteConfirmation" && renderDeleteConfirmationView())
|
|
401
419
|
);
|
|
402
420
|
}
|
|
403
421
|
|
|
@@ -1579,7 +1597,6 @@ var userActionHandlers = {
|
|
|
1579
1597
|
color: ghostColor,
|
|
1580
1598
|
emissive: ghostEmissive,
|
|
1581
1599
|
emissiveIntensity: MIN_VISIBILITY_INTENSITY,
|
|
1582
|
-
// <-- Forçamos o brilho mínimo
|
|
1583
1600
|
roughness: 0.6,
|
|
1584
1601
|
metalness: 0,
|
|
1585
1602
|
transparent: true,
|
|
@@ -1736,7 +1753,6 @@ var userActionHandlers = {
|
|
|
1736
1753
|
color: ghostColor,
|
|
1737
1754
|
emissive: ghostEmissive,
|
|
1738
1755
|
emissiveIntensity: MIN_VISIBILITY_INTENSITY,
|
|
1739
|
-
// <-- Forçamos o brilho mínimo
|
|
1740
1756
|
roughness: 0.6,
|
|
1741
1757
|
metalness: 0,
|
|
1742
1758
|
transparent: true,
|
|
@@ -2033,9 +2049,7 @@ var userActionHandlers = {
|
|
|
2033
2049
|
linkObject.visible = false;
|
|
2034
2050
|
controls.enabled = false;
|
|
2035
2051
|
if (mountRef.current) mountRef.current.style.cursor = "crosshair";
|
|
2036
|
-
const tempMat = new import_LineMaterial.LineMaterial({
|
|
2037
|
-
/* ... material tracejado ... */
|
|
2038
|
-
});
|
|
2052
|
+
const tempMat = new import_LineMaterial.LineMaterial({});
|
|
2039
2053
|
const tempGeom = new import_LineGeometry.LineGeometry().setPositions([
|
|
2040
2054
|
...fixedNode.position.toArray(),
|
|
2041
2055
|
...fixedNode.position.toArray()
|
|
@@ -2164,9 +2178,6 @@ var userActionHandlers = {
|
|
|
2164
2178
|
const { parentFileId, ownerId } = parentInfo;
|
|
2165
2179
|
const srcName = ((_c = (_b = (_a = linkObject.userData) == null ? void 0 : _a.sourceNode) == null ? void 0 : _b.userData) == null ? void 0 : _c.name) ?? linkObject.userData.source;
|
|
2166
2180
|
const tgtName = ((_f = (_e = (_d = linkObject.userData) == null ? void 0 : _d.targetNode) == null ? void 0 : _e.userData) == null ? void 0 : _f.name) ?? linkObject.userData.target;
|
|
2167
|
-
if (!window.confirm(`Tem certeza que deseja excluir a conex\xE3o entre "${srcName}" \u2192 "${tgtName}"?`)) {
|
|
2168
|
-
return;
|
|
2169
|
-
}
|
|
2170
2181
|
const specificParentData = JSON.parse(JSON.stringify(graphDataRef.current[parentFileId]));
|
|
2171
2182
|
const newLinks = (specificParentData.links || []).filter((l) => String(l.id) !== String(linkIdToDelete));
|
|
2172
2183
|
specificParentData.links = newLinks;
|
|
@@ -2320,9 +2331,6 @@ var userActionHandlers = {
|
|
|
2320
2331
|
const { stateRef, graphDataRef, sceneDataRef, setters, actions } = context;
|
|
2321
2332
|
setters.setMultiContextMenu({ visible: false });
|
|
2322
2333
|
if (!nodeIds || nodeIds.size === 0 || !graphDataRef.current || !sceneDataRef.current) return;
|
|
2323
|
-
if (!window.confirm(`Tem certeza que deseja excluir ${nodeIds.size} Nodes e todas as suas conex\xF5es? Esta a\xE7\xE3o \xE9 irrevers\xEDvel.`)) {
|
|
2324
|
-
return;
|
|
2325
|
-
}
|
|
2326
2334
|
const strNodeIdsToDelete = Array.from(nodeIds).map(String);
|
|
2327
2335
|
if (actions.delete_file) {
|
|
2328
2336
|
strNodeIdsToDelete.forEach((id) => {
|
|
@@ -2403,9 +2411,6 @@ var userActionHandlers = {
|
|
|
2403
2411
|
}
|
|
2404
2412
|
setters.setContextMenu({ visible: false });
|
|
2405
2413
|
if (!nodeData || !graphDataRef.current || !sceneDataRef.current) return;
|
|
2406
|
-
if (!window.confirm(`Tem certeza que deseja excluir o Node "${nodeData.name}" e todas as sua conex\xF5es?`)) {
|
|
2407
|
-
return;
|
|
2408
|
-
}
|
|
2409
2414
|
const nodeIdToDelete = nodeData.id;
|
|
2410
2415
|
const strNodeId = String(nodeIdToDelete);
|
|
2411
2416
|
const parentInfo = getParentFileInfoForNode(graphDataRef.current, sceneDataRef.current, nodeIdToDelete);
|
|
@@ -4121,7 +4126,7 @@ ${space}${bullet} `);
|
|
|
4121
4126
|
"button",
|
|
4122
4127
|
{
|
|
4123
4128
|
onClick: () => insertAtCursor("# "),
|
|
4124
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4129
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4125
4130
|
title: "T\xEDtulo Principal"
|
|
4126
4131
|
},
|
|
4127
4132
|
/* @__PURE__ */ import_react6.default.createElement(import_fi4.FiType, { size: 12 }),
|
|
@@ -4130,7 +4135,7 @@ ${space}${bullet} `);
|
|
|
4130
4135
|
"button",
|
|
4131
4136
|
{
|
|
4132
4137
|
onClick: () => insertAtCursor("## "),
|
|
4133
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4138
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4134
4139
|
title: "Subt\xEDtulo"
|
|
4135
4140
|
},
|
|
4136
4141
|
/* @__PURE__ */ import_react6.default.createElement(import_fi4.FiType, { size: 10 }),
|
|
@@ -4139,7 +4144,7 @@ ${space}${bullet} `);
|
|
|
4139
4144
|
"button",
|
|
4140
4145
|
{
|
|
4141
4146
|
onClick: () => insertAtCursor("- "),
|
|
4142
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4147
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4143
4148
|
title: "Lista com bullets"
|
|
4144
4149
|
},
|
|
4145
4150
|
/* @__PURE__ */ import_react6.default.createElement(import_fi4.FiList, { size: 12 }),
|
|
@@ -4148,7 +4153,7 @@ ${space}${bullet} `);
|
|
|
4148
4153
|
"button",
|
|
4149
4154
|
{
|
|
4150
4155
|
onClick: () => insertAtCursor("1. "),
|
|
4151
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4156
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4152
4157
|
title: "Lista Numerada"
|
|
4153
4158
|
},
|
|
4154
4159
|
/* @__PURE__ */ import_react6.default.createElement("span", { className: "text-[10px] font-bold" }, "1."),
|
|
@@ -4157,7 +4162,7 @@ ${space}${bullet} `);
|
|
|
4157
4162
|
"button",
|
|
4158
4163
|
{
|
|
4159
4164
|
onClick: () => insertAtCursor("- [ ] "),
|
|
4160
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4165
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4161
4166
|
title: "Checklist (Checkbox)"
|
|
4162
4167
|
},
|
|
4163
4168
|
/* @__PURE__ */ import_react6.default.createElement(import_fi4.FiCheckSquare, { size: 12 }),
|
|
@@ -4166,7 +4171,7 @@ ${space}${bullet} `);
|
|
|
4166
4171
|
"button",
|
|
4167
4172
|
{
|
|
4168
4173
|
onClick: () => insertAtCursor("``` ```"),
|
|
4169
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4174
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4170
4175
|
title: "Inserir Code Block"
|
|
4171
4176
|
},
|
|
4172
4177
|
/* @__PURE__ */ import_react6.default.createElement(import_fi4.FiCode, { size: 12 }),
|
|
@@ -4175,21 +4180,21 @@ ${space}${bullet} `);
|
|
|
4175
4180
|
"button",
|
|
4176
4181
|
{
|
|
4177
4182
|
onClick: () => insertAtCursor("[Link Texto](https://)"),
|
|
4178
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4183
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4179
4184
|
title: "Inserir Link Web [Texto](Url)"
|
|
4180
4185
|
},
|
|
4181
4186
|
/* @__PURE__ */ import_react6.default.createElement(import_fi4.FiGlobe, { size: 12 }),
|
|
4182
4187
|
" Link"
|
|
4183
|
-
), /* @__PURE__ */ import_react6.default.createElement(
|
|
4188
|
+
)), /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-center gap-2 flex-wrap" }, /* @__PURE__ */ import_react6.default.createElement(
|
|
4184
4189
|
"button",
|
|
4185
4190
|
{
|
|
4186
4191
|
onClick: () => setIsImageModalOpen(true),
|
|
4187
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4192
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4188
4193
|
title: "Inserir Imagem (Propriedade ou URL)"
|
|
4189
4194
|
},
|
|
4190
4195
|
/* @__PURE__ */ import_react6.default.createElement(import_fi4.FiImage, { size: 12 }),
|
|
4191
4196
|
" Imagem"
|
|
4192
|
-
)
|
|
4197
|
+
), /* @__PURE__ */ import_react6.default.createElement(
|
|
4193
4198
|
"button",
|
|
4194
4199
|
{
|
|
4195
4200
|
onClick: openMentionModalViaButton,
|
|
@@ -8174,7 +8179,6 @@ var import_react17 = __toESM(require("react"));
|
|
|
8174
8179
|
function MultiNodeContextMenu({
|
|
8175
8180
|
data,
|
|
8176
8181
|
userRole,
|
|
8177
|
-
// 2. Recebendo a role do usuário nas props
|
|
8178
8182
|
onClose,
|
|
8179
8183
|
onDismissNodes,
|
|
8180
8184
|
onDismissOtherNodes,
|
|
@@ -8182,6 +8186,7 @@ function MultiNodeContextMenu({
|
|
|
8182
8186
|
}) {
|
|
8183
8187
|
const menuRef = (0, import_react17.useRef)(null);
|
|
8184
8188
|
const [menuPos, setMenuPos] = (0, import_react17.useState)({ left: 0, top: 0 });
|
|
8189
|
+
const [isConfirmingDelete, setIsConfirmingDelete] = (0, import_react17.useState)(false);
|
|
8185
8190
|
const ability = defineAbilityFor(userRole);
|
|
8186
8191
|
const canDelete = ability.can("delete", "Node");
|
|
8187
8192
|
(0, import_react17.useLayoutEffect)(() => {
|
|
@@ -8198,7 +8203,9 @@ function MultiNodeContextMenu({
|
|
|
8198
8203
|
setMenuPos({ left, top });
|
|
8199
8204
|
}, [data]);
|
|
8200
8205
|
(0, import_react17.useEffect)(() => {
|
|
8201
|
-
if (
|
|
8206
|
+
if (data.visible) {
|
|
8207
|
+
setIsConfirmingDelete(false);
|
|
8208
|
+
}
|
|
8202
8209
|
const handleClickOutside = (e) => {
|
|
8203
8210
|
if (menuRef.current && !menuRef.current.contains(e.target)) onClose();
|
|
8204
8211
|
};
|
|
@@ -8225,7 +8232,21 @@ function MultiNodeContextMenu({
|
|
|
8225
8232
|
onDoubleClick: swallow
|
|
8226
8233
|
},
|
|
8227
8234
|
/* @__PURE__ */ import_react17.default.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }),
|
|
8228
|
-
/* @__PURE__ */ import_react17.default.createElement("div", { className: "p-1.5" },
|
|
8235
|
+
/* @__PURE__ */ import_react17.default.createElement("div", { className: "p-1.5" }, isConfirmingDelete ? /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex flex-col gap-3 p-2" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex flex-col items-center text-center gap-2" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "w-10 h-10 rounded-full bg-red-500/20 flex items-center justify-center text-red-400 mb-1" }, /* @__PURE__ */ import_react17.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react17.default.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ import_react17.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_react17.default.createElement("p", { className: "text-sm text-slate-200" }, "Excluir ", /* @__PURE__ */ import_react17.default.createElement("strong", null, nodeCount, " Nodes"), "?"), /* @__PURE__ */ import_react17.default.createElement("p", { className: "text-[11px] text-slate-400 leading-tight" }, "Esta a\xE7\xE3o \xE9 irrevers\xEDvel. Todas as conex\xF5es associadas a eles ser\xE3o apagadas.")), /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex gap-2 mt-1" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
8236
|
+
"button",
|
|
8237
|
+
{
|
|
8238
|
+
onClick: () => setIsConfirmingDelete(false),
|
|
8239
|
+
className: "flex-1 px-2 py-2 text-xs font-medium bg-white/10 hover:bg-white/20 rounded-md text-white transition-colors"
|
|
8240
|
+
},
|
|
8241
|
+
"Cancelar"
|
|
8242
|
+
), /* @__PURE__ */ import_react17.default.createElement(
|
|
8243
|
+
"button",
|
|
8244
|
+
{
|
|
8245
|
+
onClick: () => onDeleteNodes(data.nodeIds),
|
|
8246
|
+
className: "flex-1 px-2 py-2 text-xs font-medium bg-red-500 hover:bg-red-600 rounded-md text-white transition-colors"
|
|
8247
|
+
},
|
|
8248
|
+
"Excluir"
|
|
8249
|
+
))) : /* @__PURE__ */ import_react17.default.createElement(import_react17.default.Fragment, null, /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex items-center gap-2 px-2 pt-1 pb-2" }, /* @__PURE__ */ import_react17.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_react17.default.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "A\xE7\xF5es em Grupo (", nodeCount, " Nodes)")), /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ import_react17.default.createElement("button", { onClick: () => onDismissNodes(data.nodeIds), className: baseButtonClass, title: "Remover da visualiza\xE7\xE3o" }, /* @__PURE__ */ import_react17.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_react17.default.createElement("path", { d: "M9.88 9.88a3 3 0 1 0 4.24 4.24" }), /* @__PURE__ */ import_react17.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_react17.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_react17.default.createElement("line", { x1: "2", y1: "2", x2: "22", y2: "22" })), /* @__PURE__ */ import_react17.default.createElement("span", null, "Dismiss (", nodeCount, ")")), /* @__PURE__ */ import_react17.default.createElement("button", { onClick: () => onDismissOtherNodes(data.nodeIds), className: baseButtonClass, title: "Remover outros da visualiza\xE7\xE3o" }, /* @__PURE__ */ import_react17.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_react17.default.createElement("circle", { cx: "12", cy: "12", r: "3" }), /* @__PURE__ */ import_react17.default.createElement("path", { d: "M3 7V5a2 2 0 0 1 2-2h2" }), /* @__PURE__ */ import_react17.default.createElement("path", { d: "M17 3h2a2 2 0 0 1 2 2v2" }), /* @__PURE__ */ import_react17.default.createElement("path", { d: "M21 17v2a2 2 0 0 1-2 2h-2" }), /* @__PURE__ */ import_react17.default.createElement("path", { d: "M7 21H5a2 2 0 0 1-2-2v-2" })), /* @__PURE__ */ import_react17.default.createElement("span", null, "Dismiss other nodes")), canDelete && /* @__PURE__ */ import_react17.default.createElement(import_react17.default.Fragment, null, /* @__PURE__ */ import_react17.default.createElement("div", { className: "my-1 h-px w-full bg-white/10" }), /* @__PURE__ */ import_react17.default.createElement("button", { onClick: () => setIsConfirmingDelete(true), className: deleteButtonClass, title: "Excluir Nodes" }, /* @__PURE__ */ import_react17.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_react17.default.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ import_react17.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_react17.default.createElement("line", { x1: "10", y1: "11", x2: "10", y2: "17" }), /* @__PURE__ */ import_react17.default.createElement("line", { x1: "14", y1: "11", x2: "14", y2: "17" })), /* @__PURE__ */ import_react17.default.createElement("span", null, "Excluir Nodes (", nodeCount, ")"))))))
|
|
8229
8250
|
);
|
|
8230
8251
|
}
|
|
8231
8252
|
|
|
@@ -8466,7 +8487,6 @@ var import_react19 = __toESM(require("react"));
|
|
|
8466
8487
|
function RelationshipContextMenu({
|
|
8467
8488
|
data,
|
|
8468
8489
|
userRole,
|
|
8469
|
-
// Recebemos a role do usuário para verificar permissões
|
|
8470
8490
|
onRelinkSource,
|
|
8471
8491
|
onRelinkTarget,
|
|
8472
8492
|
onOpenDetails,
|
|
@@ -8475,6 +8495,7 @@ function RelationshipContextMenu({
|
|
|
8475
8495
|
}) {
|
|
8476
8496
|
const menuRef = (0, import_react19.useRef)(null);
|
|
8477
8497
|
const [menuPos, setMenuPos] = (0, import_react19.useState)({ left: 0, top: 0 });
|
|
8498
|
+
const [isConfirmingDelete, setIsConfirmingDelete] = (0, import_react19.useState)(false);
|
|
8478
8499
|
const ability = (0, import_react19.useMemo)(() => defineAbilityFor(userRole), [userRole]);
|
|
8479
8500
|
const sourceName = (0, import_react19.useMemo)(
|
|
8480
8501
|
() => {
|
|
@@ -8504,7 +8525,9 @@ function RelationshipContextMenu({
|
|
|
8504
8525
|
setMenuPos({ left, top });
|
|
8505
8526
|
}, [data]);
|
|
8506
8527
|
(0, import_react19.useEffect)(() => {
|
|
8507
|
-
if (
|
|
8528
|
+
if (data.visible) {
|
|
8529
|
+
setIsConfirmingDelete(false);
|
|
8530
|
+
}
|
|
8508
8531
|
const handleClickOutside = (e) => {
|
|
8509
8532
|
if (menuRef.current && !menuRef.current.contains(e.target)) onClose();
|
|
8510
8533
|
};
|
|
@@ -8532,7 +8555,21 @@ function RelationshipContextMenu({
|
|
|
8532
8555
|
onDoubleClick: swallow
|
|
8533
8556
|
},
|
|
8534
8557
|
/* @__PURE__ */ import_react19.default.createElement("div", { className: "h-[2px] bg-gradient-to-r from-teal-400/0 via-teal-400/70 to-teal-400/0" }),
|
|
8535
|
-
/* @__PURE__ */ import_react19.default.createElement("div", { className: "p-1.5" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex
|
|
8558
|
+
/* @__PURE__ */ import_react19.default.createElement("div", { className: "p-1.5" }, isConfirmingDelete ? /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex flex-col gap-3 p-2" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex flex-col items-center text-center gap-2" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "w-10 h-10 rounded-full bg-rose-500/20 flex items-center justify-center text-rose-400 mb-1" }, /* @__PURE__ */ import_react19.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react19.default.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ import_react19.default.createElement("path", { d: "M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6" }), /* @__PURE__ */ import_react19.default.createElement("path", { d: "M10 11v6" }), /* @__PURE__ */ import_react19.default.createElement("path", { d: "M14 11v6" }), /* @__PURE__ */ import_react19.default.createElement("path", { d: "M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2" }))), /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-sm text-slate-200" }, "Excluir rela\xE7\xE3o?"), /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-[11px] text-slate-400 leading-tight break-words" }, "Desconectar ", /* @__PURE__ */ import_react19.default.createElement("strong", null, sourceName), " de ", /* @__PURE__ */ import_react19.default.createElement("strong", null, targetName), ".")), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex gap-2 mt-1" }, /* @__PURE__ */ import_react19.default.createElement(
|
|
8559
|
+
"button",
|
|
8560
|
+
{
|
|
8561
|
+
onClick: () => setIsConfirmingDelete(false),
|
|
8562
|
+
className: "flex-1 px-2 py-2 text-xs font-medium bg-white/10 hover:bg-white/20 rounded-md text-white transition-colors"
|
|
8563
|
+
},
|
|
8564
|
+
"Cancelar"
|
|
8565
|
+
), /* @__PURE__ */ import_react19.default.createElement(
|
|
8566
|
+
"button",
|
|
8567
|
+
{
|
|
8568
|
+
onClick: () => onDelete == null ? void 0 : onDelete(data.linkObject),
|
|
8569
|
+
className: "flex-1 px-2 py-2 text-xs font-medium bg-rose-600 hover:bg-rose-500 rounded-md text-white transition-colors"
|
|
8570
|
+
},
|
|
8571
|
+
"Excluir"
|
|
8572
|
+
))) : /* @__PURE__ */ import_react19.default.createElement(import_react19.default.Fragment, null, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center gap-2 px-2 pt-1 pb-2" }, /* @__PURE__ */ import_react19.default.createElement("span", { className: "inline-flex h-2 w-2 rounded-full bg-teal-400/80 shadow-[0_0_12px_1px_rgba(45,212,191,0.5)]" }), /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "Rela\xE7\xE3o")), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex flex-col gap-1" }, canUpdate && /* @__PURE__ */ import_react19.default.createElement(import_react19.default.Fragment, null, /* @__PURE__ */ import_react19.default.createElement(
|
|
8536
8573
|
"button",
|
|
8537
8574
|
{
|
|
8538
8575
|
onClick: () => onRelinkSource == null ? void 0 : onRelinkSource(data.linkObject),
|
|
@@ -8611,7 +8648,7 @@ function RelationshipContextMenu({
|
|
|
8611
8648
|
), canDelete && /* @__PURE__ */ import_react19.default.createElement(import_react19.default.Fragment, null, /* @__PURE__ */ import_react19.default.createElement("div", { className: "h-[1px] my-1 mx-1 bg-white/10" }), /* @__PURE__ */ import_react19.default.createElement(
|
|
8612
8649
|
"button",
|
|
8613
8650
|
{
|
|
8614
|
-
onClick: () =>
|
|
8651
|
+
onClick: () => setIsConfirmingDelete(true),
|
|
8615
8652
|
className: dangerButtonClass,
|
|
8616
8653
|
title: "Excluir esta conex\xE3o"
|
|
8617
8654
|
},
|
|
@@ -8635,7 +8672,7 @@ function RelationshipContextMenu({
|
|
|
8635
8672
|
/* @__PURE__ */ import_react19.default.createElement("path", { d: "M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2" })
|
|
8636
8673
|
),
|
|
8637
8674
|
/* @__PURE__ */ import_react19.default.createElement("span", null, "Excluir conex\xE3o (", sourceName, " \u2192 ", targetName, ")")
|
|
8638
|
-
))))
|
|
8675
|
+
)))))
|
|
8639
8676
|
);
|
|
8640
8677
|
}
|
|
8641
8678
|
|
package/dist/index.mjs
CHANGED
|
@@ -246,7 +246,7 @@ function ContextMenu({
|
|
|
246
246
|
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-2 px-2 pt-1 pb-2" }, /* @__PURE__ */ React.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__ */ React.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "A\xE7\xF5es R\xE1pidas")), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-1" }, ability.can("create", "Connection") && /* @__PURE__ */ React.createElement("button", { onClick: () => onStartConnection == null ? void 0 : onStartConnection(data.nodeData), className: baseButtonClass, title: "Conectar" }, /* @__PURE__ */ React.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__ */ React.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__ */ React.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__ */ React.createElement("span", null, "Conectar")), ability.can("create", "Node") && /* @__PURE__ */ React.createElement("button", { onClick: () => onStartCreation == null ? void 0 : onStartCreation(data.nodeData), className: baseButtonClass, title: "Criar e Conectar" }, /* @__PURE__ */ React.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__ */ React.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ React.createElement("line", { x1: "12", y1: "8", x2: "12", y2: "16" }), /* @__PURE__ */ React.createElement("line", { x1: "8", y1: "12", x2: "16", y2: "12" })), /* @__PURE__ */ React.createElement("span", null, "Criar e Conectar")), ability.can("create", "Ancestry") && /* @__PURE__ */ React.createElement("button", { onClick: () => onStartAncestryCreation == null ? void 0 : onStartAncestryCreation(data.nodeData), className: baseButtonClass, title: "Criar Ancestralidade" }, /* @__PURE__ */ React.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__ */ React.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-.8Z" }), /* @__PURE__ */ React.createElement("path", { d: "M10 16v-3a2 2 0 0 1 2-2h4" }), /* @__PURE__ */ React.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__ */ React.createElement("path", { d: "M14 8v3a2 2 0 0 0 2 2h4" })), /* @__PURE__ */ React.createElement("span", null, "Criar Ancestralidade")), shouldShowVersioningBtn && /* @__PURE__ */ React.createElement("button", { onClick: () => setMenuView("versioning"), className: baseButtonClass, title: hasVersions ? "Versionamento" : "Criar Versionamento" }, /* @__PURE__ */ React.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__ */ React.createElement("line", { x1: "6", y1: "3", x2: "6", y2: "15" }), /* @__PURE__ */ React.createElement("circle", { cx: "18", cy: "6", r: "3" }), /* @__PURE__ */ React.createElement("circle", { cx: "6", cy: "18", r: "3" }), /* @__PURE__ */ React.createElement("path", { d: "M18 9a9 9 0 0 1-9 9" })), /* @__PURE__ */ React.createElement("span", null, hasVersions || !canCreateVersion ? "Versionamento" : "Criar Versionamento")), (connections.length > 0 || availableAncestries.length > 0) && ability.can("read", "Connection") && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: "my-1 h-px w-full bg-white/10" }), /* @__PURE__ */ React.createElement("button", { onClick: () => setMenuView("connections"), className: baseButtonClass, title: "Conex\xF5es" }, /* @__PURE__ */ React.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__ */ React.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__ */ React.createElement("path", { d: "M8 12h8" }), /* @__PURE__ */ React.createElement("path", { d: "M12 8v8" })), /* @__PURE__ */ React.createElement("span", null, "Conex\xF5es (", totalConnectionsCount, ")"))), /* @__PURE__ */ React.createElement("div", { className: "my-1 h-px w-full bg-white/10" }), /* @__PURE__ */ React.createElement("button", { onClick: () => {
|
|
247
247
|
onFocusNode == null ? void 0 : onFocusNode(data.nodeData);
|
|
248
248
|
onClose();
|
|
249
|
-
}, className: baseButtonClass, title: "Focar na c\xE2mera" }, /* @__PURE__ */ React.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__ */ React.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ React.createElement("circle", { cx: "12", cy: "12", r: "3" })), /* @__PURE__ */ React.createElement("span", null, "Focar neste Node")), /* @__PURE__ */ React.createElement("button", { onClick: (e) => handleCopyLink(e, data.nodeData), className: baseButtonClass, title: "Copiar Link para Compartilhar" }, isLinkCopied ? /* @__PURE__ */ React.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__ */ React.createElement("polyline", { points: "20 6 9 17 4 12" })) : /* @__PURE__ */ React.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__ */ React.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__ */ React.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__ */ React.createElement("span", { className: isLinkCopied ? "text-green-400" : "" }, isLinkCopied ? "Copiado!" : "Copiar Link")), ability.can("dismiss", "Node") && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("button", { onClick: () => onDismissNode == null ? void 0 : onDismissNode(data.nodeData), className: baseButtonClass, title: "Remover da visualiza\xE7\xE3o" }, /* @__PURE__ */ React.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__ */ React.createElement("path", { d: "M9.88 9.88a3 3 0 1 0 4.24 4.24" }), /* @__PURE__ */ React.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__ */ React.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__ */ React.createElement("line", { x1: "2", y1: "2", x2: "22", y2: "22" })), /* @__PURE__ */ React.createElement("span", null, "Dismiss")), /* @__PURE__ */ React.createElement("button", { onClick: () => onDismissOtherNodes == null ? void 0 : onDismissOtherNodes(data.nodeData), className: baseButtonClass, title: "Remover outros da visualiza\xE7\xE3o" }, /* @__PURE__ */ React.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__ */ React.createElement("circle", { cx: "12", cy: "12", r: "3" }), /* @__PURE__ */ React.createElement("path", { d: "M3 7V5a2 2 0 0 1 2-2h2" }), /* @__PURE__ */ React.createElement("path", { d: "M17 3h2a2 2 0 0 1 2 2v2" }), /* @__PURE__ */ React.createElement("path", { d: "M21 17v2a2 2 0 0 1-2 2h-2" }), /* @__PURE__ */ React.createElement("path", { d: "M7 21H5a2 2 0 0 1-2-2v-2" })), /* @__PURE__ */ React.createElement("span", null, "Dismiss other nodes"))), ability.can("delete", "Node") && /* @__PURE__ */ React.createElement("button", { onClick: () =>
|
|
249
|
+
}, className: baseButtonClass, title: "Focar na c\xE2mera" }, /* @__PURE__ */ React.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__ */ React.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ React.createElement("circle", { cx: "12", cy: "12", r: "3" })), /* @__PURE__ */ React.createElement("span", null, "Focar neste Node")), /* @__PURE__ */ React.createElement("button", { onClick: (e) => handleCopyLink(e, data.nodeData), className: baseButtonClass, title: "Copiar Link para Compartilhar" }, isLinkCopied ? /* @__PURE__ */ React.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__ */ React.createElement("polyline", { points: "20 6 9 17 4 12" })) : /* @__PURE__ */ React.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__ */ React.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__ */ React.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__ */ React.createElement("span", { className: isLinkCopied ? "text-green-400" : "" }, isLinkCopied ? "Copiado!" : "Copiar Link")), ability.can("dismiss", "Node") && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("button", { onClick: () => onDismissNode == null ? void 0 : onDismissNode(data.nodeData), className: baseButtonClass, title: "Remover da visualiza\xE7\xE3o" }, /* @__PURE__ */ React.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__ */ React.createElement("path", { d: "M9.88 9.88a3 3 0 1 0 4.24 4.24" }), /* @__PURE__ */ React.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__ */ React.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__ */ React.createElement("line", { x1: "2", y1: "2", x2: "22", y2: "22" })), /* @__PURE__ */ React.createElement("span", null, "Dismiss")), /* @__PURE__ */ React.createElement("button", { onClick: () => onDismissOtherNodes == null ? void 0 : onDismissOtherNodes(data.nodeData), className: baseButtonClass, title: "Remover outros da visualiza\xE7\xE3o" }, /* @__PURE__ */ React.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__ */ React.createElement("circle", { cx: "12", cy: "12", r: "3" }), /* @__PURE__ */ React.createElement("path", { d: "M3 7V5a2 2 0 0 1 2-2h2" }), /* @__PURE__ */ React.createElement("path", { d: "M17 3h2a2 2 0 0 1 2 2v2" }), /* @__PURE__ */ React.createElement("path", { d: "M21 17v2a2 2 0 0 1-2 2h-2" }), /* @__PURE__ */ React.createElement("path", { d: "M7 21H5a2 2 0 0 1-2-2v-2" })), /* @__PURE__ */ React.createElement("span", null, "Dismiss other nodes"))), ability.can("delete", "Node") && /* @__PURE__ */ React.createElement("button", { onClick: () => setMenuView("deleteConfirmation"), className: deleteButtonClass, title: "Excluir Node" }, /* @__PURE__ */ React.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__ */ React.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React.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__ */ React.createElement("line", { x1: "10", y1: "11", x2: "10", y2: "17" }), /* @__PURE__ */ React.createElement("line", { x1: "14", y1: "11", x2: "14", y2: "17" })), /* @__PURE__ */ React.createElement("span", null, "Excluir Node"))));
|
|
250
250
|
};
|
|
251
251
|
const renderVersionSubMenuView = () => {
|
|
252
252
|
const group = versionSubMenu;
|
|
@@ -338,6 +338,24 @@ function ContextMenu({
|
|
|
338
338
|
/* @__PURE__ */ React.createElement("span", { className: "flex-1 truncate" }, version.name)
|
|
339
339
|
))));
|
|
340
340
|
};
|
|
341
|
+
const renderDeleteConfirmationView = () => {
|
|
342
|
+
var _a2;
|
|
343
|
+
return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3 p-2" }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-col items-center text-center gap-2" }, /* @__PURE__ */ React.createElement("div", { className: "w-10 h-10 rounded-full bg-red-500/20 flex items-center justify-center text-red-400 mb-1" }, /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React.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__ */ React.createElement("p", { className: "text-sm text-slate-200" }, "Excluir ", /* @__PURE__ */ React.createElement("strong", null, (_a2 = data.nodeData) == null ? void 0 : _a2.name), "?"), /* @__PURE__ */ React.createElement("p", { className: "text-[11px] text-slate-400 leading-tight" }, "Todas as conex\xF5es associadas tamb\xE9m ser\xE3o apagadas.")), /* @__PURE__ */ React.createElement("div", { className: "flex gap-2 mt-1" }, /* @__PURE__ */ React.createElement(
|
|
344
|
+
"button",
|
|
345
|
+
{
|
|
346
|
+
onClick: () => setMenuView("main"),
|
|
347
|
+
className: "flex-1 px-2 py-2 text-xs font-medium bg-white/10 hover:bg-white/20 rounded-md text-white transition-colors"
|
|
348
|
+
},
|
|
349
|
+
"Cancelar"
|
|
350
|
+
), /* @__PURE__ */ React.createElement(
|
|
351
|
+
"button",
|
|
352
|
+
{
|
|
353
|
+
onClick: () => onDeleteNode == null ? void 0 : onDeleteNode(data.nodeData),
|
|
354
|
+
className: "flex-1 px-2 py-2 text-xs font-medium bg-red-500 hover:bg-red-600 rounded-md text-white transition-colors"
|
|
355
|
+
},
|
|
356
|
+
"Excluir"
|
|
357
|
+
)));
|
|
358
|
+
};
|
|
341
359
|
return /* @__PURE__ */ React.createElement(
|
|
342
360
|
"div",
|
|
343
361
|
{
|
|
@@ -353,7 +371,7 @@ function ContextMenu({
|
|
|
353
371
|
onDoubleClick: swallow
|
|
354
372
|
},
|
|
355
373
|
/* @__PURE__ */ React.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }),
|
|
356
|
-
/* @__PURE__ */ React.createElement("div", { className: "p-1.5" }, menuView === "main" && renderMainView(), menuView === "connections" && renderConnectionsView(), menuView === "ancestryActions" && renderAncestryActionsView(), menuView === "versioning" && renderVersioningView())
|
|
374
|
+
/* @__PURE__ */ React.createElement("div", { className: "p-1.5" }, menuView === "main" && renderMainView(), menuView === "connections" && renderConnectionsView(), menuView === "ancestryActions" && renderAncestryActionsView(), menuView === "versioning" && renderVersioningView(), menuView === "deleteConfirmation" && renderDeleteConfirmationView())
|
|
357
375
|
);
|
|
358
376
|
}
|
|
359
377
|
|
|
@@ -1535,7 +1553,6 @@ var userActionHandlers = {
|
|
|
1535
1553
|
color: ghostColor,
|
|
1536
1554
|
emissive: ghostEmissive,
|
|
1537
1555
|
emissiveIntensity: MIN_VISIBILITY_INTENSITY,
|
|
1538
|
-
// <-- Forçamos o brilho mínimo
|
|
1539
1556
|
roughness: 0.6,
|
|
1540
1557
|
metalness: 0,
|
|
1541
1558
|
transparent: true,
|
|
@@ -1692,7 +1709,6 @@ var userActionHandlers = {
|
|
|
1692
1709
|
color: ghostColor,
|
|
1693
1710
|
emissive: ghostEmissive,
|
|
1694
1711
|
emissiveIntensity: MIN_VISIBILITY_INTENSITY,
|
|
1695
|
-
// <-- Forçamos o brilho mínimo
|
|
1696
1712
|
roughness: 0.6,
|
|
1697
1713
|
metalness: 0,
|
|
1698
1714
|
transparent: true,
|
|
@@ -1989,9 +2005,7 @@ var userActionHandlers = {
|
|
|
1989
2005
|
linkObject.visible = false;
|
|
1990
2006
|
controls.enabled = false;
|
|
1991
2007
|
if (mountRef.current) mountRef.current.style.cursor = "crosshair";
|
|
1992
|
-
const tempMat = new LineMaterial({
|
|
1993
|
-
/* ... material tracejado ... */
|
|
1994
|
-
});
|
|
2008
|
+
const tempMat = new LineMaterial({});
|
|
1995
2009
|
const tempGeom = new LineGeometry().setPositions([
|
|
1996
2010
|
...fixedNode.position.toArray(),
|
|
1997
2011
|
...fixedNode.position.toArray()
|
|
@@ -2120,9 +2134,6 @@ var userActionHandlers = {
|
|
|
2120
2134
|
const { parentFileId, ownerId } = parentInfo;
|
|
2121
2135
|
const srcName = ((_c = (_b = (_a = linkObject.userData) == null ? void 0 : _a.sourceNode) == null ? void 0 : _b.userData) == null ? void 0 : _c.name) ?? linkObject.userData.source;
|
|
2122
2136
|
const tgtName = ((_f = (_e = (_d = linkObject.userData) == null ? void 0 : _d.targetNode) == null ? void 0 : _e.userData) == null ? void 0 : _f.name) ?? linkObject.userData.target;
|
|
2123
|
-
if (!window.confirm(`Tem certeza que deseja excluir a conex\xE3o entre "${srcName}" \u2192 "${tgtName}"?`)) {
|
|
2124
|
-
return;
|
|
2125
|
-
}
|
|
2126
2137
|
const specificParentData = JSON.parse(JSON.stringify(graphDataRef.current[parentFileId]));
|
|
2127
2138
|
const newLinks = (specificParentData.links || []).filter((l) => String(l.id) !== String(linkIdToDelete));
|
|
2128
2139
|
specificParentData.links = newLinks;
|
|
@@ -2276,9 +2287,6 @@ var userActionHandlers = {
|
|
|
2276
2287
|
const { stateRef, graphDataRef, sceneDataRef, setters, actions } = context;
|
|
2277
2288
|
setters.setMultiContextMenu({ visible: false });
|
|
2278
2289
|
if (!nodeIds || nodeIds.size === 0 || !graphDataRef.current || !sceneDataRef.current) return;
|
|
2279
|
-
if (!window.confirm(`Tem certeza que deseja excluir ${nodeIds.size} Nodes e todas as suas conex\xF5es? Esta a\xE7\xE3o \xE9 irrevers\xEDvel.`)) {
|
|
2280
|
-
return;
|
|
2281
|
-
}
|
|
2282
2290
|
const strNodeIdsToDelete = Array.from(nodeIds).map(String);
|
|
2283
2291
|
if (actions.delete_file) {
|
|
2284
2292
|
strNodeIdsToDelete.forEach((id) => {
|
|
@@ -2359,9 +2367,6 @@ var userActionHandlers = {
|
|
|
2359
2367
|
}
|
|
2360
2368
|
setters.setContextMenu({ visible: false });
|
|
2361
2369
|
if (!nodeData || !graphDataRef.current || !sceneDataRef.current) return;
|
|
2362
|
-
if (!window.confirm(`Tem certeza que deseja excluir o Node "${nodeData.name}" e todas as sua conex\xF5es?`)) {
|
|
2363
|
-
return;
|
|
2364
|
-
}
|
|
2365
2370
|
const nodeIdToDelete = nodeData.id;
|
|
2366
2371
|
const strNodeId = String(nodeIdToDelete);
|
|
2367
2372
|
const parentInfo = getParentFileInfoForNode(graphDataRef.current, sceneDataRef.current, nodeIdToDelete);
|
|
@@ -4077,7 +4082,7 @@ ${space}${bullet} `);
|
|
|
4077
4082
|
"button",
|
|
4078
4083
|
{
|
|
4079
4084
|
onClick: () => insertAtCursor("# "),
|
|
4080
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4085
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4081
4086
|
title: "T\xEDtulo Principal"
|
|
4082
4087
|
},
|
|
4083
4088
|
/* @__PURE__ */ React5.createElement(FiType, { size: 12 }),
|
|
@@ -4086,7 +4091,7 @@ ${space}${bullet} `);
|
|
|
4086
4091
|
"button",
|
|
4087
4092
|
{
|
|
4088
4093
|
onClick: () => insertAtCursor("## "),
|
|
4089
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4094
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4090
4095
|
title: "Subt\xEDtulo"
|
|
4091
4096
|
},
|
|
4092
4097
|
/* @__PURE__ */ React5.createElement(FiType, { size: 10 }),
|
|
@@ -4095,7 +4100,7 @@ ${space}${bullet} `);
|
|
|
4095
4100
|
"button",
|
|
4096
4101
|
{
|
|
4097
4102
|
onClick: () => insertAtCursor("- "),
|
|
4098
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4103
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4099
4104
|
title: "Lista com bullets"
|
|
4100
4105
|
},
|
|
4101
4106
|
/* @__PURE__ */ React5.createElement(FiList, { size: 12 }),
|
|
@@ -4104,7 +4109,7 @@ ${space}${bullet} `);
|
|
|
4104
4109
|
"button",
|
|
4105
4110
|
{
|
|
4106
4111
|
onClick: () => insertAtCursor("1. "),
|
|
4107
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4112
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4108
4113
|
title: "Lista Numerada"
|
|
4109
4114
|
},
|
|
4110
4115
|
/* @__PURE__ */ React5.createElement("span", { className: "text-[10px] font-bold" }, "1."),
|
|
@@ -4113,7 +4118,7 @@ ${space}${bullet} `);
|
|
|
4113
4118
|
"button",
|
|
4114
4119
|
{
|
|
4115
4120
|
onClick: () => insertAtCursor("- [ ] "),
|
|
4116
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4121
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4117
4122
|
title: "Checklist (Checkbox)"
|
|
4118
4123
|
},
|
|
4119
4124
|
/* @__PURE__ */ React5.createElement(FiCheckSquare, { size: 12 }),
|
|
@@ -4122,7 +4127,7 @@ ${space}${bullet} `);
|
|
|
4122
4127
|
"button",
|
|
4123
4128
|
{
|
|
4124
4129
|
onClick: () => insertAtCursor("``` ```"),
|
|
4125
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4130
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4126
4131
|
title: "Inserir Code Block"
|
|
4127
4132
|
},
|
|
4128
4133
|
/* @__PURE__ */ React5.createElement(FiCode, { size: 12 }),
|
|
@@ -4131,21 +4136,21 @@ ${space}${bullet} `);
|
|
|
4131
4136
|
"button",
|
|
4132
4137
|
{
|
|
4133
4138
|
onClick: () => insertAtCursor("[Link Texto](https://)"),
|
|
4134
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4139
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4135
4140
|
title: "Inserir Link Web [Texto](Url)"
|
|
4136
4141
|
},
|
|
4137
4142
|
/* @__PURE__ */ React5.createElement(FiGlobe, { size: 12 }),
|
|
4138
4143
|
" Link"
|
|
4139
|
-
), /* @__PURE__ */ React5.createElement(
|
|
4144
|
+
)), /* @__PURE__ */ React5.createElement("div", { className: "flex items-center gap-2 flex-wrap" }, /* @__PURE__ */ React5.createElement(
|
|
4140
4145
|
"button",
|
|
4141
4146
|
{
|
|
4142
4147
|
onClick: () => setIsImageModalOpen(true),
|
|
4143
|
-
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-
|
|
4148
|
+
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4144
4149
|
title: "Inserir Imagem (Propriedade ou URL)"
|
|
4145
4150
|
},
|
|
4146
4151
|
/* @__PURE__ */ React5.createElement(FiImage, { size: 12 }),
|
|
4147
4152
|
" Imagem"
|
|
4148
|
-
)
|
|
4153
|
+
), /* @__PURE__ */ React5.createElement(
|
|
4149
4154
|
"button",
|
|
4150
4155
|
{
|
|
4151
4156
|
onClick: openMentionModalViaButton,
|
|
@@ -8160,7 +8165,6 @@ import React16, { useLayoutEffect as useLayoutEffect3, useRef as useRef13, useSt
|
|
|
8160
8165
|
function MultiNodeContextMenu({
|
|
8161
8166
|
data,
|
|
8162
8167
|
userRole,
|
|
8163
|
-
// 2. Recebendo a role do usuário nas props
|
|
8164
8168
|
onClose,
|
|
8165
8169
|
onDismissNodes,
|
|
8166
8170
|
onDismissOtherNodes,
|
|
@@ -8168,6 +8172,7 @@ function MultiNodeContextMenu({
|
|
|
8168
8172
|
}) {
|
|
8169
8173
|
const menuRef = useRef13(null);
|
|
8170
8174
|
const [menuPos, setMenuPos] = useState17({ left: 0, top: 0 });
|
|
8175
|
+
const [isConfirmingDelete, setIsConfirmingDelete] = useState17(false);
|
|
8171
8176
|
const ability = defineAbilityFor(userRole);
|
|
8172
8177
|
const canDelete = ability.can("delete", "Node");
|
|
8173
8178
|
useLayoutEffect3(() => {
|
|
@@ -8184,7 +8189,9 @@ function MultiNodeContextMenu({
|
|
|
8184
8189
|
setMenuPos({ left, top });
|
|
8185
8190
|
}, [data]);
|
|
8186
8191
|
useEffect16(() => {
|
|
8187
|
-
if (
|
|
8192
|
+
if (data.visible) {
|
|
8193
|
+
setIsConfirmingDelete(false);
|
|
8194
|
+
}
|
|
8188
8195
|
const handleClickOutside = (e) => {
|
|
8189
8196
|
if (menuRef.current && !menuRef.current.contains(e.target)) onClose();
|
|
8190
8197
|
};
|
|
@@ -8211,7 +8218,21 @@ function MultiNodeContextMenu({
|
|
|
8211
8218
|
onDoubleClick: swallow
|
|
8212
8219
|
},
|
|
8213
8220
|
/* @__PURE__ */ React16.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }),
|
|
8214
|
-
/* @__PURE__ */ React16.createElement("div", { className: "p-1.5" },
|
|
8221
|
+
/* @__PURE__ */ React16.createElement("div", { className: "p-1.5" }, isConfirmingDelete ? /* @__PURE__ */ React16.createElement("div", { className: "flex flex-col gap-3 p-2" }, /* @__PURE__ */ React16.createElement("div", { className: "flex flex-col items-center text-center gap-2" }, /* @__PURE__ */ React16.createElement("div", { className: "w-10 h-10 rounded-full bg-red-500/20 flex items-center justify-center text-red-400 mb-1" }, /* @__PURE__ */ React16.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React16.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React16.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__ */ React16.createElement("p", { className: "text-sm text-slate-200" }, "Excluir ", /* @__PURE__ */ React16.createElement("strong", null, nodeCount, " Nodes"), "?"), /* @__PURE__ */ React16.createElement("p", { className: "text-[11px] text-slate-400 leading-tight" }, "Esta a\xE7\xE3o \xE9 irrevers\xEDvel. Todas as conex\xF5es associadas a eles ser\xE3o apagadas.")), /* @__PURE__ */ React16.createElement("div", { className: "flex gap-2 mt-1" }, /* @__PURE__ */ React16.createElement(
|
|
8222
|
+
"button",
|
|
8223
|
+
{
|
|
8224
|
+
onClick: () => setIsConfirmingDelete(false),
|
|
8225
|
+
className: "flex-1 px-2 py-2 text-xs font-medium bg-white/10 hover:bg-white/20 rounded-md text-white transition-colors"
|
|
8226
|
+
},
|
|
8227
|
+
"Cancelar"
|
|
8228
|
+
), /* @__PURE__ */ React16.createElement(
|
|
8229
|
+
"button",
|
|
8230
|
+
{
|
|
8231
|
+
onClick: () => onDeleteNodes(data.nodeIds),
|
|
8232
|
+
className: "flex-1 px-2 py-2 text-xs font-medium bg-red-500 hover:bg-red-600 rounded-md text-white transition-colors"
|
|
8233
|
+
},
|
|
8234
|
+
"Excluir"
|
|
8235
|
+
))) : /* @__PURE__ */ React16.createElement(React16.Fragment, null, /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-2 px-2 pt-1 pb-2" }, /* @__PURE__ */ React16.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__ */ React16.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "A\xE7\xF5es em Grupo (", nodeCount, " Nodes)")), /* @__PURE__ */ React16.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ React16.createElement("button", { onClick: () => onDismissNodes(data.nodeIds), className: baseButtonClass, title: "Remover da visualiza\xE7\xE3o" }, /* @__PURE__ */ React16.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__ */ React16.createElement("path", { d: "M9.88 9.88a3 3 0 1 0 4.24 4.24" }), /* @__PURE__ */ React16.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__ */ React16.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__ */ React16.createElement("line", { x1: "2", y1: "2", x2: "22", y2: "22" })), /* @__PURE__ */ React16.createElement("span", null, "Dismiss (", nodeCount, ")")), /* @__PURE__ */ React16.createElement("button", { onClick: () => onDismissOtherNodes(data.nodeIds), className: baseButtonClass, title: "Remover outros da visualiza\xE7\xE3o" }, /* @__PURE__ */ React16.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__ */ React16.createElement("circle", { cx: "12", cy: "12", r: "3" }), /* @__PURE__ */ React16.createElement("path", { d: "M3 7V5a2 2 0 0 1 2-2h2" }), /* @__PURE__ */ React16.createElement("path", { d: "M17 3h2a2 2 0 0 1 2 2v2" }), /* @__PURE__ */ React16.createElement("path", { d: "M21 17v2a2 2 0 0 1-2 2h-2" }), /* @__PURE__ */ React16.createElement("path", { d: "M7 21H5a2 2 0 0 1-2-2v-2" })), /* @__PURE__ */ React16.createElement("span", null, "Dismiss other nodes")), canDelete && /* @__PURE__ */ React16.createElement(React16.Fragment, null, /* @__PURE__ */ React16.createElement("div", { className: "my-1 h-px w-full bg-white/10" }), /* @__PURE__ */ React16.createElement("button", { onClick: () => setIsConfirmingDelete(true), className: deleteButtonClass, title: "Excluir Nodes" }, /* @__PURE__ */ React16.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__ */ React16.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React16.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__ */ React16.createElement("line", { x1: "10", y1: "11", x2: "10", y2: "17" }), /* @__PURE__ */ React16.createElement("line", { x1: "14", y1: "11", x2: "14", y2: "17" })), /* @__PURE__ */ React16.createElement("span", null, "Excluir Nodes (", nodeCount, ")"))))))
|
|
8215
8236
|
);
|
|
8216
8237
|
}
|
|
8217
8238
|
|
|
@@ -8452,7 +8473,6 @@ import React18, { useLayoutEffect as useLayoutEffect4, useRef as useRef15, useSt
|
|
|
8452
8473
|
function RelationshipContextMenu({
|
|
8453
8474
|
data,
|
|
8454
8475
|
userRole,
|
|
8455
|
-
// Recebemos a role do usuário para verificar permissões
|
|
8456
8476
|
onRelinkSource,
|
|
8457
8477
|
onRelinkTarget,
|
|
8458
8478
|
onOpenDetails,
|
|
@@ -8461,6 +8481,7 @@ function RelationshipContextMenu({
|
|
|
8461
8481
|
}) {
|
|
8462
8482
|
const menuRef = useRef15(null);
|
|
8463
8483
|
const [menuPos, setMenuPos] = useState19({ left: 0, top: 0 });
|
|
8484
|
+
const [isConfirmingDelete, setIsConfirmingDelete] = useState19(false);
|
|
8464
8485
|
const ability = useMemo10(() => defineAbilityFor(userRole), [userRole]);
|
|
8465
8486
|
const sourceName = useMemo10(
|
|
8466
8487
|
() => {
|
|
@@ -8490,7 +8511,9 @@ function RelationshipContextMenu({
|
|
|
8490
8511
|
setMenuPos({ left, top });
|
|
8491
8512
|
}, [data]);
|
|
8492
8513
|
useEffect18(() => {
|
|
8493
|
-
if (
|
|
8514
|
+
if (data.visible) {
|
|
8515
|
+
setIsConfirmingDelete(false);
|
|
8516
|
+
}
|
|
8494
8517
|
const handleClickOutside = (e) => {
|
|
8495
8518
|
if (menuRef.current && !menuRef.current.contains(e.target)) onClose();
|
|
8496
8519
|
};
|
|
@@ -8518,7 +8541,21 @@ function RelationshipContextMenu({
|
|
|
8518
8541
|
onDoubleClick: swallow
|
|
8519
8542
|
},
|
|
8520
8543
|
/* @__PURE__ */ React18.createElement("div", { className: "h-[2px] bg-gradient-to-r from-teal-400/0 via-teal-400/70 to-teal-400/0" }),
|
|
8521
|
-
/* @__PURE__ */ React18.createElement("div", { className: "p-1.5" }, /* @__PURE__ */ React18.createElement("div", { className: "flex
|
|
8544
|
+
/* @__PURE__ */ React18.createElement("div", { className: "p-1.5" }, isConfirmingDelete ? /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-3 p-2" }, /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col items-center text-center gap-2" }, /* @__PURE__ */ React18.createElement("div", { className: "w-10 h-10 rounded-full bg-rose-500/20 flex items-center justify-center text-rose-400 mb-1" }, /* @__PURE__ */ React18.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React18.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React18.createElement("path", { d: "M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6" }), /* @__PURE__ */ React18.createElement("path", { d: "M10 11v6" }), /* @__PURE__ */ React18.createElement("path", { d: "M14 11v6" }), /* @__PURE__ */ React18.createElement("path", { d: "M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2" }))), /* @__PURE__ */ React18.createElement("p", { className: "text-sm text-slate-200" }, "Excluir rela\xE7\xE3o?"), /* @__PURE__ */ React18.createElement("p", { className: "text-[11px] text-slate-400 leading-tight break-words" }, "Desconectar ", /* @__PURE__ */ React18.createElement("strong", null, sourceName), " de ", /* @__PURE__ */ React18.createElement("strong", null, targetName), ".")), /* @__PURE__ */ React18.createElement("div", { className: "flex gap-2 mt-1" }, /* @__PURE__ */ React18.createElement(
|
|
8545
|
+
"button",
|
|
8546
|
+
{
|
|
8547
|
+
onClick: () => setIsConfirmingDelete(false),
|
|
8548
|
+
className: "flex-1 px-2 py-2 text-xs font-medium bg-white/10 hover:bg-white/20 rounded-md text-white transition-colors"
|
|
8549
|
+
},
|
|
8550
|
+
"Cancelar"
|
|
8551
|
+
), /* @__PURE__ */ React18.createElement(
|
|
8552
|
+
"button",
|
|
8553
|
+
{
|
|
8554
|
+
onClick: () => onDelete == null ? void 0 : onDelete(data.linkObject),
|
|
8555
|
+
className: "flex-1 px-2 py-2 text-xs font-medium bg-rose-600 hover:bg-rose-500 rounded-md text-white transition-colors"
|
|
8556
|
+
},
|
|
8557
|
+
"Excluir"
|
|
8558
|
+
))) : /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-2 px-2 pt-1 pb-2" }, /* @__PURE__ */ React18.createElement("span", { className: "inline-flex h-2 w-2 rounded-full bg-teal-400/80 shadow-[0_0_12px_1px_rgba(45,212,191,0.5)]" }), /* @__PURE__ */ React18.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "Rela\xE7\xE3o")), /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-1" }, canUpdate && /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement(
|
|
8522
8559
|
"button",
|
|
8523
8560
|
{
|
|
8524
8561
|
onClick: () => onRelinkSource == null ? void 0 : onRelinkSource(data.linkObject),
|
|
@@ -8597,7 +8634,7 @@ function RelationshipContextMenu({
|
|
|
8597
8634
|
), canDelete && /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement("div", { className: "h-[1px] my-1 mx-1 bg-white/10" }), /* @__PURE__ */ React18.createElement(
|
|
8598
8635
|
"button",
|
|
8599
8636
|
{
|
|
8600
|
-
onClick: () =>
|
|
8637
|
+
onClick: () => setIsConfirmingDelete(true),
|
|
8601
8638
|
className: dangerButtonClass,
|
|
8602
8639
|
title: "Excluir esta conex\xE3o"
|
|
8603
8640
|
},
|
|
@@ -8621,7 +8658,7 @@ function RelationshipContextMenu({
|
|
|
8621
8658
|
/* @__PURE__ */ React18.createElement("path", { d: "M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2" })
|
|
8622
8659
|
),
|
|
8623
8660
|
/* @__PURE__ */ React18.createElement("span", null, "Excluir conex\xE3o (", sourceName, " \u2192 ", targetName, ")")
|
|
8624
|
-
))))
|
|
8661
|
+
)))))
|
|
8625
8662
|
);
|
|
8626
8663
|
}
|
|
8627
8664
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lv-x-software-house/x_view",
|
|
3
|
-
"version": "1.2.2-dev.
|
|
3
|
+
"version": "1.2.2-dev.23",
|
|
4
4
|
"description": "Pacote privado contendo os componentes e lógica de renderização 3D do X View.",
|
|
5
5
|
"author": "iv.x - Engenharia de Software - ivxsoftwarehouse@gmail.com",
|
|
6
6
|
"license": "UNLICENSED",
|