@lv-x-software-house/x_view 1.2.6-dev.85 → 1.2.6-dev.87

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.
Files changed (3) hide show
  1. package/dist/index.js +327 -348
  2. package/dist/index.mjs +327 -348
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -895,11 +895,11 @@ var getParentFileInfoForNode = (allParentData, sceneData, nodeId, sceneConfigId
895
895
  if (allParentData.hasOwnProperty(parentFileId)) {
896
896
  const parentFile = allParentData[parentFileId];
897
897
  if (parentFile.nodes && parentFile.nodes.some((n) => String(n.id) === String(nodeId))) {
898
- const parentDbInfo2 = parentDbsArray.find(
898
+ const parentDbInfo = parentDbsArray.find(
899
899
  (db) => String(db.db_id) === String(parentFileId)
900
900
  );
901
- if (parentDbInfo2) {
902
- return { parentFileId, ownerId: parentDbInfo2.owner_id };
901
+ if (parentDbInfo) {
902
+ return { parentFileId, ownerId: parentDbInfo.owner_id };
903
903
  } else if (sceneConfigId && String(parentFileId) === String(sceneConfigId)) {
904
904
  return { parentFileId, ownerId: sceneOwnerId };
905
905
  } else {
@@ -2737,7 +2737,9 @@ var IGNORED_KEYS = [
2737
2737
  "reviewStack",
2738
2738
  "timeline",
2739
2739
  "milestone_ids",
2740
- "dependency_ids"
2740
+ "dependency_ids",
2741
+ "quest_tree",
2742
+ "quest_abstraction_tree"
2741
2743
  ];
2742
2744
  function extractCustomPropsFromNode(node) {
2743
2745
  const customPropTypes = node._customPropTypes || {};
@@ -10685,7 +10687,146 @@ function InSceneQuestForm({
10685
10687
  title: isNameCopied ? "Nome Copiado!" : "Copiar nome formatado"
10686
10688
  },
10687
10689
  isNameCopied ? /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiCheck, { size: 10 }) : /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiCopy, { size: 10 })
10688
- ))), /* @__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" }, "Status da Quest"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react19.default.createElement(
10690
+ ))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-1.5 relative mt-2 border-t border-white/5 pt-4" }, /* @__PURE__ */ import_react19.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Assignee (Respons\xE1vel)"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react19.default.createElement(
10691
+ "button",
10692
+ {
10693
+ type: "button",
10694
+ onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
10695
+ className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 hover:border-white/20 focus:outline-none focus:ring-2 focus:ring-indigo-400/60 transition-colors flex items-center justify-between"
10696
+ },
10697
+ /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiUser, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-slate-200 font-medium" }, ((_a = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _a.name) || ((_b = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _b.email) || "Nenhum")),
10698
+ /* @__PURE__ */ import_react19.default.createElement(
10699
+ import_fi17.FiChevronDown,
10700
+ {
10701
+ className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}`
10702
+ }
10703
+ )
10704
+ ), isAssigneeDropdownOpen && /* @__PURE__ */ import_react19.default.createElement(import_react19.default.Fragment, null, /* @__PURE__ */ import_react19.default.createElement(
10705
+ "div",
10706
+ {
10707
+ className: "fixed inset-0 z-40",
10708
+ onClick: () => {
10709
+ setIsAssigneeDropdownOpen(false);
10710
+ setAssigneeSearchQuery("");
10711
+ }
10712
+ }
10713
+ ), /* @__PURE__ */ import_react19.default.createElement("div", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-900 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden flex flex-col" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiSearch, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ import_react19.default.createElement(
10714
+ "input",
10715
+ {
10716
+ type: "text",
10717
+ autoFocus: true,
10718
+ placeholder: "Buscar membro...",
10719
+ value: assigneeSearchQuery,
10720
+ onChange: (e) => setAssigneeSearchQuery(e.target.value),
10721
+ className: "bg-transparent border-none outline-none text-xs text-white placeholder-slate-500 w-full",
10722
+ onClick: (e) => e.stopPropagation()
10723
+ }
10724
+ )), /* @__PURE__ */ import_react19.default.createElement("ul", { className: "max-h-48 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ import_react19.default.createElement(
10725
+ "li",
10726
+ {
10727
+ onClick: () => {
10728
+ setAssigneeId("");
10729
+ setIsAssigneeDropdownOpen(false);
10730
+ setAssigneeSearchQuery("");
10731
+ },
10732
+ className: `px-3 py-2.5 text-sm cursor-pointer transition-colors flex items-center gap-2 ${!assigneeId ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-white/5 hover:text-white"}`
10733
+ },
10734
+ "Nenhum"
10735
+ ), viewMembers.filter((member) => {
10736
+ const search = assigneeSearchQuery.toLowerCase();
10737
+ return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
10738
+ }).map((member) => /* @__PURE__ */ import_react19.default.createElement(
10739
+ "li",
10740
+ {
10741
+ key: member.id,
10742
+ onClick: () => {
10743
+ setAssigneeId(member.id);
10744
+ setIsAssigneeDropdownOpen(false);
10745
+ setAssigneeSearchQuery("");
10746
+ },
10747
+ className: `px-3 py-2.5 text-sm cursor-pointer transition-colors flex items-center gap-2 ${assigneeId === member.id ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-white/5 hover:text-white"}`
10748
+ },
10749
+ member.name || member.email || member.id
10750
+ )), viewMembers.filter((member) => {
10751
+ const search = assigneeSearchQuery.toLowerCase();
10752
+ return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
10753
+ }).length === 0 && assigneeSearchQuery && /* @__PURE__ */ import_react19.default.createElement("li", { className: "px-3 py-4 text-xs text-slate-500 text-center italic" }, "Nenhum membro encontrado")))))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "pt-4 border-t border-white/5" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react19.default.createElement("h3", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Propriedades Adicionais"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center gap-2" }, create_google_doc_action && /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center gap-2" }, docError ? /* @__PURE__ */ import_react19.default.createElement(
10754
+ "p",
10755
+ {
10756
+ className: "text-[10px] text-red-400 bg-red-400/10 px-2 py-1 rounded border border-red-400/20 max-w-[200px]",
10757
+ title: docError
10758
+ },
10759
+ docError.length > 50 ? docError.substring(0, 47) + "..." : docError
10760
+ ) : /* @__PURE__ */ import_react19.default.createElement(
10761
+ "button",
10762
+ {
10763
+ type: "button",
10764
+ onClick: handleCreateGoogleDoc,
10765
+ disabled: isLoadingDocs,
10766
+ className: "flex items-center justify-center text-slate-300 transition-all disabled:opacity-50 disabled:cursor-not-allowed group",
10767
+ title: isLoadingDocs ? "Criando Documento..." : "Criar Documento no Google Docs"
10768
+ },
10769
+ isLoadingDocs ? /* @__PURE__ */ import_react19.default.createElement(
10770
+ import_ai2.AiOutlineLoading3Quarters,
10771
+ {
10772
+ className: "animate-spin",
10773
+ size: 18
10774
+ }
10775
+ ) : /* @__PURE__ */ import_react19.default.createElement(
10776
+ GoogleDocsIcon_default,
10777
+ {
10778
+ size: 18,
10779
+ className: "group-hover:scale-110 transition-transform"
10780
+ }
10781
+ )
10782
+ )), /* @__PURE__ */ import_react19.default.createElement(
10783
+ "button",
10784
+ {
10785
+ type: "button",
10786
+ onClick: handleAddProp,
10787
+ className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors"
10788
+ },
10789
+ /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiPlus, { size: 14 }),
10790
+ " Adicionar"
10791
+ ))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ import_react19.default.createElement(
10792
+ CustomPropertyDisplay,
10793
+ {
10794
+ key: prop.id,
10795
+ prop,
10796
+ onUpdate: (updatedProp) => handleUpdateProp(index, updatedProp),
10797
+ onRemove: () => handleRemoveProp(index),
10798
+ onOpenImageViewer,
10799
+ unavailableTypes: currentUsedTypes.filter(
10800
+ (t) => t !== prop.type
10801
+ ),
10802
+ onUploadFile
10803
+ }
10804
+ )), /* @__PURE__ */ import_react19.default.createElement("div", { ref: propsEndRef }))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-1.5 relative pt-4 border-t border-white/5" }, /* @__PURE__ */ import_react19.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative group min-h-[80px] bg-slate-800/70 p-2.5 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ import_react19.default.createElement(
10805
+ DescriptionDisplay,
10806
+ {
10807
+ description,
10808
+ savedSections: [],
10809
+ availableNodes,
10810
+ availableAncestries,
10811
+ onMentionClick,
10812
+ onSaveDescription: (newDesc) => setDescription(newDesc)
10813
+ }
10814
+ ), /* @__PURE__ */ import_react19.default.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ import_react19.default.createElement(
10815
+ "button",
10816
+ {
10817
+ type: "button",
10818
+ onClick: () => setIsDescriptionModalOpen(true),
10819
+ className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors"
10820
+ },
10821
+ /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiEdit2, { size: 14 })
10822
+ )), !description && /* @__PURE__ */ import_react19.default.createElement(
10823
+ "div",
10824
+ {
10825
+ onClick: () => setIsDescriptionModalOpen(true),
10826
+ className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
10827
+ },
10828
+ "Adicionar descri\xE7\xE3o..."
10829
+ ))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-1.5 relative mt-4 border-t border-white/10 pt-4" }, /* @__PURE__ */ import_react19.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Status da Quest"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react19.default.createElement(
10689
10830
  "button",
10690
10831
  {
10691
10832
  type: "button",
@@ -10810,70 +10951,7 @@ function InSceneQuestForm({
10810
10951
  },
10811
10952
  /* @__PURE__ */ import_react19.default.createElement("span", { className: "truncate" }, q.raw_title || q.name),
10812
10953
  /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[10px] text-slate-500" }, q.status || "Backlog")
10813
- ))))), /* @__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" }, "Assignee (Respons\xE1vel)"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react19.default.createElement(
10814
- "button",
10815
- {
10816
- type: "button",
10817
- onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
10818
- className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 hover:border-white/20 focus:outline-none focus:ring-2 focus:ring-indigo-400/60 transition-colors flex items-center justify-between"
10819
- },
10820
- /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiUser, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-slate-200 font-medium" }, ((_a = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _a.name) || ((_b = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _b.email) || "Nenhum")),
10821
- /* @__PURE__ */ import_react19.default.createElement(
10822
- import_fi17.FiChevronDown,
10823
- {
10824
- className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}`
10825
- }
10826
- )
10827
- ), isAssigneeDropdownOpen && /* @__PURE__ */ import_react19.default.createElement(import_react19.default.Fragment, null, /* @__PURE__ */ import_react19.default.createElement(
10828
- "div",
10829
- {
10830
- className: "fixed inset-0 z-40",
10831
- onClick: () => {
10832
- setIsAssigneeDropdownOpen(false);
10833
- setAssigneeSearchQuery("");
10834
- }
10835
- }
10836
- ), /* @__PURE__ */ import_react19.default.createElement("div", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-900 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden flex flex-col" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiSearch, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ import_react19.default.createElement(
10837
- "input",
10838
- {
10839
- type: "text",
10840
- autoFocus: true,
10841
- placeholder: "Buscar membro...",
10842
- value: assigneeSearchQuery,
10843
- onChange: (e) => setAssigneeSearchQuery(e.target.value),
10844
- className: "bg-transparent border-none outline-none text-xs text-white placeholder-slate-500 w-full",
10845
- onClick: (e) => e.stopPropagation()
10846
- }
10847
- )), /* @__PURE__ */ import_react19.default.createElement("ul", { className: "max-h-48 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ import_react19.default.createElement(
10848
- "li",
10849
- {
10850
- onClick: () => {
10851
- setAssigneeId("");
10852
- setIsAssigneeDropdownOpen(false);
10853
- setAssigneeSearchQuery("");
10854
- },
10855
- className: `px-3 py-2.5 text-sm cursor-pointer transition-colors flex items-center gap-2 ${!assigneeId ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-white/5 hover:text-white"}`
10856
- },
10857
- "Nenhum"
10858
- ), viewMembers.filter((member) => {
10859
- const search = assigneeSearchQuery.toLowerCase();
10860
- return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
10861
- }).map((member) => /* @__PURE__ */ import_react19.default.createElement(
10862
- "li",
10863
- {
10864
- key: member.id,
10865
- onClick: () => {
10866
- setAssigneeId(member.id);
10867
- setIsAssigneeDropdownOpen(false);
10868
- setAssigneeSearchQuery("");
10869
- },
10870
- className: `px-3 py-2.5 text-sm cursor-pointer transition-colors flex items-center gap-2 ${assigneeId === member.id ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-white/5 hover:text-white"}`
10871
- },
10872
- member.name || member.email || member.id
10873
- )), viewMembers.filter((member) => {
10874
- const search = assigneeSearchQuery.toLowerCase();
10875
- return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
10876
- }).length === 0 && assigneeSearchQuery && /* @__PURE__ */ import_react19.default.createElement("li", { className: "px-3 py-4 text-xs text-slate-500 text-center italic" }, "Nenhum membro encontrado")))))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-1.5 mt-2" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react19.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Prazo / Data"), !questDate && /* @__PURE__ */ import_react19.default.createElement(
10954
+ ))))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-1.5 mt-2" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react19.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Prazo / Data"), !questDate && /* @__PURE__ */ import_react19.default.createElement(
10877
10955
  "button",
10878
10956
  {
10879
10957
  type: "button",
@@ -11043,83 +11121,7 @@ function InSceneQuestForm({
11043
11121
  onChange: setReviewStack,
11044
11122
  viewMembers
11045
11123
  }
11046
- )), /* @__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" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative group min-h-[80px] bg-slate-800/70 p-2.5 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ import_react19.default.createElement(
11047
- DescriptionDisplay,
11048
- {
11049
- description,
11050
- savedSections: [],
11051
- availableNodes,
11052
- availableAncestries,
11053
- onMentionClick,
11054
- onSaveDescription: (newDesc) => setDescription(newDesc)
11055
- }
11056
- ), /* @__PURE__ */ import_react19.default.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ import_react19.default.createElement(
11057
- "button",
11058
- {
11059
- type: "button",
11060
- onClick: () => setIsDescriptionModalOpen(true),
11061
- className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors"
11062
- },
11063
- /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiEdit2, { size: 14 })
11064
- )), !description && /* @__PURE__ */ import_react19.default.createElement(
11065
- "div",
11066
- {
11067
- onClick: () => setIsDescriptionModalOpen(true),
11068
- className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
11069
- },
11070
- "Adicionar descri\xE7\xE3o..."
11071
- ))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react19.default.createElement("h3", { className: "text-xs text-slate-400 font-medium uppercase tracking-wider" }, "Propriedades Adicionais"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center gap-2" }, create_google_doc_action && /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center gap-2" }, docError ? /* @__PURE__ */ import_react19.default.createElement(
11072
- "p",
11073
- {
11074
- className: "text-[10px] text-red-400 bg-red-400/10 px-2 py-1 rounded border border-red-400/20 max-w-[200px]",
11075
- title: docError
11076
- },
11077
- docError.length > 50 ? docError.substring(0, 47) + "..." : docError
11078
- ) : /* @__PURE__ */ import_react19.default.createElement(
11079
- "button",
11080
- {
11081
- type: "button",
11082
- onClick: handleCreateGoogleDoc,
11083
- disabled: isLoadingDocs,
11084
- className: "flex items-center justify-center text-slate-300 transition-all disabled:opacity-50 disabled:cursor-not-allowed group",
11085
- title: isLoadingDocs ? "Criando Documento..." : "Criar Documento no Google Docs"
11086
- },
11087
- isLoadingDocs ? /* @__PURE__ */ import_react19.default.createElement(
11088
- import_ai2.AiOutlineLoading3Quarters,
11089
- {
11090
- className: "animate-spin",
11091
- size: 18
11092
- }
11093
- ) : /* @__PURE__ */ import_react19.default.createElement(
11094
- GoogleDocsIcon_default,
11095
- {
11096
- size: 18,
11097
- className: "group-hover:scale-110 transition-transform"
11098
- }
11099
- )
11100
- )), /* @__PURE__ */ import_react19.default.createElement(
11101
- "button",
11102
- {
11103
- type: "button",
11104
- onClick: handleAddProp,
11105
- className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors"
11106
- },
11107
- /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiPlus, { size: 14 }),
11108
- " Adicionar"
11109
- ))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ import_react19.default.createElement(
11110
- CustomPropertyDisplay,
11111
- {
11112
- key: prop.id,
11113
- prop,
11114
- onUpdate: (updatedProp) => handleUpdateProp(index, updatedProp),
11115
- onRemove: () => handleRemoveProp(index),
11116
- onOpenImageViewer,
11117
- unavailableTypes: currentUsedTypes.filter(
11118
- (t) => t !== prop.type
11119
- ),
11120
- onUploadFile
11121
- }
11122
- )), /* @__PURE__ */ import_react19.default.createElement("div", { ref: propsEndRef }))), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react19.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Tamanho no Node (Size)"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center gap-5" }, ["small", "medium", "large"].map((s) => /* @__PURE__ */ import_react19.default.createElement(
11124
+ )), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react19.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Tamanho no Node (Size)"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center gap-5" }, ["small", "medium", "large"].map((s) => /* @__PURE__ */ import_react19.default.createElement(
11123
11125
  "button",
11124
11126
  {
11125
11127
  key: s,
@@ -12528,40 +12530,180 @@ ${noteText}` : noteText : entry.notes,
12528
12530
  maxWidth: "92vw",
12529
12531
  ...style
12530
12532
  },
12531
- onPointerDown: swallow,
12532
- onPointerMove: swallow,
12533
- onPointerUp: swallow,
12534
- onClick: swallow,
12535
- onWheel: swallow,
12536
- onContextMenu: swallow,
12537
- onDoubleClick: swallow
12538
- },
12539
- /* @__PURE__ */ import_react22.default.createElement("div", { onPointerDown: (e) => {
12540
- e.stopPropagation();
12541
- handleResize(e);
12542
- }, className: "absolute left-0 top-0 bottom-0 w-2 cursor-col-resize hover:bg-indigo-500/50 z-[2000] transition-colors", title: "Arraste para redimensionar" }),
12543
- isReadMode ? /* @__PURE__ */ import_react22.default.createElement(
12544
- DescriptionReadModePanel,
12533
+ onPointerDown: swallow,
12534
+ onPointerMove: swallow,
12535
+ onPointerUp: swallow,
12536
+ onClick: swallow,
12537
+ onWheel: swallow,
12538
+ onContextMenu: swallow,
12539
+ onDoubleClick: swallow
12540
+ },
12541
+ /* @__PURE__ */ import_react22.default.createElement("div", { onPointerDown: (e) => {
12542
+ e.stopPropagation();
12543
+ handleResize(e);
12544
+ }, className: "absolute left-0 top-0 bottom-0 w-2 cursor-col-resize hover:bg-indigo-500/50 z-[2000] transition-colors", title: "Arraste para redimensionar" }),
12545
+ isReadMode ? /* @__PURE__ */ import_react22.default.createElement(
12546
+ DescriptionReadModePanel,
12547
+ {
12548
+ title: standardizedName || (node == null ? void 0 : node.name),
12549
+ description,
12550
+ savedSections: existingSections,
12551
+ onBack: () => setIsReadMode(false),
12552
+ onEdit: () => {
12553
+ if (canEdit) {
12554
+ setIsReadMode(false);
12555
+ setIsDescriptionModalOpen(true);
12556
+ }
12557
+ },
12558
+ onClose: handleCancel,
12559
+ availableNodes,
12560
+ availableAncestries,
12561
+ onOpenReference,
12562
+ onMentionClick,
12563
+ onImageClick: handleImageClickFromText,
12564
+ onSaveDescription: handleSaveDescriptionInline
12565
+ }
12566
+ ) : /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, null, /* @__PURE__ */ import_react22.default.createElement("div", { className: "h-[2px]", style: { background: `linear-gradient(to right, transparent, ${QUEST_STATUS_COLORS3[status]}, transparent)` } }), /* @__PURE__ */ import_react22.default.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiTarget, { className: "text-sky-400", size: 14 }), /* @__PURE__ */ import_react22.default.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Quest"), /* @__PURE__ */ import_react22.default.createElement("button", { onClick: handleCopyLink, className: `ml-1 p-1 transition-colors ${isLinkCopied ? "text-green-400" : "text-slate-400 hover:text-sky-400"}`, title: isLinkCopied ? "Link Copiado!" : "Copiar link para esta Quest" }, isLinkCopied ? /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiCheck, { size: 12 }) : /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiLink, { size: 12 }))), /* @__PURE__ */ import_react22.default.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, standardizedName || (node == null ? void 0 : node.name))), /* @__PURE__ */ import_react22.default.createElement("button", { onClick: handleCancel, disabled: isSaving, className: "w-9 h-9 flex-shrink-0 grid place-content-center rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-xl disabled:opacity-50", title: "Cancelar" }, "\xD7")), /* @__PURE__ */ import_react22.default.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 max-h-[68vh] custom-scrollbar" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react22.default.createElement("label", { className: "text-xs text-slate-300" }, "Assignee (Respons\xE1vel)"), canEdit ? /* @__PURE__ */ import_react22.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react22.default.createElement(
12567
+ "button",
12568
+ {
12569
+ type: "button",
12570
+ onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
12571
+ className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 hover:border-white/20 focus:outline-none focus:ring-2 focus:ring-indigo-400/60 transition-colors flex items-center justify-between"
12572
+ },
12573
+ /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiUser, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ import_react22.default.createElement("span", { className: "text-slate-200 font-medium" }, isAssigneeUndefined ? "Undefined" : (assigneeMember == null ? void 0 : assigneeMember.name) || (assigneeMember == null ? void 0 : assigneeMember.email) || "Nenhum")),
12574
+ /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiChevronDown, { className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}` })
12575
+ ), isAssigneeDropdownOpen && /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, null, /* @__PURE__ */ import_react22.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
12576
+ setIsAssigneeDropdownOpen(false);
12577
+ setAssigneeSearchQuery("");
12578
+ } }), /* @__PURE__ */ import_react22.default.createElement("div", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-900 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden flex flex-col" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiSearch, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ import_react22.default.createElement(
12579
+ "input",
12580
+ {
12581
+ type: "text",
12582
+ autoFocus: true,
12583
+ placeholder: "Buscar membro...",
12584
+ value: assigneeSearchQuery,
12585
+ onChange: (e) => setAssigneeSearchQuery(e.target.value),
12586
+ className: "bg-transparent border-none outline-none text-xs text-white placeholder-slate-500 w-full",
12587
+ onClick: (e) => e.stopPropagation()
12588
+ }
12589
+ )), /* @__PURE__ */ import_react22.default.createElement("ul", { className: "max-h-48 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ import_react22.default.createElement(
12590
+ "li",
12591
+ {
12592
+ onClick: () => {
12593
+ setAssigneeId("");
12594
+ const newTimeline = [...timeline, createTimelineEntry(
12595
+ (currentUser == null ? void 0 : currentUser.id) || "unknown",
12596
+ `Status "${status}" - Respons\xE1vel: Nenhum`,
12597
+ "status_changed"
12598
+ )];
12599
+ setTimeline(newTimeline);
12600
+ setHasUnsavedChanges(true);
12601
+ setIsAssigneeDropdownOpen(false);
12602
+ setAssigneeSearchQuery("");
12603
+ },
12604
+ className: `px-3 py-2.5 text-sm cursor-pointer transition-colors flex items-center gap-2 ${!assigneeId ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-white/5 hover:text-white"}`
12605
+ },
12606
+ "Nenhum"
12607
+ ), isAssigneeUndefined && /* @__PURE__ */ import_react22.default.createElement(
12608
+ "li",
12609
+ {
12610
+ onClick: () => {
12611
+ setIsAssigneeDropdownOpen(false);
12612
+ setAssigneeSearchQuery("");
12613
+ },
12614
+ className: "px-3 py-2.5 text-sm cursor-pointer bg-red-500/10 text-red-300 flex items-center gap-2"
12615
+ },
12616
+ "Undefined (Removido)"
12617
+ ), viewMembers.filter((member) => {
12618
+ const search = assigneeSearchQuery.toLowerCase();
12619
+ return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
12620
+ }).map((member) => /* @__PURE__ */ import_react22.default.createElement(
12621
+ "li",
12622
+ {
12623
+ key: member.id,
12624
+ onClick: () => {
12625
+ setAssigneeId(member.id);
12626
+ const newTimeline = [...timeline, createTimelineEntry(
12627
+ (currentUser == null ? void 0 : currentUser.id) || "unknown",
12628
+ `Status "${status}" - Respons\xE1vel: ${member.name || member.email}`,
12629
+ "status_changed"
12630
+ )];
12631
+ setTimeline(newTimeline);
12632
+ setHasUnsavedChanges(true);
12633
+ setIsAssigneeDropdownOpen(false);
12634
+ setAssigneeSearchQuery("");
12635
+ },
12636
+ className: `px-3 py-2.5 text-sm cursor-pointer transition-colors flex items-center gap-2 ${assigneeId === member.id ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-white/5 hover:text-white"}`
12637
+ },
12638
+ member.name || member.email || member.id
12639
+ )))))) : /* @__PURE__ */ import_react22.default.createElement("div", { className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 text-slate-400 flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiUser, { className: "opacity-50", size: 14 }), assigneeId ? assigneeMember ? assigneeMember.name || assigneeMember.email : "Undefined" : "Nenhum")), /* @__PURE__ */ import_react22.default.createElement("div", { className: "space-y-3 pt-4 border-t border-white/5" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiGitBranch, { className: "text-indigo-400", size: 14 }), /* @__PURE__ */ import_react22.default.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "Estruturas Visuais"))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "bg-slate-900/60 p-2 rounded-xl border border-white/10 flex flex-col gap-2" }, /* @__PURE__ */ import_react22.default.createElement(
12640
+ "button",
12545
12641
  {
12546
- title: standardizedName || (node == null ? void 0 : node.name),
12547
- description,
12548
- savedSections: existingSections,
12549
- onBack: () => setIsReadMode(false),
12550
- onEdit: () => {
12551
- if (canEdit) {
12552
- setIsReadMode(false);
12553
- setIsDescriptionModalOpen(true);
12642
+ type: "button",
12643
+ onClick: () => {
12644
+ if (setQuestTreeMode) {
12645
+ const convertPersistedTree = (storedTree) => {
12646
+ if (!storedTree) return null;
12647
+ if (storedTree.node || storedTree.is_section) return storedTree;
12648
+ const nodeId = storedTree.node_id;
12649
+ if (!nodeId) return null;
12650
+ const foundNode = availableNodes.find((n) => String(n.id) === String(nodeId)) || (String(nodeId) === String(node == null ? void 0 : node.id) ? node : null);
12651
+ return {
12652
+ node: foundNode ? { id: foundNode.id, name: foundNode.raw_title || foundNode.name } : { id: nodeId, name: `Node ${nodeId}` },
12653
+ relationship: storedTree.relationship || {},
12654
+ children: (storedTree.children || []).map(convertPersistedTree).filter(Boolean)
12655
+ };
12656
+ };
12657
+ 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" };
12658
+ const existingTree = (node == null ? void 0 : node.quest_tree) ? convertPersistedTree(node.quest_tree) : { node: rootNode, children: [] };
12659
+ const existingAbstractionTree = (node == null ? void 0 : node.quest_abstraction_tree) ? convertPersistedTree(node.quest_abstraction_tree) : { node: rootNode, children: [] };
12660
+ setQuestTreeMode((prev) => ({
12661
+ ...prev,
12662
+ isActive: true,
12663
+ isAddingNodes: true,
12664
+ questNodeId: node == null ? void 0 : node.id,
12665
+ questNodeName: (node == null ? void 0 : node.raw_title) || (node == null ? void 0 : node.name),
12666
+ tree: existingTree,
12667
+ abstraction_tree: existingAbstractionTree,
12668
+ selectedParentId: rootNode.id
12669
+ }));
12554
12670
  }
12555
12671
  },
12556
- onClose: handleCancel,
12557
- availableNodes,
12558
- availableAncestries,
12559
- onOpenReference,
12560
- onMentionClick,
12561
- onImageClick: handleImageClickFromText,
12562
- onSaveDescription: handleSaveDescriptionInline
12563
- }
12564
- ) : /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, null, /* @__PURE__ */ import_react22.default.createElement("div", { className: "h-[2px]", style: { background: `linear-gradient(to right, transparent, ${QUEST_STATUS_COLORS3[status]}, transparent)` } }), /* @__PURE__ */ import_react22.default.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiTarget, { className: "text-sky-400", size: 14 }), /* @__PURE__ */ import_react22.default.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Quest"), /* @__PURE__ */ import_react22.default.createElement("button", { onClick: handleCopyLink, className: `ml-1 p-1 transition-colors ${isLinkCopied ? "text-green-400" : "text-slate-400 hover:text-sky-400"}`, title: isLinkCopied ? "Link Copiado!" : "Copiar link para esta Quest" }, isLinkCopied ? /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiCheck, { size: 12 }) : /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiLink, { size: 12 }))), /* @__PURE__ */ import_react22.default.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, standardizedName || (node == null ? void 0 : node.name))), /* @__PURE__ */ import_react22.default.createElement("button", { onClick: handleCancel, disabled: isSaving, className: "w-9 h-9 flex-shrink-0 grid place-content-center rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-xl disabled:opacity-50", title: "Cancelar" }, "\xD7")), /* @__PURE__ */ import_react22.default.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 max-h-[68vh] custom-scrollbar" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react22.default.createElement("label", { className: "text-xs text-slate-300" }, "T\xEDtulo da Quest"), /* @__PURE__ */ import_react22.default.createElement(
12672
+ 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" : ""}`
12673
+ },
12674
+ /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiGitBranch, { className: "text-indigo-400" }),
12675
+ " Configurar \xC1rvores"
12676
+ ), /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ import_react22.default.createElement(
12677
+ "button",
12678
+ {
12679
+ type: "button",
12680
+ onClick: () => {
12681
+ if (handleRenderQuestTree) handleRenderQuestTree(node);
12682
+ },
12683
+ className: `flex-1 flex items-center justify-center gap-2 px-2 py-1.5 text-[11px] font-medium rounded-lg border transition-colors ${((_c = (_b = node == null ? void 0 : node.quest_tree) == null ? void 0 : _b.children) == null ? void 0 : _c.length) > 0 ? "bg-indigo-500/10 hover:bg-indigo-500/30 text-indigo-400 border-indigo-500/20" : "bg-slate-800 hover:bg-slate-700 text-slate-400 border-white/5"}`
12684
+ },
12685
+ "Renderizar Horizontal"
12686
+ ), /* @__PURE__ */ import_react22.default.createElement(
12687
+ "button",
12688
+ {
12689
+ type: "button",
12690
+ onClick: () => {
12691
+ if (handleRenderQuestAbstractionTree) handleRenderQuestAbstractionTree(node);
12692
+ },
12693
+ className: `flex-1 flex items-center justify-center gap-2 px-2 py-1.5 text-[11px] font-medium rounded-lg border transition-colors ${((_e = (_d = node == null ? void 0 : node.quest_abstraction_tree) == null ? void 0 : _d.children) == null ? void 0 : _e.length) > 0 ? "bg-indigo-500/10 hover:bg-indigo-500/30 text-indigo-400 border-indigo-500/20" : "bg-slate-800 hover:bg-slate-700 text-slate-400 border-white/5"}`
12694
+ },
12695
+ "Renderizar Vertical"
12696
+ )))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "pt-4 border-t border-white/5" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react22.default.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, canEdit && create_google_doc_action && /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, docError ? /* @__PURE__ */ import_react22.default.createElement("p", { className: "text-[10px] text-red-400 bg-red-400/10 px-2 py-1 rounded border border-red-400/20 max-w-[200px]", title: docError }, docError.length > 50 ? docError.substring(0, 47) + "..." : docError) : /* @__PURE__ */ import_react22.default.createElement(
12697
+ "button",
12698
+ {
12699
+ type: "button",
12700
+ onClick: handleCreateGoogleDoc,
12701
+ disabled: isLoadingDocs,
12702
+ className: "flex items-center justify-center text-slate-300 transition-all disabled:opacity-50 disabled:cursor-not-allowed group",
12703
+ title: isLoadingDocs ? "Criando Documento..." : "Criar Documento no Google Docs"
12704
+ },
12705
+ isLoadingDocs ? /* @__PURE__ */ import_react22.default.createElement(import_ai4.AiOutlineLoading3Quarters, { className: "animate-spin", size: 18 }) : /* @__PURE__ */ import_react22.default.createElement(GoogleDocsIcon_default, { size: 18, className: "group-hover:scale-110 transition-transform" })
12706
+ )), canEdit && /* @__PURE__ */ import_react22.default.createElement("button", { type: "button", onClick: handleAddProp, className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiPlus, { size: 14 }), " Adicionar"))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ import_react22.default.createElement(CustomPropertyDisplay, { key: prop.id, prop, onUpdate: canEdit ? (updatedProp) => handleUpdateProp(idx, updatedProp) : void 0, onRemove: canEdit ? () => handleRemoveProp(idx) : void 0, onOpenImageViewer, unavailableTypes: currentUsedTypes.filter((t) => t !== prop.type), isTextureMode: false, onUploadFile: canEdit ? onUploadFile : void 0, readOnly: !canEdit })), /* @__PURE__ */ import_react22.default.createElement("div", { ref: propsEndRef }))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "space-y-1.5 relative pt-4 border-t border-white/5" }, /* @__PURE__ */ import_react22.default.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react22.default.createElement("div", { className: "relative group min-h-[60px] bg-slate-800/40 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ import_react22.default.createElement(DescriptionDisplay, { description, savedSections: existingSections, availableNodes, availableAncestries, onOpenReference, onMentionClick, onImageClick: handleImageClickFromText, onSaveDescription: handleSaveDescriptionInline }), /* @__PURE__ */ import_react22.default.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ import_react22.default.createElement("button", { type: "button", onClick: () => setIsReadMode(true), className: `p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors ${canEdit ? "border-r border-white/5" : ""}`, title: "Modo de Leitura" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiBookOpen, { size: 14 })), canEdit && /* @__PURE__ */ import_react22.default.createElement("button", { type: "button", onClick: () => setIsDescriptionModalOpen(true), className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors", title: "Editar descri\xE7\xE3o (Modo de Escrita)" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiEdit2, { size: 14 }))), canEdit && !description && /* @__PURE__ */ import_react22.default.createElement("div", { onClick: () => setIsDescriptionModalOpen(true), className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text" }, "Adicionar descri\xE7\xE3o..."))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "space-y-1.5 pt-6 border-t border-white/10 mt-6" }, /* @__PURE__ */ import_react22.default.createElement("label", { className: "text-xs text-slate-300" }, "T\xEDtulo da Quest"), /* @__PURE__ */ import_react22.default.createElement(
12565
12707
  "input",
12566
12708
  {
12567
12709
  type: "text",
@@ -12570,7 +12712,7 @@ ${noteText}` : noteText : entry.notes,
12570
12712
  readOnly: !canEdit,
12571
12713
  className: `w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 focus:outline-none ${canEdit ? "focus:ring-2 focus:ring-indigo-400/60" : "cursor-default text-slate-400"}`
12572
12714
  }
12573
- ), /* @__PURE__ */ import_react22.default.createElement("div", { className: "pt-1 flex items-center gap-1.5 min-w-0" }, /* @__PURE__ */ import_react22.default.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500 tracking-wider" }), /* @__PURE__ */ import_react22.default.createElement("p", { className: "text-xs text-indigo-300 font-medium truncate", title: standardizedName }, standardizedName), /* @__PURE__ */ import_react22.default.createElement(
12715
+ ), /* @__PURE__ */ import_react22.default.createElement("div", { className: "pt-1 flex items-center gap-1.5 min-w-0" }, /* @__PURE__ */ import_react22.default.createElement("p", { className: "text-xs text-indigo-300 font-medium truncate", title: standardizedName }, standardizedName), /* @__PURE__ */ import_react22.default.createElement(
12574
12716
  "button",
12575
12717
  {
12576
12718
  type: "button",
@@ -12784,83 +12926,7 @@ ${noteText}` : noteText : entry.notes,
12784
12926
  /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement("span", { className: "w-3 h-3 rounded-full", style: { backgroundColor: QUEST_STATUS_COLORS3[s] } }), s),
12785
12927
  isDisabled && /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiRepeat, { className: "text-amber-400/60 rotate-180", size: 12 })
12786
12928
  );
12787
- }))))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ import_react22.default.createElement("label", { className: "text-xs text-slate-300" }, "Assignee (Respons\xE1vel)"), canEdit ? /* @__PURE__ */ import_react22.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react22.default.createElement(
12788
- "button",
12789
- {
12790
- type: "button",
12791
- onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
12792
- className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 hover:border-white/20 focus:outline-none focus:ring-2 focus:ring-indigo-400/60 transition-colors flex items-center justify-between"
12793
- },
12794
- /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiUser, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ import_react22.default.createElement("span", { className: "text-slate-200 font-medium" }, isAssigneeUndefined ? "Undefined" : (assigneeMember == null ? void 0 : assigneeMember.name) || (assigneeMember == null ? void 0 : assigneeMember.email) || "Nenhum")),
12795
- /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiChevronDown, { className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}` })
12796
- ), isAssigneeDropdownOpen && /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, null, /* @__PURE__ */ import_react22.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
12797
- setIsAssigneeDropdownOpen(false);
12798
- setAssigneeSearchQuery("");
12799
- } }), /* @__PURE__ */ import_react22.default.createElement("div", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-900 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden flex flex-col" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiSearch, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ import_react22.default.createElement(
12800
- "input",
12801
- {
12802
- type: "text",
12803
- autoFocus: true,
12804
- placeholder: "Buscar membro...",
12805
- value: assigneeSearchQuery,
12806
- onChange: (e) => setAssigneeSearchQuery(e.target.value),
12807
- className: "bg-transparent border-none outline-none text-xs text-white placeholder-slate-500 w-full",
12808
- onClick: (e) => e.stopPropagation()
12809
- }
12810
- )), /* @__PURE__ */ import_react22.default.createElement("ul", { className: "max-h-48 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ import_react22.default.createElement(
12811
- "li",
12812
- {
12813
- onClick: () => {
12814
- setAssigneeId("");
12815
- const newTimeline = [...timeline, createTimelineEntry(
12816
- (currentUser == null ? void 0 : currentUser.id) || "unknown",
12817
- `Status "${status}" - Respons\xE1vel: Nenhum`,
12818
- "status_changed"
12819
- )];
12820
- setTimeline(newTimeline);
12821
- setHasUnsavedChanges(true);
12822
- setIsAssigneeDropdownOpen(false);
12823
- setAssigneeSearchQuery("");
12824
- },
12825
- className: `px-3 py-2.5 text-sm cursor-pointer transition-colors flex items-center gap-2 ${!assigneeId ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-white/5 hover:text-white"}`
12826
- },
12827
- "Nenhum"
12828
- ), isAssigneeUndefined && /* @__PURE__ */ import_react22.default.createElement(
12829
- "li",
12830
- {
12831
- onClick: () => {
12832
- setIsAssigneeDropdownOpen(false);
12833
- setAssigneeSearchQuery("");
12834
- },
12835
- className: "px-3 py-2.5 text-sm cursor-pointer bg-red-500/10 text-red-300 flex items-center gap-2"
12836
- },
12837
- "Undefined (Removido)"
12838
- ), viewMembers.filter((member) => {
12839
- const search = assigneeSearchQuery.toLowerCase();
12840
- return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
12841
- }).map((member) => /* @__PURE__ */ import_react22.default.createElement(
12842
- "li",
12843
- {
12844
- key: member.id,
12845
- onClick: () => {
12846
- setAssigneeId(member.id);
12847
- const newTimeline = [...timeline, createTimelineEntry(
12848
- (currentUser == null ? void 0 : currentUser.id) || "unknown",
12849
- `Status "${status}" - Respons\xE1vel: ${member.name || member.email}`,
12850
- "status_changed"
12851
- )];
12852
- setTimeline(newTimeline);
12853
- setHasUnsavedChanges(true);
12854
- setIsAssigneeDropdownOpen(false);
12855
- setAssigneeSearchQuery("");
12856
- },
12857
- className: `px-3 py-2.5 text-sm cursor-pointer transition-colors flex items-center gap-2 ${assigneeId === member.id ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-white/5 hover:text-white"}`
12858
- },
12859
- member.name || member.email || member.id
12860
- )), viewMembers.filter((member) => {
12861
- const search = assigneeSearchQuery.toLowerCase();
12862
- return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
12863
- }).length === 0 && assigneeSearchQuery && /* @__PURE__ */ import_react22.default.createElement("li", { className: "px-3 py-4 text-xs text-slate-500 text-center italic" }, "Nenhum membro encontrado"))))) : /* @__PURE__ */ import_react22.default.createElement("div", { className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 text-slate-400 flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiUser, { className: "opacity-50", size: 14 }), assigneeId ? assigneeMember ? assigneeMember.name || assigneeMember.email : "Undefined" : "Nenhum")), /* @__PURE__ */ import_react22.default.createElement("div", { className: "pt-4 border-t border-white/5 mt-2" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center justify-between mb-3" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiRepeat, { className: `w-3.5 h-3.5 ${recurrenceConfig.enabled ? "text-indigo-400" : "text-slate-500"}` }), /* @__PURE__ */ import_react22.default.createElement("span", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Recorr\xEAncia")), /* @__PURE__ */ import_react22.default.createElement(
12929
+ }))))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "pt-4 border-t border-white/5 mt-2" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center justify-between mb-3" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiRepeat, { className: `w-3.5 h-3.5 ${recurrenceConfig.enabled ? "text-indigo-400" : "text-slate-500"}` }), /* @__PURE__ */ import_react22.default.createElement("span", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Recorr\xEAncia")), /* @__PURE__ */ import_react22.default.createElement(
12864
12930
  "button",
12865
12931
  {
12866
12932
  type: "button",
@@ -12948,7 +13014,7 @@ ${noteText}` : noteText : entry.notes,
12948
13014
  onClick: () => setIsReturnDropdownOpen(!isReturnDropdownOpen),
12949
13015
  className: "w-full bg-slate-800/80 p-2 text-xs rounded-lg border border-white/10 hover:border-white/20 focus:outline-none focus:ring-1 focus:ring-purple-400/50 transition-colors flex items-center justify-between"
12950
13016
  },
12951
- /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiUser, { className: "text-slate-400", size: 12 }), /* @__PURE__ */ import_react22.default.createElement("span", { className: "text-slate-200 font-medium" }, ((_b = viewMembers.find((m) => String(m.id) === String(returnAssigneeId))) == null ? void 0 : _b.name) || "Selecionar respons\xE1vel...")),
13017
+ /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiUser, { className: "text-slate-400", size: 12 }), /* @__PURE__ */ import_react22.default.createElement("span", { className: "text-slate-200 font-medium" }, ((_f = viewMembers.find((m) => String(m.id) === String(returnAssigneeId))) == null ? void 0 : _f.name) || "Selecionar respons\xE1vel...")),
12952
13018
  /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiChevronDown, { className: `text-slate-400 transition-transform duration-200 ${isReturnDropdownOpen ? "rotate-180" : ""}`, size: 14 })
12953
13019
  ), isReturnDropdownOpen && /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, null, /* @__PURE__ */ import_react22.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
12954
13020
  setIsReturnDropdownOpen(false);
@@ -12992,68 +13058,7 @@ ${noteText}` : noteText : entry.notes,
12992
13058
  },
12993
13059
  /* @__PURE__ */ import_react22.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.createElement("path", { d: "M12 19V5M5 12l7 7 7-7" })),
12994
13060
  "Retornar para Opera\xE7\xE3o"
12995
- ))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react22.default.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react22.default.createElement("div", { className: "relative group min-h-[60px] bg-slate-800/40 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ import_react22.default.createElement(DescriptionDisplay, { description, savedSections: existingSections, availableNodes, availableAncestries, onOpenReference, onMentionClick, onImageClick: handleImageClickFromText, onSaveDescription: handleSaveDescriptionInline }), /* @__PURE__ */ import_react22.default.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ import_react22.default.createElement("button", { type: "button", onClick: () => setIsReadMode(true), className: `p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors ${canEdit ? "border-r border-white/5" : ""}`, title: "Modo de Leitura" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiBookOpen, { size: 14 })), canEdit && /* @__PURE__ */ import_react22.default.createElement("button", { type: "button", onClick: () => setIsDescriptionModalOpen(true), className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors", title: "Editar descri\xE7\xE3o (Modo de Escrita)" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiEdit2, { size: 14 }))), canEdit && !description && /* @__PURE__ */ import_react22.default.createElement("div", { onClick: () => setIsDescriptionModalOpen(true), className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text" }, "Adicionar descri\xE7\xE3o..."))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "pt-2 border-t border-white/5 space-y-3" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiGitBranch, { className: "text-indigo-400", size: 14 }), /* @__PURE__ */ import_react22.default.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "Estruturas Visuais"))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "bg-slate-900/60 p-2 rounded-xl border border-white/10 flex flex-col gap-2" }, /* @__PURE__ */ import_react22.default.createElement(
12996
- "button",
12997
- {
12998
- type: "button",
12999
- onClick: () => {
13000
- if (setQuestTreeMode) {
13001
- const convertPersistedTree = (storedTree) => {
13002
- if (!storedTree) return null;
13003
- if (storedTree.node || storedTree.is_section) return storedTree;
13004
- const nodeId = storedTree.node_id;
13005
- if (!nodeId) return null;
13006
- const foundNode = availableNodes.find((n) => String(n.id) === String(nodeId)) || (String(nodeId) === String(node == null ? void 0 : node.id) ? node : null);
13007
- return {
13008
- node: foundNode ? { id: foundNode.id, name: foundNode.raw_title || foundNode.name } : { id: nodeId, name: `Node ${nodeId}` },
13009
- relationship: storedTree.relationship || {},
13010
- children: (storedTree.children || []).map(convertPersistedTree).filter(Boolean)
13011
- };
13012
- };
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" };
13014
- const existingTree = (node == null ? void 0 : node.quest_tree) ? convertPersistedTree(node.quest_tree) : { node: rootNode, children: [] };
13015
- const existingAbstractionTree = (node == null ? void 0 : node.quest_abstraction_tree) ? convertPersistedTree(node.quest_abstraction_tree) : { node: rootNode, children: [] };
13016
- setQuestTreeMode((prev) => ({
13017
- ...prev,
13018
- isActive: true,
13019
- isAddingNodes: true,
13020
- questNodeId: node == null ? void 0 : node.id,
13021
- questNodeName: (node == null ? void 0 : node.raw_title) || (node == null ? void 0 : node.name),
13022
- tree: existingTree,
13023
- abstraction_tree: existingAbstractionTree,
13024
- selectedParentId: rootNode.id
13025
- }));
13026
- }
13027
- },
13028
- 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" : ""}`
13029
- },
13030
- /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiGitBranch, { className: "text-indigo-400" }),
13031
- " Configurar \xC1rvores"
13032
- ), /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ import_react22.default.createElement(
13033
- "button",
13034
- {
13035
- type: "button",
13036
- onClick: () => {
13037
- if (handleRenderQuestTree) {
13038
- handleRenderQuestTree(node);
13039
- }
13040
- },
13041
- className: `flex-1 flex items-center justify-center gap-2 px-2 py-1.5 text-[11px] font-medium rounded-lg border transition-colors ${((_d = (_c = node == null ? void 0 : node.quest_tree) == null ? void 0 : _c.children) == null ? void 0 : _d.length) > 0 ? "bg-indigo-500/10 hover:bg-indigo-500/30 text-indigo-400 border-indigo-500/20" : "bg-slate-800 hover:bg-slate-700 text-slate-400 border-white/5"}`
13042
- },
13043
- "Renderizar Horizontal"
13044
- ), /* @__PURE__ */ import_react22.default.createElement(
13045
- "button",
13046
- {
13047
- type: "button",
13048
- onClick: () => {
13049
- if (handleRenderQuestAbstractionTree) {
13050
- handleRenderQuestAbstractionTree(node);
13051
- }
13052
- },
13053
- className: `flex-1 flex items-center justify-center gap-2 px-2 py-1.5 text-[11px] font-medium rounded-lg border transition-colors ${((_f = (_e = node == null ? void 0 : node.quest_abstraction_tree) == null ? void 0 : _e.children) == null ? void 0 : _f.length) > 0 ? "bg-indigo-500/10 hover:bg-indigo-500/30 text-indigo-400 border-indigo-500/20" : "bg-slate-800 hover:bg-slate-700 text-slate-400 border-white/5"}`
13054
- },
13055
- "Renderizar Vertical"
13056
- )))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "pt-2 border-t border-white/5 space-y-3" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiLink, { className: "text-indigo-400", size: 14 }), /* @__PURE__ */ import_react22.default.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "Depend\xEAncias (Quest Chain)"))), /* @__PURE__ */ import_react22.default.createElement("div", { className: `relative w-full bg-slate-900/60 p-2 min-h-[42px] flex flex-wrap gap-2 rounded-xl border border-white/10 ${canEdit ? "focus-within:ring-2 focus-within:ring-indigo-400/40" : ""} transition-all` }, dependencyIds.map((depId) => {
13061
+ ))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "pt-2 border-t border-white/5 space-y-3" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiLink, { className: "text-indigo-400", size: 14 }), /* @__PURE__ */ import_react22.default.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "Depend\xEAncias (Quest Chain)"))), /* @__PURE__ */ import_react22.default.createElement("div", { className: `relative w-full bg-slate-900/60 p-2 min-h-[42px] flex flex-wrap gap-2 rounded-xl border border-white/10 ${canEdit ? "focus-within:ring-2 focus-within:ring-indigo-400/40" : ""} transition-all` }, dependencyIds.map((depId) => {
13057
13062
  const depNode = availableNodes.find((n) => String(n.id) === String(depId));
13058
13063
  if (!depNode) return null;
13059
13064
  const isDone = depNode.status === "Done";
@@ -13109,36 +13114,7 @@ ${noteText}` : noteText : entry.notes,
13109
13114
  },
13110
13115
  /* @__PURE__ */ import_react22.default.createElement("span", { className: "truncate" }, q.raw_title || q.name),
13111
13116
  /* @__PURE__ */ import_react22.default.createElement("span", { className: `text-[10px] px-1.5 py-0.5 rounded border ${q.status === "Done" ? "text-green-400 border-green-500/30" : "text-slate-500 border-white/5"}` }, q.status || "Backlog")
13112
- )) : /* @__PURE__ */ import_react22.default.createElement("li", { className: "px-3 py-3 text-[10px] text-slate-500 italic text-center" }, "Nenhuma outra quest dispon\xEDvel")))), blockedStatus.isBlocked && /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2 px-3 py-2 bg-amber-500/5 rounded-lg border border-amber-500/10 animate-in fade-in slide-in-from-top-1" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiRepeat, { className: "text-amber-400 animate-spin-slow", size: 12 }), /* @__PURE__ */ import_react22.default.createElement("p", { className: "text-[10px] text-amber-200/80 font-medium" }, "Esta quest est\xE1 bloqueada por ", blockedStatus.pendingDependencies.length, " tarefa(s) pendente(s)."))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react22.default.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, canEdit && create_google_doc_action && /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2" }, docError ? /* @__PURE__ */ import_react22.default.createElement(
13113
- "p",
13114
- {
13115
- className: "text-[10px] text-red-400 bg-red-400/10 px-2 py-1 rounded border border-red-400/20 max-w-[200px]",
13116
- title: docError
13117
- },
13118
- docError.length > 50 ? docError.substring(0, 47) + "..." : docError
13119
- ) : /* @__PURE__ */ import_react22.default.createElement(
13120
- "button",
13121
- {
13122
- type: "button",
13123
- onClick: handleCreateGoogleDoc,
13124
- disabled: isLoadingDocs,
13125
- className: "flex items-center justify-center text-slate-300 transition-all disabled:opacity-50 disabled:cursor-not-allowed group",
13126
- title: isLoadingDocs ? "Criando Documento..." : "Criar Documento no Google Docs"
13127
- },
13128
- isLoadingDocs ? /* @__PURE__ */ import_react22.default.createElement(
13129
- import_ai4.AiOutlineLoading3Quarters,
13130
- {
13131
- className: "animate-spin",
13132
- size: 18
13133
- }
13134
- ) : /* @__PURE__ */ import_react22.default.createElement(
13135
- GoogleDocsIcon_default,
13136
- {
13137
- size: 18,
13138
- className: "group-hover:scale-110 transition-transform"
13139
- }
13140
- )
13141
- )), canEdit && /* @__PURE__ */ import_react22.default.createElement("button", { type: "button", onClick: handleAddProp, className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiPlus, { size: 14 }), " Adicionar"))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ import_react22.default.createElement(CustomPropertyDisplay, { key: prop.id, prop, onUpdate: canEdit ? (updatedProp) => handleUpdateProp(idx, updatedProp) : void 0, onRemove: canEdit ? () => handleRemoveProp(idx) : void 0, onOpenImageViewer, unavailableTypes: currentUsedTypes.filter((t) => t !== prop.type), isTextureMode: false, onUploadFile: canEdit ? onUploadFile : void 0, readOnly: !canEdit })), /* @__PURE__ */ import_react22.default.createElement("div", { ref: propsEndRef }))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "pt-6 border-t border-white/10 mt-6" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center justify-between mb-4" }, /* @__PURE__ */ import_react22.default.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "Hist\xF3rico & Notas"), /* @__PURE__ */ import_react22.default.createElement(
13117
+ )) : /* @__PURE__ */ import_react22.default.createElement("li", { className: "px-3 py-3 text-[10px] text-slate-500 italic text-center" }, "Nenhuma outra quest dispon\xEDvel")))), blockedStatus.isBlocked && /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center gap-2 px-3 py-2 bg-amber-500/5 rounded-lg border border-amber-500/10 animate-in fade-in slide-in-from-top-1" }, /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiRepeat, { className: "text-amber-400 animate-spin-slow", size: 12 }), /* @__PURE__ */ import_react22.default.createElement("p", { className: "text-[10px] text-amber-200/80 font-medium" }, "Esta quest est\xE1 bloqueada por ", blockedStatus.pendingDependencies.length, " tarefa(s) pendente(s)."))), /* @__PURE__ */ import_react22.default.createElement("div", { className: "pt-6 border-t border-white/10 mt-6" }, /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex items-center justify-between mb-4" }, /* @__PURE__ */ import_react22.default.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "Hist\xF3rico & Notas"), /* @__PURE__ */ import_react22.default.createElement(
13142
13118
  "button",
13143
13119
  {
13144
13120
  type: "button",
@@ -15637,6 +15613,9 @@ function XViewScene({
15637
15613
  for (const parentFileId in allParentData) {
15638
15614
  if (allParentData.hasOwnProperty(parentFileId)) {
15639
15615
  const parentFile = allParentData[parentFileId];
15616
+ const parentDbInfo = parentDbsArray.find(
15617
+ (db) => String(db.db_id) === String(parentFileId)
15618
+ );
15640
15619
  const isCurrentView = String(parentFileId) === String(sceneConfigId);
15641
15620
  const ownerId2 = (parentDbInfo == null ? void 0 : parentDbInfo.owner_id) || (isCurrentView ? viewParams == null ? void 0 : viewParams.owner_id : null);
15642
15621
  const datasetName = isCurrentView ? "Quests Internas (View)" : parentFile.dataset_name || `Dataset #${parentFileId.substring(0, 6)}`;