@lv-x-software-house/x_view 1.2.5-dev.47 → 1.2.5-dev.48
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 +283 -223
- package/dist/index.mjs +213 -153
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// src/XViewScene.jsx
|
|
2
|
-
import
|
|
2
|
+
import React28, {
|
|
3
3
|
useCallback as useCallback4,
|
|
4
4
|
useEffect as useEffect22,
|
|
5
5
|
useRef as useRef19,
|
|
6
|
-
useState as
|
|
6
|
+
useState as useState27,
|
|
7
7
|
useMemo as useMemo12
|
|
8
8
|
} from "react";
|
|
9
9
|
import { useRouter, useSearchParams } from "next/navigation";
|
|
@@ -588,14 +588,13 @@ function XViewSidebar({
|
|
|
588
588
|
onActivateQuestLens = () => {
|
|
589
589
|
},
|
|
590
590
|
milestones = [],
|
|
591
|
-
|
|
591
|
+
onOpenMilestoneManager = () => {
|
|
592
592
|
}
|
|
593
593
|
}) {
|
|
594
594
|
const [query, setQuery] = useState2("");
|
|
595
595
|
const [showList, setShowList] = useState2(false);
|
|
596
596
|
const [selectedNodeId, setSelectedNodeId] = useState2(null);
|
|
597
597
|
const [isSaving, setIsSaving] = useState2(false);
|
|
598
|
-
const [newMilestoneName, setNewMilestoneName] = useState2("");
|
|
599
598
|
const [activeFilters, setActiveFilters] = useState2([]);
|
|
600
599
|
const [isFilterMenuOpen, setIsFilterMenuOpen] = useState2(false);
|
|
601
600
|
const [filterCategory, setFilterCategory] = useState2("Type");
|
|
@@ -807,28 +806,6 @@ function XViewSidebar({
|
|
|
807
806
|
setIsTypeDropdownOpen(false);
|
|
808
807
|
}
|
|
809
808
|
};
|
|
810
|
-
const handleAddMilestone = () => {
|
|
811
|
-
if (!newMilestoneName.trim()) return;
|
|
812
|
-
const newMilestone = {
|
|
813
|
-
id: `ms_${Date.now()}`,
|
|
814
|
-
name: newMilestoneName.trim(),
|
|
815
|
-
status: "active"
|
|
816
|
-
};
|
|
817
|
-
onUpdateMilestones([...milestones, newMilestone]);
|
|
818
|
-
setNewMilestoneName("");
|
|
819
|
-
};
|
|
820
|
-
const handleToggleMilestoneStatus = (id) => {
|
|
821
|
-
const updated = milestones.map(
|
|
822
|
-
(ms) => ms.id === id ? { ...ms, status: ms.status === "active" ? "inactive" : "active" } : ms
|
|
823
|
-
);
|
|
824
|
-
onUpdateMilestones(updated);
|
|
825
|
-
};
|
|
826
|
-
const handleRemoveMilestone = (id) => {
|
|
827
|
-
var _a;
|
|
828
|
-
if (!confirm(`Deseja remover o milestone "${(_a = milestones.find((m) => m.id === id)) == null ? void 0 : _a.name}"?`)) return;
|
|
829
|
-
const updated = milestones.filter((ms) => ms.id !== id);
|
|
830
|
-
onUpdateMilestones(updated);
|
|
831
|
-
};
|
|
832
809
|
const ToggleButton = /* @__PURE__ */ React2.createElement(
|
|
833
810
|
"button",
|
|
834
811
|
{
|
|
@@ -1020,25 +997,7 @@ function XViewSidebar({
|
|
|
1020
997
|
},
|
|
1021
998
|
/* @__PURE__ */ React2.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__ */ React2.createElement("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }), /* @__PURE__ */ React2.createElement("polyline", { points: "17 8 12 3 7 8" }), /* @__PURE__ */ React2.createElement("line", { x1: "12", y1: "3", x2: "12", y2: "15" })),
|
|
1022
999
|
"Importar arquivo"
|
|
1023
|
-
), /* @__PURE__ */ React2.createElement("p", { className: "mt-1.5 text-xs text-slate-400 text-center px-1 leading-tight" }, "Importar datasets ou ancestralidades das views."), /* @__PURE__ */ React2.createElement("div", { className: "h-9 mt-1 flex items-center justify-center" }, importSuccessMessage && /* @__PURE__ */ React2.createElement("p", { className: "w-full text-center text-xs font-medium text-indigo-300 bg-indigo-500/10 border border-indigo-500/20 rounded-md py-1.5 px-2" }, importSuccessMessage)))), /* @__PURE__ */ React2.createElement("div", { className: "h-px bg-white/10" }), /* @__PURE__ */ React2.createElement("section", { className: "space-y-2" }, /* @__PURE__ */ React2.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "Lentes"), /* @__PURE__ */ React2.createElement(
|
|
1024
|
-
"button",
|
|
1025
|
-
{
|
|
1026
|
-
onClick: onActivateTimeline,
|
|
1027
|
-
className: buttonBaseClass,
|
|
1028
|
-
title: "Ativar a visualiza\xE7\xE3o de Timeline"
|
|
1029
|
-
},
|
|
1030
|
-
/* @__PURE__ */ React2.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__ */ React2.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ React2.createElement("polyline", { points: "12 6 12 12 16 14" })),
|
|
1031
|
-
"Timeline"
|
|
1032
|
-
), /* @__PURE__ */ React2.createElement(
|
|
1033
|
-
"button",
|
|
1034
|
-
{
|
|
1035
|
-
onClick: onOpenAncestryBoard,
|
|
1036
|
-
className: buttonBaseClass,
|
|
1037
|
-
title: "Abrir painel de Ancestralidades"
|
|
1038
|
-
},
|
|
1039
|
-
/* @__PURE__ */ React2.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__ */ React2.createElement("polygon", { points: "12 2 2 7 12 12 22 7 12 2" }), /* @__PURE__ */ React2.createElement("polyline", { points: "2 17 12 22 22 17" }), /* @__PURE__ */ React2.createElement("polyline", { points: "2 12 12 17 22 12" })),
|
|
1040
|
-
"Ancestry Board"
|
|
1041
|
-
), /* @__PURE__ */ React2.createElement("div", { className: "relative", ref: questLensRef }, /* @__PURE__ */ React2.createElement(
|
|
1000
|
+
), /* @__PURE__ */ React2.createElement("p", { className: "mt-1.5 text-xs text-slate-400 text-center px-1 leading-tight" }, "Importar datasets ou ancestralidades das views."), /* @__PURE__ */ React2.createElement("div", { className: "h-9 mt-1 flex items-center justify-center" }, importSuccessMessage && /* @__PURE__ */ React2.createElement("p", { className: "w-full text-center text-xs font-medium text-indigo-300 bg-indigo-500/10 border border-indigo-500/20 rounded-md py-1.5 px-2" }, importSuccessMessage)))), /* @__PURE__ */ React2.createElement("div", { className: "h-px bg-white/10" }), /* @__PURE__ */ React2.createElement("section", { className: "space-y-2" }, /* @__PURE__ */ React2.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "Lentes"), /* @__PURE__ */ React2.createElement("div", { className: "relative", ref: questLensRef }, /* @__PURE__ */ React2.createElement(
|
|
1042
1001
|
"button",
|
|
1043
1002
|
{
|
|
1044
1003
|
onClick: () => setIsQuestLensMenuOpen(!isQuestLensMenuOpen),
|
|
@@ -1090,54 +1049,35 @@ function XViewSidebar({
|
|
|
1090
1049
|
className: "flex-[2] py-2 bg-indigo-600 hover:bg-indigo-500 text-white text-[11px] font-bold rounded-lg shadow-lg shadow-indigo-500/20 transition-all hover:scale-[1.02] active:scale-95"
|
|
1091
1050
|
},
|
|
1092
1051
|
"Aplicar Lente"
|
|
1093
|
-
))))
|
|
1094
|
-
"
|
|
1052
|
+
)))), /* @__PURE__ */ React2.createElement(
|
|
1053
|
+
"button",
|
|
1095
1054
|
{
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
}
|
|
1055
|
+
onClick: onActivateTimeline,
|
|
1056
|
+
className: buttonBaseClass,
|
|
1057
|
+
title: "Ativar a visualiza\xE7\xE3o de Timeline"
|
|
1058
|
+
},
|
|
1059
|
+
/* @__PURE__ */ React2.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__ */ React2.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ React2.createElement("polyline", { points: "12 6 12 12 16 14" })),
|
|
1060
|
+
"Timeline"
|
|
1103
1061
|
), /* @__PURE__ */ React2.createElement(
|
|
1104
1062
|
"button",
|
|
1105
1063
|
{
|
|
1106
|
-
onClick:
|
|
1107
|
-
|
|
1108
|
-
|
|
1064
|
+
onClick: onOpenAncestryBoard,
|
|
1065
|
+
className: buttonBaseClass,
|
|
1066
|
+
title: "Abrir painel de Ancestralidades"
|
|
1109
1067
|
},
|
|
1110
|
-
/* @__PURE__ */ React2.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__ */ React2.createElement("
|
|
1111
|
-
|
|
1112
|
-
|
|
1068
|
+
/* @__PURE__ */ React2.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__ */ React2.createElement("polygon", { points: "12 2 2 7 12 12 22 7 12 2" }), /* @__PURE__ */ React2.createElement("polyline", { points: "2 17 12 22 22 17" }), /* @__PURE__ */ React2.createElement("polyline", { points: "2 12 12 17 22 12" })),
|
|
1069
|
+
"Ancestry Board"
|
|
1070
|
+
)), /* @__PURE__ */ React2.createElement("div", { className: "h-px bg-white/10" }), /* @__PURE__ */ React2.createElement("section", { className: "space-y-3" }, /* @__PURE__ */ React2.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "Milestones"), /* @__PURE__ */ React2.createElement(
|
|
1071
|
+
"button",
|
|
1113
1072
|
{
|
|
1114
|
-
|
|
1115
|
-
className:
|
|
1073
|
+
onClick: onOpenMilestoneManager,
|
|
1074
|
+
className: buttonBaseClass,
|
|
1075
|
+
title: "Gerenciar os milestones deste cen\xE1rio"
|
|
1116
1076
|
},
|
|
1117
|
-
/* @__PURE__ */ React2.createElement("
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
}
|
|
1122
|
-
), /* @__PURE__ */ React2.createElement("span", { className: `text-[11px] truncate font-medium ${ms.status === "active" ? "text-slate-100" : "text-slate-500 line-through"}` }, ms.name)),
|
|
1123
|
-
/* @__PURE__ */ React2.createElement("div", { className: "flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity" }, /* @__PURE__ */ React2.createElement(
|
|
1124
|
-
"button",
|
|
1125
|
-
{
|
|
1126
|
-
onClick: () => handleToggleMilestoneStatus(ms.id),
|
|
1127
|
-
className: `p-1 rounded hover:bg-white/10 transition-colors ${ms.status === "active" ? "text-slate-400" : "text-indigo-400"}`,
|
|
1128
|
-
title: ms.status === "active" ? "Inativar" : "Ativar"
|
|
1129
|
-
},
|
|
1130
|
-
ms.status === "active" ? /* @__PURE__ */ React2.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React2.createElement("rect", { x: "6", y: "4", width: "4", height: "16" }), /* @__PURE__ */ React2.createElement("rect", { x: "14", y: "4", width: "4", height: "16" })) : /* @__PURE__ */ React2.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React2.createElement("polygon", { points: "5 3 19 12 5 21 5 3" }))
|
|
1131
|
-
), /* @__PURE__ */ React2.createElement(
|
|
1132
|
-
"button",
|
|
1133
|
-
{
|
|
1134
|
-
onClick: () => handleRemoveMilestone(ms.id),
|
|
1135
|
-
className: "p-1 rounded hover:bg-red-500/20 text-slate-500 hover:text-red-400 transition-colors",
|
|
1136
|
-
title: "Remover"
|
|
1137
|
-
},
|
|
1138
|
-
/* @__PURE__ */ React2.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React2.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React2.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__ */ React2.createElement("line", { x1: "10", y1: "11", x2: "10", y2: "17" }), /* @__PURE__ */ React2.createElement("line", { x1: "14", y1: "11", x2: "14", y2: "17" }))
|
|
1139
|
-
))
|
|
1140
|
-
)) : /* @__PURE__ */ React2.createElement("p", { className: "text-[10px] text-slate-600 text-center py-2 italic font-light italic" }, "Nenhum milestone definido")))), /* @__PURE__ */ React2.createElement("div", { className: "px-4 py-3 border-t border-white/10 bg-slate-900/30" }, /* @__PURE__ */ React2.createElement("section", { className: "space-y-2" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React2.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "Navega\xE7\xE3o")), ability.can("update", "Scene") && /* @__PURE__ */ React2.createElement(
|
|
1077
|
+
/* @__PURE__ */ React2.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__ */ React2.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ React2.createElement("circle", { cx: "12", cy: "12", r: "6" }), /* @__PURE__ */ React2.createElement("circle", { cx: "12", cy: "12", r: "2" })),
|
|
1078
|
+
"Gerenciar Milestones",
|
|
1079
|
+
milestones.length > 0 && /* @__PURE__ */ React2.createElement("span", { className: "ml-1.5 px-1.5 py-0.5 rounded-full bg-indigo-500/30 text-[10px] font-bold border border-indigo-400/30" }, milestones.length)
|
|
1080
|
+
))), /* @__PURE__ */ React2.createElement("div", { className: "px-4 py-3 border-t border-white/10 bg-slate-900/30" }, /* @__PURE__ */ React2.createElement("section", { className: "space-y-2" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React2.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "Navega\xE7\xE3o")), ability.can("update", "Scene") && /* @__PURE__ */ React2.createElement(
|
|
1141
1081
|
"button",
|
|
1142
1082
|
{
|
|
1143
1083
|
onClick: handleSaveClick,
|
|
@@ -13295,6 +13235,116 @@ function AncestryBoard({
|
|
|
13295
13235
|
);
|
|
13296
13236
|
}
|
|
13297
13237
|
|
|
13238
|
+
// src/components/MilestoneManager.jsx
|
|
13239
|
+
import React27, { useState as useState26 } from "react";
|
|
13240
|
+
import { FiTarget as FiTarget4, FiPlus as FiPlus11, FiTrash2 as FiTrash24, FiX as FiX9, FiCheck as FiCheck12, FiPauseCircle, FiPlayCircle } from "react-icons/fi";
|
|
13241
|
+
function MilestoneManager({
|
|
13242
|
+
isOpen,
|
|
13243
|
+
onClose,
|
|
13244
|
+
milestones = [],
|
|
13245
|
+
onUpdateMilestones = () => {
|
|
13246
|
+
}
|
|
13247
|
+
}) {
|
|
13248
|
+
const [newMilestoneName, setNewMilestoneName] = useState26("");
|
|
13249
|
+
const handleAddMilestone = () => {
|
|
13250
|
+
if (!newMilestoneName.trim()) return;
|
|
13251
|
+
const newMilestone = {
|
|
13252
|
+
id: `ms_${Date.now()}`,
|
|
13253
|
+
name: newMilestoneName.trim(),
|
|
13254
|
+
status: "active"
|
|
13255
|
+
};
|
|
13256
|
+
onUpdateMilestones([...milestones, newMilestone]);
|
|
13257
|
+
setNewMilestoneName("");
|
|
13258
|
+
};
|
|
13259
|
+
const handleToggleMilestoneStatus = (id) => {
|
|
13260
|
+
const updated = milestones.map(
|
|
13261
|
+
(ms) => ms.id === id ? { ...ms, status: ms.status === "active" ? "inactive" : "active" } : ms
|
|
13262
|
+
);
|
|
13263
|
+
onUpdateMilestones(updated);
|
|
13264
|
+
};
|
|
13265
|
+
const handleRemoveMilestone = (id) => {
|
|
13266
|
+
var _a;
|
|
13267
|
+
if (!confirm(`Deseja remover o milestone "${(_a = milestones.find((m) => m.id === id)) == null ? void 0 : _a.name}"?`)) return;
|
|
13268
|
+
const updated = milestones.filter((ms) => ms.id !== id);
|
|
13269
|
+
onUpdateMilestones(updated);
|
|
13270
|
+
};
|
|
13271
|
+
if (!isOpen) return null;
|
|
13272
|
+
const swallow = (e) => e.stopPropagation();
|
|
13273
|
+
return /* @__PURE__ */ React27.createElement(
|
|
13274
|
+
"div",
|
|
13275
|
+
{
|
|
13276
|
+
className: "fixed inset-0 z-50 flex items-center justify-center p-4 bg-slate-950/40 backdrop-blur-sm animate-in fade-in duration-300",
|
|
13277
|
+
onClick: onClose
|
|
13278
|
+
},
|
|
13279
|
+
/* @__PURE__ */ React27.createElement(
|
|
13280
|
+
"div",
|
|
13281
|
+
{
|
|
13282
|
+
className: "w-full max-w-lg bg-slate-900/90 backdrop-blur-xl border border-white/10 rounded-2xl shadow-2xl flex flex-col max-h-[85vh] animate-in zoom-in-95 duration-300",
|
|
13283
|
+
onClick: swallow
|
|
13284
|
+
},
|
|
13285
|
+
/* @__PURE__ */ React27.createElement("div", { className: "px-6 py-4 border-b border-white/10 flex items-center justify-between" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React27.createElement("div", { className: "p-2 rounded-lg bg-indigo-500/20 text-indigo-400" }, /* @__PURE__ */ React27.createElement(FiTarget4, { size: 20 })), /* @__PURE__ */ React27.createElement("div", null, /* @__PURE__ */ React27.createElement("h2", { className: "text-lg font-semibold text-slate-100" }, "Milestones"), /* @__PURE__ */ React27.createElement("p", { className: "text-xs text-slate-400" }, "Gerencie os marcos do seu cen\xE1rio"))), /* @__PURE__ */ React27.createElement(
|
|
13286
|
+
"button",
|
|
13287
|
+
{
|
|
13288
|
+
onClick: onClose,
|
|
13289
|
+
className: "p-2 rounded-full hover:bg-white/10 text-slate-400 hover:text-white transition-colors"
|
|
13290
|
+
},
|
|
13291
|
+
/* @__PURE__ */ React27.createElement(FiX9, { size: 20 })
|
|
13292
|
+
)),
|
|
13293
|
+
/* @__PURE__ */ React27.createElement("div", { className: "px-6 py-5 bg-white/5 border-b border-white/5" }, /* @__PURE__ */ React27.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React27.createElement(
|
|
13294
|
+
"input",
|
|
13295
|
+
{
|
|
13296
|
+
type: "text",
|
|
13297
|
+
value: newMilestoneName,
|
|
13298
|
+
onChange: (e) => setNewMilestoneName(e.target.value),
|
|
13299
|
+
onKeyDown: (e) => e.key === "Enter" && handleAddMilestone(),
|
|
13300
|
+
placeholder: "Adicionar novo milestone...",
|
|
13301
|
+
className: "flex-1 bg-slate-800/50 border border-white/10 rounded-xl px-4 py-2.5 text-sm text-slate-100 placeholder:text-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/40 focus:border-indigo-500/50 transition-all shadow-inner"
|
|
13302
|
+
}
|
|
13303
|
+
), /* @__PURE__ */ React27.createElement(
|
|
13304
|
+
"button",
|
|
13305
|
+
{
|
|
13306
|
+
onClick: handleAddMilestone,
|
|
13307
|
+
disabled: !newMilestoneName.trim(),
|
|
13308
|
+
className: "px-4 py-2.5 rounded-xl bg-indigo-600 hover:bg-indigo-500 disabled:opacity-30 disabled:cursor-not-allowed text-white text-sm font-medium transition-all flex items-center gap-2 shadow-lg shadow-indigo-500/20 active:scale-95"
|
|
13309
|
+
},
|
|
13310
|
+
/* @__PURE__ */ React27.createElement(FiPlus11, { size: 18 }),
|
|
13311
|
+
"Adicionar"
|
|
13312
|
+
))),
|
|
13313
|
+
/* @__PURE__ */ React27.createElement("div", { className: "flex-1 overflow-y-auto px-6 py-4 custom-scrollbar" }, milestones.length > 0 ? /* @__PURE__ */ React27.createElement("div", { className: "space-y-3" }, milestones.map((ms) => /* @__PURE__ */ React27.createElement(
|
|
13314
|
+
"div",
|
|
13315
|
+
{
|
|
13316
|
+
key: ms.id,
|
|
13317
|
+
className: `group flex items-center justify-between p-4 rounded-xl border transition-all duration-200 ${ms.status === "active" ? "bg-slate-800/40 border-indigo-500/20 hover:border-indigo-500/40" : "bg-slate-900/40 border-white/5 opacity-60 grayscale-[0.3]"}`
|
|
13318
|
+
},
|
|
13319
|
+
/* @__PURE__ */ React27.createElement("div", { className: "flex items-center gap-3 min-w-0" }, /* @__PURE__ */ React27.createElement(
|
|
13320
|
+
"div",
|
|
13321
|
+
{
|
|
13322
|
+
className: `w-2 h-2 rounded-full shrink-0 ${ms.status === "active" ? "bg-indigo-400 shadow-[0_0_8px_rgba(129,140,248,0.6)]" : "bg-slate-600"}`
|
|
13323
|
+
}
|
|
13324
|
+
), /* @__PURE__ */ React27.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ React27.createElement("span", { className: `text-sm font-medium truncate ${ms.status === "active" ? "text-slate-100" : "text-slate-400 line-through"}` }, ms.name), /* @__PURE__ */ React27.createElement("span", { className: "text-[10px] text-slate-500 uppercase tracking-wider" }, ms.status === "active" ? "Ativo" : "Inativo"))),
|
|
13325
|
+
/* @__PURE__ */ React27.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React27.createElement(
|
|
13326
|
+
"button",
|
|
13327
|
+
{
|
|
13328
|
+
onClick: () => handleToggleMilestoneStatus(ms.id),
|
|
13329
|
+
className: `p-2 rounded-lg transition-all ${ms.status === "active" ? "hover:bg-slate-700 text-slate-400" : "hover:bg-indigo-500/20 text-indigo-400"}`,
|
|
13330
|
+
title: ms.status === "active" ? "Inativar" : "Ativar"
|
|
13331
|
+
},
|
|
13332
|
+
ms.status === "active" ? /* @__PURE__ */ React27.createElement(FiPauseCircle, { size: 18 }) : /* @__PURE__ */ React27.createElement(FiPlayCircle, { size: 18 })
|
|
13333
|
+
), /* @__PURE__ */ React27.createElement(
|
|
13334
|
+
"button",
|
|
13335
|
+
{
|
|
13336
|
+
onClick: () => handleRemoveMilestone(ms.id),
|
|
13337
|
+
className: "p-2 rounded-lg hover:bg-red-500/20 text-slate-500 hover:text-red-400 transition-all",
|
|
13338
|
+
title: "Remover"
|
|
13339
|
+
},
|
|
13340
|
+
/* @__PURE__ */ React27.createElement(FiTrash24, { size: 18 })
|
|
13341
|
+
))
|
|
13342
|
+
))) : /* @__PURE__ */ React27.createElement("div", { className: "flex flex-col items-center justify-center py-12 text-center" }, /* @__PURE__ */ React27.createElement("div", { className: "p-4 rounded-full bg-slate-800/30 text-slate-600 mb-4" }, /* @__PURE__ */ React27.createElement(FiTarget4, { size: 40 })), /* @__PURE__ */ React27.createElement("h3", { className: "text-slate-400 font-medium" }, "Nenhum milestone definido"), /* @__PURE__ */ React27.createElement("p", { className: "text-xs text-slate-600 max-w-[200px] mt-1 italic" }, "Defina marcos importantes para orientar o progresso do projeto."))),
|
|
13343
|
+
/* @__PURE__ */ React27.createElement("div", { className: "px-6 py-4 border-t border-white/5 bg-slate-900/50 flex items-center justify-between rounded-b-2xl" }, /* @__PURE__ */ React27.createElement("div", { className: "flex gap-4" }, /* @__PURE__ */ React27.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ React27.createElement("span", { className: "text-[10px] text-slate-500 uppercase tracking-widest" }, "Total:"), /* @__PURE__ */ React27.createElement("span", { className: "text-xs font-bold text-slate-300" }, milestones.length)), /* @__PURE__ */ React27.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ React27.createElement("span", { className: "text-[10px] text-slate-500 uppercase tracking-widest" }, "Ativos:"), /* @__PURE__ */ React27.createElement("span", { className: "text-xs font-bold text-indigo-400" }, milestones.filter((m) => m.status === "active").length))))
|
|
13344
|
+
)
|
|
13345
|
+
);
|
|
13346
|
+
}
|
|
13347
|
+
|
|
13298
13348
|
// src/XViewScene.jsx
|
|
13299
13349
|
import short2 from "short-uuid";
|
|
13300
13350
|
var secretKey = process.env.NEXT_PUBLIC_CRYPTO_KEY;
|
|
@@ -13376,7 +13426,7 @@ function XViewScene({
|
|
|
13376
13426
|
check_user_permission,
|
|
13377
13427
|
get_view_members
|
|
13378
13428
|
}) {
|
|
13379
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
13429
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
13380
13430
|
const { data: session, status } = useSession();
|
|
13381
13431
|
const router = useRouter();
|
|
13382
13432
|
const searchParams = useSearchParams();
|
|
@@ -13451,42 +13501,42 @@ function XViewScene({
|
|
|
13451
13501
|
const sceneDataRef = useRef19(null);
|
|
13452
13502
|
const parentDataRef = useRef19(null);
|
|
13453
13503
|
const ancestryDataRef = useRef19(null);
|
|
13454
|
-
const [isLoading, setIsLoading] =
|
|
13455
|
-
const [permissionStatus, setPermissionStatus] =
|
|
13456
|
-
const [userPermissionRole, setUserPermissionRole] =
|
|
13457
|
-
const [viewMembers, setViewMembers] =
|
|
13458
|
-
const [isInitialized, setIsInitialized] =
|
|
13459
|
-
const [sceneVersion, setSceneVersion] =
|
|
13460
|
-
const [contextMenu, setContextMenu] =
|
|
13504
|
+
const [isLoading, setIsLoading] = useState27(true);
|
|
13505
|
+
const [permissionStatus, setPermissionStatus] = useState27("loading");
|
|
13506
|
+
const [userPermissionRole, setUserPermissionRole] = useState27(null);
|
|
13507
|
+
const [viewMembers, setViewMembers] = useState27([]);
|
|
13508
|
+
const [isInitialized, setIsInitialized] = useState27(false);
|
|
13509
|
+
const [sceneVersion, setSceneVersion] = useState27(0);
|
|
13510
|
+
const [contextMenu, setContextMenu] = useState27({
|
|
13461
13511
|
visible: false,
|
|
13462
13512
|
x: 0,
|
|
13463
13513
|
y: 0,
|
|
13464
13514
|
nodeData: null
|
|
13465
13515
|
});
|
|
13466
|
-
const [multiContextMenu, setMultiContextMenu] =
|
|
13516
|
+
const [multiContextMenu, setMultiContextMenu] = useState27({
|
|
13467
13517
|
visible: false,
|
|
13468
13518
|
x: 0,
|
|
13469
13519
|
y: 0,
|
|
13470
13520
|
nodeIds: null
|
|
13471
13521
|
});
|
|
13472
|
-
const [relationshipMenu, setRelationshipMenu] =
|
|
13522
|
+
const [relationshipMenu, setRelationshipMenu] = useState27({
|
|
13473
13523
|
visible: false,
|
|
13474
13524
|
x: 0,
|
|
13475
13525
|
y: 0,
|
|
13476
13526
|
linkObject: null
|
|
13477
13527
|
});
|
|
13478
|
-
const [creationMode, setCreationMode] =
|
|
13528
|
+
const [creationMode, setCreationMode] = useState27({
|
|
13479
13529
|
isActive: false,
|
|
13480
13530
|
sourceNodeData: null
|
|
13481
13531
|
});
|
|
13482
|
-
const [versionMode, setVersionMode] =
|
|
13532
|
+
const [versionMode, setVersionMode] = useState27({
|
|
13483
13533
|
isActive: false,
|
|
13484
13534
|
sourceNodeData: null
|
|
13485
13535
|
});
|
|
13486
|
-
const [questMode, setQuestMode] =
|
|
13487
|
-
const [hasFocusedInitial, setHasFocusedInitial] =
|
|
13488
|
-
const [hasOpenedInitialAncestry, setHasOpenedInitialAncestry] =
|
|
13489
|
-
const [ancestryMode, setAncestryMode] =
|
|
13536
|
+
const [questMode, setQuestMode] = useState27({ isActive: false });
|
|
13537
|
+
const [hasFocusedInitial, setHasFocusedInitial] = useState27(false);
|
|
13538
|
+
const [hasOpenedInitialAncestry, setHasOpenedInitialAncestry] = useState27(false);
|
|
13539
|
+
const [ancestryMode, setAncestryMode] = useState27({
|
|
13490
13540
|
isActive: false,
|
|
13491
13541
|
tree: null,
|
|
13492
13542
|
selectedParentId: null,
|
|
@@ -13497,37 +13547,38 @@ function XViewScene({
|
|
|
13497
13547
|
ancestryDescriptionSections: [],
|
|
13498
13548
|
isAddingNodes: false
|
|
13499
13549
|
});
|
|
13500
|
-
const [readingMode, setReadingMode] =
|
|
13550
|
+
const [readingMode, setReadingMode] = useState27({
|
|
13501
13551
|
isActive: false,
|
|
13502
13552
|
ancestry: null,
|
|
13503
13553
|
branchStack: [],
|
|
13504
13554
|
autoAbstraction: false
|
|
13505
13555
|
});
|
|
13506
|
-
const [formPosition, setFormPosition] =
|
|
13556
|
+
const [formPosition, setFormPosition] = useState27({
|
|
13507
13557
|
left: 16,
|
|
13508
13558
|
top: 16,
|
|
13509
13559
|
opacity: 0
|
|
13510
13560
|
});
|
|
13511
|
-
const [detailsNode, setDetailsNode] =
|
|
13512
|
-
const [detailsLink, setDetailsLink] =
|
|
13513
|
-
const [ancestryLinkDetails, setAncestryLinkDetails] =
|
|
13514
|
-
const [imageViewer, setImageViewer] =
|
|
13561
|
+
const [detailsNode, setDetailsNode] = useState27(null);
|
|
13562
|
+
const [detailsLink, setDetailsLink] = useState27(null);
|
|
13563
|
+
const [ancestryLinkDetails, setAncestryLinkDetails] = useState27(null);
|
|
13564
|
+
const [imageViewer, setImageViewer] = useState27({
|
|
13515
13565
|
visible: false,
|
|
13516
13566
|
images: [],
|
|
13517
13567
|
startIndex: 0
|
|
13518
13568
|
});
|
|
13519
|
-
const [editingAncestryRel, setEditingAncestryRel] =
|
|
13569
|
+
const [editingAncestryRel, setEditingAncestryRel] = useState27({
|
|
13520
13570
|
visible: false,
|
|
13521
13571
|
data: null,
|
|
13522
13572
|
path: null
|
|
13523
13573
|
});
|
|
13524
|
-
const [isImportModalOpen, setIsImportModalOpen] =
|
|
13525
|
-
const [importSuccessMessage, setImportSuccessMessage] =
|
|
13526
|
-
const [invalidTargetError, setInvalidTargetError] =
|
|
13527
|
-
const [highlightedNodeId, setHighlightedNodeId] =
|
|
13528
|
-
const [isAncestryBoardOpen, setIsAncestryBoardOpen] =
|
|
13529
|
-
const [ancestryBoardData, setAncestryBoardData] =
|
|
13530
|
-
const [isSidebarOpen, setIsSidebarOpen] =
|
|
13574
|
+
const [isImportModalOpen, setIsImportModalOpen] = useState27(false);
|
|
13575
|
+
const [importSuccessMessage, setImportSuccessMessage] = useState27("");
|
|
13576
|
+
const [invalidTargetError, setInvalidTargetError] = useState27(null);
|
|
13577
|
+
const [highlightedNodeId, setHighlightedNodeId] = useState27(null);
|
|
13578
|
+
const [isAncestryBoardOpen, setIsAncestryBoardOpen] = useState27(false);
|
|
13579
|
+
const [ancestryBoardData, setAncestryBoardData] = useState27([]);
|
|
13580
|
+
const [isSidebarOpen, setIsSidebarOpen] = useState27(false);
|
|
13581
|
+
const [isMilestoneManagerOpen, setIsMilestoneManagerOpen] = useState27(false);
|
|
13531
13582
|
const mountRef = useRef19(null);
|
|
13532
13583
|
const tooltipRef = useRef19(null);
|
|
13533
13584
|
const formRef = useRef19(null);
|
|
@@ -17735,10 +17786,10 @@ function XViewScene({
|
|
|
17735
17786
|
// <-- handleCancelQuest adicionado aqui
|
|
17736
17787
|
]);
|
|
17737
17788
|
if (isLoading || status === "loading" || permissionStatus === "loading") {
|
|
17738
|
-
return /* @__PURE__ */
|
|
17789
|
+
return /* @__PURE__ */ React28.createElement(LoadingScreen, null);
|
|
17739
17790
|
}
|
|
17740
17791
|
if (permissionStatus === "denied") {
|
|
17741
|
-
return /* @__PURE__ */
|
|
17792
|
+
return /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col items-center justify-center min-h-screen w-full bg-slate-950 text-white" }, /* @__PURE__ */ React28.createElement("div", { className: "bg-slate-900/50 p-8 rounded-2xl border border-slate-800 shadow-2xl text-center max-w-md" }, /* @__PURE__ */ React28.createElement("div", { className: "mb-4 text-red-500" }, /* @__PURE__ */ React28.createElement(
|
|
17742
17793
|
"svg",
|
|
17743
17794
|
{
|
|
17744
17795
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -17748,7 +17799,7 @@ function XViewScene({
|
|
|
17748
17799
|
stroke: "currentColor",
|
|
17749
17800
|
className: "w-16 h-16 mx-auto"
|
|
17750
17801
|
},
|
|
17751
|
-
/* @__PURE__ */
|
|
17802
|
+
/* @__PURE__ */ React28.createElement(
|
|
17752
17803
|
"path",
|
|
17753
17804
|
{
|
|
17754
17805
|
strokeLinecap: "round",
|
|
@@ -17756,13 +17807,13 @@ function XViewScene({
|
|
|
17756
17807
|
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"
|
|
17757
17808
|
}
|
|
17758
17809
|
)
|
|
17759
|
-
)), /* @__PURE__ */
|
|
17810
|
+
)), /* @__PURE__ */ React28.createElement("h2", { className: "text-2xl font-bold mb-2" }, "Acesso Negado"), /* @__PURE__ */ React28.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__ */ React28.createElement(
|
|
17760
17811
|
"button",
|
|
17761
17812
|
{
|
|
17762
17813
|
onClick: () => router.push("/dashboard/scenes"),
|
|
17763
17814
|
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"
|
|
17764
17815
|
},
|
|
17765
|
-
/* @__PURE__ */
|
|
17816
|
+
/* @__PURE__ */ React28.createElement(
|
|
17766
17817
|
"svg",
|
|
17767
17818
|
{
|
|
17768
17819
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -17772,7 +17823,7 @@ function XViewScene({
|
|
|
17772
17823
|
stroke: "currentColor",
|
|
17773
17824
|
className: "w-5 h-5"
|
|
17774
17825
|
},
|
|
17775
|
-
/* @__PURE__ */
|
|
17826
|
+
/* @__PURE__ */ React28.createElement(
|
|
17776
17827
|
"path",
|
|
17777
17828
|
{
|
|
17778
17829
|
strokeLinecap: "round",
|
|
@@ -17784,7 +17835,7 @@ function XViewScene({
|
|
|
17784
17835
|
"Voltar para Scenes"
|
|
17785
17836
|
)));
|
|
17786
17837
|
}
|
|
17787
|
-
return /* @__PURE__ */
|
|
17838
|
+
return /* @__PURE__ */ React28.createElement(
|
|
17788
17839
|
"div",
|
|
17789
17840
|
{
|
|
17790
17841
|
ref: mountRef,
|
|
@@ -17796,7 +17847,7 @@ function XViewScene({
|
|
|
17796
17847
|
cursor: stateRef.current.connection.isActive || stateRef.current.relink.isActive || ancestryMode.isActive ? "crosshair" : creationMode.isActive ? "default" : "grab"
|
|
17797
17848
|
}
|
|
17798
17849
|
},
|
|
17799
|
-
userPermissionRole !== "link_viewer" && /* @__PURE__ */
|
|
17850
|
+
userPermissionRole !== "link_viewer" && /* @__PURE__ */ React28.createElement(
|
|
17800
17851
|
XViewSidebar,
|
|
17801
17852
|
{
|
|
17802
17853
|
dbNodes: searchableDbNodes,
|
|
@@ -17817,10 +17868,10 @@ function XViewScene({
|
|
|
17817
17868
|
userRole: userPermissionRole,
|
|
17818
17869
|
viewMembers,
|
|
17819
17870
|
milestones: ((_c = sceneDataRef.current) == null ? void 0 : _c.milestones) || [],
|
|
17820
|
-
|
|
17871
|
+
onOpenMilestoneManager: () => setIsMilestoneManagerOpen(true)
|
|
17821
17872
|
}
|
|
17822
17873
|
),
|
|
17823
|
-
creationMode.isActive && /* @__PURE__ */
|
|
17874
|
+
creationMode.isActive && /* @__PURE__ */ React28.createElement(
|
|
17824
17875
|
InSceneCreationForm,
|
|
17825
17876
|
{
|
|
17826
17877
|
onSave: (data) => userActionHandlers.handleSaveNode(actionHandlerContext, data),
|
|
@@ -17852,7 +17903,7 @@ function XViewScene({
|
|
|
17852
17903
|
availableAncestries: allAvailableAncestries
|
|
17853
17904
|
}
|
|
17854
17905
|
),
|
|
17855
|
-
versionMode.isActive && /* @__PURE__ */
|
|
17906
|
+
versionMode.isActive && /* @__PURE__ */ React28.createElement(
|
|
17856
17907
|
InSceneVersionForm,
|
|
17857
17908
|
{
|
|
17858
17909
|
onSave: (data) => userActionHandlers.handleSaveVersionNode(actionHandlerContext, data),
|
|
@@ -17878,7 +17929,7 @@ function XViewScene({
|
|
|
17878
17929
|
availableAncestries: allAvailableAncestries
|
|
17879
17930
|
}
|
|
17880
17931
|
),
|
|
17881
|
-
questMode.isActive && /* @__PURE__ */
|
|
17932
|
+
questMode.isActive && /* @__PURE__ */ React28.createElement(
|
|
17882
17933
|
InSceneQuestForm,
|
|
17883
17934
|
{
|
|
17884
17935
|
onSave: (data) => handleSaveQuestNode(actionHandlerContext, data),
|
|
@@ -17906,7 +17957,7 @@ function XViewScene({
|
|
|
17906
17957
|
onUpdateMilestones: handleUpdateMilestones
|
|
17907
17958
|
}
|
|
17908
17959
|
),
|
|
17909
|
-
readingMode.isActive && readingMode.ancestry && /* @__PURE__ */
|
|
17960
|
+
readingMode.isActive && readingMode.ancestry && /* @__PURE__ */ React28.createElement(
|
|
17910
17961
|
"div",
|
|
17911
17962
|
{
|
|
17912
17963
|
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"}`,
|
|
@@ -17919,7 +17970,7 @@ function XViewScene({
|
|
|
17919
17970
|
maxWidth: "92vw"
|
|
17920
17971
|
}
|
|
17921
17972
|
},
|
|
17922
|
-
/* @__PURE__ */
|
|
17973
|
+
/* @__PURE__ */ React28.createElement(
|
|
17923
17974
|
"div",
|
|
17924
17975
|
{
|
|
17925
17976
|
onPointerDown: (e) => {
|
|
@@ -17930,7 +17981,7 @@ function XViewScene({
|
|
|
17930
17981
|
title: "Arraste para redimensionar"
|
|
17931
17982
|
}
|
|
17932
17983
|
),
|
|
17933
|
-
/* @__PURE__ */
|
|
17984
|
+
/* @__PURE__ */ React28.createElement(
|
|
17934
17985
|
DescriptionReadModePanel,
|
|
17935
17986
|
{
|
|
17936
17987
|
key: readingMode.branchStack.length > 0 ? readingMode.branchStack[readingMode.branchStack.length - 1].branchId : readingMode.ancestry.ancestry_id,
|
|
@@ -17965,7 +18016,7 @@ function XViewScene({
|
|
|
17965
18016
|
}
|
|
17966
18017
|
)
|
|
17967
18018
|
),
|
|
17968
|
-
ancestryMode.isActive && ancestryMode.tree && /* @__PURE__ */
|
|
18019
|
+
ancestryMode.isActive && ancestryMode.tree && /* @__PURE__ */ React28.createElement(
|
|
17969
18020
|
CreateAncestryPanel,
|
|
17970
18021
|
{
|
|
17971
18022
|
ancestryMode,
|
|
@@ -18001,7 +18052,7 @@ function XViewScene({
|
|
|
18001
18052
|
onRenderAbstractionTree: (data, targetId) => handleRenderAbstractionTree(data, targetId)
|
|
18002
18053
|
}
|
|
18003
18054
|
),
|
|
18004
|
-
editingAncestryRel.visible && /* @__PURE__ */
|
|
18055
|
+
editingAncestryRel.visible && /* @__PURE__ */ React28.createElement(
|
|
18005
18056
|
AncestryRelationshipPanel,
|
|
18006
18057
|
{
|
|
18007
18058
|
data: editingAncestryRel.data,
|
|
@@ -18015,7 +18066,7 @@ function XViewScene({
|
|
|
18015
18066
|
onUploadFile: upload_file_action
|
|
18016
18067
|
}
|
|
18017
18068
|
),
|
|
18018
|
-
detailsNode && detailsNode.is_quest && /* @__PURE__ */
|
|
18069
|
+
detailsNode && detailsNode.is_quest && /* @__PURE__ */ React28.createElement(
|
|
18019
18070
|
QuestDetailsPanel,
|
|
18020
18071
|
{
|
|
18021
18072
|
node: detailsNode,
|
|
@@ -18040,7 +18091,7 @@ function XViewScene({
|
|
|
18040
18091
|
onUpdateMilestones: handleUpdateMilestones
|
|
18041
18092
|
}
|
|
18042
18093
|
),
|
|
18043
|
-
detailsNode && !detailsNode.is_quest && /* @__PURE__ */
|
|
18094
|
+
detailsNode && !detailsNode.is_quest && /* @__PURE__ */ React28.createElement(
|
|
18044
18095
|
NodeDetailsPanel,
|
|
18045
18096
|
{
|
|
18046
18097
|
node: detailsNode,
|
|
@@ -18072,7 +18123,7 @@ function XViewScene({
|
|
|
18072
18123
|
currentDatasetName: detailsNodeDatasetInfo == null ? void 0 : detailsNodeDatasetInfo.datasetName
|
|
18073
18124
|
}
|
|
18074
18125
|
),
|
|
18075
|
-
detailsLink && /* @__PURE__ */
|
|
18126
|
+
detailsLink && /* @__PURE__ */ React28.createElement(
|
|
18076
18127
|
RelationshipDetailsPanel,
|
|
18077
18128
|
{
|
|
18078
18129
|
link: detailsLink,
|
|
@@ -18086,7 +18137,7 @@ function XViewScene({
|
|
|
18086
18137
|
userRole: userPermissionRole
|
|
18087
18138
|
}
|
|
18088
18139
|
),
|
|
18089
|
-
ancestryLinkDetails && /* @__PURE__ */
|
|
18140
|
+
ancestryLinkDetails && /* @__PURE__ */ React28.createElement(
|
|
18090
18141
|
AncestryLinkDetailsPanel,
|
|
18091
18142
|
{
|
|
18092
18143
|
data: ancestryLinkDetails,
|
|
@@ -18097,7 +18148,7 @@ function XViewScene({
|
|
|
18097
18148
|
onUploadFile: upload_file_action
|
|
18098
18149
|
}
|
|
18099
18150
|
),
|
|
18100
|
-
/* @__PURE__ */
|
|
18151
|
+
/* @__PURE__ */ React28.createElement(
|
|
18101
18152
|
"div",
|
|
18102
18153
|
{
|
|
18103
18154
|
ref: tooltipRef,
|
|
@@ -18124,7 +18175,7 @@ function XViewScene({
|
|
|
18124
18175
|
}
|
|
18125
18176
|
}
|
|
18126
18177
|
),
|
|
18127
|
-
/* @__PURE__ */
|
|
18178
|
+
/* @__PURE__ */ React28.createElement(
|
|
18128
18179
|
ContextMenu,
|
|
18129
18180
|
{
|
|
18130
18181
|
data: contextMenu,
|
|
@@ -18157,7 +18208,7 @@ function XViewScene({
|
|
|
18157
18208
|
onFinishQuest: handleFinishQuestQuick
|
|
18158
18209
|
}
|
|
18159
18210
|
),
|
|
18160
|
-
/* @__PURE__ */
|
|
18211
|
+
/* @__PURE__ */ React28.createElement(
|
|
18161
18212
|
MultiNodeContextMenu,
|
|
18162
18213
|
{
|
|
18163
18214
|
data: multiContextMenu,
|
|
@@ -18177,7 +18228,7 @@ function XViewScene({
|
|
|
18177
18228
|
)
|
|
18178
18229
|
}
|
|
18179
18230
|
),
|
|
18180
|
-
/* @__PURE__ */
|
|
18231
|
+
/* @__PURE__ */ React28.createElement(
|
|
18181
18232
|
RelationshipContextMenu,
|
|
18182
18233
|
{
|
|
18183
18234
|
data: relationshipMenu,
|
|
@@ -18195,14 +18246,14 @@ function XViewScene({
|
|
|
18195
18246
|
onDelete: (data) => userActionHandlers.handleDeleteLink(actionHandlerContext, data)
|
|
18196
18247
|
}
|
|
18197
18248
|
),
|
|
18198
|
-
/* @__PURE__ */
|
|
18249
|
+
/* @__PURE__ */ React28.createElement(
|
|
18199
18250
|
ImageViewer,
|
|
18200
18251
|
{
|
|
18201
18252
|
data: imageViewer,
|
|
18202
18253
|
onClose: () => setImageViewer({ ...imageViewer, visible: false })
|
|
18203
18254
|
}
|
|
18204
18255
|
),
|
|
18205
|
-
/* @__PURE__ */
|
|
18256
|
+
/* @__PURE__ */ React28.createElement(
|
|
18206
18257
|
AncestryBoard,
|
|
18207
18258
|
{
|
|
18208
18259
|
isOpen: isAncestryBoardOpen,
|
|
@@ -18215,20 +18266,29 @@ function XViewScene({
|
|
|
18215
18266
|
userRole: userPermissionRole
|
|
18216
18267
|
}
|
|
18217
18268
|
),
|
|
18218
|
-
/* @__PURE__ */
|
|
18269
|
+
/* @__PURE__ */ React28.createElement(
|
|
18270
|
+
MilestoneManager,
|
|
18271
|
+
{
|
|
18272
|
+
isOpen: isMilestoneManagerOpen,
|
|
18273
|
+
onClose: () => setIsMilestoneManagerOpen(false),
|
|
18274
|
+
milestones: ((_k = sceneDataRef.current) == null ? void 0 : _k.milestones) || [],
|
|
18275
|
+
onUpdateMilestones: handleUpdateMilestones
|
|
18276
|
+
}
|
|
18277
|
+
),
|
|
18278
|
+
/* @__PURE__ */ React28.createElement(
|
|
18219
18279
|
ImportParentFileModal,
|
|
18220
18280
|
{
|
|
18221
18281
|
isOpen: isImportModalOpen,
|
|
18222
18282
|
onClose: () => setIsImportModalOpen(false),
|
|
18223
18283
|
onConfirm: handleConfirmImport,
|
|
18224
18284
|
session,
|
|
18225
|
-
parentDbs: ((
|
|
18285
|
+
parentDbs: ((_l = sceneDataRef.current) == null ? void 0 : _l.parent_dbs) || [],
|
|
18226
18286
|
onFetchAvailableFiles: import_parent_file_modal_get,
|
|
18227
18287
|
currentViewName: viewParams == null ? void 0 : viewParams.name,
|
|
18228
18288
|
currentAncestries: ancestryDataRef.current || []
|
|
18229
18289
|
}
|
|
18230
18290
|
),
|
|
18231
|
-
invalidTargetError && /* @__PURE__ */
|
|
18291
|
+
invalidTargetError && /* @__PURE__ */ React28.createElement(
|
|
18232
18292
|
"div",
|
|
18233
18293
|
{
|
|
18234
18294
|
className: "ui-overlay",
|
|
@@ -18253,13 +18313,13 @@ function XViewScene({
|
|
|
18253
18313
|
animation: "fadeInDown 0.5s cubic-bezier(0.16, 1, 0.3, 1)"
|
|
18254
18314
|
}
|
|
18255
18315
|
},
|
|
18256
|
-
/* @__PURE__ */
|
|
18316
|
+
/* @__PURE__ */ React28.createElement("style", null, `
|
|
18257
18317
|
@keyframes fadeInDown {
|
|
18258
18318
|
from { opacity: 0; transform: translate(-50%, -20px); }
|
|
18259
18319
|
to { opacity: 1; transform: translate(-50%, 0); }
|
|
18260
18320
|
}
|
|
18261
18321
|
`),
|
|
18262
|
-
/* @__PURE__ */
|
|
18322
|
+
/* @__PURE__ */ React28.createElement(
|
|
18263
18323
|
"svg",
|
|
18264
18324
|
{
|
|
18265
18325
|
width: "20",
|
|
@@ -18271,12 +18331,12 @@ function XViewScene({
|
|
|
18271
18331
|
strokeLinecap: "round",
|
|
18272
18332
|
strokeLinejoin: "round"
|
|
18273
18333
|
},
|
|
18274
|
-
/* @__PURE__ */
|
|
18275
|
-
/* @__PURE__ */
|
|
18276
|
-
/* @__PURE__ */
|
|
18334
|
+
/* @__PURE__ */ React28.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
18335
|
+
/* @__PURE__ */ React28.createElement("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
18336
|
+
/* @__PURE__ */ React28.createElement("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
18277
18337
|
),
|
|
18278
|
-
/* @__PURE__ */
|
|
18279
|
-
/* @__PURE__ */
|
|
18338
|
+
/* @__PURE__ */ React28.createElement("span", { style: { fontSize: "14px", fontWeight: 500 } }, invalidTargetError),
|
|
18339
|
+
/* @__PURE__ */ React28.createElement(
|
|
18280
18340
|
"button",
|
|
18281
18341
|
{
|
|
18282
18342
|
onClick: () => setInvalidTargetError(null),
|