@lv-x-software-house/x_view 1.2.5-dev.30 → 1.2.5-dev.32

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 +124 -71
  2. package/dist/index.mjs +210 -157
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -3676,7 +3676,7 @@ function createTimelineEntry(actorId, description, type = "comment", extras = {}
3676
3676
  // src/components/CustomPropertyDisplay.jsx
3677
3677
  var import_react4 = __toESM(require("react"));
3678
3678
  var import_fi2 = require("react-icons/fi");
3679
- function CustomPropertyDisplay2({
3679
+ function CustomPropertyDisplay({
3680
3680
  prop,
3681
3681
  onUpdate,
3682
3682
  onRemove,
@@ -4447,7 +4447,7 @@ var normalizeText = (text) => {
4447
4447
  if (!text) return "";
4448
4448
  return text.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
4449
4449
  };
4450
- function DescriptionEditModal2({
4450
+ function DescriptionEditModal({
4451
4451
  isOpen,
4452
4452
  title,
4453
4453
  initialValue,
@@ -5131,7 +5131,7 @@ var formatLineContent2 = (line, availableNodes, onMentionClick, activeMentionInd
5131
5131
  }
5132
5132
  return /* @__PURE__ */ import_react7.default.createElement("span", { className: "break-words" }, processContent(line));
5133
5133
  };
5134
- function DescriptionDisplay2({
5134
+ function DescriptionDisplay({
5135
5135
  description,
5136
5136
  savedSections,
5137
5137
  availableNodes = [],
@@ -5672,7 +5672,7 @@ function DescriptionReadModePanel({
5672
5672
  targetRenderNodeId
5673
5673
  }
5674
5674
  ))) : showProperties ? /* @__PURE__ */ import_react8.default.createElement("div", { className: "space-y-4 animate-in fade-in slide-in-from-bottom-2 duration-300" }, customProperties.map((prop) => /* @__PURE__ */ import_react8.default.createElement(
5675
- CustomPropertyDisplay2,
5675
+ CustomPropertyDisplay,
5676
5676
  {
5677
5677
  key: prop.id,
5678
5678
  prop,
@@ -5684,7 +5684,7 @@ function DescriptionReadModePanel({
5684
5684
  onOpenImageViewer: null
5685
5685
  }
5686
5686
  ))) : /* @__PURE__ */ import_react8.default.createElement(
5687
- DescriptionDisplay2,
5687
+ DescriptionDisplay,
5688
5688
  {
5689
5689
  description,
5690
5690
  savedSections,
@@ -5833,7 +5833,7 @@ function AncestryRelationshipPanel({
5833
5833
  onSaveDescription: handleSaveDescriptionInline
5834
5834
  }
5835
5835
  ) : /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("div", { className: "h-[2px] bg-gradient-to-r from-cyan-400/0 via-cyan-400/70 to-cyan-400/0" }), /* @__PURE__ */ import_react9.default.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ import_react9.default.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-cyan-400/80 shadow-[0_0_18px_2px_rgba(45,212,191,0.55)]" }), /* @__PURE__ */ import_react9.default.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Rela\xE7\xE3o de Ancestralidade")), /* @__PURE__ */ import_react9.default.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, "Editar Rela\xE7\xE3o")), /* @__PURE__ */ import_react9.default.createElement("button", { onClick: onClose, 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", title: "Fechar" }, "\xD7")), /* @__PURE__ */ import_react9.default.createElement("div", { className: "px-6 pb-4 overflow-y-auto overscroll-contain space-y-4 custom-scrollbar" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react9.default.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o da Rela\xE7\xE3o"), /* @__PURE__ */ import_react9.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_react9.default.createElement(
5836
- DescriptionDisplay2,
5836
+ DescriptionDisplay,
5837
5837
  {
5838
5838
  description,
5839
5839
  savedSections: existingSections,
@@ -5870,7 +5870,7 @@ function AncestryRelationshipPanel({
5870
5870
  },
5871
5871
  "Adicionar descri\xE7\xE3o..."
5872
5872
  )), /* @__PURE__ */ import_react9.default.createElement("p", { className: "text-xs text-slate-400 italic" }, "Esta descri\xE7\xE3o aparecer\xE1 ao passar o mouse sobre a linha de conex\xE3o na cena 3D.")), /* @__PURE__ */ import_react9.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react9.default.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), /* @__PURE__ */ import_react9.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_react9.default.createElement(import_fi7.FiPlus, { size: 14 }), " Adicionar")), /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex flex-col gap-3 p-3 rounded-lg bg-black/20 border border-white/5" }, customProps.length === 0 && /* @__PURE__ */ import_react9.default.createElement("p", { className: "text-center text-sm text-slate-400 py-4" }, "Nenhuma propriedade adicional."), customProps.map((prop, idx) => /* @__PURE__ */ import_react9.default.createElement(
5873
- CustomPropertyDisplay2,
5873
+ CustomPropertyDisplay,
5874
5874
  {
5875
5875
  key: prop.id,
5876
5876
  prop,
@@ -5883,7 +5883,7 @@ function AncestryRelationshipPanel({
5883
5883
  )), /* @__PURE__ */ import_react9.default.createElement("div", { ref: propsEndRef })))), /* @__PURE__ */ import_react9.default.createElement("div", { className: "sticky bottom-0 z-10 bg-gradient-to-t from-slate-950/80 via-slate-950/50 to-transparent px-6 py-4 border-t border-white/10 flex justify-end gap-3" }, /* @__PURE__ */ import_react9.default.createElement("button", { onClick: onClose, className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm" }, "Cancelar"), /* @__PURE__ */ import_react9.default.createElement("button", { onClick: handleSave, className: "px-4 py-2 rounded-lg bg-gradient-to-tr from-cyan-600 to-cyan-400 hover:from-cyan-500 hover:to-cyan-300 transition-colors font-semibold text-sm shadow-[0_8px_24px_rgba(45,212,191,0.35)]" }, "Salvar Altera\xE7\xF5es")))
5884
5884
  )
5885
5885
  ), isDescriptionModalOpen && /* @__PURE__ */ import_react9.default.createElement(
5886
- DescriptionEditModal2,
5886
+ DescriptionEditModal,
5887
5887
  {
5888
5888
  isOpen: isDescriptionModalOpen,
5889
5889
  title: "Editar Descri\xE7\xE3o da Rela\xE7\xE3o",
@@ -7356,7 +7356,7 @@ function CreateAncestryPanel({
7356
7356
  /* @__PURE__ */ import_react11.default.createElement("div", { className: "w-4 h-4 border border-slate-500 rounded flex items-center justify-center" }),
7357
7357
  "Usar Ancestralidade Existente como Branch"
7358
7358
  ))), isContextLinked ? /* @__PURE__ */ import_react11.default.createElement("div", { className: "text-center py-8 text-slate-500 text-sm border-t border-white/5" }, /* @__PURE__ */ import_react11.default.createElement("p", null, "O conte\xFAdo desta ramifica\xE7\xE3o \xE9 provido por outra ancestralidade."), /* @__PURE__ */ import_react11.default.createElement("p", { className: "mt-1 text-xs" }, "Para editar, navegue at\xE9 a ancestralidade original ou desvincule.")) : /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement("div", { className: "mb-4 space-y-1.5 relative" }, /* @__PURE__ */ import_react11.default.createElement("label", { className: "text-xs text-slate-400 font-medium ml-1" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react11.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react11.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 z-10" }, /* @__PURE__ */ import_react11.default.createElement(
7359
- DescriptionDisplay2,
7359
+ DescriptionDisplay,
7360
7360
  {
7361
7361
  key: branchStack.length > 0 ? branchStack[branchStack.length - 1].branchId : currentAncestryId || "root",
7362
7362
  description,
@@ -7435,7 +7435,7 @@ function CreateAncestryPanel({
7435
7435
  /* @__PURE__ */ import_react11.default.createElement(import_fi9.FiPlus, { size: 14 }),
7436
7436
  " Adicionar"
7437
7437
  )), /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ import_react11.default.createElement(
7438
- CustomPropertyDisplay2,
7438
+ CustomPropertyDisplay,
7439
7439
  {
7440
7440
  key: prop.id,
7441
7441
  prop,
@@ -7575,7 +7575,7 @@ function CreateAncestryPanel({
7575
7575
  availableNodes
7576
7576
  }
7577
7577
  ), isDescriptionModalOpen && /* @__PURE__ */ import_react11.default.createElement(
7578
- DescriptionEditModal2,
7578
+ DescriptionEditModal,
7579
7579
  {
7580
7580
  isOpen: isDescriptionModalOpen,
7581
7581
  title: branchStack.length > 0 ? "Editar Descri\xE7\xE3o da Ramifica\xE7\xE3o" : "Editar Descri\xE7\xE3o da Ancestralidade",
@@ -8137,7 +8137,7 @@ function InSceneCreationForm({
8137
8137
  },
8138
8138
  ds.name
8139
8139
  )))), /* @__PURE__ */ import_react14.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react14.default.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react14.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_react14.default.createElement(
8140
- DescriptionDisplay2,
8140
+ DescriptionDisplay,
8141
8141
  {
8142
8142
  description,
8143
8143
  savedSections: [],
@@ -8243,7 +8243,7 @@ function InSceneCreationForm({
8243
8243
  /* @__PURE__ */ import_react14.default.createElement(import_fi12.FiPlus, { size: 14 }),
8244
8244
  " Adicionar"
8245
8245
  )), /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ import_react14.default.createElement(
8246
- CustomPropertyDisplay2,
8246
+ CustomPropertyDisplay,
8247
8247
  {
8248
8248
  key: prop.id,
8249
8249
  prop,
@@ -8275,7 +8275,7 @@ function InSceneCreationForm({
8275
8275
  "Salvar"
8276
8276
  )))
8277
8277
  ), isDescriptionModalOpen && /* @__PURE__ */ import_react14.default.createElement(
8278
- DescriptionEditModal2,
8278
+ DescriptionEditModal,
8279
8279
  {
8280
8280
  isOpen: isDescriptionModalOpen,
8281
8281
  title: "Editar Descri\xE7\xE3o do Node",
@@ -8464,7 +8464,7 @@ function InSceneVersionForm({
8464
8464
  className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 focus:outline-none focus:ring-2 focus:ring-indigo-400/60"
8465
8465
  }
8466
8466
  )), /* @__PURE__ */ import_react15.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react15.default.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react15.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_react15.default.createElement(
8467
- DescriptionDisplay2,
8467
+ DescriptionDisplay,
8468
8468
  {
8469
8469
  description,
8470
8470
  savedSections: [],
@@ -8558,7 +8558,7 @@ function InSceneVersionForm({
8558
8558
  /* @__PURE__ */ import_react15.default.createElement(import_fi13.FiPlus, { size: 14 }),
8559
8559
  " Adicionar"
8560
8560
  )), /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ import_react15.default.createElement(
8561
- CustomPropertyDisplay2,
8561
+ CustomPropertyDisplay,
8562
8562
  {
8563
8563
  key: prop.id,
8564
8564
  prop,
@@ -8590,7 +8590,7 @@ function InSceneVersionForm({
8590
8590
  "Salvar"
8591
8591
  )))
8592
8592
  ), isDescriptionModalOpen && /* @__PURE__ */ import_react15.default.createElement(
8593
- DescriptionEditModal2,
8593
+ DescriptionEditModal,
8594
8594
  {
8595
8595
  isOpen: isDescriptionModalOpen,
8596
8596
  title: "Editar Descri\xE7\xE3o da Vers\xE3o",
@@ -9059,7 +9059,7 @@ function InSceneQuestForm({
9059
9059
  viewMembers
9060
9060
  }
9061
9061
  )), /* @__PURE__ */ import_react17.default.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ import_react17.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react17.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_react17.default.createElement(
9062
- DescriptionDisplay2,
9062
+ DescriptionDisplay,
9063
9063
  {
9064
9064
  description,
9065
9065
  savedSections: [],
@@ -9093,7 +9093,7 @@ function InSceneQuestForm({
9093
9093
  /* @__PURE__ */ import_react17.default.createElement(import_fi15.FiPlus, { size: 14 }),
9094
9094
  " Adicionar"
9095
9095
  )), /* @__PURE__ */ import_react17.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ import_react17.default.createElement(
9096
- CustomPropertyDisplay2,
9096
+ CustomPropertyDisplay,
9097
9097
  {
9098
9098
  key: prop.id,
9099
9099
  prop,
@@ -9176,7 +9176,7 @@ function InSceneQuestForm({
9176
9176
  "Salvar Quest"
9177
9177
  )))
9178
9178
  ), isDescriptionModalOpen && /* @__PURE__ */ import_react17.default.createElement(
9179
- DescriptionEditModal2,
9179
+ DescriptionEditModal,
9180
9180
  {
9181
9181
  isOpen: isDescriptionModalOpen,
9182
9182
  title: "Editar Descri\xE7\xE3o da Quest",
@@ -9580,7 +9580,7 @@ function NodeDetailsPanel({
9580
9580
  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"}`
9581
9581
  }
9582
9582
  )), /* @__PURE__ */ import_react18.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react18.default.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react18.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_react18.default.createElement(
9583
- DescriptionDisplay2,
9583
+ DescriptionDisplay,
9584
9584
  {
9585
9585
  description,
9586
9586
  savedSections: existingSections,
@@ -9658,7 +9658,7 @@ function NodeDetailsPanel({
9658
9658
  title: `Intensidade do brilho: ${intensity}`
9659
9659
  }
9660
9660
  ), /* @__PURE__ */ import_react18.default.createElement("span", { className: "text-xs text-slate-400 w-6 text-right" }, intensity)), /* @__PURE__ */ import_react18.default.createElement("span", { className: `text-xs block mt-1 transition-opacity ${useImageAsTexture ? "opacity-40" : "text-slate-400"}` }, useImageAsTexture ? "Cor da borda (definida pela imagem)" : "Ajuste a cor e a intensidade do brilho.")), /* @__PURE__ */ import_react18.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react18.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react18.default.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), canEdit && /* @__PURE__ */ import_react18.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_react18.default.createElement(import_fi16.FiPlus, { size: 14 }), " Adicionar")), /* @__PURE__ */ import_react18.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ import_react18.default.createElement(
9661
- CustomPropertyDisplay2,
9661
+ CustomPropertyDisplay,
9662
9662
  {
9663
9663
  key: prop.id,
9664
9664
  prop,
@@ -9685,7 +9685,7 @@ function NodeDetailsPanel({
9685
9685
  isSaving ? "Salvando..." : "Salvar"
9686
9686
  )))
9687
9687
  ), isDescriptionModalOpen && canEdit && /* @__PURE__ */ import_react18.default.createElement(
9688
- DescriptionEditModal2,
9688
+ DescriptionEditModal,
9689
9689
  {
9690
9690
  isOpen: isDescriptionModalOpen,
9691
9691
  title: "Editar Descri\xE7\xE3o do Node",
@@ -9706,6 +9706,7 @@ function NodeDetailsPanel({
9706
9706
 
9707
9707
  // src/components/QuestDetailsPanel.jsx
9708
9708
  var import_react20 = __toESM(require("react"));
9709
+ var import_fi18 = require("react-icons/fi");
9709
9710
 
9710
9711
  // src/components/QuestTimeline.jsx
9711
9712
  var import_react19 = __toESM(require("react"));
@@ -9742,11 +9743,11 @@ function QuestTimeline({
9742
9743
  if (timeline.length === 0) {
9743
9744
  return /* @__PURE__ */ import_react19.default.createElement("div", { className: "py-6 flex flex-col items-center justify-center gap-2 border border-white/5 bg-white/5 rounded-xl" }, /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiAlertCircle, { className: "text-slate-600", size: 16 }), /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-[10px] text-slate-500 font-light uppercase tracking-widest" }, "Nenhum hist\xF3rico dispon\xEDvel"));
9744
9745
  }
9745
- return /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ import_react19.default.createElement("h3", { className: "text-xs text-slate-400 font-medium uppercase tracking-wider flex items-center gap-2" }, "Hist\xF3rico (Timeline)"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative pl-6 space-y-6 before:content-[''] before:absolute before:left-[11px] before:top-2 before:bottom-2 before:w-[2px] before:bg-white/5" }, sortedTimeline.map((event, index) => {
9746
+ return /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ import_react19.default.createElement("h3", { className: "text-xs text-slate-400 font-medium uppercase tracking-wider flex items-center gap-2" }, "Hist\xF3rico (Timeline)"), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative pl-10 space-y-6 before:content-[''] before:absolute before:left-[21px] before:top-2 before:bottom-2 before:w-[2px] before:bg-white/5" }, sortedTimeline.map((event, index) => {
9746
9747
  const config = EVENT_ICONS[event.type] || EVENT_ICONS.default;
9747
9748
  const Icon = config.icon;
9748
9749
  const actorName = getMemberName(event.actorId);
9749
- return /* @__PURE__ */ import_react19.default.createElement("div", { key: index, className: "relative animate-in fade-in slide-in-from-left-2 duration-300", style: { animationDelay: `${index * 50}ms` } }, /* @__PURE__ */ import_react19.default.createElement("div", { className: `absolute -left-[27px] top-0 w-8 h-8 rounded-full ${config.bg} flex items-center justify-center ring-4 ring-slate-950 border border-white/5` }, /* @__PURE__ */ import_react19.default.createElement(Icon, { className: config.iconColor || config.color, size: 14 })), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center justify-between gap-4" }, /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-xs font-semibold text-slate-200" }, actorName), /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[10px] text-slate-500 tabular-nums" }, formatDate(event.timestamp))), /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-sm text-slate-400 leading-relaxed" }, event.description), (event.from_status || event.to_status) && /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center gap-1.5 py-1 px-2 rounded-md bg-white/5 border border-white/5 w-fit mt-2" }, /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[10px] text-slate-500" }, event.from_status || "?"), /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiArrowRight, { size: 10, className: "text-slate-600" }), /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[10px] text-indigo-300 font-bold" }, event.to_status || "?")), event.metadata && Object.keys(event.metadata).length > 0 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "mt-2 text-[10px] grid grid-cols-2 gap-2 p-2 bg-slate-900/50 rounded border border-white/5" }, Object.entries(event.metadata).map(([key, value]) => /* @__PURE__ */ import_react19.default.createElement("div", { key, className: "flex flex-col gap-0.5" }, /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-slate-500 capitalize" }, key.replace(/_/g, " ")), /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-slate-300 truncate font-mono" }, typeof value === "string" ? value : JSON.stringify(value))))), event.links && event.links.length > 0 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex flex-wrap gap-2 mt-2" }, event.links.map((link, lIdx) => /* @__PURE__ */ import_react19.default.createElement(
9750
+ return /* @__PURE__ */ import_react19.default.createElement("div", { key: index, className: "relative animate-in fade-in slide-in-from-left-2 duration-300", style: { animationDelay: `${index * 50}ms` } }, /* @__PURE__ */ import_react19.default.createElement("div", { className: `absolute -left-[35px] top-0 w-8 h-8 rounded-full ${config.bg} flex items-center justify-center ring-4 ring-slate-950 border border-white/5` }, /* @__PURE__ */ import_react19.default.createElement(Icon, { className: config.iconColor || config.color, size: 14 })), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center justify-between gap-4" }, /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-xs font-semibold text-slate-200" }, actorName), /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[10px] text-slate-500 tabular-nums" }, formatDate(event.timestamp))), /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-sm text-slate-400 leading-relaxed" }, event.description), (event.from_status || event.to_status) && /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-center gap-1.5 py-1 px-2 rounded-md bg-white/5 border border-white/5 w-fit mt-2" }, /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[10px] text-slate-500" }, event.from_status || "?"), /* @__PURE__ */ import_react19.default.createElement(import_fi17.FiArrowRight, { size: 10, className: "text-slate-600" }), /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[10px] text-indigo-300 font-bold" }, event.to_status || "?")), event.metadata && Object.keys(event.metadata).length > 0 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "mt-2 text-[10px] grid grid-cols-2 gap-2 p-2 bg-slate-900/50 rounded border border-white/5" }, Object.entries(event.metadata).map(([key, value]) => /* @__PURE__ */ import_react19.default.createElement("div", { key, className: "flex flex-col gap-0.5" }, /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-slate-500 capitalize" }, key.replace(/_/g, " ")), /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-slate-300 truncate font-mono" }, typeof value === "string" ? value : JSON.stringify(value))))), event.links && event.links.length > 0 && /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex flex-wrap gap-2 mt-2" }, event.links.map((link, lIdx) => /* @__PURE__ */ import_react19.default.createElement(
9750
9751
  "a",
9751
9752
  {
9752
9753
  key: lIdx,
@@ -9829,6 +9830,8 @@ function QuestDetailsPanel({
9829
9830
  const [isLinkCopied, setIsLinkCopied] = (0, import_react20.useState)(false);
9830
9831
  const [hasUnsavedChanges, setHasUnsavedChanges] = (0, import_react20.useState)(false);
9831
9832
  const [noteText, setNoteText] = (0, import_react20.useState)("");
9833
+ const [noteLinks, setNoteLinks] = (0, import_react20.useState)([]);
9834
+ const [noteImages, setNoteImages] = (0, import_react20.useState)([]);
9832
9835
  const [isNoteFormOpen, setIsNoteFormOpen] = (0, import_react20.useState)(false);
9833
9836
  const maxPanelW = typeof window !== "undefined" ? window.innerWidth * 0.92 : 1200;
9834
9837
  const { width: panelWidth, isResizing, handlePointerDown: handleResize, setWidth } = useResizablePanel({
@@ -9964,7 +9967,10 @@ function QuestDetailsPanel({
9964
9967
  if (!noteText.trim() || isSaving) return;
9965
9968
  setIsSaving(true);
9966
9969
  const actorId = (currentUser == null ? void 0 : currentUser.id) || "unknown";
9967
- const newEntry = createTimelineEntry(actorId, noteText, "comment");
9970
+ const newEntry = createTimelineEntry(actorId, noteText, "comment", {
9971
+ links: noteLinks,
9972
+ images: noteImages
9973
+ });
9968
9974
  const updatedTimeline = [...timeline, newEntry];
9969
9975
  try {
9970
9976
  const nodeToSave = {
@@ -9975,6 +9981,8 @@ function QuestDetailsPanel({
9975
9981
  setTimeline(updatedTimeline);
9976
9982
  onDataUpdate(nodeToSave);
9977
9983
  setNoteText("");
9984
+ setNoteLinks([]);
9985
+ setNoteImages([]);
9978
9986
  setIsNoteFormOpen(false);
9979
9987
  } catch (error) {
9980
9988
  console.error("Erro ao adicionar nota:", error);
@@ -9982,6 +9990,24 @@ function QuestDetailsPanel({
9982
9990
  setIsSaving(false);
9983
9991
  }
9984
9992
  };
9993
+ const addLinkToNote = () => {
9994
+ setNoteLinks([...noteLinks, { id: v4_default(), name: "", value: "" }]);
9995
+ };
9996
+ const removeLinkFromNote = (id) => {
9997
+ setNoteLinks(noteLinks.filter((l) => l.id !== id));
9998
+ };
9999
+ const updateLinkInNote = (id, field, val) => {
10000
+ setNoteLinks(noteLinks.map((l) => l.id === id ? { ...l, [field]: val } : l));
10001
+ };
10002
+ const addImageToNote = () => {
10003
+ setNoteImages([...noteImages, { id: v4_default(), name: "Image", value: "" }]);
10004
+ };
10005
+ const removeImageFromNote = (id) => {
10006
+ setNoteImages(noteImages.filter((img) => img.id !== id));
10007
+ };
10008
+ const updateImageInNote = (id, val) => {
10009
+ setNoteImages(noteImages.map((img) => img.id === id ? { ...img, value: val } : img));
10010
+ };
9985
10011
  const handleStatusChange = (newStatus) => {
9986
10012
  setStatus(newStatus);
9987
10013
  const newColor = QUEST_STATUS_COLORS3[newStatus];
@@ -10148,7 +10174,7 @@ function QuestDetailsPanel({
10148
10174
  onImageClick: handleImageClickFromText,
10149
10175
  onSaveDescription: handleSaveDescriptionInline
10150
10176
  }
10151
- ) : /* @__PURE__ */ import_react20.default.createElement(import_react20.default.Fragment, null, /* @__PURE__ */ import_react20.default.createElement("div", { className: "h-[2px]", style: { background: `linear-gradient(to right, transparent, ${QUEST_STATUS_COLORS3[status]}, transparent)` } }), /* @__PURE__ */ import_react20.default.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ import_react20.default.createElement(FiTarget, { className: "text-sky-400", size: 14 }), /* @__PURE__ */ import_react20.default.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Quest"), /* @__PURE__ */ import_react20.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_react20.default.createElement(FiCheck, { size: 12 }) : /* @__PURE__ */ import_react20.default.createElement(FiLink, { size: 12 }))), /* @__PURE__ */ import_react20.default.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, standardizedName || (node == null ? void 0 : node.name))), /* @__PURE__ */ import_react20.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_react20.default.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 max-h-[68vh] custom-scrollbar" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react20.default.createElement("label", { className: "text-xs text-slate-300" }, "T\xEDtulo da Quest"), /* @__PURE__ */ import_react20.default.createElement(
10177
+ ) : /* @__PURE__ */ import_react20.default.createElement(import_react20.default.Fragment, null, /* @__PURE__ */ import_react20.default.createElement("div", { className: "h-[2px]", style: { background: `linear-gradient(to right, transparent, ${QUEST_STATUS_COLORS3[status]}, transparent)` } }), /* @__PURE__ */ import_react20.default.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiTarget, { className: "text-sky-400", size: 14 }), /* @__PURE__ */ import_react20.default.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Quest"), /* @__PURE__ */ import_react20.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_react20.default.createElement(import_fi18.FiCheck, { size: 12 }) : /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiLink, { size: 12 }))), /* @__PURE__ */ import_react20.default.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, standardizedName || (node == null ? void 0 : node.name))), /* @__PURE__ */ import_react20.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_react20.default.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 max-h-[68vh] custom-scrollbar" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react20.default.createElement("label", { className: "text-xs text-slate-300" }, "T\xEDtulo da Quest"), /* @__PURE__ */ import_react20.default.createElement(
10152
10178
  "input",
10153
10179
  {
10154
10180
  type: "text",
@@ -10166,7 +10192,7 @@ function QuestDetailsPanel({
10166
10192
  className: `w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 transition-colors flex items-center justify-between ${canEdit ? "hover:border-white/20 focus:ring-2 focus:ring-indigo-400/60 cursor-pointer" : "cursor-default opacity-80"}`
10167
10193
  },
10168
10194
  /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react20.default.createElement("span", { className: "w-3 h-3 rounded-full shadow-[0_0_8px_rgba(0,0,0,0.5)]", style: { backgroundColor: QUEST_STATUS_COLORS3[status] } }), /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-slate-200 font-medium" }, status)),
10169
- canEdit && /* @__PURE__ */ import_react20.default.createElement(FiChevronDown, { className: `text-slate-400 transition-transform duration-200 ${isStatusDropdownOpen ? "rotate-180" : ""}` })
10195
+ canEdit && /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiChevronDown, { className: `text-slate-400 transition-transform duration-200 ${isStatusDropdownOpen ? "rotate-180" : ""}` })
10170
10196
  ), isStatusDropdownOpen && canEdit && /* @__PURE__ */ import_react20.default.createElement(import_react20.default.Fragment, null, /* @__PURE__ */ import_react20.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => setIsStatusDropdownOpen(false) }), /* @__PURE__ */ import_react20.default.createElement("ul", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-800 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden" }, Object.keys(QUEST_STATUS_COLORS3).map((s) => /* @__PURE__ */ import_react20.default.createElement(
10171
10197
  "li",
10172
10198
  {
@@ -10186,12 +10212,12 @@ function QuestDetailsPanel({
10186
10212
  onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
10187
10213
  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"
10188
10214
  },
10189
- /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react20.default.createElement(FiUser, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-slate-200 font-medium" }, isAssigneeUndefined ? "Undefined" : (assigneeMember == null ? void 0 : assigneeMember.name) || (assigneeMember == null ? void 0 : assigneeMember.email) || "Nenhum")),
10190
- /* @__PURE__ */ import_react20.default.createElement(FiChevronDown, { className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}` })
10215
+ /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiUser, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-slate-200 font-medium" }, isAssigneeUndefined ? "Undefined" : (assigneeMember == null ? void 0 : assigneeMember.name) || (assigneeMember == null ? void 0 : assigneeMember.email) || "Nenhum")),
10216
+ /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiChevronDown, { className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}` })
10191
10217
  ), isAssigneeDropdownOpen && /* @__PURE__ */ import_react20.default.createElement(import_react20.default.Fragment, null, /* @__PURE__ */ import_react20.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
10192
10218
  setIsAssigneeDropdownOpen(false);
10193
10219
  setAssigneeSearchQuery("");
10194
- } }), /* @__PURE__ */ import_react20.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_react20.default.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ import_react20.default.createElement(FiSearch, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ import_react20.default.createElement(
10220
+ } }), /* @__PURE__ */ import_react20.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_react20.default.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiSearch, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ import_react20.default.createElement(
10195
10221
  "input",
10196
10222
  {
10197
10223
  type: "text",
@@ -10259,7 +10285,7 @@ function QuestDetailsPanel({
10259
10285
  )), viewMembers.filter((member) => {
10260
10286
  const search = assigneeSearchQuery.toLowerCase();
10261
10287
  return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
10262
- }).length === 0 && assigneeSearchQuery && /* @__PURE__ */ import_react20.default.createElement("li", { className: "px-3 py-4 text-xs text-slate-500 text-center italic" }, "Nenhum membro encontrado"))))) : /* @__PURE__ */ import_react20.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_react20.default.createElement(FiUser, { className: "opacity-50", size: 14 }), assigneeId ? assigneeMember ? assigneeMember.name || assigneeMember.email : "Undefined" : "Nenhum")), /* @__PURE__ */ import_react20.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react20.default.createElement(
10288
+ }).length === 0 && assigneeSearchQuery && /* @__PURE__ */ import_react20.default.createElement("li", { className: "px-3 py-4 text-xs text-slate-500 text-center italic" }, "Nenhum membro encontrado"))))) : /* @__PURE__ */ import_react20.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_react20.default.createElement(import_fi18.FiUser, { className: "opacity-50", size: 14 }), assigneeId ? assigneeMember ? assigneeMember.name || assigneeMember.email : "Undefined" : "Nenhum")), /* @__PURE__ */ import_react20.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react20.default.createElement(
10263
10289
  QuestReviewStackEditor,
10264
10290
  {
10265
10291
  reviewStack,
@@ -10277,12 +10303,12 @@ function QuestDetailsPanel({
10277
10303
  onClick: () => setIsReturnDropdownOpen(!isReturnDropdownOpen),
10278
10304
  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"
10279
10305
  },
10280
- /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react20.default.createElement(FiUser, { className: "text-slate-400", size: 12 }), /* @__PURE__ */ import_react20.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...")),
10281
- /* @__PURE__ */ import_react20.default.createElement(FiChevronDown, { className: `text-slate-400 transition-transform duration-200 ${isReturnDropdownOpen ? "rotate-180" : ""}`, size: 14 })
10306
+ /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiUser, { className: "text-slate-400", size: 12 }), /* @__PURE__ */ import_react20.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...")),
10307
+ /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiChevronDown, { className: `text-slate-400 transition-transform duration-200 ${isReturnDropdownOpen ? "rotate-180" : ""}`, size: 14 })
10282
10308
  ), isReturnDropdownOpen && /* @__PURE__ */ import_react20.default.createElement(import_react20.default.Fragment, null, /* @__PURE__ */ import_react20.default.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
10283
10309
  setIsReturnDropdownOpen(false);
10284
10310
  setReturnSearchQuery("");
10285
- } }), /* @__PURE__ */ import_react20.default.createElement("div", { className: "absolute bottom-full left-0 mb-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_react20.default.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ import_react20.default.createElement(FiSearch, { className: "text-slate-500", size: 12 }), /* @__PURE__ */ import_react20.default.createElement(
10311
+ } }), /* @__PURE__ */ import_react20.default.createElement("div", { className: "absolute bottom-full left-0 mb-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_react20.default.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiSearch, { className: "text-slate-500", size: 12 }), /* @__PURE__ */ import_react20.default.createElement(
10286
10312
  "input",
10287
10313
  {
10288
10314
  type: "text",
@@ -10321,14 +10347,14 @@ function QuestDetailsPanel({
10321
10347
  },
10322
10348
  /* @__PURE__ */ import_react20.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_react20.default.createElement("path", { d: "M12 19V5M5 12l7 7 7-7" })),
10323
10349
  "Retornar para Opera\xE7\xE3o"
10324
- ))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react20.default.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react20.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_react20.default.createElement(DescriptionDisplay, { description, savedSections: existingSections, availableNodes, availableAncestries, onOpenReference, onMentionClick, onImageClick: handleImageClickFromText, onSaveDescription: handleSaveDescriptionInline }), /* @__PURE__ */ import_react20.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_react20.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_react20.default.createElement(FiBookOpen, { size: 14 })), canEdit && /* @__PURE__ */ import_react20.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_react20.default.createElement(FiEdit2, { size: 14 }))), canEdit && !description && /* @__PURE__ */ import_react20.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_react20.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react20.default.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), canEdit && /* @__PURE__ */ import_react20.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_react20.default.createElement(FiPlus, { size: 14 }), " Adicionar")), /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ import_react20.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_react20.default.createElement("div", { ref: propsEndRef }))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "pt-6 border-t border-white/10 mt-6" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center justify-between mb-4" }, /* @__PURE__ */ import_react20.default.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "Hist\xF3rico & Notas"), /* @__PURE__ */ import_react20.default.createElement(
10350
+ ))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react20.default.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ import_react20.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_react20.default.createElement(DescriptionDisplay, { description, savedSections: existingSections, availableNodes, availableAncestries, onOpenReference, onMentionClick, onImageClick: handleImageClickFromText, onSaveDescription: handleSaveDescriptionInline }), /* @__PURE__ */ import_react20.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_react20.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_react20.default.createElement(import_fi18.FiBookOpen, { size: 14 })), canEdit && /* @__PURE__ */ import_react20.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_react20.default.createElement(import_fi18.FiEdit2, { size: 14 }))), canEdit && !description && /* @__PURE__ */ import_react20.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_react20.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ import_react20.default.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), canEdit && /* @__PURE__ */ import_react20.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_react20.default.createElement(import_fi18.FiPlus, { size: 14 }), " Adicionar")), /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ import_react20.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_react20.default.createElement("div", { ref: propsEndRef }))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "pt-6 border-t border-white/10 mt-6" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center justify-between mb-4" }, /* @__PURE__ */ import_react20.default.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "Hist\xF3rico & Notas"), /* @__PURE__ */ import_react20.default.createElement(
10325
10351
  "button",
10326
10352
  {
10327
10353
  type: "button",
10328
10354
  onClick: () => setIsNoteFormOpen(!isNoteFormOpen),
10329
10355
  className: "flex items-center gap-1.5 px-2 py-1 text-[10px] rounded-md bg-white/5 hover:bg-white/10 border border-white/10 transition-colors text-slate-300"
10330
10356
  },
10331
- isNoteFormOpen ? /* @__PURE__ */ import_react20.default.createElement(FiX, { size: 12 }) : /* @__PURE__ */ import_react20.default.createElement(FiPlus, { size: 12 }),
10357
+ isNoteFormOpen ? /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiX, { size: 12 }) : /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiPlus, { size: 12 }),
10332
10358
  isNoteFormOpen ? "Cancelar" : "Nova Nota"
10333
10359
  )), isNoteFormOpen && /* @__PURE__ */ import_react20.default.createElement("div", { className: "mb-6 p-4 rounded-xl bg-white/5 border border-white/5 space-y-3 animate-in fade-in slide-in-from-top-2" }, /* @__PURE__ */ import_react20.default.createElement(
10334
10360
  "textarea",
@@ -10338,7 +10364,34 @@ function QuestDetailsPanel({
10338
10364
  placeholder: "Escreva uma observa\xE7\xE3o no hist\xF3rico...",
10339
10365
  className: "w-full bg-slate-900/50 p-3 text-sm rounded-lg border border-white/10 focus:outline-none focus:ring-1 focus:ring-indigo-500/50 min-h-[80px] resize-none"
10340
10366
  }
10341
- ), /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex justify-end gap-2" }, /* @__PURE__ */ import_react20.default.createElement(
10367
+ ), /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Links"), /* @__PURE__ */ import_react20.default.createElement("button", { type: "button", onClick: addLinkToNote, className: "text-indigo-400 hover:text-indigo-300 text-[10px] flex items-center gap-1 font-medium" }, /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiPlus, { size: 10 }), " Adicionar Link")), noteLinks.length > 0 && /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-2" }, noteLinks.map((link) => /* @__PURE__ */ import_react20.default.createElement("div", { key: link.id, className: "flex items-center gap-2 animate-in fade-in slide-in-from-left-1" }, /* @__PURE__ */ import_react20.default.createElement(
10368
+ "input",
10369
+ {
10370
+ type: "text",
10371
+ placeholder: "T\xEDtulo",
10372
+ value: link.name,
10373
+ onChange: (e) => updateLinkInNote(link.id, "name", e.target.value),
10374
+ className: "w-1/3 bg-slate-950/50 border border-white/5 rounded px-2 py-1 text-[10px] focus:outline-none focus:border-indigo-500/50"
10375
+ }
10376
+ ), /* @__PURE__ */ import_react20.default.createElement(
10377
+ "input",
10378
+ {
10379
+ type: "text",
10380
+ placeholder: "URL (https://...)",
10381
+ value: link.value,
10382
+ onChange: (e) => updateLinkInNote(link.id, "value", e.target.value),
10383
+ className: "flex-1 bg-slate-950/50 border border-white/5 rounded px-2 py-1 text-[10px] focus:outline-none focus:border-indigo-500/50"
10384
+ }
10385
+ ), /* @__PURE__ */ import_react20.default.createElement("button", { type: "button", onClick: () => removeLinkFromNote(link.id), className: "text-slate-600 hover:text-red-400 transition-colors" }, /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiX, { size: 12 })))))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Imagens (URLs)"), /* @__PURE__ */ import_react20.default.createElement("button", { type: "button", onClick: addImageToNote, className: "text-indigo-400 hover:text-indigo-300 text-[10px] flex items-center gap-1 font-medium" }, /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiPlus, { size: 10 }), " Adicionar Imagem")), noteImages.length > 0 && /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-2" }, noteImages.map((img) => /* @__PURE__ */ import_react20.default.createElement("div", { key: img.id, className: "flex items-center gap-2 animate-in fade-in slide-in-from-left-1" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex-1 flex items-center gap-2 bg-slate-950/50 border border-white/5 rounded px-2 py-1" }, /* @__PURE__ */ import_react20.default.createElement(FiImage, { size: 10, className: "text-slate-600" }), /* @__PURE__ */ import_react20.default.createElement(
10386
+ "input",
10387
+ {
10388
+ type: "text",
10389
+ placeholder: "URL da Imagem (https://...)",
10390
+ value: img.value,
10391
+ onChange: (e) => updateImageInNote(img.id, e.target.value),
10392
+ className: "flex-1 bg-transparent text-[10px] focus:outline-none"
10393
+ }
10394
+ )), /* @__PURE__ */ import_react20.default.createElement("button", { type: "button", onClick: () => removeImageFromNote(img.id), className: "text-slate-600 hover:text-red-400 transition-colors" }, /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiX, { size: 12 })))))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex justify-end gap-2 pt-2" }, /* @__PURE__ */ import_react20.default.createElement(
10342
10395
  "button",
10343
10396
  {
10344
10397
  type: "button",
@@ -10356,8 +10409,8 @@ function QuestDetailsPanel({
10356
10409
  }
10357
10410
  )), /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react20.default.createElement("label", { className: "text-xs text-slate-300" }, "Tamanho no Node (Size)"), /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center gap-5" }, ["small", "medium", "large"].map((s) => {
10358
10411
  const isSelected = size === s;
10359
- return /* @__PURE__ */ import_react20.default.createElement("button", { key: s, type: "button", onClick: () => canEdit && handleSizeChange(s), className: `flex items-center gap-2 group focus:outline-none ${canEdit ? "cursor-pointer" : "cursor-default opacity-80"}` }, /* @__PURE__ */ import_react20.default.createElement("div", { className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${isSelected ? "bg-indigo-500 border-indigo-500 shadow-[0_0_10px_rgba(99,102,241,0.4)]" : "border-slate-600 bg-transparent " + (canEdit ? "group-hover:border-slate-500" : "")}` }, isSelected && /* @__PURE__ */ import_react20.default.createElement(FiCheck, { size: 12, className: "text-white" })), /* @__PURE__ */ import_react20.default.createElement("span", { className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 " + (canEdit ? "group-hover:text-slate-300" : "")}` }, s));
10360
- }))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react20.default.createElement("label", { className: "text-xs text-slate-300" }, "Tipos Adicionais"), /* @__PURE__ */ import_react20.default.createElement("div", { className: `relative w-full bg-slate-800/70 p-1.5 min-h-[42px] flex flex-wrap gap-1.5 rounded-lg border border-white/10 ${canEdit ? "focus-within:ring-2 focus-within:ring-indigo-400/60" : ""} transition-all` }, types.map((t, index) => /* @__PURE__ */ import_react20.default.createElement("span", { key: index, className: `flex items-center gap-1 px-1.5 py-0.5 rounded-md text-xs font-medium border ${t === "quest" ? "bg-sky-500/20 text-sky-200 border-sky-500/30" : "bg-indigo-500/30 text-indigo-100 border-indigo-500/20"}` }, t, canEdit && t !== "quest" && /* @__PURE__ */ import_react20.default.createElement("button", { type: "button", onClick: () => handleRemoveType(index), className: "hover:text-white transition-colors" }, /* @__PURE__ */ import_react20.default.createElement(FiX, { size: 12 })))), canEdit && /* @__PURE__ */ import_react20.default.createElement(
10412
+ return /* @__PURE__ */ import_react20.default.createElement("button", { key: s, type: "button", onClick: () => canEdit && handleSizeChange(s), className: `flex items-center gap-2 group focus:outline-none ${canEdit ? "cursor-pointer" : "cursor-default opacity-80"}` }, /* @__PURE__ */ import_react20.default.createElement("div", { className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${isSelected ? "bg-indigo-500 border-indigo-500 shadow-[0_0_10px_rgba(99,102,241,0.4)]" : "border-slate-600 bg-transparent " + (canEdit ? "group-hover:border-slate-500" : "")}` }, isSelected && /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiCheck, { size: 12, className: "text-white" })), /* @__PURE__ */ import_react20.default.createElement("span", { className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 " + (canEdit ? "group-hover:text-slate-300" : "")}` }, s));
10413
+ }))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react20.default.createElement("label", { className: "text-xs text-slate-300" }, "Tipos Adicionais"), /* @__PURE__ */ import_react20.default.createElement("div", { className: `relative w-full bg-slate-800/70 p-1.5 min-h-[42px] flex flex-wrap gap-1.5 rounded-lg border border-white/10 ${canEdit ? "focus-within:ring-2 focus-within:ring-indigo-400/60" : ""} transition-all` }, types.map((t, index) => /* @__PURE__ */ import_react20.default.createElement("span", { key: index, className: `flex items-center gap-1 px-1.5 py-0.5 rounded-md text-xs font-medium border ${t === "quest" ? "bg-sky-500/20 text-sky-200 border-sky-500/30" : "bg-indigo-500/30 text-indigo-100 border-indigo-500/20"}` }, t, canEdit && t !== "quest" && /* @__PURE__ */ import_react20.default.createElement("button", { type: "button", onClick: () => handleRemoveType(index), className: "hover:text-white transition-colors" }, /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiX, { size: 12 })))), canEdit && /* @__PURE__ */ import_react20.default.createElement(
10361
10414
  "input",
10362
10415
  {
10363
10416
  type: "text",
@@ -10381,7 +10434,7 @@ function QuestDetailsPanel({
10381
10434
  ), canEdit && showTypeSuggestions && filteredTypes.length > 0 && /* @__PURE__ */ import_react20.default.createElement("ul", { className: "custom-scrollbar absolute top-full left-0 z-10 w-full mt-1 max-h-40 overflow-y-auto rounded-lg bg-slate-800 border border-white/10 shadow-lg" }, filteredTypes.map((suggestedType, index) => /* @__PURE__ */ import_react20.default.createElement("li", { key: index, className: "px-3 py-2 text-sm text-slate-200 cursor-pointer hover:bg-indigo-600/50", onMouseDown: (e) => {
10382
10435
  e.preventDefault();
10383
10436
  handleAddType(suggestedType);
10384
- } }, suggestedType))))), currentDatasetName && /* @__PURE__ */ import_react20.default.createElement("div", { className: "pt-3 mt-4 border-t border-white/10 flex items-center justify-end gap-2 text-xs text-slate-400" }, /* @__PURE__ */ import_react20.default.createElement("span", { className: "truncate text-right" }, /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-slate-200 font-medium" }, currentDatasetName)))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "sticky bottom-0 z-10 bg-gradient-to-t from-slate-950/80 via-slate-950/50 to-transparent px-6 py-4 border-t border-white/10 flex justify-end gap-3" }, /* @__PURE__ */ import_react20.default.createElement("button", { onClick: handleCancel, disabled: isSaving, className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm disabled:opacity-50" }, canEdit ? "Cancelar" : "Fechar"), canEdit && /* @__PURE__ */ import_react20.default.createElement("button", { onClick: () => handleSave(false), disabled: isSaving, className: `px-4 py-2 rounded-lg transition-all font-semibold text-sm shadow-[0_8px_24px_rgba(99,102,241,0.35)] flex items-center gap-2 ${isSaving ? "bg-slate-700 text-slate-300 cursor-wait" : "bg-gradient-to-tr from-indigo-600 to-indigo-400 hover:from-indigo-500 hover:to-indigo-300 text-white"}` }, isSaving && /* @__PURE__ */ import_react20.default.createElement(FiLoader, { className: "animate-spin" }), isSaving ? "Salvando..." : "Salvar Quest")))
10437
+ } }, suggestedType))))), currentDatasetName && /* @__PURE__ */ import_react20.default.createElement("div", { className: "pt-3 mt-4 border-t border-white/10 flex items-center justify-end gap-2 text-xs text-slate-400" }, /* @__PURE__ */ import_react20.default.createElement("span", { className: "truncate text-right" }, /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-slate-200 font-medium" }, currentDatasetName)))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "sticky bottom-0 z-10 bg-gradient-to-t from-slate-950/80 via-slate-950/50 to-transparent px-6 py-4 border-t border-white/10 flex justify-end gap-3" }, /* @__PURE__ */ import_react20.default.createElement("button", { onClick: handleCancel, disabled: isSaving, className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm disabled:opacity-50" }, canEdit ? "Cancelar" : "Fechar"), canEdit && /* @__PURE__ */ import_react20.default.createElement("button", { onClick: () => handleSave(false), disabled: isSaving, className: `px-4 py-2 rounded-lg transition-all font-semibold text-sm shadow-[0_8px_24px_rgba(99,102,241,0.35)] flex items-center gap-2 ${isSaving ? "bg-slate-700 text-slate-300 cursor-wait" : "bg-gradient-to-tr from-indigo-600 to-indigo-400 hover:from-indigo-500 hover:to-indigo-300 text-white"}` }, isSaving && /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiLoader, { className: "animate-spin" }), isSaving ? "Salvando..." : "Salvar Quest")))
10385
10438
  ), isDescriptionModalOpen && canEdit && /* @__PURE__ */ import_react20.default.createElement(
10386
10439
  DescriptionEditModal,
10387
10440
  {
@@ -10479,7 +10532,7 @@ function MultiNodeContextMenu({
10479
10532
 
10480
10533
  // src/components/RelationshipDetailsPanel.jsx
10481
10534
  var import_react22 = __toESM(require("react"));
10482
- var import_fi18 = require("react-icons/fi");
10535
+ var import_fi19 = require("react-icons/fi");
10483
10536
  function RelationshipDetailsPanel({
10484
10537
  link,
10485
10538
  onClose,
@@ -10720,7 +10773,7 @@ function RelationshipDetailsPanel({
10720
10773
  `
10721
10774
  }
10722
10775
  )))), /* @__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(
10723
- DescriptionDisplay2,
10776
+ DescriptionDisplay,
10724
10777
  {
10725
10778
  description,
10726
10779
  savedSections: existingSections,
@@ -10739,7 +10792,7 @@ function RelationshipDetailsPanel({
10739
10792
  className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors border-r border-white/5",
10740
10793
  title: "Modo de Leitura"
10741
10794
  },
10742
- /* @__PURE__ */ import_react22.default.createElement(import_fi18.FiBookOpen, { size: 14 })
10795
+ /* @__PURE__ */ import_react22.default.createElement(import_fi19.FiBookOpen, { size: 14 })
10743
10796
  ), canEdit && /* @__PURE__ */ import_react22.default.createElement(
10744
10797
  "button",
10745
10798
  {
@@ -10748,7 +10801,7 @@ function RelationshipDetailsPanel({
10748
10801
  className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
10749
10802
  title: "Editar descri\xE7\xE3o"
10750
10803
  },
10751
- /* @__PURE__ */ import_react22.default.createElement(import_fi18.FiEdit2, { size: 14 })
10804
+ /* @__PURE__ */ import_react22.default.createElement(import_fi19.FiEdit2, { size: 14 })
10752
10805
  )), !description && canEdit && /* @__PURE__ */ import_react22.default.createElement(
10753
10806
  "div",
10754
10807
  {
@@ -10763,10 +10816,10 @@ function RelationshipDetailsPanel({
10763
10816
  onClick: handleAddProp,
10764
10817
  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"
10765
10818
  },
10766
- /* @__PURE__ */ import_react22.default.createElement(import_fi18.FiPlus, { size: 14 }),
10819
+ /* @__PURE__ */ import_react22.default.createElement(import_fi19.FiPlus, { size: 14 }),
10767
10820
  " Adicionar"
10768
10821
  )), /* @__PURE__ */ import_react22.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ import_react22.default.createElement(
10769
- CustomPropertyDisplay2,
10822
+ CustomPropertyDisplay,
10770
10823
  {
10771
10824
  key: prop.id,
10772
10825
  prop,
@@ -10796,11 +10849,11 @@ function RelationshipDetailsPanel({
10796
10849
  ${isSaving ? "bg-slate-700 text-slate-300 cursor-wait" : "bg-gradient-to-tr from-teal-600 to-teal-400 hover:from-teal-500 hover:to-teal-300 text-white"}
10797
10850
  `
10798
10851
  },
10799
- isSaving && /* @__PURE__ */ import_react22.default.createElement(import_fi18.FiLoader, { className: "animate-spin" }),
10852
+ isSaving && /* @__PURE__ */ import_react22.default.createElement(import_fi19.FiLoader, { className: "animate-spin" }),
10800
10853
  isSaving ? "Salvando..." : "Salvar"
10801
10854
  )))
10802
10855
  ), isDescriptionModalOpen && /* @__PURE__ */ import_react22.default.createElement(
10803
- DescriptionEditModal2,
10856
+ DescriptionEditModal,
10804
10857
  {
10805
10858
  isOpen: isDescriptionModalOpen,
10806
10859
  title: "Editar Descri\xE7\xE3o da Rela\xE7\xE3o",
@@ -11213,7 +11266,7 @@ function ImportParentFileModal({
11213
11266
 
11214
11267
  // src/components/AncestryLinkDetailsPanel.jsx
11215
11268
  var import_react26 = __toESM(require("react"));
11216
- var import_fi19 = require("react-icons/fi");
11269
+ var import_fi20 = require("react-icons/fi");
11217
11270
  function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenReference, onMentionClick, onUploadFile }) {
11218
11271
  var _a, _b, _c, _d;
11219
11272
  const relationshipData = data.relationship || {};
@@ -11263,9 +11316,9 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
11263
11316
  className: "p-1 text-slate-400 hover:text-white transition-colors",
11264
11317
  title: "Modo de Leitura"
11265
11318
  },
11266
- /* @__PURE__ */ import_react26.default.createElement(import_fi19.FiBookOpen, { size: 14 })
11319
+ /* @__PURE__ */ import_react26.default.createElement(import_fi20.FiBookOpen, { size: 14 })
11267
11320
  )), /* @__PURE__ */ import_react26.default.createElement("div", { className: "bg-slate-800/40 rounded-lg border border-white/10 p-1 relative group" }, /* @__PURE__ */ import_react26.default.createElement(
11268
- DescriptionDisplay2,
11321
+ DescriptionDisplay,
11269
11322
  {
11270
11323
  description,
11271
11324
  savedSections,
@@ -11274,7 +11327,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
11274
11327
  onImageClick: handleImageClickFromText
11275
11328
  }
11276
11329
  ))), customProps.length > 0 && /* @__PURE__ */ import_react26.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react26.default.createElement("label", { className: "text-xs text-slate-300 font-medium mb-2 block" }, "Propriedades"), /* @__PURE__ */ import_react26.default.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop) => /* @__PURE__ */ import_react26.default.createElement(
11277
- CustomPropertyDisplay2,
11330
+ CustomPropertyDisplay,
11278
11331
  {
11279
11332
  key: prop.id,
11280
11333
  prop,
@@ -11289,7 +11342,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
11289
11342
 
11290
11343
  // src/components/AncestryBoard.jsx
11291
11344
  var import_react27 = __toESM(require("react"));
11292
- var import_fi20 = require("react-icons/fi");
11345
+ var import_fi21 = require("react-icons/fi");
11293
11346
  var GroupItem = ({
11294
11347
  group,
11295
11348
  index,
@@ -11366,9 +11419,9 @@ var GroupItem = ({
11366
11419
  className: "text-indigo-400 hover:text-white hover:bg-indigo-500 p-1 rounded-full transition-colors",
11367
11420
  title: "Renderizar no cen\xE1rio"
11368
11421
  },
11369
- /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiPlay, { size: 10, className: "ml-0.5 fill-current" })
11422
+ /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiPlay, { size: 10, className: "ml-0.5 fill-current" })
11370
11423
  )
11371
- ) : /* @__PURE__ */ import_react27.default.createElement("div", { className: "p-1 text-red-500 cursor-not-allowed" }, /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiAlertTriangle, { size: 10 })),
11424
+ ) : /* @__PURE__ */ import_react27.default.createElement("div", { className: "p-1 text-red-500 cursor-not-allowed" }, /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiAlertTriangle, { size: 10 })),
11372
11425
  /* @__PURE__ */ import_react27.default.createElement(
11373
11426
  "span",
11374
11427
  {
@@ -11388,7 +11441,7 @@ var GroupItem = ({
11388
11441
  className: `${isValid ? "text-slate-500 hover:text-red-400" : "text-red-400 hover:text-red-200"} p-0.5 rounded transition-colors`,
11389
11442
  title: "Remover men\xE7\xE3o"
11390
11443
  },
11391
- /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiX, { size: 12 })
11444
+ /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiX, { size: 12 })
11392
11445
  ))
11393
11446
  );
11394
11447
  })),
@@ -11402,7 +11455,7 @@ var GroupItem = ({
11402
11455
  `,
11403
11456
  title: "Adicionar Ancestralidade a este grupo"
11404
11457
  },
11405
- isPickingForThisGroup ? /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiCheckCircle, { size: 12 }) : /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiSearch, { size: 12 }),
11458
+ isPickingForThisGroup ? /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiCheckCircle, { size: 12 }) : /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiSearch, { size: 12 }),
11406
11459
  isPickingForThisGroup ? "Selecionando..." : "Adicionar"
11407
11460
  ), /* @__PURE__ */ import_react27.default.createElement(
11408
11461
  "button",
@@ -11411,7 +11464,7 @@ var GroupItem = ({
11411
11464
  className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors",
11412
11465
  title: "Criar Subgrupo"
11413
11466
  },
11414
- /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiPlus, { size: 14 })
11467
+ /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiPlus, { size: 14 })
11415
11468
  )), /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ import_react27.default.createElement(
11416
11469
  "button",
11417
11470
  {
@@ -11420,7 +11473,7 @@ var GroupItem = ({
11420
11473
  className: `p-1.5 rounded transition-colors ${!canIndent ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}`,
11421
11474
  title: "Aninhar no grupo acima"
11422
11475
  },
11423
- /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiArrowRight, { size: 14 })
11476
+ /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiArrowRight, { size: 14 })
11424
11477
  ), /* @__PURE__ */ import_react27.default.createElement(
11425
11478
  "button",
11426
11479
  {
@@ -11428,7 +11481,7 @@ var GroupItem = ({
11428
11481
  className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors",
11429
11482
  title: "Desaninhar"
11430
11483
  },
11431
- /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiArrowLeft, { size: 14 })
11484
+ /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiArrowLeft, { size: 14 })
11432
11485
  ), /* @__PURE__ */ import_react27.default.createElement("div", { className: "w-px h-3 bg-white/10 mx-1" }), /* @__PURE__ */ import_react27.default.createElement(
11433
11486
  "button",
11434
11487
  {
@@ -11436,7 +11489,7 @@ var GroupItem = ({
11436
11489
  className: "p-1.5 text-slate-600 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors",
11437
11490
  title: "Remover Grupo"
11438
11491
  },
11439
- /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiTrash2, { size: 14 })
11492
+ /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiTrash2, { size: 14 })
11440
11493
  )))
11441
11494
  ), group.children && group.children.length > 0 && /* @__PURE__ */ import_react27.default.createElement("div", { className: "ml-2" }, group.children.map((childGroup, idx) => /* @__PURE__ */ import_react27.default.createElement(
11442
11495
  GroupItem,
@@ -11705,19 +11758,19 @@ function AncestryBoard({
11705
11758
  className: "bg-slate-950 border border-white/10 rounded-xl w-[98vw] h-[97vh] flex flex-col shadow-2xl overflow-hidden animate-in fade-in zoom-in-95 duration-200",
11706
11759
  onClick: (e) => e.stopPropagation()
11707
11760
  },
11708
- /* @__PURE__ */ import_react27.default.createElement("div", { className: "h-14 px-4 border-b border-white/10 bg-slate-900/90 flex items-center justify-between shrink-0" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react27.default.createElement("h3", { className: "text-base font-semibold text-white flex items-center gap-2 whitespace-nowrap" }, /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiLayers, { className: "text-indigo-400" }), "Ancestry Board"), saveStatus !== "idle" && /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center gap-2 animate-in fade-in slide-in-from-left-2 duration-300" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "w-px h-4 bg-white/10 mx-1" }), /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-slate-900/50 border border-white/5" }, saveStatus === "saving" && /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement(
11709
- import_fi20.FiLoader,
11761
+ /* @__PURE__ */ import_react27.default.createElement("div", { className: "h-14 px-4 border-b border-white/10 bg-slate-900/90 flex items-center justify-between shrink-0" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react27.default.createElement("h3", { className: "text-base font-semibold text-white flex items-center gap-2 whitespace-nowrap" }, /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiLayers, { className: "text-indigo-400" }), "Ancestry Board"), saveStatus !== "idle" && /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center gap-2 animate-in fade-in slide-in-from-left-2 duration-300" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "w-px h-4 bg-white/10 mx-1" }), /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-slate-900/50 border border-white/5" }, saveStatus === "saving" && /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement(
11762
+ import_fi21.FiLoader,
11710
11763
  {
11711
11764
  className: "animate-spin text-indigo-400",
11712
11765
  size: 12
11713
11766
  }
11714
- ), /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-indigo-300" }, "Salvando")), saveStatus === "saved" && /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiCheckCircle, { className: "text-emerald-400", size: 12 }), /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-slate-400" }, "Salvo")), saveStatus === "error" && /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement("span", { className: "w-2 h-2 rounded-full bg-red-500" }), /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-red-400" }, "Erro"))))), /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center gap-3" }, pickingGroupId && /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-xs text-indigo-300 font-medium animate-pulse hidden sm:inline-block mr-2" }, "Selecione na lateral..."), canEdit && /* @__PURE__ */ import_react27.default.createElement(
11767
+ ), /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-indigo-300" }, "Salvando")), saveStatus === "saved" && /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiCheckCircle, { className: "text-emerald-400", size: 12 }), /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-slate-400" }, "Salvo")), saveStatus === "error" && /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement("span", { className: "w-2 h-2 rounded-full bg-red-500" }), /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-red-400" }, "Erro"))))), /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center gap-3" }, pickingGroupId && /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-xs text-indigo-300 font-medium animate-pulse hidden sm:inline-block mr-2" }, "Selecione na lateral..."), canEdit && /* @__PURE__ */ import_react27.default.createElement(
11715
11768
  "button",
11716
11769
  {
11717
11770
  onClick: handleAddRootGroup,
11718
11771
  className: "\n flex items-center gap-2 px-3 py-1.5 \n bg-white/5 hover:bg-white/10 \n border border-white/10 hover:border-white/20\n backdrop-blur-sm\n text-slate-200 hover:text-white\n rounded-md transition-all duration-200\n text-xs font-medium shadow-sm\n "
11719
11772
  },
11720
- /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiPlus, { size: 14, className: "text-indigo-400" }),
11773
+ /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiPlus, { size: 14, className: "text-indigo-400" }),
11721
11774
  /* @__PURE__ */ import_react27.default.createElement("span", { className: "hidden sm:inline" }, "Novo Grupo")
11722
11775
  ), /* @__PURE__ */ import_react27.default.createElement(
11723
11776
  "button",
@@ -11737,7 +11790,7 @@ function AncestryBoard({
11737
11790
  `
11738
11791
  },
11739
11792
  /* @__PURE__ */ import_react27.default.createElement("div", { className: "p-3 border-b border-white/5 bg-slate-900/50" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "relative group" }, /* @__PURE__ */ import_react27.default.createElement(
11740
- import_fi20.FiSearch,
11793
+ import_fi21.FiSearch,
11741
11794
  {
11742
11795
  className: `absolute left-3 top-1/2 -translate-y-1/2 transition-colors ${pickingGroupId ? "text-indigo-400" : "text-slate-500 group-focus-within:text-indigo-400"}`
11743
11796
  }
@@ -11778,9 +11831,9 @@ function AncestryBoard({
11778
11831
  ${isPicking ? "bg-indigo-500 text-white border-indigo-400" : "bg-slate-800 text-indigo-400 border-white/5 group-hover:bg-indigo-500 group-hover:text-white"}
11779
11832
  `
11780
11833
  },
11781
- isPicking ? /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiPlus, { size: 16 }) : /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiLayers, { size: 14 })
11834
+ isPicking ? /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiPlus, { size: 16 }) : /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiLayers, { size: 14 })
11782
11835
  ),
11783
- /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex-1 min-w-0 pb-2" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center justify-between gap-2" }, /* @__PURE__ */ import_react27.default.createElement("h4", { className: "text-sm font-medium text-slate-200 group-hover:text-white truncate transition-colors" }, anc.name || "Sem Nome"), anc.is_private && /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[9px] px-1 py-0.5 rounded bg-amber-500/10 text-amber-300 border border-amber-500/20" }, "Priv")), /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center gap-1.5 mt-0.5 text-[11px] text-slate-500 group-hover:text-indigo-200/70 transition-colors" }, /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiCornerUpRight, { size: 10 }), /* @__PURE__ */ import_react27.default.createElement("span", { className: "truncate max-w-[120px]" }, parentNodeName)), anc.description && /* @__PURE__ */ import_react27.default.createElement("p", { className: "mt-1.5 text-[11px] text-slate-400 line-clamp-2 leading-relaxed opacity-80" }, anc.description)),
11836
+ /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex-1 min-w-0 pb-2" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center justify-between gap-2" }, /* @__PURE__ */ import_react27.default.createElement("h4", { className: "text-sm font-medium text-slate-200 group-hover:text-white truncate transition-colors" }, anc.name || "Sem Nome"), anc.is_private && /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[9px] px-1 py-0.5 rounded bg-amber-500/10 text-amber-300 border border-amber-500/20" }, "Priv")), /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center gap-1.5 mt-0.5 text-[11px] text-slate-500 group-hover:text-indigo-200/70 transition-colors" }, /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiCornerUpRight, { size: 10 }), /* @__PURE__ */ import_react27.default.createElement("span", { className: "truncate max-w-[120px]" }, parentNodeName)), anc.description && /* @__PURE__ */ import_react27.default.createElement("p", { className: "mt-1.5 text-[11px] text-slate-400 line-clamp-2 leading-relaxed opacity-80" }, anc.description)),
11784
11837
  !isPicking && /* @__PURE__ */ import_react27.default.createElement(
11785
11838
  "button",
11786
11839
  {
@@ -11791,11 +11844,11 @@ function AncestryBoard({
11791
11844
  className: "absolute right-2 bottom-2 opacity-0 group-hover:opacity-100 transition-all duration-300 transform translate-y-2 group-hover:translate-y-0 z-10",
11792
11845
  title: "Renderizar Ancestralidade"
11793
11846
  },
11794
- /* @__PURE__ */ import_react27.default.createElement("div", { className: "bg-indigo-500 text-white p-2 rounded-full shadow-lg hover:bg-indigo-400 hover:scale-110 transition-all" }, /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiPlay, { size: 14, className: "ml-0.5" }))
11847
+ /* @__PURE__ */ import_react27.default.createElement("div", { className: "bg-indigo-500 text-white p-2 rounded-full shadow-lg hover:bg-indigo-400 hover:scale-110 transition-all" }, /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiPlay, { size: 14, className: "ml-0.5" }))
11795
11848
  )
11796
11849
  );
11797
11850
  }))
11798
- ), /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex flex-col flex-1 bg-slate-950/30" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 space-y-4" }, groups.length === 0 ? /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex flex-col items-center justify-center h-full text-slate-500 gap-3 border-2 border-dashed border-white/5 rounded-xl m-4 bg-slate-900/20" }, /* @__PURE__ */ import_react27.default.createElement(import_fi20.FiLayers, { size: 24, className: "opacity-20" }), /* @__PURE__ */ import_react27.default.createElement("p", { className: "text-xs text-center px-4" }, canEdit ? /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, "Nenhum grupo criado.", /* @__PURE__ */ import_react27.default.createElement("br", null), 'Use o bot\xE3o "Novo Grupo" acima.') : /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, "Nenhum grupo dispon\xEDvel para visualiza\xE7\xE3o."))) : groups.map((group, index) => /* @__PURE__ */ import_react27.default.createElement(
11851
+ ), /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex flex-col flex-1 bg-slate-950/30" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 space-y-4" }, groups.length === 0 ? /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex flex-col items-center justify-center h-full text-slate-500 gap-3 border-2 border-dashed border-white/5 rounded-xl m-4 bg-slate-900/20" }, /* @__PURE__ */ import_react27.default.createElement(import_fi21.FiLayers, { size: 24, className: "opacity-20" }), /* @__PURE__ */ import_react27.default.createElement("p", { className: "text-xs text-center px-4" }, canEdit ? /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, "Nenhum grupo criado.", /* @__PURE__ */ import_react27.default.createElement("br", null), 'Use o bot\xE3o "Novo Grupo" acima.') : /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, "Nenhum grupo dispon\xEDvel para visualiza\xE7\xE3o."))) : groups.map((group, index) => /* @__PURE__ */ import_react27.default.createElement(
11799
11852
  GroupItem,
11800
11853
  {
11801
11854
  key: group.id,