@lv-x-software-house/x_view 1.3.8 → 1.4.0
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 +604 -217
- package/dist/index.mjs +528 -141
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// src/XViewScene.jsx
|
|
2
|
-
import
|
|
2
|
+
import React37, {
|
|
3
3
|
useCallback as useCallback8,
|
|
4
4
|
useEffect as useEffect27,
|
|
5
5
|
useRef as useRef25,
|
|
6
|
-
useState as
|
|
6
|
+
useState as useState34,
|
|
7
7
|
useMemo as useMemo15
|
|
8
8
|
} from "react";
|
|
9
9
|
import { useRouter, useSearchParams } from "next/navigation";
|
|
@@ -5119,8 +5119,8 @@ function ContextMenu({
|
|
|
5119
5119
|
const handleClickOutside = (e) => {
|
|
5120
5120
|
if (menuRef.current && !menuRef.current.contains(e.target)) onClose();
|
|
5121
5121
|
};
|
|
5122
|
-
document.addEventListener("
|
|
5123
|
-
return () => document.removeEventListener("
|
|
5122
|
+
document.addEventListener("pointerdown", handleClickOutside);
|
|
5123
|
+
return () => document.removeEventListener("pointerdown", handleClickOutside);
|
|
5124
5124
|
}, [data.visible, onClose]);
|
|
5125
5125
|
const visibleLinkIds = useMemo(() => {
|
|
5126
5126
|
var _a2;
|
|
@@ -5560,7 +5560,7 @@ function ContextMenu({
|
|
|
5560
5560
|
"div",
|
|
5561
5561
|
{
|
|
5562
5562
|
ref: menuRef,
|
|
5563
|
-
className: "ui-overlay context-menu-class origin-top-left rounded-xl border border-white/10 bg-slate-950/70 backdrop-blur-xl shadow-[0_20px_80px_rgba(0,0,0,0.6)] ring-1 ring-white/10 text-white min-w-[220px] max-w-[min(95vw,420px)]
|
|
5563
|
+
className: "ui-overlay context-menu-class origin-top-left rounded-xl border border-white/10 bg-slate-950/70 backdrop-blur-xl shadow-[0_20px_80px_rgba(0,0,0,0.6)] ring-1 ring-white/10 text-white min-w-[220px] max-w-[min(95vw,420px)] max-h-[85vh] overflow-y-auto custom-scrollbar w-max",
|
|
5564
5564
|
style: { position: "absolute", left: `${menuPos.left}px`, top: `${menuPos.top}px`, zIndex: 1e3 },
|
|
5565
5565
|
onPointerDown: swallow,
|
|
5566
5566
|
onPointerMove: swallow,
|
|
@@ -6193,7 +6193,8 @@ function XViewSidebar({
|
|
|
6193
6193
|
options: [
|
|
6194
6194
|
{ value: "Star", label: "Star" },
|
|
6195
6195
|
{ value: "Circle", label: "Circle" },
|
|
6196
|
-
{ value: "Column", label: "Column" }
|
|
6196
|
+
{ value: "Column", label: "Column" },
|
|
6197
|
+
{ value: "Network", label: "Network" }
|
|
6197
6198
|
],
|
|
6198
6199
|
placeholder: "Selecione um Formato"
|
|
6199
6200
|
}
|
|
@@ -13789,14 +13790,18 @@ function NodeDetailsPanel({
|
|
|
13789
13790
|
});
|
|
13790
13791
|
const [selectedImageUrl, setSelectedImageUrl] = useState20((node == null ? void 0 : node.textureImageUrl) ?? null);
|
|
13791
13792
|
const [hasUnsavedChanges, setHasUnsavedChanges] = useState20(false);
|
|
13792
|
-
const
|
|
13793
|
+
const isMobile = typeof window !== "undefined" && window.innerWidth < 640;
|
|
13794
|
+
const maxPanelW = typeof window !== "undefined" ? Math.min(window.innerWidth - 32, 1200) : 1200;
|
|
13795
|
+
const defaultWidth = isMobile ? typeof window !== "undefined" ? window.innerWidth - 32 : 360 : isReadMode ? 700 : 440;
|
|
13793
13796
|
const { width: panelWidth, isResizing, handlePointerDown: handleResize, setWidth } = useResizablePanel({
|
|
13794
|
-
initialWidth:
|
|
13795
|
-
minWidth:
|
|
13797
|
+
initialWidth: defaultWidth,
|
|
13798
|
+
minWidth: typeof window !== "undefined" ? Math.min(280, window.innerWidth - 32) : 280,
|
|
13796
13799
|
maxWidth: maxPanelW
|
|
13797
13800
|
});
|
|
13798
13801
|
useEffect17(() => {
|
|
13799
|
-
|
|
13802
|
+
const isMob = typeof window !== "undefined" && window.innerWidth < 640;
|
|
13803
|
+
const targetW = isMob ? typeof window !== "undefined" ? window.innerWidth - 32 : 360 : isReadMode ? 700 : 440;
|
|
13804
|
+
setWidth(targetW);
|
|
13800
13805
|
}, [isReadMode, setWidth]);
|
|
13801
13806
|
const prevNodeIdRef = useRef15(null);
|
|
13802
13807
|
const propsEndRef = useRef15(null);
|
|
@@ -17492,8 +17497,8 @@ function MultiNodeContextMenu({
|
|
|
17492
17497
|
const handleClickOutside = (e) => {
|
|
17493
17498
|
if (menuRef.current && !menuRef.current.contains(e.target)) onClose();
|
|
17494
17499
|
};
|
|
17495
|
-
document.addEventListener("
|
|
17496
|
-
return () => document.removeEventListener("
|
|
17500
|
+
document.addEventListener("pointerdown", handleClickOutside);
|
|
17501
|
+
return () => document.removeEventListener("pointerdown", handleClickOutside);
|
|
17497
17502
|
}, [data.visible, onClose]);
|
|
17498
17503
|
if (!data.visible || !data.nodeIds || data.nodeIds.size === 0) return null;
|
|
17499
17504
|
const swallow = (e) => e.stopPropagation();
|
|
@@ -17934,8 +17939,8 @@ function RelationshipContextMenu({
|
|
|
17934
17939
|
const handleClickOutside = (e) => {
|
|
17935
17940
|
if (menuRef.current && !menuRef.current.contains(e.target)) onClose();
|
|
17936
17941
|
};
|
|
17937
|
-
document.addEventListener("
|
|
17938
|
-
return () => document.removeEventListener("
|
|
17942
|
+
document.addEventListener("pointerdown", handleClickOutside);
|
|
17943
|
+
return () => document.removeEventListener("pointerdown", handleClickOutside);
|
|
17939
17944
|
}, [data.visible, onClose]);
|
|
17940
17945
|
if (!data.visible) return null;
|
|
17941
17946
|
const swallow = (e) => e.stopPropagation();
|
|
@@ -19528,63 +19533,201 @@ function MilestoneManager({
|
|
|
19528
19533
|
}
|
|
19529
19534
|
|
|
19530
19535
|
// src/components/UpgradeModal.jsx
|
|
19536
|
+
import React36, { useState as useState33 } from "react";
|
|
19537
|
+
|
|
19538
|
+
// src/components/icons/UltraMinimalIcon.jsx
|
|
19531
19539
|
import React35 from "react";
|
|
19532
|
-
|
|
19540
|
+
function UltraMinimalIcon({
|
|
19541
|
+
size = 13,
|
|
19542
|
+
className = "",
|
|
19543
|
+
strokeWidth = 1.5,
|
|
19544
|
+
...props
|
|
19545
|
+
}) {
|
|
19546
|
+
return /* @__PURE__ */ React35.createElement(
|
|
19547
|
+
"svg",
|
|
19548
|
+
{
|
|
19549
|
+
width: size,
|
|
19550
|
+
height: size,
|
|
19551
|
+
viewBox: "0 0 24 24",
|
|
19552
|
+
fill: "none",
|
|
19553
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
19554
|
+
className: `inline-block shrink-0 transition-transform duration-200 ${className}`,
|
|
19555
|
+
...props
|
|
19556
|
+
},
|
|
19557
|
+
/* @__PURE__ */ React35.createElement(
|
|
19558
|
+
"path",
|
|
19559
|
+
{
|
|
19560
|
+
d: "M6 3h12l4 6-10 12L2 9l4-6z",
|
|
19561
|
+
stroke: "currentColor",
|
|
19562
|
+
strokeWidth,
|
|
19563
|
+
strokeLinecap: "round",
|
|
19564
|
+
strokeLinejoin: "round"
|
|
19565
|
+
}
|
|
19566
|
+
),
|
|
19567
|
+
/* @__PURE__ */ React35.createElement(
|
|
19568
|
+
"path",
|
|
19569
|
+
{
|
|
19570
|
+
d: "M11 3v6",
|
|
19571
|
+
stroke: "currentColor",
|
|
19572
|
+
strokeWidth,
|
|
19573
|
+
strokeLinecap: "round",
|
|
19574
|
+
strokeLinejoin: "round"
|
|
19575
|
+
}
|
|
19576
|
+
),
|
|
19577
|
+
/* @__PURE__ */ React35.createElement(
|
|
19578
|
+
"path",
|
|
19579
|
+
{
|
|
19580
|
+
d: "M13 3v6",
|
|
19581
|
+
stroke: "currentColor",
|
|
19582
|
+
strokeWidth,
|
|
19583
|
+
strokeLinecap: "round",
|
|
19584
|
+
strokeLinejoin: "round"
|
|
19585
|
+
}
|
|
19586
|
+
),
|
|
19587
|
+
/* @__PURE__ */ React35.createElement(
|
|
19588
|
+
"path",
|
|
19589
|
+
{
|
|
19590
|
+
d: "M2 9h20",
|
|
19591
|
+
stroke: "currentColor",
|
|
19592
|
+
strokeWidth,
|
|
19593
|
+
strokeLinecap: "round",
|
|
19594
|
+
strokeLinejoin: "round"
|
|
19595
|
+
}
|
|
19596
|
+
),
|
|
19597
|
+
/* @__PURE__ */ React35.createElement(
|
|
19598
|
+
"path",
|
|
19599
|
+
{
|
|
19600
|
+
d: "M12 21L8 9",
|
|
19601
|
+
stroke: "currentColor",
|
|
19602
|
+
strokeWidth,
|
|
19603
|
+
strokeLinecap: "round",
|
|
19604
|
+
strokeLinejoin: "round"
|
|
19605
|
+
}
|
|
19606
|
+
),
|
|
19607
|
+
/* @__PURE__ */ React35.createElement(
|
|
19608
|
+
"path",
|
|
19609
|
+
{
|
|
19610
|
+
d: "M12 21l4-12",
|
|
19611
|
+
stroke: "currentColor",
|
|
19612
|
+
strokeWidth,
|
|
19613
|
+
strokeLinecap: "round",
|
|
19614
|
+
strokeLinejoin: "round"
|
|
19615
|
+
}
|
|
19616
|
+
)
|
|
19617
|
+
);
|
|
19618
|
+
}
|
|
19619
|
+
|
|
19620
|
+
// src/components/UpgradeModal.jsx
|
|
19533
19621
|
function UpgradeModal({
|
|
19534
19622
|
isOpen,
|
|
19535
19623
|
onClose,
|
|
19536
|
-
nodeCounter,
|
|
19624
|
+
nodeCounter = 0,
|
|
19537
19625
|
nodeLimit = 100,
|
|
19626
|
+
plan,
|
|
19538
19627
|
onUpgrade
|
|
19539
19628
|
}) {
|
|
19629
|
+
const [isSubmitting, setIsSubmitting] = useState33(false);
|
|
19540
19630
|
if (!isOpen) return null;
|
|
19541
|
-
|
|
19542
|
-
|
|
19543
|
-
|
|
19544
|
-
|
|
19545
|
-
|
|
19546
|
-
|
|
19547
|
-
|
|
19548
|
-
|
|
19549
|
-
|
|
19550
|
-
|
|
19551
|
-
|
|
19552
|
-
|
|
19631
|
+
const currentPlan = plan || (nodeLimit === -1 ? "premium" : "free");
|
|
19632
|
+
const handleUpgradeClick = async () => {
|
|
19633
|
+
if (isSubmitting) return;
|
|
19634
|
+
setIsSubmitting(true);
|
|
19635
|
+
try {
|
|
19636
|
+
if (onUpgrade) {
|
|
19637
|
+
await onUpgrade();
|
|
19638
|
+
} else {
|
|
19639
|
+
alert("Redirecting to checkout...");
|
|
19640
|
+
}
|
|
19641
|
+
} catch (error) {
|
|
19642
|
+
console.error("Error during upgrade:", error);
|
|
19643
|
+
} finally {
|
|
19644
|
+
setIsSubmitting(false);
|
|
19645
|
+
}
|
|
19646
|
+
};
|
|
19647
|
+
const limit = nodeLimit === -1 ? 100 : nodeLimit;
|
|
19648
|
+
const safeNodeCounter = Math.max(0, nodeCounter || 0);
|
|
19649
|
+
const usagePercentage = Math.min(
|
|
19650
|
+
100,
|
|
19651
|
+
Math.round(safeNodeCounter / limit * 100)
|
|
19652
|
+
);
|
|
19653
|
+
return /* @__PURE__ */ React36.createElement("div", { className: "fixed inset-0 bg-slate-950/40 backdrop-blur-md z-[10000] flex justify-center items-center p-4 animate-in fade-in duration-300 font-sans select-none" }, /* @__PURE__ */ React36.createElement("div", { className: "bg-[#0b1224]/80 border border-cyan-600/20 p-7 rounded-3xl shadow-[0_0_50px_-12px_rgba(6,182,212,0.2)] w-full max-w-[380px] relative text-center overflow-hidden animate-in zoom-in-95 duration-300" }, /* @__PURE__ */ React36.createElement("div", { className: "absolute -top-20 left-1/2 -translate-x-1/2 w-40 h-40 bg-cyan-600/10 rounded-full blur-[60px] pointer-events-none" }), /* @__PURE__ */ React36.createElement("div", { className: "flex justify-center mb-4 relative" }, /* @__PURE__ */ React36.createElement("div", { className: "relative w-14 h-14 flex items-center justify-center" }, /* @__PURE__ */ React36.createElement("div", { className: "absolute inset-0 bg-cyan-500 rounded-full blur-2xl opacity-20 animate-pulse" }), /* @__PURE__ */ React36.createElement("div", { className: "relative w-12 h-12 rounded-xl bg-slate-900 border border-cyan-400/30 shadow-lg flex items-center justify-center z-10 animate-float" }, /* @__PURE__ */ React36.createElement(
|
|
19654
|
+
UltraMinimalIcon,
|
|
19655
|
+
{
|
|
19656
|
+
size: 22,
|
|
19657
|
+
className: "text-cyan-400",
|
|
19658
|
+
strokeWidth: 2
|
|
19659
|
+
}
|
|
19660
|
+
)))), /* @__PURE__ */ React36.createElement("h2", { className: "text-xl font-bold text-white mb-1 tracking-tight font-sans" }, "Upgrade x.plore"), /* @__PURE__ */ React36.createElement("p", { className: "text-slate-400 text-[11px] mb-6 leading-relaxed px-4 font-medium italic" }, "Unlock unlimited nodes and community features."), /* @__PURE__ */ React36.createElement("div", { className: "grid grid-cols-2 gap-3 mb-3 text-left" }, /* @__PURE__ */ React36.createElement("div", { className: "bg-gradient-to-b from-[#0e172a]/90 to-[#070c18]/90 border border-cyan-500/20 hover:border-cyan-400/40 p-3.5 rounded-2xl flex flex-col justify-between shadow-md transition-all duration-300" }, /* @__PURE__ */ React36.createElement("div", null, /* @__PURE__ */ React36.createElement("span", { className: "text-xs font-sans font-normal text-cyan-400/80 tracking-normal block mb-1.5" }, "Node Usage"), /* @__PURE__ */ React36.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ React36.createElement("span", { className: "text-lg font-bold text-white font-sans tracking-tight" }, nodeCounter), /* @__PURE__ */ React36.createElement("span", { className: "text-xs font-sans font-medium text-slate-400" }, "/ ", currentPlan === "premium" ? "\u221E" : "100"))), currentPlan !== "premium" && /* @__PURE__ */ React36.createElement("div", { className: "mt-2.5" }, /* @__PURE__ */ React36.createElement("div", { className: "w-full h-1.5 bg-slate-900 border border-white/5 rounded-full overflow-hidden p-[1px]" }, /* @__PURE__ */ React36.createElement(
|
|
19553
19661
|
"div",
|
|
19554
19662
|
{
|
|
19555
|
-
className: "
|
|
19556
|
-
|
|
19663
|
+
className: `h-full rounded-full transition-all duration-500 ${usagePercentage >= 100 ? "bg-gradient-to-r from-rose-500 to-pink-500 shadow-[0_0_8px_#f43f5e]" : "bg-gradient-to-r from-cyan-500 to-sky-300 shadow-[0_0_8px_#22d3ee]"}`,
|
|
19664
|
+
style: { width: `${usagePercentage}%` }
|
|
19557
19665
|
}
|
|
19558
|
-
), /* @__PURE__ */
|
|
19666
|
+
)))), /* @__PURE__ */ React36.createElement("div", { className: "bg-gradient-to-b from-[#0e172a]/90 to-[#070c18]/90 border border-cyan-500/20 hover:border-cyan-400/40 p-3.5 rounded-2xl flex flex-col justify-between shadow-md transition-all duration-300" }, /* @__PURE__ */ React36.createElement("div", null, /* @__PURE__ */ React36.createElement("span", { className: "text-xs font-sans font-normal text-cyan-400/80 tracking-normal block mb-1.5" }, "Current Plan"), /* @__PURE__ */ React36.createElement("div", { className: "mt-1" }, /* @__PURE__ */ React36.createElement(
|
|
19667
|
+
"span",
|
|
19668
|
+
{
|
|
19669
|
+
className: `inline-flex items-center gap-1.5 px-2.5 py-1 rounded-lg border text-xs font-normal font-sans tracking-normal ${currentPlan === "premium" ? "bg-indigo-500/15 border-indigo-400/30 text-indigo-300" : "bg-cyan-500/10 border-cyan-400/30 text-cyan-300"}`
|
|
19670
|
+
},
|
|
19671
|
+
/* @__PURE__ */ React36.createElement(
|
|
19672
|
+
"span",
|
|
19673
|
+
{
|
|
19674
|
+
className: `w-1.5 h-1.5 rounded-full animate-pulse ${currentPlan === "premium" ? "bg-indigo-400 shadow-[0_0_6px_#818cf8]" : "bg-cyan-400 shadow-[0_0_6px_#22d3ee]"}`
|
|
19675
|
+
}
|
|
19676
|
+
),
|
|
19677
|
+
currentPlan === "premium" ? "Premium" : "Free"
|
|
19678
|
+
))))), /* @__PURE__ */ React36.createElement("div", { className: "bg-gradient-to-b from-[#0e172a]/70 to-[#070c18]/80 border border-cyan-500/15 p-3.5 rounded-2xl space-y-2.5 mb-5 text-left shadow-sm" }, /* @__PURE__ */ React36.createElement("div", { className: "flex items-center gap-2.5 text-slate-200 text-xs font-medium" }, /* @__PURE__ */ React36.createElement("span", { className: "w-1.5 h-1.5 rounded-full bg-cyan-400 shadow-[0_0_6px_#22d3ee] shrink-0" }), /* @__PURE__ */ React36.createElement("span", null, "Unlimited Nodes")), /* @__PURE__ */ React36.createElement("div", { className: "flex items-center gap-2.5 text-slate-200 text-xs font-medium" }, /* @__PURE__ */ React36.createElement("span", { className: "w-1.5 h-1.5 rounded-full bg-cyan-400 shadow-[0_0_6px_#22d3ee] shrink-0" }), /* @__PURE__ */ React36.createElement("span", null, "Community and collaboration features"))), /* @__PURE__ */ React36.createElement("div", { className: "space-y-2.5" }, currentPlan !== "premium" ? /* @__PURE__ */ React36.createElement(
|
|
19559
19679
|
"button",
|
|
19560
19680
|
{
|
|
19561
|
-
onClick:
|
|
19562
|
-
|
|
19681
|
+
onClick: handleUpgradeClick,
|
|
19682
|
+
disabled: isSubmitting,
|
|
19683
|
+
className: "group relative w-full py-3.5 rounded-xl bg-gradient-to-r from-cyan-400 to-cyan-500 hover:from-cyan-300 hover:to-cyan-400 text-slate-950 font-normal text-sm tracking-normal font-sans shadow-[0_0_15px_rgba(34,211,238,0.22)] hover:shadow-[0_0_22px_rgba(34,211,238,0.38)] hover:scale-[1.01] active:scale-[0.98] transition-all duration-300 overflow-hidden cursor-pointer border border-cyan-300/30 disabled:opacity-30 disabled:grayscale"
|
|
19563
19684
|
},
|
|
19564
|
-
/* @__PURE__ */
|
|
19565
|
-
|
|
19685
|
+
/* @__PURE__ */ React36.createElement("div", { className: "absolute inset-0 bg-gradient-to-r from-transparent via-white/40 to-transparent -translate-x-full group-hover:translate-x-full transition-transform duration-700 ease-in-out pointer-events-none" }),
|
|
19686
|
+
isSubmitting ? /* @__PURE__ */ React36.createElement("div", { className: "relative z-10 flex items-center justify-center gap-2" }, /* @__PURE__ */ React36.createElement("div", { className: "h-4 w-4 border-2 border-slate-950/30 border-t-slate-950 rounded-full animate-spin" })) : /* @__PURE__ */ React36.createElement("span", { className: "relative z-10 font-normal" }, "Upgrade Now")
|
|
19687
|
+
) : /* @__PURE__ */ React36.createElement("div", { className: "w-full py-3 rounded-xl bg-indigo-500/10 border border-indigo-500/30 text-indigo-300 font-normal text-sm text-center flex items-center justify-center gap-2 font-sans tracking-normal" }, /* @__PURE__ */ React36.createElement("span", null, "Your Account is Premium")), /* @__PURE__ */ React36.createElement(
|
|
19566
19688
|
"button",
|
|
19567
19689
|
{
|
|
19568
|
-
|
|
19569
|
-
|
|
19570
|
-
if (onUpgrade) {
|
|
19571
|
-
await onUpgrade();
|
|
19572
|
-
} else {
|
|
19573
|
-
alert("Redirecionando para upgrade... (Em breve)");
|
|
19574
|
-
}
|
|
19575
|
-
onClose();
|
|
19576
|
-
}
|
|
19690
|
+
onClick: onClose,
|
|
19691
|
+
className: "w-full py-2.5 rounded-xl bg-slate-950/50 hover:bg-slate-900 border border-slate-800 text-slate-400 hover:text-white text-xs font-semibold transition-all duration-300 active:scale-[0.98] cursor-pointer text-center"
|
|
19577
19692
|
},
|
|
19578
|
-
"
|
|
19579
|
-
|
|
19580
|
-
), /* @__PURE__ */ React35.createElement(
|
|
19693
|
+
currentPlan === "premium" ? "Close" : "Continue with Free Plan"
|
|
19694
|
+
)), /* @__PURE__ */ React36.createElement(
|
|
19581
19695
|
"button",
|
|
19582
19696
|
{
|
|
19583
19697
|
onClick: onClose,
|
|
19584
|
-
className: "
|
|
19698
|
+
className: "absolute top-6 right-6 text-slate-500 hover:text-cyan-400 transition-all duration-300 p-1 hover:rotate-90 cursor-pointer",
|
|
19699
|
+
"aria-label": "Close modal"
|
|
19585
19700
|
},
|
|
19586
|
-
|
|
19587
|
-
|
|
19701
|
+
/* @__PURE__ */ React36.createElement(
|
|
19702
|
+
"svg",
|
|
19703
|
+
{
|
|
19704
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
19705
|
+
width: "18",
|
|
19706
|
+
height: "18",
|
|
19707
|
+
viewBox: "0 0 24 24",
|
|
19708
|
+
fill: "none",
|
|
19709
|
+
stroke: "currentColor",
|
|
19710
|
+
strokeWidth: "2.5",
|
|
19711
|
+
strokeLinecap: "round",
|
|
19712
|
+
strokeLinejoin: "round"
|
|
19713
|
+
},
|
|
19714
|
+
/* @__PURE__ */ React36.createElement("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
19715
|
+
/* @__PURE__ */ React36.createElement("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
19716
|
+
)
|
|
19717
|
+
)), /* @__PURE__ */ React36.createElement("style", null, `
|
|
19718
|
+
@keyframes float {
|
|
19719
|
+
0%,
|
|
19720
|
+
100% {
|
|
19721
|
+
transform: translateY(0px);
|
|
19722
|
+
}
|
|
19723
|
+
50% {
|
|
19724
|
+
transform: translateY(-8px);
|
|
19725
|
+
}
|
|
19726
|
+
}
|
|
19727
|
+
.animate-float {
|
|
19728
|
+
animation: float 4s ease-in-out infinite;
|
|
19729
|
+
}
|
|
19730
|
+
`));
|
|
19588
19731
|
}
|
|
19589
19732
|
|
|
19590
19733
|
// src/XViewScene.jsx
|
|
@@ -19818,44 +19961,46 @@ function XViewScene({
|
|
|
19818
19961
|
const parentDataRef = useRef25(null);
|
|
19819
19962
|
const graphDataRef = parentDataRef;
|
|
19820
19963
|
const ancestryDataRef = useRef25(null);
|
|
19821
|
-
const [isLoading, setIsLoading] =
|
|
19822
|
-
const [isProcessing, setIsProcessing] =
|
|
19823
|
-
const [permissionStatus, setPermissionStatus] =
|
|
19824
|
-
const [userPermissionRole, setUserPermissionRole] =
|
|
19825
|
-
const [viewMembers, setViewMembers] =
|
|
19826
|
-
const [isInitialized, setIsInitialized] =
|
|
19827
|
-
const [sceneVersion, setSceneVersion] =
|
|
19828
|
-
const [contextMenu, setContextMenu] =
|
|
19964
|
+
const [isLoading, setIsLoading] = useState34(true);
|
|
19965
|
+
const [isProcessing, setIsProcessing] = useState34(false);
|
|
19966
|
+
const [permissionStatus, setPermissionStatus] = useState34("loading");
|
|
19967
|
+
const [userPermissionRole, setUserPermissionRole] = useState34(null);
|
|
19968
|
+
const [viewMembers, setViewMembers] = useState34([]);
|
|
19969
|
+
const [isInitialized, setIsInitialized] = useState34(false);
|
|
19970
|
+
const [sceneVersion, setSceneVersion] = useState34(0);
|
|
19971
|
+
const [contextMenu, setContextMenu] = useState34({
|
|
19829
19972
|
visible: false,
|
|
19830
19973
|
x: 0,
|
|
19831
19974
|
y: 0,
|
|
19832
19975
|
nodeData: null
|
|
19833
19976
|
});
|
|
19834
|
-
const [multiContextMenu, setMultiContextMenu] =
|
|
19977
|
+
const [multiContextMenu, setMultiContextMenu] = useState34({
|
|
19835
19978
|
visible: false,
|
|
19836
19979
|
x: 0,
|
|
19837
19980
|
y: 0,
|
|
19838
19981
|
nodeIds: null
|
|
19839
19982
|
});
|
|
19840
|
-
const [relationshipMenu, setRelationshipMenu] =
|
|
19983
|
+
const [relationshipMenu, setRelationshipMenu] = useState34({
|
|
19841
19984
|
visible: false,
|
|
19842
19985
|
x: 0,
|
|
19843
19986
|
y: 0,
|
|
19844
19987
|
linkObject: null
|
|
19845
19988
|
});
|
|
19846
|
-
const [creationMode, setCreationMode] =
|
|
19989
|
+
const [creationMode, setCreationMode] = useState34({
|
|
19847
19990
|
isActive: false,
|
|
19848
19991
|
sourceNodeData: null
|
|
19849
19992
|
});
|
|
19850
|
-
const [versionMode, setVersionMode] =
|
|
19993
|
+
const [versionMode, setVersionMode] = useState34({
|
|
19851
19994
|
isActive: false,
|
|
19852
19995
|
sourceNodeData: null
|
|
19853
19996
|
});
|
|
19854
|
-
const [questMode, setQuestMode] =
|
|
19855
|
-
const [processMode, setProcessMode] =
|
|
19856
|
-
const
|
|
19857
|
-
const
|
|
19858
|
-
const [
|
|
19997
|
+
const [questMode, setQuestMode] = useState34({ isActive: false });
|
|
19998
|
+
const [processMode, setProcessMode] = useState34({ isActive: false });
|
|
19999
|
+
const longPressTimeoutRef = useRef25(null);
|
|
20000
|
+
const isLongPressTriggeredRef = useRef25(false);
|
|
20001
|
+
const [hasFocusedInitial, setHasFocusedInitial] = useState34(false);
|
|
20002
|
+
const [hasOpenedInitialAncestry, setHasOpenedInitialAncestry] = useState34(false);
|
|
20003
|
+
const [questTreeMode, setQuestTreeMode] = useState34({
|
|
19859
20004
|
isActive: false,
|
|
19860
20005
|
questNodeId: null,
|
|
19861
20006
|
questTempData: null,
|
|
@@ -19865,7 +20010,7 @@ function XViewScene({
|
|
|
19865
20010
|
isAddingNodes: false,
|
|
19866
20011
|
isAddingAbstractionNodes: false
|
|
19867
20012
|
});
|
|
19868
|
-
const [processTreeMode, setProcessTreeMode] =
|
|
20013
|
+
const [processTreeMode, setProcessTreeMode] = useState34({
|
|
19869
20014
|
isActive: false,
|
|
19870
20015
|
processNodeId: null,
|
|
19871
20016
|
processTempData: null,
|
|
@@ -19875,7 +20020,7 @@ function XViewScene({
|
|
|
19875
20020
|
isAddingNodes: false,
|
|
19876
20021
|
isAddingAbstractionNodes: false
|
|
19877
20022
|
});
|
|
19878
|
-
const [ancestryMode, setAncestryMode] =
|
|
20023
|
+
const [ancestryMode, setAncestryMode] = useState34({
|
|
19879
20024
|
isActive: false,
|
|
19880
20025
|
tree: null,
|
|
19881
20026
|
selectedParentId: null,
|
|
@@ -19886,41 +20031,41 @@ function XViewScene({
|
|
|
19886
20031
|
ancestryDescriptionSections: [],
|
|
19887
20032
|
isAddingNodes: false
|
|
19888
20033
|
});
|
|
19889
|
-
const [readingMode, setReadingMode] =
|
|
20034
|
+
const [readingMode, setReadingMode] = useState34({
|
|
19890
20035
|
isActive: false,
|
|
19891
20036
|
ancestry: null,
|
|
19892
20037
|
branchStack: [],
|
|
19893
20038
|
autoAbstraction: false
|
|
19894
20039
|
});
|
|
19895
|
-
const [formPosition, setFormPosition] =
|
|
20040
|
+
const [formPosition, setFormPosition] = useState34({
|
|
19896
20041
|
left: 16,
|
|
19897
20042
|
top: 16,
|
|
19898
20043
|
opacity: 0
|
|
19899
20044
|
});
|
|
19900
|
-
const [detailsNode, setDetailsNode] =
|
|
19901
|
-
const [detailsLink, setDetailsLink] =
|
|
19902
|
-
const [ancestryLinkDetails, setAncestryLinkDetails] =
|
|
19903
|
-
const [imageViewer, setImageViewer] =
|
|
20045
|
+
const [detailsNode, setDetailsNode] = useState34(null);
|
|
20046
|
+
const [detailsLink, setDetailsLink] = useState34(null);
|
|
20047
|
+
const [ancestryLinkDetails, setAncestryLinkDetails] = useState34(null);
|
|
20048
|
+
const [imageViewer, setImageViewer] = useState34({
|
|
19904
20049
|
visible: false,
|
|
19905
20050
|
images: [],
|
|
19906
20051
|
startIndex: 0
|
|
19907
20052
|
});
|
|
19908
|
-
const [editingAncestryRel, setEditingAncestryRel] =
|
|
20053
|
+
const [editingAncestryRel, setEditingAncestryRel] = useState34({
|
|
19909
20054
|
visible: false,
|
|
19910
20055
|
data: null,
|
|
19911
20056
|
path: null
|
|
19912
20057
|
});
|
|
19913
|
-
const [isImportModalOpen, setIsImportModalOpen] =
|
|
19914
|
-
const [importSuccessMessage, setImportSuccessMessage] =
|
|
19915
|
-
const [invalidTargetError, setInvalidTargetError] =
|
|
19916
|
-
const [highlightedNodeId, setHighlightedNodeId] =
|
|
19917
|
-
const [isBoardsOpen, setIsBoardsOpen] =
|
|
19918
|
-
const [boardItems, setBoardItems] =
|
|
19919
|
-
const [isSidebarOpen, setIsSidebarOpen] =
|
|
19920
|
-
const [isMilestoneManagerOpen, setIsMilestoneManagerOpen] =
|
|
19921
|
-
const [nodeCounter, setNodeCounter] =
|
|
19922
|
-
const [isUpgradeModalOpen, setIsUpgradeModalOpen] =
|
|
19923
|
-
const [nodeLimit, setNodeLimit] =
|
|
20058
|
+
const [isImportModalOpen, setIsImportModalOpen] = useState34(false);
|
|
20059
|
+
const [importSuccessMessage, setImportSuccessMessage] = useState34("");
|
|
20060
|
+
const [invalidTargetError, setInvalidTargetError] = useState34(null);
|
|
20061
|
+
const [highlightedNodeId, setHighlightedNodeId] = useState34(null);
|
|
20062
|
+
const [isBoardsOpen, setIsBoardsOpen] = useState34(false);
|
|
20063
|
+
const [boardItems, setBoardItems] = useState34([]);
|
|
20064
|
+
const [isSidebarOpen, setIsSidebarOpen] = useState34(false);
|
|
20065
|
+
const [isMilestoneManagerOpen, setIsMilestoneManagerOpen] = useState34(false);
|
|
20066
|
+
const [nodeCounter, setNodeCounter] = useState34(0);
|
|
20067
|
+
const [isUpgradeModalOpen, setIsUpgradeModalOpen] = useState34(false);
|
|
20068
|
+
const [nodeLimit, setNodeLimit] = useState34(100);
|
|
19924
20069
|
const mountRef = useRef25(null);
|
|
19925
20070
|
const tooltipRef = useRef25(null);
|
|
19926
20071
|
const formRef = useRef25(null);
|
|
@@ -20765,12 +20910,20 @@ function XViewScene({
|
|
|
20765
20910
|
);
|
|
20766
20911
|
const handleActivateReshapeLens = useCallback8(
|
|
20767
20912
|
({ type, columns, centerNodeId }) => {
|
|
20768
|
-
const {
|
|
20913
|
+
const {
|
|
20914
|
+
nodeObjects,
|
|
20915
|
+
allLinks = [],
|
|
20916
|
+
ancestryLinks = [],
|
|
20917
|
+
tweenGroup,
|
|
20918
|
+
camera,
|
|
20919
|
+
controls
|
|
20920
|
+
} = stateRef.current;
|
|
20769
20921
|
if (!nodeObjects || !tweenGroup || !camera || !controls) return;
|
|
20770
20922
|
const activeNodeIds = Object.keys(nodeObjects);
|
|
20771
20923
|
if (activeNodeIds.length === 0) return;
|
|
20772
20924
|
let sumX = 0;
|
|
20773
20925
|
let sumY = 0;
|
|
20926
|
+
let sumZ = 0;
|
|
20774
20927
|
let nodeCount = 0;
|
|
20775
20928
|
activeNodeIds.forEach((id) => {
|
|
20776
20929
|
const mesh = nodeObjects[id];
|
|
@@ -20874,23 +21027,192 @@ function XViewScene({
|
|
|
20874
21027
|
sumY += targetY;
|
|
20875
21028
|
nodeCount++;
|
|
20876
21029
|
});
|
|
21030
|
+
} else if (type === "Network") {
|
|
21031
|
+
const N = activeNodeIds.length;
|
|
21032
|
+
const activeSet = new Set(activeNodeIds.map(String));
|
|
21033
|
+
const edges = [];
|
|
21034
|
+
const degreeMap = new Map(activeNodeIds.map((id) => [String(id), 0]));
|
|
21035
|
+
const seenPairs = /* @__PURE__ */ new Set();
|
|
21036
|
+
[...allLinks, ...ancestryLinks].forEach((line) => {
|
|
21037
|
+
var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2;
|
|
21038
|
+
const u = String(
|
|
21039
|
+
((_c2 = (_b2 = (_a2 = line.userData) == null ? void 0 : _a2.sourceNode) == null ? void 0 : _b2.userData) == null ? void 0 : _c2.id) ?? ((_d2 = line.userData) == null ? void 0 : _d2.source) ?? ""
|
|
21040
|
+
);
|
|
21041
|
+
const v = String(
|
|
21042
|
+
((_g2 = (_f2 = (_e2 = line.userData) == null ? void 0 : _e2.targetNode) == null ? void 0 : _f2.userData) == null ? void 0 : _g2.id) ?? ((_h2 = line.userData) == null ? void 0 : _h2.target) ?? ""
|
|
21043
|
+
);
|
|
21044
|
+
if (u && v && u !== v && activeSet.has(u) && activeSet.has(v)) {
|
|
21045
|
+
const pairKey = u < v ? `${u}_${v}` : `${v}_${u}`;
|
|
21046
|
+
if (!seenPairs.has(pairKey)) {
|
|
21047
|
+
seenPairs.add(pairKey);
|
|
21048
|
+
edges.push([u, v]);
|
|
21049
|
+
degreeMap.set(u, (degreeMap.get(u) || 0) + 1);
|
|
21050
|
+
degreeMap.set(v, (degreeMap.get(v) || 0) + 1);
|
|
21051
|
+
}
|
|
21052
|
+
}
|
|
21053
|
+
});
|
|
21054
|
+
const baseSpread = Math.max(45, Math.sqrt(N) * 19);
|
|
21055
|
+
const boundX = baseSpread * 1.75;
|
|
21056
|
+
const boundY = baseSpread * 1;
|
|
21057
|
+
const boundZ = Math.min(85, Math.max(25, baseSpread * 0.45));
|
|
21058
|
+
const sortedIds = [...activeNodeIds].sort(
|
|
21059
|
+
(a, b) => (degreeMap.get(String(b)) || 0) - (degreeMap.get(String(a)) || 0)
|
|
21060
|
+
);
|
|
21061
|
+
const posMap = /* @__PURE__ */ new Map();
|
|
21062
|
+
const velMap = /* @__PURE__ */ new Map();
|
|
21063
|
+
const goldenAngle = Math.PI * (3 - Math.sqrt(5));
|
|
21064
|
+
sortedIds.forEach((id, idx) => {
|
|
21065
|
+
const t = N > 1 ? idx / (N - 1) : 0.5;
|
|
21066
|
+
const r = Math.sqrt(0.12 + 0.88 * t);
|
|
21067
|
+
const theta = idx * goldenAngle * 7;
|
|
21068
|
+
const zLayer = Math.sin(idx * 2.39996) * boundZ * (0.4 + 0.6 * r);
|
|
21069
|
+
posMap.set(String(id), {
|
|
21070
|
+
x: Math.cos(theta) * r * boundX,
|
|
21071
|
+
y: Math.sin(theta) * r * boundY,
|
|
21072
|
+
z: zLayer
|
|
21073
|
+
});
|
|
21074
|
+
velMap.set(String(id), { x: 0, y: 0, z: 0 });
|
|
21075
|
+
});
|
|
21076
|
+
const iterations = 120;
|
|
21077
|
+
const minNodeDist = 24;
|
|
21078
|
+
const idealEdgeDist = 28;
|
|
21079
|
+
const repulsionRadius = 65;
|
|
21080
|
+
for (let iter = 0; iter < iterations; iter++) {
|
|
21081
|
+
const cooling = 1 - iter / iterations * 0.75;
|
|
21082
|
+
for (let i = 0; i < N; i++) {
|
|
21083
|
+
const idA = String(sortedIds[i]);
|
|
21084
|
+
const pA = posMap.get(idA);
|
|
21085
|
+
const vA = velMap.get(idA);
|
|
21086
|
+
for (let j = i + 1; j < N; j++) {
|
|
21087
|
+
const idB = String(sortedIds[j]);
|
|
21088
|
+
const pB = posMap.get(idB);
|
|
21089
|
+
const vB = velMap.get(idB);
|
|
21090
|
+
const dx = pA.x - pB.x;
|
|
21091
|
+
const dy = pA.y - pB.y;
|
|
21092
|
+
const dz = (pA.z - pB.z) * 0.6;
|
|
21093
|
+
const distSq = dx * dx + dy * dy + dz * dz + 0.1;
|
|
21094
|
+
const dist = Math.sqrt(distSq);
|
|
21095
|
+
if (dist < repulsionRadius) {
|
|
21096
|
+
const force = dist < minNodeDist ? (minNodeDist - dist) / dist * 1.8 : (repulsionRadius - dist) / repulsionRadius * 0.35 / dist;
|
|
21097
|
+
const fx = dx * force;
|
|
21098
|
+
const fy = dy * force;
|
|
21099
|
+
const fz = (pA.z - pB.z) * force * 0.5;
|
|
21100
|
+
vA.x += fx;
|
|
21101
|
+
vA.y += fy;
|
|
21102
|
+
vA.z += fz;
|
|
21103
|
+
vB.x -= fx;
|
|
21104
|
+
vB.y -= fy;
|
|
21105
|
+
vB.z -= fz;
|
|
21106
|
+
}
|
|
21107
|
+
}
|
|
21108
|
+
}
|
|
21109
|
+
for (let e = 0; e < edges.length; e++) {
|
|
21110
|
+
const [u, v] = edges[e];
|
|
21111
|
+
const pU = posMap.get(u);
|
|
21112
|
+
const pV = posMap.get(v);
|
|
21113
|
+
const vU = velMap.get(u);
|
|
21114
|
+
const vV = velMap.get(v);
|
|
21115
|
+
const dx = pV.x - pU.x;
|
|
21116
|
+
const dy = pV.y - pU.y;
|
|
21117
|
+
const dz = pV.z - pU.z;
|
|
21118
|
+
const dist = Math.sqrt(dx * dx + dy * dy + dz * dz) || 1;
|
|
21119
|
+
const delta = dist - idealEdgeDist;
|
|
21120
|
+
const springStrength = 0.085;
|
|
21121
|
+
const fx = dx / dist * delta * springStrength;
|
|
21122
|
+
const fy = dy / dist * delta * springStrength;
|
|
21123
|
+
const fz = dz / dist * delta * springStrength;
|
|
21124
|
+
vU.x += fx;
|
|
21125
|
+
vU.y += fy;
|
|
21126
|
+
vU.z += fz;
|
|
21127
|
+
vV.x -= fx;
|
|
21128
|
+
vV.y -= fy;
|
|
21129
|
+
vV.z -= fz;
|
|
21130
|
+
}
|
|
21131
|
+
for (let i = 0; i < N; i++) {
|
|
21132
|
+
const id = String(sortedIds[i]);
|
|
21133
|
+
const p = posMap.get(id);
|
|
21134
|
+
const v = velMap.get(id);
|
|
21135
|
+
const nx = p.x / boundX;
|
|
21136
|
+
const ny = p.y / boundY;
|
|
21137
|
+
const nz = p.z / boundZ;
|
|
21138
|
+
const radialNorm = Math.sqrt(nx * nx + ny * ny);
|
|
21139
|
+
if (radialNorm > 0.95) {
|
|
21140
|
+
const pull = (radialNorm - 0.95) * 2.2;
|
|
21141
|
+
v.x -= nx * pull * 8;
|
|
21142
|
+
v.y -= ny * pull * 8;
|
|
21143
|
+
} else if (radialNorm < 0.2 && N > 12 && (degreeMap.get(id) || 0) === 0) {
|
|
21144
|
+
v.x += (nx || 0.1) * 1.5;
|
|
21145
|
+
v.y += (ny || 0.1) * 1.5;
|
|
21146
|
+
}
|
|
21147
|
+
if (Math.abs(nz) > 0.95) {
|
|
21148
|
+
v.z -= nz * (Math.abs(nz) - 0.95) * 10;
|
|
21149
|
+
}
|
|
21150
|
+
const maxStep = 6 * cooling;
|
|
21151
|
+
const speed = Math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z) || 1;
|
|
21152
|
+
const scale = speed > maxStep ? maxStep / speed : cooling;
|
|
21153
|
+
p.x += v.x * scale;
|
|
21154
|
+
p.y += v.y * scale;
|
|
21155
|
+
p.z += v.z * scale;
|
|
21156
|
+
v.x *= 0.4;
|
|
21157
|
+
v.y *= 0.4;
|
|
21158
|
+
v.z *= 0.4;
|
|
21159
|
+
}
|
|
21160
|
+
}
|
|
21161
|
+
activeNodeIds.forEach((id) => {
|
|
21162
|
+
const mesh = nodeObjects[id];
|
|
21163
|
+
const target = posMap.get(String(id)) || { x: 0, y: 0, z: 0 };
|
|
21164
|
+
const posTween = new Tween2(mesh.position).to({ x: target.x, y: target.y, z: target.z }, 1500).easing(Easing2.Cubic.InOut);
|
|
21165
|
+
tweenGroup.add(posTween);
|
|
21166
|
+
posTween.start();
|
|
21167
|
+
if (mesh.userData.labelObject) {
|
|
21168
|
+
const labelTarget = new THREE3.Vector3(
|
|
21169
|
+
target.x,
|
|
21170
|
+
target.y,
|
|
21171
|
+
target.z
|
|
21172
|
+
).add(mesh.userData.labelOffset || new THREE3.Vector3(0, 3.8, 0));
|
|
21173
|
+
const lblTween = new Tween2(mesh.userData.labelObject.position).to(labelTarget, 1500).easing(Easing2.Cubic.InOut);
|
|
21174
|
+
tweenGroup.add(lblTween);
|
|
21175
|
+
lblTween.start();
|
|
21176
|
+
}
|
|
21177
|
+
sumX += target.x;
|
|
21178
|
+
sumY += target.y;
|
|
21179
|
+
sumZ += target.z;
|
|
21180
|
+
nodeCount++;
|
|
21181
|
+
});
|
|
20877
21182
|
}
|
|
20878
21183
|
if (nodeCount > 0) {
|
|
20879
21184
|
const centerX = sumX / nodeCount;
|
|
20880
21185
|
const centerY = sumY / nodeCount;
|
|
20881
|
-
const
|
|
21186
|
+
const centerZ = type === "Network" ? sumZ / nodeCount : 0;
|
|
21187
|
+
const targetFocus = new THREE3.Vector3(centerX, centerY, centerZ);
|
|
20882
21188
|
const targetTween = new Tween2(controls.target).to({ x: targetFocus.x, y: targetFocus.y, z: targetFocus.z }, 1500).easing(Easing2.Cubic.InOut);
|
|
20883
21189
|
tweenGroup.add(targetTween);
|
|
20884
21190
|
targetTween.start();
|
|
20885
21191
|
let zoomZ = 140;
|
|
21192
|
+
let camOffsetY = 0;
|
|
20886
21193
|
if (type === "Column") {
|
|
20887
21194
|
const numRows = Math.ceil(nodeCount / (columns || 4));
|
|
20888
21195
|
zoomZ = Math.max(140, numRows * 50);
|
|
20889
21196
|
} else if (type === "Circle" || type === "Star") {
|
|
20890
21197
|
const radius = Math.max(80, nodeCount * 8);
|
|
20891
21198
|
zoomZ = radius * 2.5;
|
|
21199
|
+
} else if (type === "Network") {
|
|
21200
|
+
const baseSpread = Math.max(45, Math.sqrt(nodeCount) * 19);
|
|
21201
|
+
const immersionFactor = Math.max(
|
|
21202
|
+
0.52,
|
|
21203
|
+
1.15 - Math.min(nodeCount, 120) * 52e-4
|
|
21204
|
+
);
|
|
21205
|
+
zoomZ = targetFocus.z + Math.max(55, baseSpread * immersionFactor);
|
|
21206
|
+
camOffsetY = -baseSpread * 0.08;
|
|
20892
21207
|
}
|
|
20893
|
-
const camTween = new Tween2(camera.position).to(
|
|
21208
|
+
const camTween = new Tween2(camera.position).to(
|
|
21209
|
+
{
|
|
21210
|
+
x: targetFocus.x,
|
|
21211
|
+
y: targetFocus.y + camOffsetY,
|
|
21212
|
+
z: zoomZ
|
|
21213
|
+
},
|
|
21214
|
+
1500
|
|
21215
|
+
).easing(Easing2.Cubic.InOut);
|
|
20894
21216
|
tweenGroup.add(camTween);
|
|
20895
21217
|
camTween.start();
|
|
20896
21218
|
}
|
|
@@ -21148,11 +21470,17 @@ function XViewScene({
|
|
|
21148
21470
|
renderer.outputColorSpace = THREE3.SRGBColorSpace;
|
|
21149
21471
|
renderer.toneMapping = THREE3.ACESFilmicToneMapping;
|
|
21150
21472
|
renderer.toneMappingExposure = 1.2;
|
|
21473
|
+
currentMount.style.touchAction = "none";
|
|
21474
|
+
renderer.domElement.style.touchAction = "none";
|
|
21151
21475
|
currentMount.appendChild(renderer.domElement);
|
|
21152
21476
|
stateRef.current.renderer = renderer;
|
|
21153
21477
|
const controls = new OrbitControls(camera, renderer.domElement);
|
|
21154
21478
|
controls.enableDamping = true;
|
|
21155
21479
|
controls.dampingFactor = 0.05;
|
|
21480
|
+
controls.touches = {
|
|
21481
|
+
ONE: THREE3.TOUCH.ROTATE,
|
|
21482
|
+
TWO: THREE3.TOUCH.DOLLY_PAN
|
|
21483
|
+
};
|
|
21156
21484
|
stateRef.current.controls = controls;
|
|
21157
21485
|
scene.add(new THREE3.AmbientLight(16777215, 0.1));
|
|
21158
21486
|
const directionalLight = new THREE3.DirectionalLight(16777215, 0.2);
|
|
@@ -21377,21 +21705,58 @@ function XViewScene({
|
|
|
21377
21705
|
stateRef.current.dragCandidate = null;
|
|
21378
21706
|
return;
|
|
21379
21707
|
}
|
|
21380
|
-
if (event.button !== 0) return;
|
|
21708
|
+
if (event.button !== 0 && event.pointerType !== "touch") return;
|
|
21381
21709
|
if (picked && !stateRef.current.ancestry.isActive) {
|
|
21382
21710
|
stateRef.current.controls.enabled = false;
|
|
21383
21711
|
}
|
|
21384
21712
|
stateRef.current.pointerDown = {
|
|
21385
21713
|
isDown: true,
|
|
21386
21714
|
x: event.clientX,
|
|
21387
|
-
y: event.clientY
|
|
21715
|
+
y: event.clientY,
|
|
21716
|
+
pointerType: event.pointerType
|
|
21388
21717
|
};
|
|
21389
21718
|
stateRef.current.dragCandidate = picked;
|
|
21719
|
+
if (event.pointerType === "touch" || event.pointerType === "pen") {
|
|
21720
|
+
if (longPressTimeoutRef.current) {
|
|
21721
|
+
clearTimeout(longPressTimeoutRef.current);
|
|
21722
|
+
}
|
|
21723
|
+
isLongPressTriggeredRef.current = false;
|
|
21724
|
+
if (picked) {
|
|
21725
|
+
const touchX = event.clientX;
|
|
21726
|
+
const touchY = event.clientY;
|
|
21727
|
+
longPressTimeoutRef.current = setTimeout(() => {
|
|
21728
|
+
isLongPressTriggeredRef.current = true;
|
|
21729
|
+
if (typeof navigator !== "undefined" && navigator.vibrate) {
|
|
21730
|
+
navigator.vibrate(40);
|
|
21731
|
+
}
|
|
21732
|
+
setContextMenu({
|
|
21733
|
+
visible: true,
|
|
21734
|
+
x: touchX,
|
|
21735
|
+
y: touchY,
|
|
21736
|
+
nodeData: picked.userData
|
|
21737
|
+
});
|
|
21738
|
+
setMultiContextMenu((prev) => ({ ...prev, visible: false }));
|
|
21739
|
+
setRelationshipMenu((prev) => ({ ...prev, visible: false }));
|
|
21740
|
+
setDetailsNode(null);
|
|
21741
|
+
}, 450);
|
|
21742
|
+
}
|
|
21743
|
+
}
|
|
21390
21744
|
}
|
|
21391
21745
|
function onPointerMove(event) {
|
|
21392
21746
|
if (stateRef.current.camera) stateRef.current.camera.layers.enableAll();
|
|
21393
21747
|
if (isFromUiOverlay(event)) return;
|
|
21394
21748
|
setMouseFromEvent(event);
|
|
21749
|
+
if (stateRef.current.pointerDown.isDown) {
|
|
21750
|
+
const dx = event.clientX - stateRef.current.pointerDown.x;
|
|
21751
|
+
const dy = event.clientY - stateRef.current.pointerDown.y;
|
|
21752
|
+
const dist = Math.hypot(dx, dy);
|
|
21753
|
+
if (dist > (x_view_config.DRAG_THRESHOLD_PX || 5)) {
|
|
21754
|
+
if (longPressTimeoutRef.current) {
|
|
21755
|
+
clearTimeout(longPressTimeoutRef.current);
|
|
21756
|
+
longPressTimeoutRef.current = null;
|
|
21757
|
+
}
|
|
21758
|
+
}
|
|
21759
|
+
}
|
|
21395
21760
|
if (stateRef.current.isDragging && stateRef.current.draggedNode) {
|
|
21396
21761
|
const raycaster2 = new THREE3.Raycaster();
|
|
21397
21762
|
raycaster2.setFromCamera(mouse, camera);
|
|
@@ -21434,7 +21799,7 @@ function XViewScene({
|
|
|
21434
21799
|
return;
|
|
21435
21800
|
}
|
|
21436
21801
|
if (stateRef.current.creation.isActive) return;
|
|
21437
|
-
if (stateRef.current.pointerDown.isDown && stateRef.current.dragCandidate) {
|
|
21802
|
+
if (stateRef.current.pointerDown.isDown && stateRef.current.dragCandidate && !isLongPressTriggeredRef.current) {
|
|
21438
21803
|
const dx = event.clientX - stateRef.current.pointerDown.x;
|
|
21439
21804
|
const dy = event.clientY - stateRef.current.pointerDown.y;
|
|
21440
21805
|
if (Math.hypot(dx, dy) > x_view_config.DRAG_THRESHOLD_PX) {
|
|
@@ -21466,6 +21831,17 @@ function XViewScene({
|
|
|
21466
21831
|
async function onPointerUp(event) {
|
|
21467
21832
|
var _a2, _b2, _c2;
|
|
21468
21833
|
if (stateRef.current.camera) stateRef.current.camera.layers.enableAll();
|
|
21834
|
+
if (longPressTimeoutRef.current) {
|
|
21835
|
+
clearTimeout(longPressTimeoutRef.current);
|
|
21836
|
+
longPressTimeoutRef.current = null;
|
|
21837
|
+
}
|
|
21838
|
+
if (isLongPressTriggeredRef.current) {
|
|
21839
|
+
isLongPressTriggeredRef.current = false;
|
|
21840
|
+
stateRef.current.pointerDown.isDown = false;
|
|
21841
|
+
stateRef.current.dragCandidate = null;
|
|
21842
|
+
stateRef.current.controls.enabled = true;
|
|
21843
|
+
return;
|
|
21844
|
+
}
|
|
21469
21845
|
if (isFromUiOverlay(event)) return;
|
|
21470
21846
|
const {
|
|
21471
21847
|
connection,
|
|
@@ -21700,7 +22076,7 @@ function XViewScene({
|
|
|
21700
22076
|
stateRef.current.dragCandidate = null;
|
|
21701
22077
|
return;
|
|
21702
22078
|
}
|
|
21703
|
-
if (event.button === 0 && !stateRef.current.creation.isActive && stateRef.current.pointerDown.isDown) {
|
|
22079
|
+
if ((event.button === 0 || event.pointerType === "touch") && !stateRef.current.creation.isActive && stateRef.current.pointerDown.isDown) {
|
|
21704
22080
|
setMouseFromEvent(event);
|
|
21705
22081
|
const clickedNode = stateRef.current.dragCandidate || tryPickNode();
|
|
21706
22082
|
stateRef.current.dragCandidate = null;
|
|
@@ -21709,6 +22085,9 @@ function XViewScene({
|
|
|
21709
22085
|
stateRef.current.selectedNodes.clear();
|
|
21710
22086
|
}
|
|
21711
22087
|
if (clickedNode) {
|
|
22088
|
+
setContextMenu((prev) => prev.visible ? { ...prev, visible: false } : prev);
|
|
22089
|
+
setMultiContextMenu((prev) => prev.visible ? { ...prev, visible: false } : prev);
|
|
22090
|
+
setRelationshipMenu((prev) => prev.visible ? { ...prev, visible: false } : prev);
|
|
21712
22091
|
setDetailsNode({ ...clickedNode.userData });
|
|
21713
22092
|
setDetailsLink(null);
|
|
21714
22093
|
return;
|
|
@@ -21744,6 +22123,14 @@ function XViewScene({
|
|
|
21744
22123
|
if (stateRef.current.camera) stateRef.current.camera.layers.enableAll();
|
|
21745
22124
|
if (isFromUiOverlay(event)) return;
|
|
21746
22125
|
event.preventDefault();
|
|
22126
|
+
if (longPressTimeoutRef.current) {
|
|
22127
|
+
clearTimeout(longPressTimeoutRef.current);
|
|
22128
|
+
longPressTimeoutRef.current = null;
|
|
22129
|
+
}
|
|
22130
|
+
isLongPressTriggeredRef.current = true;
|
|
22131
|
+
stateRef.current.pointerDown.isDown = false;
|
|
22132
|
+
stateRef.current.dragCandidate = null;
|
|
22133
|
+
setDetailsNode(null);
|
|
21747
22134
|
if (stateRef.current.creation.isActive || stateRef.current.connection.isActive || stateRef.current.relink.isActive)
|
|
21748
22135
|
return;
|
|
21749
22136
|
setMouseFromEvent(event);
|
|
@@ -25115,7 +25502,7 @@ function XViewScene({
|
|
|
25115
25502
|
// <-- handleCancelQuest adicionado aqui
|
|
25116
25503
|
]);
|
|
25117
25504
|
if (isLoading || status === "loading" || permissionStatus === "loading") {
|
|
25118
|
-
return /* @__PURE__ */
|
|
25505
|
+
return /* @__PURE__ */ React37.createElement(LoadingScreen, null);
|
|
25119
25506
|
}
|
|
25120
25507
|
const overlayHiddenStyle = questTreeMode.isActive || processTreeMode.isActive ? {
|
|
25121
25508
|
opacity: 0,
|
|
@@ -25124,7 +25511,7 @@ function XViewScene({
|
|
|
25124
25511
|
transition: "all 300ms ease-in-out"
|
|
25125
25512
|
} : {};
|
|
25126
25513
|
if (permissionStatus === "corrupted") {
|
|
25127
|
-
return /* @__PURE__ */
|
|
25514
|
+
return /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col items-center justify-center min-h-screen w-full bg-slate-950 text-white" }, /* @__PURE__ */ React37.createElement("div", { className: "bg-slate-900/50 p-8 rounded-2xl border border-slate-800 shadow-2xl text-center max-w-md animate-fade-in" }, /* @__PURE__ */ React37.createElement("div", { className: "mb-4 text-amber-500" }, /* @__PURE__ */ React37.createElement(
|
|
25128
25515
|
"svg",
|
|
25129
25516
|
{
|
|
25130
25517
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -25134,7 +25521,7 @@ function XViewScene({
|
|
|
25134
25521
|
stroke: "currentColor",
|
|
25135
25522
|
className: "w-16 h-16 mx-auto"
|
|
25136
25523
|
},
|
|
25137
|
-
/* @__PURE__ */
|
|
25524
|
+
/* @__PURE__ */ React37.createElement(
|
|
25138
25525
|
"path",
|
|
25139
25526
|
{
|
|
25140
25527
|
strokeLinecap: "round",
|
|
@@ -25142,13 +25529,13 @@ function XViewScene({
|
|
|
25142
25529
|
d: "M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"
|
|
25143
25530
|
}
|
|
25144
25531
|
)
|
|
25145
|
-
)), /* @__PURE__ */
|
|
25532
|
+
)), /* @__PURE__ */ React37.createElement("h2", { className: "text-2xl font-bold mb-2" }, "Link Inv\xE1lido"), /* @__PURE__ */ React37.createElement("p", { className: "text-slate-400 mb-6" }, "O link de acesso a este cen\xE1rio est\xE1 corrompido, incompleto ou foi alterado de forma incorreta. Por favor, verifique a URL ou retorne ao dashboard."), /* @__PURE__ */ React37.createElement(
|
|
25146
25533
|
"button",
|
|
25147
25534
|
{
|
|
25148
25535
|
onClick: handleNavigateBack,
|
|
25149
25536
|
className: "flex items-center justify-center gap-2 w-full py-3 px-4 bg-blue-600 hover:bg-blue-700 text-white rounded-lg transition-colors font-medium cursor-pointer"
|
|
25150
25537
|
},
|
|
25151
|
-
/* @__PURE__ */
|
|
25538
|
+
/* @__PURE__ */ React37.createElement(
|
|
25152
25539
|
"svg",
|
|
25153
25540
|
{
|
|
25154
25541
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -25158,7 +25545,7 @@ function XViewScene({
|
|
|
25158
25545
|
stroke: "currentColor",
|
|
25159
25546
|
className: "w-5 h-5"
|
|
25160
25547
|
},
|
|
25161
|
-
/* @__PURE__ */
|
|
25548
|
+
/* @__PURE__ */ React37.createElement(
|
|
25162
25549
|
"path",
|
|
25163
25550
|
{
|
|
25164
25551
|
strokeLinecap: "round",
|
|
@@ -25171,7 +25558,7 @@ function XViewScene({
|
|
|
25171
25558
|
)));
|
|
25172
25559
|
}
|
|
25173
25560
|
if (permissionStatus === "denied") {
|
|
25174
|
-
return /* @__PURE__ */
|
|
25561
|
+
return /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col items-center justify-center min-h-screen w-full bg-slate-950 text-white" }, /* @__PURE__ */ React37.createElement("div", { className: "bg-slate-900/50 p-8 rounded-2xl border border-slate-800 shadow-2xl text-center max-w-md" }, /* @__PURE__ */ React37.createElement("div", { className: "mb-4 text-red-500" }, /* @__PURE__ */ React37.createElement(
|
|
25175
25562
|
"svg",
|
|
25176
25563
|
{
|
|
25177
25564
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -25181,7 +25568,7 @@ function XViewScene({
|
|
|
25181
25568
|
stroke: "currentColor",
|
|
25182
25569
|
className: "w-16 h-16 mx-auto"
|
|
25183
25570
|
},
|
|
25184
|
-
/* @__PURE__ */
|
|
25571
|
+
/* @__PURE__ */ React37.createElement(
|
|
25185
25572
|
"path",
|
|
25186
25573
|
{
|
|
25187
25574
|
strokeLinecap: "round",
|
|
@@ -25189,13 +25576,13 @@ function XViewScene({
|
|
|
25189
25576
|
d: "M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"
|
|
25190
25577
|
}
|
|
25191
25578
|
)
|
|
25192
|
-
)), /* @__PURE__ */
|
|
25579
|
+
)), /* @__PURE__ */ React37.createElement("h2", { className: "text-2xl font-bold mb-2" }, "Acesso Negado"), /* @__PURE__ */ React37.createElement("p", { className: "text-slate-400 mb-6" }, "Voc\xEA n\xE3o tem permiss\xE3o para acessar este conte\xFAdo. Solicite acesso ao propriet\xE1rio ou verifique se est\xE1 na conta correta."), /* @__PURE__ */ React37.createElement(
|
|
25193
25580
|
"button",
|
|
25194
25581
|
{
|
|
25195
25582
|
onClick: handleNavigateBack,
|
|
25196
25583
|
className: "flex items-center justify-center gap-2 w-full py-3 px-4 bg-blue-600 hover:bg-blue-700 text-white rounded-lg transition-colors font-medium"
|
|
25197
25584
|
},
|
|
25198
|
-
/* @__PURE__ */
|
|
25585
|
+
/* @__PURE__ */ React37.createElement(
|
|
25199
25586
|
"svg",
|
|
25200
25587
|
{
|
|
25201
25588
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -25205,7 +25592,7 @@ function XViewScene({
|
|
|
25205
25592
|
stroke: "currentColor",
|
|
25206
25593
|
className: "w-5 h-5"
|
|
25207
25594
|
},
|
|
25208
|
-
/* @__PURE__ */
|
|
25595
|
+
/* @__PURE__ */ React37.createElement(
|
|
25209
25596
|
"path",
|
|
25210
25597
|
{
|
|
25211
25598
|
strokeLinecap: "round",
|
|
@@ -25217,7 +25604,7 @@ function XViewScene({
|
|
|
25217
25604
|
"Voltar para o X.View"
|
|
25218
25605
|
)));
|
|
25219
25606
|
}
|
|
25220
|
-
return /* @__PURE__ */
|
|
25607
|
+
return /* @__PURE__ */ React37.createElement(
|
|
25221
25608
|
"div",
|
|
25222
25609
|
{
|
|
25223
25610
|
ref: mountRef,
|
|
@@ -25229,7 +25616,7 @@ function XViewScene({
|
|
|
25229
25616
|
cursor: isProcessing ? "progress" : stateRef.current.connection.isActive || stateRef.current.relink.isActive || ancestryMode.isActive ? "crosshair" : creationMode.isActive ? "default" : "grab"
|
|
25230
25617
|
}
|
|
25231
25618
|
},
|
|
25232
|
-
userPermissionRole !== "link_viewer" && /* @__PURE__ */
|
|
25619
|
+
userPermissionRole !== "link_viewer" && /* @__PURE__ */ React37.createElement(
|
|
25233
25620
|
XViewSidebar,
|
|
25234
25621
|
{
|
|
25235
25622
|
dbNodes: searchableDbNodes,
|
|
@@ -25258,7 +25645,7 @@ function XViewScene({
|
|
|
25258
25645
|
viewMembers
|
|
25259
25646
|
}
|
|
25260
25647
|
),
|
|
25261
|
-
creationMode.isActive && /* @__PURE__ */
|
|
25648
|
+
creationMode.isActive && /* @__PURE__ */ React37.createElement(
|
|
25262
25649
|
InSceneCreationForm,
|
|
25263
25650
|
{
|
|
25264
25651
|
onSave: (data) => userActionHandlers.handleSaveNode(actionHandlerContext, data),
|
|
@@ -25293,7 +25680,7 @@ function XViewScene({
|
|
|
25293
25680
|
view_google_folder_id: (_h = sceneDataRef.current) == null ? void 0 : _h.view_google_folder_id
|
|
25294
25681
|
}
|
|
25295
25682
|
),
|
|
25296
|
-
versionMode.isActive && /* @__PURE__ */
|
|
25683
|
+
versionMode.isActive && /* @__PURE__ */ React37.createElement(
|
|
25297
25684
|
InSceneVersionForm,
|
|
25298
25685
|
{
|
|
25299
25686
|
onSave: (data) => userActionHandlers.handleSaveVersionNode(actionHandlerContext, data),
|
|
@@ -25320,7 +25707,7 @@ function XViewScene({
|
|
|
25320
25707
|
availableAncestries: allAvailableAncestries
|
|
25321
25708
|
}
|
|
25322
25709
|
),
|
|
25323
|
-
questTreeMode.isActive && /* @__PURE__ */
|
|
25710
|
+
questTreeMode.isActive && /* @__PURE__ */ React37.createElement(
|
|
25324
25711
|
CreateQuestTreePanel,
|
|
25325
25712
|
{
|
|
25326
25713
|
questTreeMode,
|
|
@@ -25329,7 +25716,7 @@ function XViewScene({
|
|
|
25329
25716
|
onClose: handleCloseQuestTree
|
|
25330
25717
|
}
|
|
25331
25718
|
),
|
|
25332
|
-
processTreeMode.isActive && /* @__PURE__ */
|
|
25719
|
+
processTreeMode.isActive && /* @__PURE__ */ React37.createElement(
|
|
25333
25720
|
CreateProcessTreePanel,
|
|
25334
25721
|
{
|
|
25335
25722
|
processTreeMode,
|
|
@@ -25338,7 +25725,7 @@ function XViewScene({
|
|
|
25338
25725
|
onClose: handleCloseProcessTree
|
|
25339
25726
|
}
|
|
25340
25727
|
),
|
|
25341
|
-
questMode.isActive && /* @__PURE__ */
|
|
25728
|
+
questMode.isActive && /* @__PURE__ */ React37.createElement(
|
|
25342
25729
|
InSceneQuestForm,
|
|
25343
25730
|
{
|
|
25344
25731
|
onSave: (data) => handleSaveQuestNode(actionHandlerContext, data),
|
|
@@ -25369,7 +25756,7 @@ function XViewScene({
|
|
|
25369
25756
|
view_google_folder_id: (_m = sceneDataRef.current) == null ? void 0 : _m.view_google_folder_id
|
|
25370
25757
|
}
|
|
25371
25758
|
),
|
|
25372
|
-
processMode.isActive && /* @__PURE__ */
|
|
25759
|
+
processMode.isActive && /* @__PURE__ */ React37.createElement(
|
|
25373
25760
|
InSceneProcessForm,
|
|
25374
25761
|
{
|
|
25375
25762
|
onSave: (data) => handleSaveProcessNode(actionHandlerContext, data),
|
|
@@ -25396,7 +25783,7 @@ function XViewScene({
|
|
|
25396
25783
|
view_google_folder_id: (_n = sceneDataRef.current) == null ? void 0 : _n.view_google_folder_id
|
|
25397
25784
|
}
|
|
25398
25785
|
),
|
|
25399
|
-
readingMode.isActive && readingMode.ancestry && /* @__PURE__ */
|
|
25786
|
+
readingMode.isActive && readingMode.ancestry && /* @__PURE__ */ React37.createElement(
|
|
25400
25787
|
"div",
|
|
25401
25788
|
{
|
|
25402
25789
|
className: `ui-overlay absolute group rounded-2xl border border-white/10 bg-slate-950/70 backdrop-blur-xl shadow-[0_20px_80px_rgba(0,0,0,0.6)] ring-1 ring-white/10 text-white overflow-hidden flex flex-col ${isReadModeResizing ? "transition-none" : "transition-all duration-300 ease-out"}`,
|
|
@@ -25409,7 +25796,7 @@ function XViewScene({
|
|
|
25409
25796
|
maxWidth: "92vw"
|
|
25410
25797
|
}
|
|
25411
25798
|
},
|
|
25412
|
-
/* @__PURE__ */
|
|
25799
|
+
/* @__PURE__ */ React37.createElement(
|
|
25413
25800
|
"div",
|
|
25414
25801
|
{
|
|
25415
25802
|
onPointerDown: (e) => {
|
|
@@ -25420,7 +25807,7 @@ function XViewScene({
|
|
|
25420
25807
|
title: "Arraste para redimensionar"
|
|
25421
25808
|
}
|
|
25422
25809
|
),
|
|
25423
|
-
/* @__PURE__ */
|
|
25810
|
+
/* @__PURE__ */ React37.createElement(
|
|
25424
25811
|
DescriptionReadModePanel,
|
|
25425
25812
|
{
|
|
25426
25813
|
key: readingMode.branchStack.length > 0 ? readingMode.branchStack[readingMode.branchStack.length - 1].branchId : readingMode.ancestry.ancestry_id,
|
|
@@ -25455,7 +25842,7 @@ function XViewScene({
|
|
|
25455
25842
|
}
|
|
25456
25843
|
)
|
|
25457
25844
|
),
|
|
25458
|
-
ancestryMode.isActive && ancestryMode.tree && /* @__PURE__ */
|
|
25845
|
+
ancestryMode.isActive && ancestryMode.tree && /* @__PURE__ */ React37.createElement(
|
|
25459
25846
|
CreateAncestryPanel,
|
|
25460
25847
|
{
|
|
25461
25848
|
ancestryMode,
|
|
@@ -25491,7 +25878,7 @@ function XViewScene({
|
|
|
25491
25878
|
onRenderAbstractionTree: (data, targetId) => handleRenderAbstractionTree(data, targetId)
|
|
25492
25879
|
}
|
|
25493
25880
|
),
|
|
25494
|
-
editingAncestryRel.visible && /* @__PURE__ */
|
|
25881
|
+
editingAncestryRel.visible && /* @__PURE__ */ React37.createElement(
|
|
25495
25882
|
AncestryRelationshipPanel,
|
|
25496
25883
|
{
|
|
25497
25884
|
data: editingAncestryRel.data,
|
|
@@ -25505,8 +25892,8 @@ function XViewScene({
|
|
|
25505
25892
|
onUploadFile: upload_file_action
|
|
25506
25893
|
}
|
|
25507
25894
|
),
|
|
25508
|
-
isProcessing && /* @__PURE__ */
|
|
25509
|
-
detailsNode && detailsNode.is_quest && /* @__PURE__ */
|
|
25895
|
+
isProcessing && /* @__PURE__ */ React37.createElement("div", { className: "fixed bottom-8 right-8 z-[2000] flex items-center gap-3 px-4 py-2 bg-slate-900/80 backdrop-blur-md border border-white/10 rounded-full shadow-2xl animate-pulse" }, /* @__PURE__ */ React37.createElement("div", { className: "w-4 h-4 border-2 border-indigo-500 border-t-transparent rounded-full animate-spin" }), /* @__PURE__ */ React37.createElement("span", { className: "text-xs font-medium text-indigo-200 tracking-wider uppercase" }, "Sincronizando Processo...")),
|
|
25896
|
+
detailsNode && detailsNode.is_quest && /* @__PURE__ */ React37.createElement(
|
|
25510
25897
|
QuestDetailsPanel,
|
|
25511
25898
|
{
|
|
25512
25899
|
node: detailsNode,
|
|
@@ -25538,7 +25925,7 @@ function XViewScene({
|
|
|
25538
25925
|
style: overlayHiddenStyle
|
|
25539
25926
|
}
|
|
25540
25927
|
),
|
|
25541
|
-
detailsNode && detailsNode.is_process && /* @__PURE__ */
|
|
25928
|
+
detailsNode && detailsNode.is_process && /* @__PURE__ */ React37.createElement(
|
|
25542
25929
|
ProcessDetailsPanel,
|
|
25543
25930
|
{
|
|
25544
25931
|
node: detailsNode,
|
|
@@ -25568,7 +25955,7 @@ function XViewScene({
|
|
|
25568
25955
|
style: overlayHiddenStyle
|
|
25569
25956
|
}
|
|
25570
25957
|
),
|
|
25571
|
-
detailsNode && !detailsNode.is_quest && !detailsNode.is_process && /* @__PURE__ */
|
|
25958
|
+
detailsNode && !detailsNode.is_quest && !detailsNode.is_process && /* @__PURE__ */ React37.createElement(
|
|
25572
25959
|
NodeDetailsPanel,
|
|
25573
25960
|
{
|
|
25574
25961
|
node: detailsNode,
|
|
@@ -25603,7 +25990,7 @@ function XViewScene({
|
|
|
25603
25990
|
style: overlayHiddenStyle
|
|
25604
25991
|
}
|
|
25605
25992
|
),
|
|
25606
|
-
detailsLink && /* @__PURE__ */
|
|
25993
|
+
detailsLink && /* @__PURE__ */ React37.createElement(
|
|
25607
25994
|
RelationshipDetailsPanel,
|
|
25608
25995
|
{
|
|
25609
25996
|
link: detailsLink,
|
|
@@ -25618,7 +26005,7 @@ function XViewScene({
|
|
|
25618
26005
|
onHighlight: handleReadModeHighlight
|
|
25619
26006
|
}
|
|
25620
26007
|
),
|
|
25621
|
-
ancestryLinkDetails && /* @__PURE__ */
|
|
26008
|
+
ancestryLinkDetails && /* @__PURE__ */ React37.createElement(
|
|
25622
26009
|
AncestryLinkDetailsPanel,
|
|
25623
26010
|
{
|
|
25624
26011
|
data: ancestryLinkDetails,
|
|
@@ -25630,7 +26017,7 @@ function XViewScene({
|
|
|
25630
26017
|
onHighlight: handleReadModeHighlight
|
|
25631
26018
|
}
|
|
25632
26019
|
),
|
|
25633
|
-
/* @__PURE__ */
|
|
26020
|
+
/* @__PURE__ */ React37.createElement(
|
|
25634
26021
|
"div",
|
|
25635
26022
|
{
|
|
25636
26023
|
ref: tooltipRef,
|
|
@@ -25657,7 +26044,7 @@ function XViewScene({
|
|
|
25657
26044
|
}
|
|
25658
26045
|
}
|
|
25659
26046
|
),
|
|
25660
|
-
/* @__PURE__ */
|
|
26047
|
+
/* @__PURE__ */ React37.createElement(
|
|
25661
26048
|
ContextMenu,
|
|
25662
26049
|
{
|
|
25663
26050
|
data: contextMenu,
|
|
@@ -25696,7 +26083,7 @@ function XViewScene({
|
|
|
25696
26083
|
onInitiateProcess: (data) => userActionHandlers.handleInitiateProcess(actionHandlerContext, data)
|
|
25697
26084
|
}
|
|
25698
26085
|
),
|
|
25699
|
-
/* @__PURE__ */
|
|
26086
|
+
/* @__PURE__ */ React37.createElement(
|
|
25700
26087
|
MultiNodeContextMenu,
|
|
25701
26088
|
{
|
|
25702
26089
|
data: multiContextMenu,
|
|
@@ -25716,7 +26103,7 @@ function XViewScene({
|
|
|
25716
26103
|
)
|
|
25717
26104
|
}
|
|
25718
26105
|
),
|
|
25719
|
-
/* @__PURE__ */
|
|
26106
|
+
/* @__PURE__ */ React37.createElement(
|
|
25720
26107
|
RelationshipContextMenu,
|
|
25721
26108
|
{
|
|
25722
26109
|
data: relationshipMenu,
|
|
@@ -25734,14 +26121,14 @@ function XViewScene({
|
|
|
25734
26121
|
onDelete: (data) => userActionHandlers.handleDeleteLink(actionHandlerContext, data)
|
|
25735
26122
|
}
|
|
25736
26123
|
),
|
|
25737
|
-
/* @__PURE__ */
|
|
26124
|
+
/* @__PURE__ */ React37.createElement(
|
|
25738
26125
|
ImageViewer,
|
|
25739
26126
|
{
|
|
25740
26127
|
data: imageViewer,
|
|
25741
26128
|
onClose: () => setImageViewer({ ...imageViewer, visible: false })
|
|
25742
26129
|
}
|
|
25743
26130
|
),
|
|
25744
|
-
/* @__PURE__ */
|
|
26131
|
+
/* @__PURE__ */ React37.createElement(
|
|
25745
26132
|
Boards,
|
|
25746
26133
|
{
|
|
25747
26134
|
isOpen: isBoardsOpen,
|
|
@@ -25754,7 +26141,7 @@ function XViewScene({
|
|
|
25754
26141
|
userRole: userPermissionRole
|
|
25755
26142
|
}
|
|
25756
26143
|
),
|
|
25757
|
-
/* @__PURE__ */
|
|
26144
|
+
/* @__PURE__ */ React37.createElement(
|
|
25758
26145
|
MilestoneManager,
|
|
25759
26146
|
{
|
|
25760
26147
|
isOpen: isMilestoneManagerOpen,
|
|
@@ -25763,7 +26150,7 @@ function XViewScene({
|
|
|
25763
26150
|
onUpdateMilestones: handleUpdateMilestones
|
|
25764
26151
|
}
|
|
25765
26152
|
),
|
|
25766
|
-
/* @__PURE__ */
|
|
26153
|
+
/* @__PURE__ */ React37.createElement(
|
|
25767
26154
|
ImportParentFileModal,
|
|
25768
26155
|
{
|
|
25769
26156
|
isOpen: isImportModalOpen,
|
|
@@ -25776,7 +26163,7 @@ function XViewScene({
|
|
|
25776
26163
|
currentAncestries: ancestryDataRef.current || []
|
|
25777
26164
|
}
|
|
25778
26165
|
),
|
|
25779
|
-
invalidTargetError && /* @__PURE__ */
|
|
26166
|
+
invalidTargetError && /* @__PURE__ */ React37.createElement(
|
|
25780
26167
|
"div",
|
|
25781
26168
|
{
|
|
25782
26169
|
className: "ui-overlay",
|
|
@@ -25801,13 +26188,13 @@ function XViewScene({
|
|
|
25801
26188
|
animation: "fadeInDown 0.5s cubic-bezier(0.16, 1, 0.3, 1)"
|
|
25802
26189
|
}
|
|
25803
26190
|
},
|
|
25804
|
-
/* @__PURE__ */
|
|
26191
|
+
/* @__PURE__ */ React37.createElement("style", null, `
|
|
25805
26192
|
@keyframes fadeInDown {
|
|
25806
26193
|
from { opacity: 0; transform: translate(-50%, -20px); }
|
|
25807
26194
|
to { opacity: 1; transform: translate(-50%, 0); }
|
|
25808
26195
|
}
|
|
25809
26196
|
`),
|
|
25810
|
-
/* @__PURE__ */
|
|
26197
|
+
/* @__PURE__ */ React37.createElement(
|
|
25811
26198
|
"svg",
|
|
25812
26199
|
{
|
|
25813
26200
|
width: "20",
|
|
@@ -25819,12 +26206,12 @@ function XViewScene({
|
|
|
25819
26206
|
strokeLinecap: "round",
|
|
25820
26207
|
strokeLinejoin: "round"
|
|
25821
26208
|
},
|
|
25822
|
-
/* @__PURE__ */
|
|
25823
|
-
/* @__PURE__ */
|
|
25824
|
-
/* @__PURE__ */
|
|
26209
|
+
/* @__PURE__ */ React37.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
26210
|
+
/* @__PURE__ */ React37.createElement("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
26211
|
+
/* @__PURE__ */ React37.createElement("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
25825
26212
|
),
|
|
25826
|
-
/* @__PURE__ */
|
|
25827
|
-
/* @__PURE__ */
|
|
26213
|
+
/* @__PURE__ */ React37.createElement("span", { style: { fontSize: "14px", fontWeight: 500 } }, invalidTargetError),
|
|
26214
|
+
/* @__PURE__ */ React37.createElement(
|
|
25828
26215
|
"button",
|
|
25829
26216
|
{
|
|
25830
26217
|
onClick: () => setInvalidTargetError(null),
|
|
@@ -25852,7 +26239,7 @@ function XViewScene({
|
|
|
25852
26239
|
"Fechar"
|
|
25853
26240
|
)
|
|
25854
26241
|
),
|
|
25855
|
-
/* @__PURE__ */
|
|
26242
|
+
/* @__PURE__ */ React37.createElement(
|
|
25856
26243
|
UpgradeModal,
|
|
25857
26244
|
{
|
|
25858
26245
|
isOpen: isUpgradeModalOpen,
|