@lv-x-software-house/x_view 1.2.6-dev.10 → 1.2.6-dev.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -12961,6 +12961,8 @@ function MentionPopover({ query, items, position, onSelect, onClose }) {
12961
12961
  if (filtered[activeIndex]) onSelect(filtered[activeIndex]);
12962
12962
  } else if (e.key === "Escape") {
12963
12963
  e.preventDefault();
12964
+ e.stopPropagation();
12965
+ e.stopImmediatePropagation();
12964
12966
  onClose();
12965
12967
  }
12966
12968
  };
@@ -13343,7 +13345,6 @@ function AncestryBoard({
13343
13345
  onSave,
13344
13346
  userRole
13345
13347
  }) {
13346
- const [searchTerm, setSearchTerm] = (0, import_react29.useState)("");
13347
13348
  const [groups, setGroups] = (0, import_react29.useState)([]);
13348
13349
  const [isLoaded, setIsLoaded] = (0, import_react29.useState)(false);
13349
13350
  const [saveStatus, setSaveStatus] = (0, import_react29.useState)("idle");
@@ -13360,13 +13361,6 @@ function AncestryBoard({
13360
13361
  setIsLoaded(true);
13361
13362
  }
13362
13363
  }, [initialGroups, isLoaded]);
13363
- const nodeNamesMap = (0, import_react29.useMemo)(() => {
13364
- const map = /* @__PURE__ */ new Map();
13365
- availableNodes.forEach((n) => {
13366
- if (n == null ? void 0 : n.id) map.set(String(n.id), n.name);
13367
- });
13368
- return map;
13369
- }, [availableNodes]);
13370
13364
  const allSearchableItems = (0, import_react29.useMemo)(() => {
13371
13365
  const items = [];
13372
13366
  availableAncestries.forEach((anc) => {
@@ -13393,20 +13387,6 @@ function AncestryBoard({
13393
13387
  });
13394
13388
  return items;
13395
13389
  }, [availableAncestries, availableNodes]);
13396
- const filtered = (0, import_react29.useMemo)(() => {
13397
- const term = searchTerm.toLowerCase().trim();
13398
- return allSearchableItems.filter((item) => {
13399
- if (!term) return true;
13400
- const labelMatch = (item.searchLabel || "").toLowerCase().includes(term);
13401
- const descMatch = (item.searchDesc || "").toLowerCase().includes(term);
13402
- let parentMatch = false;
13403
- if (item.type === "ancestry") {
13404
- const parentName = nodeNamesMap.get(String(item.ancestral_node)) || "";
13405
- parentMatch = parentName.toLowerCase().includes(term);
13406
- }
13407
- return labelMatch || descMatch || parentMatch;
13408
- });
13409
- }, [allSearchableItems, searchTerm, nodeNamesMap]);
13410
13390
  const sanitizeGroups = (list) => list.map((g) => ({
13411
13391
  id: g.id,
13412
13392
  content: g.content || [],
@@ -13529,40 +13509,7 @@ function AncestryBoard({
13529
13509
  },
13530
13510
  /* @__PURE__ */ import_react29.default.createElement(import_fi23.FiX, { size: 16 })
13531
13511
  ))),
13532
- /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-1 overflow-hidden" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col border-r border-white/10 w-[20%] min-w-[280px] max-w-[460px] bg-slate-900 flex-none" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "p-3 border-b border-white/5 bg-slate-900/50" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "relative group" }, /* @__PURE__ */ import_react29.default.createElement(import_fi23.FiSearch, { className: "absolute left-3 top-1/2 -translate-y-1/2 text-slate-500 group-focus-within:text-indigo-400 transition-colors" }), /* @__PURE__ */ import_react29.default.createElement(
13533
- "input",
13534
- {
13535
- type: "text",
13536
- placeholder: "Navegar nas ancestralidades e nodes\u2026",
13537
- className: "w-full rounded-md pl-9 pr-4 py-2 text-sm bg-slate-950 border border-white/10 text-slate-200 placeholder-slate-600 focus:outline-none focus:ring-1 focus:ring-indigo-500 transition-all",
13538
- value: searchTerm,
13539
- onChange: (e) => setSearchTerm(e.target.value),
13540
- autoFocus: true
13541
- }
13542
- ))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-3 space-y-2" }, filtered.map((anc) => {
13543
- const parentNodeName = nodeNamesMap.get(String(anc.ancestral_node)) || "Node Desconhecido";
13544
- return /* @__PURE__ */ import_react29.default.createElement(
13545
- "div",
13546
- {
13547
- key: anc.id,
13548
- className: "group relative flex items-start gap-3 p-3 text-left rounded-lg border border-white/5 bg-slate-800/40 hover:bg-indigo-600/10 hover:border-indigo-500/30 cursor-default transition-all duration-200"
13549
- },
13550
- /* @__PURE__ */ import_react29.default.createElement("div", { className: "mt-0.5 w-8 h-8 rounded-md grid place-content-center shrink-0 border bg-slate-800 border-white/5 group-hover:bg-indigo-500 group-hover:text-white transition-all shadow-lg" }, anc.type === "quest" ? /* @__PURE__ */ import_react29.default.createElement(import_fi23.FiCheckSquare, { size: 14, className: "text-emerald-400 group-hover:text-white" }) : anc.type === "version" ? /* @__PURE__ */ import_react29.default.createElement(import_fi23.FiGitBranch, { size: 14, className: "text-amber-400 group-hover:text-white" }) : anc.type === "node" ? /* @__PURE__ */ import_react29.default.createElement(import_fi23.FiBox, { size: 14, className: "text-slate-400 group-hover:text-white" }) : /* @__PURE__ */ import_react29.default.createElement(import_fi23.FiLayers, { size: 14, className: "text-indigo-400 group-hover:text-white" })),
13551
- /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex-1 min-w-0 pb-2" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center justify-between gap-2" }, /* @__PURE__ */ import_react29.default.createElement("h4", { className: "text-sm font-medium text-slate-200 group-hover:text-white truncate transition-colors" }, anc.searchLabel || "Sem Nome"), /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[9px] px-1.5 py-0.5 rounded-full bg-white/5 text-slate-500 border border-white/5 uppercase tracking-tighter" }, anc.type)), anc.type === "ancestry" && /* @__PURE__ */ import_react29.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_react29.default.createElement(import_fi23.FiCornerUpRight, { size: 10 }), /* @__PURE__ */ import_react29.default.createElement("span", { className: "truncate max-w-[120px]" }, parentNodeName)), anc.searchDesc && /* @__PURE__ */ import_react29.default.createElement("p", { className: "mt-1.5 text-[11px] text-slate-400 line-clamp-2 leading-relaxed opacity-80" }, anc.searchDesc)),
13552
- /* @__PURE__ */ import_react29.default.createElement(
13553
- "button",
13554
- {
13555
- onClick: (e) => {
13556
- e.stopPropagation();
13557
- if (onSelect) onSelect(anc);
13558
- },
13559
- 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",
13560
- title: "Focar no cen\xE1rio"
13561
- },
13562
- /* @__PURE__ */ import_react29.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_react29.default.createElement(import_fi23.FiPlay, { size: 14, className: "ml-0.5" }))
13563
- )
13564
- );
13565
- }))), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col flex-1 bg-slate-950/30" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 space-y-4" }, groups.length === 0 ? /* @__PURE__ */ import_react29.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_react29.default.createElement(import_fi23.FiLayers, { size: 24, className: "opacity-20" }), /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-xs text-center px-4" }, canEdit ? /* @__PURE__ */ import_react29.default.createElement(import_react29.default.Fragment, null, "Nenhum grupo criado.", /* @__PURE__ */ import_react29.default.createElement("br", null), 'Use o bot\xE3o "Novo Grupo" acima.') : /* @__PURE__ */ import_react29.default.createElement(import_react29.default.Fragment, null, "Nenhum grupo dispon\xEDvel para visualiza\xE7\xE3o."))) : groups.map((group, index) => /* @__PURE__ */ import_react29.default.createElement(
13512
+ /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar bg-slate-950/30 p-6 space-y-4" }, groups.length === 0 ? /* @__PURE__ */ import_react29.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_react29.default.createElement(import_fi23.FiLayers, { size: 24, className: "opacity-20" }), /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-xs text-center px-4" }, canEdit ? /* @__PURE__ */ import_react29.default.createElement(import_react29.default.Fragment, null, "Nenhum grupo criado.", /* @__PURE__ */ import_react29.default.createElement("br", null), 'Use o bot\xE3o "Novo Grupo" acima.') : /* @__PURE__ */ import_react29.default.createElement(import_react29.default.Fragment, null, "Nenhum grupo dispon\xEDvel para visualiza\xE7\xE3o."))) : groups.map((group, index) => /* @__PURE__ */ import_react29.default.createElement(
13566
13513
  GroupItem,
13567
13514
  {
13568
13515
  key: group.id,
@@ -13577,8 +13524,8 @@ function AncestryBoard({
13577
13524
  onMentionClick: handleMentionClick,
13578
13525
  canEdit
13579
13526
  }
13580
- ))))),
13581
- /* @__PURE__ */ import_react29.default.createElement("div", { className: "px-5 py-2 border-t border-white/10 bg-slate-950/50 text-xs text-slate-500 flex justify-between flex-shrink-0" }, /* @__PURE__ */ import_react29.default.createElement("span", null, filtered.length, " itens encontrados"), /* @__PURE__ */ import_react29.default.createElement("span", null, groups.length, " grupos raiz"))
13527
+ ))),
13528
+ /* @__PURE__ */ import_react29.default.createElement("div", { className: "px-5 py-2 border-t border-white/10 bg-slate-950/50 text-xs text-slate-500 flex justify-end flex-shrink-0" }, /* @__PURE__ */ import_react29.default.createElement("span", null, groups.length, " grupos raiz"))
13582
13529
  )
13583
13530
  );
13584
13531
  }
package/dist/index.mjs CHANGED
@@ -13007,6 +13007,8 @@ function MentionPopover({ query, items, position, onSelect, onClose }) {
13007
13007
  if (filtered[activeIndex]) onSelect(filtered[activeIndex]);
13008
13008
  } else if (e.key === "Escape") {
13009
13009
  e.preventDefault();
13010
+ e.stopPropagation();
13011
+ e.stopImmediatePropagation();
13010
13012
  onClose();
13011
13013
  }
13012
13014
  };
@@ -13389,7 +13391,6 @@ function AncestryBoard({
13389
13391
  onSave,
13390
13392
  userRole
13391
13393
  }) {
13392
- const [searchTerm, setSearchTerm] = useState27("");
13393
13394
  const [groups, setGroups] = useState27([]);
13394
13395
  const [isLoaded, setIsLoaded] = useState27(false);
13395
13396
  const [saveStatus, setSaveStatus] = useState27("idle");
@@ -13406,13 +13407,6 @@ function AncestryBoard({
13406
13407
  setIsLoaded(true);
13407
13408
  }
13408
13409
  }, [initialGroups, isLoaded]);
13409
- const nodeNamesMap = useMemo12(() => {
13410
- const map = /* @__PURE__ */ new Map();
13411
- availableNodes.forEach((n) => {
13412
- if (n == null ? void 0 : n.id) map.set(String(n.id), n.name);
13413
- });
13414
- return map;
13415
- }, [availableNodes]);
13416
13410
  const allSearchableItems = useMemo12(() => {
13417
13411
  const items = [];
13418
13412
  availableAncestries.forEach((anc) => {
@@ -13439,20 +13433,6 @@ function AncestryBoard({
13439
13433
  });
13440
13434
  return items;
13441
13435
  }, [availableAncestries, availableNodes]);
13442
- const filtered = useMemo12(() => {
13443
- const term = searchTerm.toLowerCase().trim();
13444
- return allSearchableItems.filter((item) => {
13445
- if (!term) return true;
13446
- const labelMatch = (item.searchLabel || "").toLowerCase().includes(term);
13447
- const descMatch = (item.searchDesc || "").toLowerCase().includes(term);
13448
- let parentMatch = false;
13449
- if (item.type === "ancestry") {
13450
- const parentName = nodeNamesMap.get(String(item.ancestral_node)) || "";
13451
- parentMatch = parentName.toLowerCase().includes(term);
13452
- }
13453
- return labelMatch || descMatch || parentMatch;
13454
- });
13455
- }, [allSearchableItems, searchTerm, nodeNamesMap]);
13456
13436
  const sanitizeGroups = (list) => list.map((g) => ({
13457
13437
  id: g.id,
13458
13438
  content: g.content || [],
@@ -13575,40 +13555,7 @@ function AncestryBoard({
13575
13555
  },
13576
13556
  /* @__PURE__ */ React28.createElement(FiX8, { size: 16 })
13577
13557
  ))),
13578
- /* @__PURE__ */ React28.createElement("div", { className: "flex flex-1 overflow-hidden" }, /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col border-r border-white/10 w-[20%] min-w-[280px] max-w-[460px] bg-slate-900 flex-none" }, /* @__PURE__ */ React28.createElement("div", { className: "p-3 border-b border-white/5 bg-slate-900/50" }, /* @__PURE__ */ React28.createElement("div", { className: "relative group" }, /* @__PURE__ */ React28.createElement(FiSearch8, { className: "absolute left-3 top-1/2 -translate-y-1/2 text-slate-500 group-focus-within:text-indigo-400 transition-colors" }), /* @__PURE__ */ React28.createElement(
13579
- "input",
13580
- {
13581
- type: "text",
13582
- placeholder: "Navegar nas ancestralidades e nodes\u2026",
13583
- className: "w-full rounded-md pl-9 pr-4 py-2 text-sm bg-slate-950 border border-white/10 text-slate-200 placeholder-slate-600 focus:outline-none focus:ring-1 focus:ring-indigo-500 transition-all",
13584
- value: searchTerm,
13585
- onChange: (e) => setSearchTerm(e.target.value),
13586
- autoFocus: true
13587
- }
13588
- ))), /* @__PURE__ */ React28.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-3 space-y-2" }, filtered.map((anc) => {
13589
- const parentNodeName = nodeNamesMap.get(String(anc.ancestral_node)) || "Node Desconhecido";
13590
- return /* @__PURE__ */ React28.createElement(
13591
- "div",
13592
- {
13593
- key: anc.id,
13594
- className: "group relative flex items-start gap-3 p-3 text-left rounded-lg border border-white/5 bg-slate-800/40 hover:bg-indigo-600/10 hover:border-indigo-500/30 cursor-default transition-all duration-200"
13595
- },
13596
- /* @__PURE__ */ React28.createElement("div", { className: "mt-0.5 w-8 h-8 rounded-md grid place-content-center shrink-0 border bg-slate-800 border-white/5 group-hover:bg-indigo-500 group-hover:text-white transition-all shadow-lg" }, anc.type === "quest" ? /* @__PURE__ */ React28.createElement(FiCheckSquare4, { size: 14, className: "text-emerald-400 group-hover:text-white" }) : anc.type === "version" ? /* @__PURE__ */ React28.createElement(FiGitBranch4, { size: 14, className: "text-amber-400 group-hover:text-white" }) : anc.type === "node" ? /* @__PURE__ */ React28.createElement(FiBox2, { size: 14, className: "text-slate-400 group-hover:text-white" }) : /* @__PURE__ */ React28.createElement(FiLayers7, { size: 14, className: "text-indigo-400 group-hover:text-white" })),
13597
- /* @__PURE__ */ React28.createElement("div", { className: "flex-1 min-w-0 pb-2" }, /* @__PURE__ */ React28.createElement("div", { className: "flex items-center justify-between gap-2" }, /* @__PURE__ */ React28.createElement("h4", { className: "text-sm font-medium text-slate-200 group-hover:text-white truncate transition-colors" }, anc.searchLabel || "Sem Nome"), /* @__PURE__ */ React28.createElement("span", { className: "text-[9px] px-1.5 py-0.5 rounded-full bg-white/5 text-slate-500 border border-white/5 uppercase tracking-tighter" }, anc.type)), anc.type === "ancestry" && /* @__PURE__ */ React28.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__ */ React28.createElement(FiCornerUpRight4, { size: 10 }), /* @__PURE__ */ React28.createElement("span", { className: "truncate max-w-[120px]" }, parentNodeName)), anc.searchDesc && /* @__PURE__ */ React28.createElement("p", { className: "mt-1.5 text-[11px] text-slate-400 line-clamp-2 leading-relaxed opacity-80" }, anc.searchDesc)),
13598
- /* @__PURE__ */ React28.createElement(
13599
- "button",
13600
- {
13601
- onClick: (e) => {
13602
- e.stopPropagation();
13603
- if (onSelect) onSelect(anc);
13604
- },
13605
- 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",
13606
- title: "Focar no cen\xE1rio"
13607
- },
13608
- /* @__PURE__ */ React28.createElement("div", { className: "bg-indigo-500 text-white p-2 rounded-full shadow-lg hover:bg-indigo-400 hover:scale-110 transition-all" }, /* @__PURE__ */ React28.createElement(FiPlay, { size: 14, className: "ml-0.5" }))
13609
- )
13610
- );
13611
- }))), /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col flex-1 bg-slate-950/30" }, /* @__PURE__ */ React28.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 space-y-4" }, groups.length === 0 ? /* @__PURE__ */ React28.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__ */ React28.createElement(FiLayers7, { size: 24, className: "opacity-20" }), /* @__PURE__ */ React28.createElement("p", { className: "text-xs text-center px-4" }, canEdit ? /* @__PURE__ */ React28.createElement(React28.Fragment, null, "Nenhum grupo criado.", /* @__PURE__ */ React28.createElement("br", null), 'Use o bot\xE3o "Novo Grupo" acima.') : /* @__PURE__ */ React28.createElement(React28.Fragment, null, "Nenhum grupo dispon\xEDvel para visualiza\xE7\xE3o."))) : groups.map((group, index) => /* @__PURE__ */ React28.createElement(
13558
+ /* @__PURE__ */ React28.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar bg-slate-950/30 p-6 space-y-4" }, groups.length === 0 ? /* @__PURE__ */ React28.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__ */ React28.createElement(FiLayers7, { size: 24, className: "opacity-20" }), /* @__PURE__ */ React28.createElement("p", { className: "text-xs text-center px-4" }, canEdit ? /* @__PURE__ */ React28.createElement(React28.Fragment, null, "Nenhum grupo criado.", /* @__PURE__ */ React28.createElement("br", null), 'Use o bot\xE3o "Novo Grupo" acima.') : /* @__PURE__ */ React28.createElement(React28.Fragment, null, "Nenhum grupo dispon\xEDvel para visualiza\xE7\xE3o."))) : groups.map((group, index) => /* @__PURE__ */ React28.createElement(
13612
13559
  GroupItem,
13613
13560
  {
13614
13561
  key: group.id,
@@ -13623,8 +13570,8 @@ function AncestryBoard({
13623
13570
  onMentionClick: handleMentionClick,
13624
13571
  canEdit
13625
13572
  }
13626
- ))))),
13627
- /* @__PURE__ */ React28.createElement("div", { className: "px-5 py-2 border-t border-white/10 bg-slate-950/50 text-xs text-slate-500 flex justify-between flex-shrink-0" }, /* @__PURE__ */ React28.createElement("span", null, filtered.length, " itens encontrados"), /* @__PURE__ */ React28.createElement("span", null, groups.length, " grupos raiz"))
13573
+ ))),
13574
+ /* @__PURE__ */ React28.createElement("div", { className: "px-5 py-2 border-t border-white/10 bg-slate-950/50 text-xs text-slate-500 flex justify-end flex-shrink-0" }, /* @__PURE__ */ React28.createElement("span", null, groups.length, " grupos raiz"))
13628
13575
  )
13629
13576
  );
13630
13577
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lv-x-software-house/x_view",
3
- "version": "1.2.6-dev.10",
3
+ "version": "1.2.6-dev.12",
4
4
  "description": "Pacote privado contendo os componentes e lógica de renderização 3D do X View.",
5
5
  "author": "iv.x - Engenharia de Software - ivxsoftwarehouse@gmail.com",
6
6
  "license": "UNLICENSED",