@lv-x-software-house/x_view 1.2.6-dev.81 → 1.2.6-dev.83

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 CHANGED
@@ -8792,7 +8792,7 @@ var NodeItem2 = ({ nodeData, onSelectParent, onRemoveNode, onMoveNode, selectedP
8792
8792
  };
8793
8793
  function CreateQuestTreePanel({
8794
8794
  questTreeMode,
8795
- setQuestTreeMode: setQuestTreeMode2,
8795
+ setQuestTreeMode,
8796
8796
  onSave,
8797
8797
  onClose
8798
8798
  }) {
@@ -8814,11 +8814,11 @@ function CreateQuestTreePanel({
8814
8814
  maxWidth: maxPanelW
8815
8815
  });
8816
8816
  const handleSelectParent = (nodeId) => {
8817
- setQuestTreeMode2((prev) => ({ ...prev, selectedParentId: nodeId }));
8817
+ setQuestTreeMode((prev) => ({ ...prev, selectedParentId: nodeId }));
8818
8818
  };
8819
8819
  const handleToggleAddMode = () => {
8820
8820
  const isAbstraction = activeTab === "abstraction";
8821
- setQuestTreeMode2((prev) => {
8821
+ setQuestTreeMode((prev) => {
8822
8822
  var _a2, _b2, _c2, _d;
8823
8823
  return isAbstraction ? { ...prev, isAddingAbstractionNodes: !prev.isAddingAbstractionNodes, selectedParentId: ((_b2 = (_a2 = prev.abstraction_tree) == null ? void 0 : _a2.node) == null ? void 0 : _b2.id) || prev.selectedParentId } : { ...prev, isAddingNodes: !prev.isAddingNodes, selectedParentId: ((_d = (_c2 = prev.tree) == null ? void 0 : _c2.node) == null ? void 0 : _d.id) || prev.selectedParentId };
8824
8824
  });
@@ -8827,7 +8827,7 @@ function CreateQuestTreePanel({
8827
8827
  if (!Array.isArray(pathToRemove) || pathToRemove.length === 0) return;
8828
8828
  const isAbstraction = activeTab === "abstraction";
8829
8829
  const treeKey = isAbstraction ? "abstraction_tree" : "tree";
8830
- setQuestTreeMode2((prev) => {
8830
+ setQuestTreeMode((prev) => {
8831
8831
  if (!prev[treeKey]) return prev;
8832
8832
  const newTree = JSON.parse(JSON.stringify(prev[treeKey]));
8833
8833
  let currentParent = newTree;
@@ -8844,7 +8844,7 @@ function CreateQuestTreePanel({
8844
8844
  }
8845
8845
  return { ...prev, [treeKey]: newTree };
8846
8846
  });
8847
- }, [setQuestTreeMode2, activeTab]);
8847
+ }, [setQuestTreeMode, activeTab]);
8848
8848
  const handleMoveNode = (sourceId, targetId) => {
8849
8849
  const isAbstraction = activeTab === "abstraction";
8850
8850
  const treeKey = isAbstraction ? "abstraction_tree" : "tree";
@@ -8884,7 +8884,7 @@ function CreateQuestTreePanel({
8884
8884
  };
8885
8885
  if (removeSourceNode(rootTreeClone) && movedNodeData) {
8886
8886
  if (insertTargetNode(rootTreeClone)) {
8887
- setQuestTreeMode2((prev) => ({ ...prev, [treeKey]: rootTreeClone }));
8887
+ setQuestTreeMode((prev) => ({ ...prev, [treeKey]: rootTreeClone }));
8888
8888
  setHasUnsavedChanges(true);
8889
8889
  } else {
8890
8890
  alert("N\xE3o \xE9 poss\xEDvel mover um node para dentro de seus pr\xF3prios descendentes.");
@@ -8912,14 +8912,14 @@ function CreateQuestTreePanel({
8912
8912
  id: questTreeMode.questNodeId,
8913
8913
  name: questTreeMode.questNodeName || "Quest Principal"
8914
8914
  };
8915
- setQuestTreeMode2((prev) => ({
8915
+ setQuestTreeMode((prev) => ({
8916
8916
  ...prev,
8917
8917
  tree: prev.tree || { node: rootNode, children: [] },
8918
8918
  abstraction_tree: prev.abstraction_tree || { node: rootNode, children: [] },
8919
8919
  selectedParentId: rootNode.id
8920
8920
  }));
8921
8921
  }
8922
- }, [tree, abstraction_tree, questTreeMode.questNodeId, setQuestTreeMode2]);
8922
+ }, [tree, abstraction_tree, questTreeMode.questNodeId, setQuestTreeMode]);
8923
8923
  return /* @__PURE__ */ import_react12.default.createElement(
8924
8924
  "div",
8925
8925
  {
@@ -8954,7 +8954,7 @@ function CreateQuestTreePanel({
8954
8954
  {
8955
8955
  onClick: () => {
8956
8956
  setActiveTab("tree");
8957
- setQuestTreeMode2((prev) => ({ ...prev, isAddingNodes: true, isAddingAbstractionNodes: false }));
8957
+ setQuestTreeMode((prev) => ({ ...prev, isAddingNodes: true, isAddingAbstractionNodes: false }));
8958
8958
  },
8959
8959
  className: `flex-1 flex items-center justify-center gap-2 py-2 px-3 rounded-md text-sm font-medium transition-all ${activeTab === "tree" ? "bg-indigo-600 text-white shadow-lg" : "bg-slate-800 text-slate-400 hover:bg-slate-700 hover:text-slate-200"}`
8960
8960
  },
@@ -8965,7 +8965,7 @@ function CreateQuestTreePanel({
8965
8965
  {
8966
8966
  onClick: () => {
8967
8967
  setActiveTab("abstraction");
8968
- setQuestTreeMode2((prev) => ({ ...prev, isAddingNodes: false, isAddingAbstractionNodes: true }));
8968
+ setQuestTreeMode((prev) => ({ ...prev, isAddingNodes: false, isAddingAbstractionNodes: true }));
8969
8969
  },
8970
8970
  className: `flex-1 flex items-center justify-center gap-2 py-2 px-3 rounded-md text-sm font-medium transition-all ${activeTab === "abstraction" ? "bg-indigo-600 text-white shadow-lg" : "bg-slate-800 text-slate-400 hover:bg-slate-700 hover:text-slate-200"}`
8971
8971
  },
@@ -10775,44 +10775,6 @@ function InSceneQuestForm({
10775
10775
  },
10776
10776
  /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500" }, "Criar novo milestone"),
10777
10777
  /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-white" }, '"', milestoneInput, '"')
10778
- )))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ import_react19.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider flex items-center justify-between" }, "Estruturas Visuais"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "bg-slate-800/70 p-2 rounded-lg border border-white/10 flex flex-col gap-2" }, /* @__PURE__ */ import_react19.default.createElement(
10779
- "button",
10780
- {
10781
- type: "button",
10782
- onClick: () => {
10783
- if (setQuestTreeMode) {
10784
- setQuestTreeMode((prev) => ({
10785
- ...prev,
10786
- isActive: true,
10787
- isAddingNodes: true,
10788
- questTempData: true
10789
- }));
10790
- }
10791
- },
10792
- className: "flex items-center gap-2 px-3 py-2 bg-indigo-500/20 hover:bg-indigo-500/40 text-indigo-200 text-sm font-medium rounded-md transition-colors w-full justify-center"
10793
- },
10794
- /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiGitBranch, { className: "text-indigo-400" }),
10795
- " Configurar \xC1rvores"
10796
- ), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ import_react19.default.createElement(
10797
- "button",
10798
- {
10799
- type: "button",
10800
- onClick: () => {
10801
- alert("Salve a Quest antes de renderizar suas estruturas visuais.");
10802
- },
10803
- className: "flex-1 flex items-center justify-center gap-2 px-2 py-1.5 bg-slate-700 hover:bg-slate-600 text-slate-300 text-xs font-medium rounded-md transition-colors"
10804
- },
10805
- "Renderizar Horizontal"
10806
- ), /* @__PURE__ */ import_react19.default.createElement(
10807
- "button",
10808
- {
10809
- type: "button",
10810
- onClick: () => {
10811
- alert("Salve a Quest antes de renderizar suas estruturas visuais.");
10812
- },
10813
- className: "flex-1 flex items-center justify-center gap-2 px-2 py-1.5 bg-slate-700 hover:bg-slate-600 text-slate-300 text-xs font-medium rounded-md transition-colors"
10814
- },
10815
- "Renderizar Vertical"
10816
10778
  )))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-1.5 relative mt-4" }, /* @__PURE__ */ import_react19.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Depend\xEAncias (Quest Chain)"), /* @__PURE__ */ import_react19.default.createElement("div", { className: `relative w-full bg-slate-800/70 p-1.5 min-h-[42px] flex flex-wrap gap-1.5 rounded-lg border border-white/10 focus-within:ring-2 focus-within:ring-indigo-400/60 transition-all cursor-text` }, dependencyIds.map((id) => {
10817
10779
  const depNode = availableNodes.find((n) => String(n.id) === String(id));
10818
10780
  if (!depNode) return null;
@@ -11976,7 +11938,7 @@ function QuestDetailsPanel({
11976
11938
  onFocusNode,
11977
11939
  create_google_doc_action,
11978
11940
  view_google_folder_id,
11979
- setQuestTreeMode: setQuestTreeMode2,
11941
+ setQuestTreeMode,
11980
11942
  handleRenderQuestTree,
11981
11943
  handleRenderQuestAbstractionTree,
11982
11944
  style = {}
@@ -13035,7 +12997,7 @@ ${noteText}` : noteText : entry.notes,
13035
12997
  {
13036
12998
  type: "button",
13037
12999
  onClick: () => {
13038
- if (setQuestTreeMode2) {
13000
+ if (setQuestTreeMode) {
13039
13001
  const convertPersistedTree = (storedTree) => {
13040
13002
  if (!storedTree) return null;
13041
13003
  if (storedTree.node || storedTree.is_section) return storedTree;
@@ -13051,7 +13013,7 @@ ${noteText}` : noteText : entry.notes,
13051
13013
  const rootNode = { id: node == null ? void 0 : node.id, name: (node == null ? void 0 : node.raw_title) || (node == null ? void 0 : node.name) || "Quest Principal" };
13052
13014
  const existingTree = (node == null ? void 0 : node.quest_tree) ? convertPersistedTree(node.quest_tree) : { node: rootNode, children: [] };
13053
13015
  const existingAbstractionTree = (node == null ? void 0 : node.quest_abstraction_tree) ? convertPersistedTree(node.quest_abstraction_tree) : { node: rootNode, children: [] };
13054
- setQuestTreeMode2((prev) => ({
13016
+ setQuestTreeMode((prev) => ({
13055
13017
  ...prev,
13056
13018
  isActive: true,
13057
13019
  isAddingNodes: true,
@@ -15529,7 +15491,7 @@ function XViewScene({
15529
15491
  const [questMode, setQuestMode] = (0, import_react33.useState)({ isActive: false });
15530
15492
  const [hasFocusedInitial, setHasFocusedInitial] = (0, import_react33.useState)(false);
15531
15493
  const [hasOpenedInitialAncestry, setHasOpenedInitialAncestry] = (0, import_react33.useState)(false);
15532
- const [questTreeMode, setQuestTreeMode2] = (0, import_react33.useState)({
15494
+ const [questTreeMode, setQuestTreeMode] = (0, import_react33.useState)({
15533
15495
  isActive: false,
15534
15496
  questNodeId: null,
15535
15497
  questTempData: null,
@@ -17156,12 +17118,12 @@ function XViewScene({
17156
17118
  const activeTreeKey = isAbstraction ? "abstraction_tree" : "tree";
17157
17119
  let activeTree = qTree[activeTreeKey];
17158
17120
  let newTree = addChildToNode(activeTree, parentId, fullNodeData);
17159
- setQuestTreeMode2((prev) => ({
17121
+ setQuestTreeMode((prev) => ({
17160
17122
  ...prev,
17161
17123
  [activeTreeKey]: newTree
17162
17124
  }));
17163
17125
  } else {
17164
- setQuestTreeMode2((prev) => ({
17126
+ setQuestTreeMode((prev) => ({
17165
17127
  ...prev
17166
17128
  }));
17167
17129
  }
@@ -18086,6 +18048,14 @@ function XViewScene({
18086
18048
  if (nodeMesh) {
18087
18049
  nodeMesh.userData.questData = updatedNodeData;
18088
18050
  }
18051
+ if (detailsNode && String(detailsNode.id) === String(questNodeId)) {
18052
+ setDetailsNode((prev) => ({
18053
+ ...prev,
18054
+ quest_tree: formattedTree,
18055
+ quest_abstraction_tree: formattedAbstractionTree
18056
+ }));
18057
+ }
18058
+ setSceneVersion((v) => v + 1);
18089
18059
  }
18090
18060
  }
18091
18061
  }
@@ -18111,7 +18081,7 @@ function XViewScene({
18111
18081
  handleRenderAbstractionTree(treePayload);
18112
18082
  };
18113
18083
  const handleCloseQuestTree = () => {
18114
- setQuestTreeMode2({
18084
+ setQuestTreeMode({
18115
18085
  isActive: false,
18116
18086
  questNodeId: null,
18117
18087
  questTempData: null,
@@ -20356,7 +20326,7 @@ function XViewScene({
20356
20326
  CreateQuestTreePanel,
20357
20327
  {
20358
20328
  questTreeMode,
20359
- setQuestTreeMode: setQuestTreeMode2,
20329
+ setQuestTreeMode,
20360
20330
  onSave: handleSaveQuestTree,
20361
20331
  onClose: handleCloseQuestTree
20362
20332
  }
@@ -20389,10 +20359,7 @@ function XViewScene({
20389
20359
  milestones: ((_k = sceneDataRef.current) == null ? void 0 : _k.milestones) || [],
20390
20360
  onUpdateMilestones: handleUpdateMilestones,
20391
20361
  create_google_doc_action,
20392
- view_google_folder_id: (_l = sceneDataRef.current) == null ? void 0 : _l.view_google_folder_id,
20393
- setQuestTreeMode: setQuestTreeMode2,
20394
- handleRenderQuestTree,
20395
- handleRenderQuestAbstractionTree
20362
+ view_google_folder_id: (_l = sceneDataRef.current) == null ? void 0 : _l.view_google_folder_id
20396
20363
  }
20397
20364
  ),
20398
20365
  readingMode.isActive && readingMode.ancestry && /* @__PURE__ */ import_react33.default.createElement(
@@ -20530,7 +20497,7 @@ function XViewScene({
20530
20497
  onUpdateMilestones: handleUpdateMilestones,
20531
20498
  create_google_doc_action,
20532
20499
  view_google_folder_id: (_n = sceneDataRef.current) == null ? void 0 : _n.view_google_folder_id,
20533
- setQuestTreeMode: setQuestTreeMode2,
20500
+ setQuestTreeMode,
20534
20501
  handleRenderQuestTree,
20535
20502
  handleRenderQuestAbstractionTree,
20536
20503
  style: overlayHiddenStyle
package/dist/index.mjs CHANGED
@@ -8790,7 +8790,7 @@ var NodeItem2 = ({ nodeData, onSelectParent, onRemoveNode, onMoveNode, selectedP
8790
8790
  };
8791
8791
  function CreateQuestTreePanel({
8792
8792
  questTreeMode,
8793
- setQuestTreeMode: setQuestTreeMode2,
8793
+ setQuestTreeMode,
8794
8794
  onSave,
8795
8795
  onClose
8796
8796
  }) {
@@ -8812,11 +8812,11 @@ function CreateQuestTreePanel({
8812
8812
  maxWidth: maxPanelW
8813
8813
  });
8814
8814
  const handleSelectParent = (nodeId) => {
8815
- setQuestTreeMode2((prev) => ({ ...prev, selectedParentId: nodeId }));
8815
+ setQuestTreeMode((prev) => ({ ...prev, selectedParentId: nodeId }));
8816
8816
  };
8817
8817
  const handleToggleAddMode = () => {
8818
8818
  const isAbstraction = activeTab === "abstraction";
8819
- setQuestTreeMode2((prev) => {
8819
+ setQuestTreeMode((prev) => {
8820
8820
  var _a2, _b2, _c2, _d;
8821
8821
  return isAbstraction ? { ...prev, isAddingAbstractionNodes: !prev.isAddingAbstractionNodes, selectedParentId: ((_b2 = (_a2 = prev.abstraction_tree) == null ? void 0 : _a2.node) == null ? void 0 : _b2.id) || prev.selectedParentId } : { ...prev, isAddingNodes: !prev.isAddingNodes, selectedParentId: ((_d = (_c2 = prev.tree) == null ? void 0 : _c2.node) == null ? void 0 : _d.id) || prev.selectedParentId };
8822
8822
  });
@@ -8825,7 +8825,7 @@ function CreateQuestTreePanel({
8825
8825
  if (!Array.isArray(pathToRemove) || pathToRemove.length === 0) return;
8826
8826
  const isAbstraction = activeTab === "abstraction";
8827
8827
  const treeKey = isAbstraction ? "abstraction_tree" : "tree";
8828
- setQuestTreeMode2((prev) => {
8828
+ setQuestTreeMode((prev) => {
8829
8829
  if (!prev[treeKey]) return prev;
8830
8830
  const newTree = JSON.parse(JSON.stringify(prev[treeKey]));
8831
8831
  let currentParent = newTree;
@@ -8842,7 +8842,7 @@ function CreateQuestTreePanel({
8842
8842
  }
8843
8843
  return { ...prev, [treeKey]: newTree };
8844
8844
  });
8845
- }, [setQuestTreeMode2, activeTab]);
8845
+ }, [setQuestTreeMode, activeTab]);
8846
8846
  const handleMoveNode = (sourceId, targetId) => {
8847
8847
  const isAbstraction = activeTab === "abstraction";
8848
8848
  const treeKey = isAbstraction ? "abstraction_tree" : "tree";
@@ -8882,7 +8882,7 @@ function CreateQuestTreePanel({
8882
8882
  };
8883
8883
  if (removeSourceNode(rootTreeClone) && movedNodeData) {
8884
8884
  if (insertTargetNode(rootTreeClone)) {
8885
- setQuestTreeMode2((prev) => ({ ...prev, [treeKey]: rootTreeClone }));
8885
+ setQuestTreeMode((prev) => ({ ...prev, [treeKey]: rootTreeClone }));
8886
8886
  setHasUnsavedChanges(true);
8887
8887
  } else {
8888
8888
  alert("N\xE3o \xE9 poss\xEDvel mover um node para dentro de seus pr\xF3prios descendentes.");
@@ -8910,14 +8910,14 @@ function CreateQuestTreePanel({
8910
8910
  id: questTreeMode.questNodeId,
8911
8911
  name: questTreeMode.questNodeName || "Quest Principal"
8912
8912
  };
8913
- setQuestTreeMode2((prev) => ({
8913
+ setQuestTreeMode((prev) => ({
8914
8914
  ...prev,
8915
8915
  tree: prev.tree || { node: rootNode, children: [] },
8916
8916
  abstraction_tree: prev.abstraction_tree || { node: rootNode, children: [] },
8917
8917
  selectedParentId: rootNode.id
8918
8918
  }));
8919
8919
  }
8920
- }, [tree, abstraction_tree, questTreeMode.questNodeId, setQuestTreeMode2]);
8920
+ }, [tree, abstraction_tree, questTreeMode.questNodeId, setQuestTreeMode]);
8921
8921
  return /* @__PURE__ */ React11.createElement(
8922
8922
  "div",
8923
8923
  {
@@ -8952,7 +8952,7 @@ function CreateQuestTreePanel({
8952
8952
  {
8953
8953
  onClick: () => {
8954
8954
  setActiveTab("tree");
8955
- setQuestTreeMode2((prev) => ({ ...prev, isAddingNodes: true, isAddingAbstractionNodes: false }));
8955
+ setQuestTreeMode((prev) => ({ ...prev, isAddingNodes: true, isAddingAbstractionNodes: false }));
8956
8956
  },
8957
8957
  className: `flex-1 flex items-center justify-center gap-2 py-2 px-3 rounded-md text-sm font-medium transition-all ${activeTab === "tree" ? "bg-indigo-600 text-white shadow-lg" : "bg-slate-800 text-slate-400 hover:bg-slate-700 hover:text-slate-200"}`
8958
8958
  },
@@ -8963,7 +8963,7 @@ function CreateQuestTreePanel({
8963
8963
  {
8964
8964
  onClick: () => {
8965
8965
  setActiveTab("abstraction");
8966
- setQuestTreeMode2((prev) => ({ ...prev, isAddingNodes: false, isAddingAbstractionNodes: true }));
8966
+ setQuestTreeMode((prev) => ({ ...prev, isAddingNodes: false, isAddingAbstractionNodes: true }));
8967
8967
  },
8968
8968
  className: `flex-1 flex items-center justify-center gap-2 py-2 px-3 rounded-md text-sm font-medium transition-all ${activeTab === "abstraction" ? "bg-indigo-600 text-white shadow-lg" : "bg-slate-800 text-slate-400 hover:bg-slate-700 hover:text-slate-200"}`
8969
8969
  },
@@ -10210,8 +10210,7 @@ import {
10210
10210
  FiSearch as FiSearch5,
10211
10211
  FiCalendar,
10212
10212
  FiRepeat,
10213
- FiCopy as FiCopy3,
10214
- FiGitBranch as FiGitBranch4
10213
+ FiCopy as FiCopy3
10215
10214
  } from "react-icons/fi";
10216
10215
  import { AiOutlineLoading3Quarters as AiOutlineLoading3Quarters2 } from "react-icons/ai";
10217
10216
 
@@ -10802,44 +10801,6 @@ function InSceneQuestForm({
10802
10801
  },
10803
10802
  /* @__PURE__ */ React18.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500" }, "Criar novo milestone"),
10804
10803
  /* @__PURE__ */ React18.createElement("span", { className: "text-white" }, '"', milestoneInput, '"')
10805
- )))), /* @__PURE__ */ React18.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React18.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider flex items-center justify-between" }, "Estruturas Visuais"), /* @__PURE__ */ React18.createElement("div", { className: "bg-slate-800/70 p-2 rounded-lg border border-white/10 flex flex-col gap-2" }, /* @__PURE__ */ React18.createElement(
10806
- "button",
10807
- {
10808
- type: "button",
10809
- onClick: () => {
10810
- if (setQuestTreeMode) {
10811
- setQuestTreeMode((prev) => ({
10812
- ...prev,
10813
- isActive: true,
10814
- isAddingNodes: true,
10815
- questTempData: true
10816
- }));
10817
- }
10818
- },
10819
- className: "flex items-center gap-2 px-3 py-2 bg-indigo-500/20 hover:bg-indigo-500/40 text-indigo-200 text-sm font-medium rounded-md transition-colors w-full justify-center"
10820
- },
10821
- /* @__PURE__ */ React18.createElement(FiGitBranch4, { className: "text-indigo-400" }),
10822
- " Configurar \xC1rvores"
10823
- ), /* @__PURE__ */ React18.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React18.createElement(
10824
- "button",
10825
- {
10826
- type: "button",
10827
- onClick: () => {
10828
- alert("Salve a Quest antes de renderizar suas estruturas visuais.");
10829
- },
10830
- className: "flex-1 flex items-center justify-center gap-2 px-2 py-1.5 bg-slate-700 hover:bg-slate-600 text-slate-300 text-xs font-medium rounded-md transition-colors"
10831
- },
10832
- "Renderizar Horizontal"
10833
- ), /* @__PURE__ */ React18.createElement(
10834
- "button",
10835
- {
10836
- type: "button",
10837
- onClick: () => {
10838
- alert("Salve a Quest antes de renderizar suas estruturas visuais.");
10839
- },
10840
- className: "flex-1 flex items-center justify-center gap-2 px-2 py-1.5 bg-slate-700 hover:bg-slate-600 text-slate-300 text-xs font-medium rounded-md transition-colors"
10841
- },
10842
- "Renderizar Vertical"
10843
10804
  )))), /* @__PURE__ */ React18.createElement("div", { className: "space-y-1.5 relative mt-4" }, /* @__PURE__ */ React18.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Depend\xEAncias (Quest Chain)"), /* @__PURE__ */ React18.createElement("div", { className: `relative w-full bg-slate-800/70 p-1.5 min-h-[42px] flex flex-wrap gap-1.5 rounded-lg border border-white/10 focus-within:ring-2 focus-within:ring-indigo-400/60 transition-all cursor-text` }, dependencyIds.map((id) => {
10844
10805
  const depNode = availableNodes.find((n) => String(n.id) === String(id));
10845
10806
  if (!depNode) return null;
@@ -11897,7 +11858,7 @@ function NodeDetailsPanel({
11897
11858
  // src/components/QuestDetailsPanel.jsx
11898
11859
  import React21, { useState as useState20, useEffect as useEffect17, useRef as useRef14 } from "react";
11899
11860
  import { v4 as uuidv49 } from "uuid";
11900
- import { FiPlus as FiPlus9, FiX as FiX7, FiCheck as FiCheck11, FiEdit2 as FiEdit28, FiLoader as FiLoader3, FiBookOpen as FiBookOpen4, FiLink as FiLink7, FiTarget as FiTarget3, FiChevronDown as FiChevronDown7, FiUser as FiUser3, FiSearch as FiSearch7, FiRepeat as FiRepeat2, FiCalendar as FiCalendar2, FiImage as FiImage4, FiCopy as FiCopy4, FiGitBranch as FiGitBranch5 } from "react-icons/fi";
11861
+ import { FiPlus as FiPlus9, FiX as FiX7, FiCheck as FiCheck11, FiEdit2 as FiEdit28, FiLoader as FiLoader3, FiBookOpen as FiBookOpen4, FiLink as FiLink7, FiTarget as FiTarget3, FiChevronDown as FiChevronDown7, FiUser as FiUser3, FiSearch as FiSearch7, FiRepeat as FiRepeat2, FiCalendar as FiCalendar2, FiImage as FiImage4, FiCopy as FiCopy4, FiGitBranch as FiGitBranch4 } from "react-icons/fi";
11901
11862
 
11902
11863
  // src/components/QuestTimeline.jsx
11903
11864
  import React20 from "react";
@@ -12015,7 +11976,7 @@ function QuestDetailsPanel({
12015
11976
  onFocusNode,
12016
11977
  create_google_doc_action,
12017
11978
  view_google_folder_id,
12018
- setQuestTreeMode: setQuestTreeMode2,
11979
+ setQuestTreeMode,
12019
11980
  handleRenderQuestTree,
12020
11981
  handleRenderQuestAbstractionTree,
12021
11982
  style = {}
@@ -13069,12 +13030,12 @@ ${noteText}` : noteText : entry.notes,
13069
13030
  },
13070
13031
  /* @__PURE__ */ React21.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React21.createElement("path", { d: "M12 19V5M5 12l7 7 7-7" })),
13071
13032
  "Retornar para Opera\xE7\xE3o"
13072
- ))), /* @__PURE__ */ React21.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React21.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React21.createElement("div", { className: "relative group min-h-[60px] bg-slate-800/40 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React21.createElement(DescriptionDisplay, { description, savedSections: existingSections, availableNodes, availableAncestries, onOpenReference, onMentionClick, onImageClick: handleImageClickFromText, onSaveDescription: handleSaveDescriptionInline }), /* @__PURE__ */ React21.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ React21.createElement("button", { type: "button", onClick: () => setIsReadMode(true), className: `p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors ${canEdit ? "border-r border-white/5" : ""}`, title: "Modo de Leitura" }, /* @__PURE__ */ React21.createElement(FiBookOpen4, { size: 14 })), canEdit && /* @__PURE__ */ React21.createElement("button", { type: "button", onClick: () => setIsDescriptionModalOpen(true), className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors", title: "Editar descri\xE7\xE3o (Modo de Escrita)" }, /* @__PURE__ */ React21.createElement(FiEdit28, { size: 14 }))), canEdit && !description && /* @__PURE__ */ React21.createElement("div", { onClick: () => setIsDescriptionModalOpen(true), className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text" }, "Adicionar descri\xE7\xE3o..."))), /* @__PURE__ */ React21.createElement("div", { className: "pt-2 border-t border-white/5 space-y-3" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21.createElement(FiGitBranch5, { className: "text-indigo-400", size: 14 }), /* @__PURE__ */ React21.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "Estruturas Visuais"))), /* @__PURE__ */ React21.createElement("div", { className: "bg-slate-900/60 p-2 rounded-xl border border-white/10 flex flex-col gap-2" }, /* @__PURE__ */ React21.createElement(
13033
+ ))), /* @__PURE__ */ React21.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React21.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React21.createElement("div", { className: "relative group min-h-[60px] bg-slate-800/40 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React21.createElement(DescriptionDisplay, { description, savedSections: existingSections, availableNodes, availableAncestries, onOpenReference, onMentionClick, onImageClick: handleImageClickFromText, onSaveDescription: handleSaveDescriptionInline }), /* @__PURE__ */ React21.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ React21.createElement("button", { type: "button", onClick: () => setIsReadMode(true), className: `p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors ${canEdit ? "border-r border-white/5" : ""}`, title: "Modo de Leitura" }, /* @__PURE__ */ React21.createElement(FiBookOpen4, { size: 14 })), canEdit && /* @__PURE__ */ React21.createElement("button", { type: "button", onClick: () => setIsDescriptionModalOpen(true), className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors", title: "Editar descri\xE7\xE3o (Modo de Escrita)" }, /* @__PURE__ */ React21.createElement(FiEdit28, { size: 14 }))), canEdit && !description && /* @__PURE__ */ React21.createElement("div", { onClick: () => setIsDescriptionModalOpen(true), className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text" }, "Adicionar descri\xE7\xE3o..."))), /* @__PURE__ */ React21.createElement("div", { className: "pt-2 border-t border-white/5 space-y-3" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React21.createElement(FiGitBranch4, { className: "text-indigo-400", size: 14 }), /* @__PURE__ */ React21.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "Estruturas Visuais"))), /* @__PURE__ */ React21.createElement("div", { className: "bg-slate-900/60 p-2 rounded-xl border border-white/10 flex flex-col gap-2" }, /* @__PURE__ */ React21.createElement(
13073
13034
  "button",
13074
13035
  {
13075
13036
  type: "button",
13076
13037
  onClick: () => {
13077
- if (setQuestTreeMode2) {
13038
+ if (setQuestTreeMode) {
13078
13039
  const convertPersistedTree = (storedTree) => {
13079
13040
  if (!storedTree) return null;
13080
13041
  if (storedTree.node || storedTree.is_section) return storedTree;
@@ -13090,7 +13051,7 @@ ${noteText}` : noteText : entry.notes,
13090
13051
  const rootNode = { id: node == null ? void 0 : node.id, name: (node == null ? void 0 : node.raw_title) || (node == null ? void 0 : node.name) || "Quest Principal" };
13091
13052
  const existingTree = (node == null ? void 0 : node.quest_tree) ? convertPersistedTree(node.quest_tree) : { node: rootNode, children: [] };
13092
13053
  const existingAbstractionTree = (node == null ? void 0 : node.quest_abstraction_tree) ? convertPersistedTree(node.quest_abstraction_tree) : { node: rootNode, children: [] };
13093
- setQuestTreeMode2((prev) => ({
13054
+ setQuestTreeMode((prev) => ({
13094
13055
  ...prev,
13095
13056
  isActive: true,
13096
13057
  isAddingNodes: true,
@@ -13104,7 +13065,7 @@ ${noteText}` : noteText : entry.notes,
13104
13065
  },
13105
13066
  className: `flex items-center gap-2 px-3 py-2 bg-indigo-500/10 hover:bg-indigo-500/30 text-indigo-300 text-xs font-medium rounded-lg transition-colors w-full justify-center border border-indigo-500/20 ${!canEdit ? "opacity-50 pointer-events-none" : ""}`
13106
13067
  },
13107
- /* @__PURE__ */ React21.createElement(FiGitBranch5, { className: "text-indigo-400" }),
13068
+ /* @__PURE__ */ React21.createElement(FiGitBranch4, { className: "text-indigo-400" }),
13108
13069
  " Configurar \xC1rvores"
13109
13070
  ), /* @__PURE__ */ React21.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React21.createElement(
13110
13071
  "button",
@@ -14278,7 +14239,7 @@ import {
14278
14239
  FiX as FiX8,
14279
14240
  FiBox as FiBox2,
14280
14241
  FiCheckSquare as FiCheckSquare4,
14281
- FiGitBranch as FiGitBranch7,
14242
+ FiGitBranch as FiGitBranch6,
14282
14243
  FiFolder as FiFolder4,
14283
14244
  FiChevronRight as FiChevronRight7,
14284
14245
  FiCornerUpLeft as FiCornerUpLeft3
@@ -14290,11 +14251,11 @@ import React29, { useEffect as useEffect23, useRef as useRef19, useState as useS
14290
14251
 
14291
14252
  // src/components/MentionPopover.jsx
14292
14253
  import React28, { useEffect as useEffect22, useRef as useRef18, useState as useState26, useMemo as useMemo12 } from "react";
14293
- import { FiLayers as FiLayers7, FiCheckSquare as FiCheckSquare3, FiGitBranch as FiGitBranch6, FiBox } from "react-icons/fi";
14254
+ import { FiLayers as FiLayers7, FiCheckSquare as FiCheckSquare3, FiGitBranch as FiGitBranch5, FiBox } from "react-icons/fi";
14294
14255
  var TYPE_CONFIG = {
14295
14256
  ancestry: { Icon: FiLayers7, color: "text-indigo-400", label: "Ancestralidade" },
14296
14257
  quest: { Icon: FiCheckSquare3, color: "text-emerald-400", label: "Quest" },
14297
- version: { Icon: FiGitBranch6, color: "text-amber-400", label: "Vers\xE3o" },
14258
+ version: { Icon: FiGitBranch5, color: "text-amber-400", label: "Vers\xE3o" },
14298
14259
  node: { Icon: FiBox, color: "text-slate-400", label: "Node" }
14299
14260
  };
14300
14261
  function MentionPopover({ query, items, position, onSelect, onClose }) {
@@ -15593,7 +15554,7 @@ function XViewScene({
15593
15554
  const [questMode, setQuestMode] = useState30({ isActive: false });
15594
15555
  const [hasFocusedInitial, setHasFocusedInitial] = useState30(false);
15595
15556
  const [hasOpenedInitialAncestry, setHasOpenedInitialAncestry] = useState30(false);
15596
- const [questTreeMode, setQuestTreeMode2] = useState30({
15557
+ const [questTreeMode, setQuestTreeMode] = useState30({
15597
15558
  isActive: false,
15598
15559
  questNodeId: null,
15599
15560
  questTempData: null,
@@ -17220,12 +17181,12 @@ function XViewScene({
17220
17181
  const activeTreeKey = isAbstraction ? "abstraction_tree" : "tree";
17221
17182
  let activeTree = qTree[activeTreeKey];
17222
17183
  let newTree = addChildToNode(activeTree, parentId, fullNodeData);
17223
- setQuestTreeMode2((prev) => ({
17184
+ setQuestTreeMode((prev) => ({
17224
17185
  ...prev,
17225
17186
  [activeTreeKey]: newTree
17226
17187
  }));
17227
17188
  } else {
17228
- setQuestTreeMode2((prev) => ({
17189
+ setQuestTreeMode((prev) => ({
17229
17190
  ...prev
17230
17191
  }));
17231
17192
  }
@@ -18150,6 +18111,14 @@ function XViewScene({
18150
18111
  if (nodeMesh) {
18151
18112
  nodeMesh.userData.questData = updatedNodeData;
18152
18113
  }
18114
+ if (detailsNode && String(detailsNode.id) === String(questNodeId)) {
18115
+ setDetailsNode((prev) => ({
18116
+ ...prev,
18117
+ quest_tree: formattedTree,
18118
+ quest_abstraction_tree: formattedAbstractionTree
18119
+ }));
18120
+ }
18121
+ setSceneVersion((v) => v + 1);
18153
18122
  }
18154
18123
  }
18155
18124
  }
@@ -18175,7 +18144,7 @@ function XViewScene({
18175
18144
  handleRenderAbstractionTree(treePayload);
18176
18145
  };
18177
18146
  const handleCloseQuestTree = () => {
18178
- setQuestTreeMode2({
18147
+ setQuestTreeMode({
18179
18148
  isActive: false,
18180
18149
  questNodeId: null,
18181
18150
  questTempData: null,
@@ -20420,7 +20389,7 @@ function XViewScene({
20420
20389
  CreateQuestTreePanel,
20421
20390
  {
20422
20391
  questTreeMode,
20423
- setQuestTreeMode: setQuestTreeMode2,
20392
+ setQuestTreeMode,
20424
20393
  onSave: handleSaveQuestTree,
20425
20394
  onClose: handleCloseQuestTree
20426
20395
  }
@@ -20453,10 +20422,7 @@ function XViewScene({
20453
20422
  milestones: ((_k = sceneDataRef.current) == null ? void 0 : _k.milestones) || [],
20454
20423
  onUpdateMilestones: handleUpdateMilestones,
20455
20424
  create_google_doc_action,
20456
- view_google_folder_id: (_l = sceneDataRef.current) == null ? void 0 : _l.view_google_folder_id,
20457
- setQuestTreeMode: setQuestTreeMode2,
20458
- handleRenderQuestTree,
20459
- handleRenderQuestAbstractionTree
20425
+ view_google_folder_id: (_l = sceneDataRef.current) == null ? void 0 : _l.view_google_folder_id
20460
20426
  }
20461
20427
  ),
20462
20428
  readingMode.isActive && readingMode.ancestry && /* @__PURE__ */ React32.createElement(
@@ -20594,7 +20560,7 @@ function XViewScene({
20594
20560
  onUpdateMilestones: handleUpdateMilestones,
20595
20561
  create_google_doc_action,
20596
20562
  view_google_folder_id: (_n = sceneDataRef.current) == null ? void 0 : _n.view_google_folder_id,
20597
- setQuestTreeMode: setQuestTreeMode2,
20563
+ setQuestTreeMode,
20598
20564
  handleRenderQuestTree,
20599
20565
  handleRenderQuestAbstractionTree,
20600
20566
  style: overlayHiddenStyle
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lv-x-software-house/x_view",
3
- "version": "1.2.6-dev.81",
3
+ "version": "1.2.6-dev.83",
4
4
  "description": "Pacote privado contendo os componentes e lógica de renderização 3D do X View.",
5
5
  "author": "iv.x - Engenharia de Software - ivxsoftwarehouse@gmail.com",
6
6
  "license": "UNLICENSED",