@lv-x-software-house/x_view 1.2.6-dev.86 → 1.2.6-dev.88

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 -349
  2. package/dist/index.mjs +327 -349
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -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,
@@ -11275,7 +11277,8 @@ function NodeDetailsPanel({
11275
11277
  }
11276
11278
  };
11277
11279
  (0, import_react20.useEffect)(() => {
11278
- if ((node == null ? void 0 : node.id) !== prevNodeIdRef.current) {
11280
+ const isNewNode = (node == null ? void 0 : node.id) !== prevNodeIdRef.current;
11281
+ if (isNewNode || !hasUnsavedChanges) {
11279
11282
  prevNodeIdRef.current = node == null ? void 0 : node.id;
11280
11283
  setName((node == null ? void 0 : node.name) ?? "");
11281
11284
  if (node == null ? void 0 : node.type) {
@@ -11295,7 +11298,7 @@ function NodeDetailsPanel({
11295
11298
  setSelectedImageUrl((node == null ? void 0 : node.textureImageUrl) ?? null);
11296
11299
  setHasUnsavedChanges(false);
11297
11300
  }
11298
- }, [node]);
11301
+ }, [node, hasUnsavedChanges]);
11299
11302
  const hasImages = customProps.some((p) => p.type === "images" && Array.isArray(p.value) && p.value.length > 0 && p.value.some((img) => img.value));
11300
11303
  (0, import_react20.useEffect)(() => {
11301
11304
  if (!hasImages && useImageAsTexture) {
@@ -12097,7 +12100,8 @@ function QuestDetailsPanel({
12097
12100
  };
12098
12101
  (0, import_react22.useEffect)(() => {
12099
12102
  var _a2;
12100
- if ((node == null ? void 0 : node.id) !== prevNodeIdRef.current) {
12103
+ const isNewNode = (node == null ? void 0 : node.id) !== prevNodeIdRef.current;
12104
+ if (isNewNode || !hasUnsavedChanges) {
12101
12105
  prevNodeIdRef.current = node == null ? void 0 : node.id;
12102
12106
  const newRawTitle = (node == null ? void 0 : node.raw_title) || (((_a2 = node == null ? void 0 : node.name) == null ? void 0 : _a2.includes(" - \xBB ")) ? node.name.split(" - \xBB ")[1] : node == null ? void 0 : node.name) || "";
12103
12107
  setRawTitle(newRawTitle);
@@ -12124,7 +12128,7 @@ function QuestDetailsPanel({
12124
12128
  });
12125
12129
  setHasUnsavedChanges(false);
12126
12130
  }
12127
- }, [node]);
12131
+ }, [node, hasUnsavedChanges]);
12128
12132
  (0, import_react22.useEffect)(() => {
12129
12133
  const validExistingTypes = existingTypes.filter((t) => t && typeof t === "string" && t.trim() !== "");
12130
12134
  if (typeInput.trim() === "") {
@@ -12528,40 +12532,180 @@ ${noteText}` : noteText : entry.notes,
12528
12532
  maxWidth: "92vw",
12529
12533
  ...style
12530
12534
  },
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,
12535
+ onPointerDown: swallow,
12536
+ onPointerMove: swallow,
12537
+ onPointerUp: swallow,
12538
+ onClick: swallow,
12539
+ onWheel: swallow,
12540
+ onContextMenu: swallow,
12541
+ onDoubleClick: swallow
12542
+ },
12543
+ /* @__PURE__ */ import_react22.default.createElement("div", { onPointerDown: (e) => {
12544
+ e.stopPropagation();
12545
+ handleResize(e);
12546
+ }, 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" }),
12547
+ isReadMode ? /* @__PURE__ */ import_react22.default.createElement(
12548
+ DescriptionReadModePanel,
12549
+ {
12550
+ title: standardizedName || (node == null ? void 0 : node.name),
12551
+ description,
12552
+ savedSections: existingSections,
12553
+ onBack: () => setIsReadMode(false),
12554
+ onEdit: () => {
12555
+ if (canEdit) {
12556
+ setIsReadMode(false);
12557
+ setIsDescriptionModalOpen(true);
12558
+ }
12559
+ },
12560
+ onClose: handleCancel,
12561
+ availableNodes,
12562
+ availableAncestries,
12563
+ onOpenReference,
12564
+ onMentionClick,
12565
+ onImageClick: handleImageClickFromText,
12566
+ onSaveDescription: handleSaveDescriptionInline
12567
+ }
12568
+ ) : /* @__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(
12569
+ "button",
12570
+ {
12571
+ type: "button",
12572
+ onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
12573
+ 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"
12574
+ },
12575
+ /* @__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")),
12576
+ /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiChevronDown, { className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}` })
12577
+ ), isAssigneeDropdownOpen && /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, null, /* @__PURE__ */ import_react22.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
12578
+ setIsAssigneeDropdownOpen(false);
12579
+ setAssigneeSearchQuery("");
12580
+ } }), /* @__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(
12581
+ "input",
12582
+ {
12583
+ type: "text",
12584
+ autoFocus: true,
12585
+ placeholder: "Buscar membro...",
12586
+ value: assigneeSearchQuery,
12587
+ onChange: (e) => setAssigneeSearchQuery(e.target.value),
12588
+ className: "bg-transparent border-none outline-none text-xs text-white placeholder-slate-500 w-full",
12589
+ onClick: (e) => e.stopPropagation()
12590
+ }
12591
+ )), /* @__PURE__ */ import_react22.default.createElement("ul", { className: "max-h-48 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ import_react22.default.createElement(
12592
+ "li",
12593
+ {
12594
+ onClick: () => {
12595
+ setAssigneeId("");
12596
+ const newTimeline = [...timeline, createTimelineEntry(
12597
+ (currentUser == null ? void 0 : currentUser.id) || "unknown",
12598
+ `Status "${status}" - Respons\xE1vel: Nenhum`,
12599
+ "status_changed"
12600
+ )];
12601
+ setTimeline(newTimeline);
12602
+ setHasUnsavedChanges(true);
12603
+ setIsAssigneeDropdownOpen(false);
12604
+ setAssigneeSearchQuery("");
12605
+ },
12606
+ 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"}`
12607
+ },
12608
+ "Nenhum"
12609
+ ), isAssigneeUndefined && /* @__PURE__ */ import_react22.default.createElement(
12610
+ "li",
12611
+ {
12612
+ onClick: () => {
12613
+ setIsAssigneeDropdownOpen(false);
12614
+ setAssigneeSearchQuery("");
12615
+ },
12616
+ className: "px-3 py-2.5 text-sm cursor-pointer bg-red-500/10 text-red-300 flex items-center gap-2"
12617
+ },
12618
+ "Undefined (Removido)"
12619
+ ), viewMembers.filter((member) => {
12620
+ const search = assigneeSearchQuery.toLowerCase();
12621
+ return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
12622
+ }).map((member) => /* @__PURE__ */ import_react22.default.createElement(
12623
+ "li",
12624
+ {
12625
+ key: member.id,
12626
+ onClick: () => {
12627
+ setAssigneeId(member.id);
12628
+ const newTimeline = [...timeline, createTimelineEntry(
12629
+ (currentUser == null ? void 0 : currentUser.id) || "unknown",
12630
+ `Status "${status}" - Respons\xE1vel: ${member.name || member.email}`,
12631
+ "status_changed"
12632
+ )];
12633
+ setTimeline(newTimeline);
12634
+ setHasUnsavedChanges(true);
12635
+ setIsAssigneeDropdownOpen(false);
12636
+ setAssigneeSearchQuery("");
12637
+ },
12638
+ 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"}`
12639
+ },
12640
+ member.name || member.email || member.id
12641
+ )))))) : /* @__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(
12642
+ "button",
12545
12643
  {
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);
12644
+ type: "button",
12645
+ onClick: () => {
12646
+ if (setQuestTreeMode) {
12647
+ const convertPersistedTree = (storedTree) => {
12648
+ if (!storedTree) return null;
12649
+ if (storedTree.node || storedTree.is_section) return storedTree;
12650
+ const nodeId = storedTree.node_id;
12651
+ if (!nodeId) return null;
12652
+ const foundNode = availableNodes.find((n) => String(n.id) === String(nodeId)) || (String(nodeId) === String(node == null ? void 0 : node.id) ? node : null);
12653
+ return {
12654
+ node: foundNode ? { id: foundNode.id, name: foundNode.raw_title || foundNode.name } : { id: nodeId, name: `Node ${nodeId}` },
12655
+ relationship: storedTree.relationship || {},
12656
+ children: (storedTree.children || []).map(convertPersistedTree).filter(Boolean)
12657
+ };
12658
+ };
12659
+ 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" };
12660
+ const existingTree = (node == null ? void 0 : node.quest_tree) ? convertPersistedTree(node.quest_tree) : { node: rootNode, children: [] };
12661
+ const existingAbstractionTree = (node == null ? void 0 : node.quest_abstraction_tree) ? convertPersistedTree(node.quest_abstraction_tree) : { node: rootNode, children: [] };
12662
+ setQuestTreeMode((prev) => ({
12663
+ ...prev,
12664
+ isActive: true,
12665
+ isAddingNodes: true,
12666
+ questNodeId: node == null ? void 0 : node.id,
12667
+ questNodeName: (node == null ? void 0 : node.raw_title) || (node == null ? void 0 : node.name),
12668
+ tree: existingTree,
12669
+ abstraction_tree: existingAbstractionTree,
12670
+ selectedParentId: rootNode.id
12671
+ }));
12554
12672
  }
12555
12673
  },
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(
12674
+ 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" : ""}`
12675
+ },
12676
+ /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiGitBranch, { className: "text-indigo-400" }),
12677
+ " Configurar \xC1rvores"
12678
+ ), /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ import_react22.default.createElement(
12679
+ "button",
12680
+ {
12681
+ type: "button",
12682
+ onClick: () => {
12683
+ if (handleRenderQuestTree) handleRenderQuestTree(node);
12684
+ },
12685
+ 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"}`
12686
+ },
12687
+ "Renderizar Horizontal"
12688
+ ), /* @__PURE__ */ import_react22.default.createElement(
12689
+ "button",
12690
+ {
12691
+ type: "button",
12692
+ onClick: () => {
12693
+ if (handleRenderQuestAbstractionTree) handleRenderQuestAbstractionTree(node);
12694
+ },
12695
+ 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"}`
12696
+ },
12697
+ "Renderizar Vertical"
12698
+ )))), /* @__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(
12699
+ "button",
12700
+ {
12701
+ type: "button",
12702
+ onClick: handleCreateGoogleDoc,
12703
+ disabled: isLoadingDocs,
12704
+ className: "flex items-center justify-center text-slate-300 transition-all disabled:opacity-50 disabled:cursor-not-allowed group",
12705
+ title: isLoadingDocs ? "Criando Documento..." : "Criar Documento no Google Docs"
12706
+ },
12707
+ 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" })
12708
+ )), 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
12709
  "input",
12566
12710
  {
12567
12711
  type: "text",
@@ -12570,7 +12714,7 @@ ${noteText}` : noteText : entry.notes,
12570
12714
  readOnly: !canEdit,
12571
12715
  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
12716
  }
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(
12717
+ ), /* @__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
12718
  "button",
12575
12719
  {
12576
12720
  type: "button",
@@ -12784,83 +12928,7 @@ ${noteText}` : noteText : entry.notes,
12784
12928
  /* @__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
12929
  isDisabled && /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiRepeat, { className: "text-amber-400/60 rotate-180", size: 12 })
12786
12930
  );
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(
12931
+ }))))), /* @__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
12932
  "button",
12865
12933
  {
12866
12934
  type: "button",
@@ -12948,7 +13016,7 @@ ${noteText}` : noteText : entry.notes,
12948
13016
  onClick: () => setIsReturnDropdownOpen(!isReturnDropdownOpen),
12949
13017
  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
13018
  },
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...")),
13019
+ /* @__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
13020
  /* @__PURE__ */ import_react22.default.createElement(import_fi20.FiChevronDown, { className: `text-slate-400 transition-transform duration-200 ${isReturnDropdownOpen ? "rotate-180" : ""}`, size: 14 })
12953
13021
  ), 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
13022
  setIsReturnDropdownOpen(false);
@@ -12992,68 +13060,7 @@ ${noteText}` : noteText : entry.notes,
12992
13060
  },
12993
13061
  /* @__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
13062
  "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) => {
13063
+ ))), /* @__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
13064
  const depNode = availableNodes.find((n) => String(n.id) === String(depId));
13058
13065
  if (!depNode) return null;
13059
13066
  const isDone = depNode.status === "Done";
@@ -13109,36 +13116,7 @@ ${noteText}` : noteText : entry.notes,
13109
13116
  },
13110
13117
  /* @__PURE__ */ import_react22.default.createElement("span", { className: "truncate" }, q.raw_title || q.name),
13111
13118
  /* @__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(
13119
+ )) : /* @__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
13120
  "button",
13143
13121
  {
13144
13122
  type: "button",